blob: 5c38c6fee4c0ce4e6ef771b0d007aed631b2fe6c [file]
#include "tlbmc/hal/shared_mem/static_client_segment.h"
#include <memory>
#include <string>
#include <utility>
#include "absl/log/log.h"
#include "boost/interprocess/managed_shared_memory.hpp" //NOLINT
// copybara:strip_begin(g3-shared-libs)
#include "tlbmc/hal/shared_mem/metrics.h"
// copybara:strip_end
#include "tlbmc/hal/shared_mem/sensors.h"
#include "tlbmc/hal/shared_mem/static_shm_common.h"
namespace milotic_tlbmc {
std::unique_ptr<StaticClientSegment> StaticClientSegment::Create(
const std::string& shared_memory_name) {
try {
auto shm = std::make_unique<TlbmcSharedMemoryType>(
boost::interprocess::open_only, shared_memory_name.c_str());
return std::make_unique<StaticClientSegment>(std::move(shm));
} catch (const boost::interprocess::interprocess_exception& e) {
LOG(ERROR) << "Failed to open shared memory: " << e.what();
}
return nullptr;
}
StaticClientSegment::StaticClientSegment(
std::unique_ptr<TlbmcSharedMemoryType> memory)
: memory_(std::move(memory)) {}
IpcSensor* StaticClientSegment::FindSensor(
const std::string& sensor_name) const {
auto [sensor, _] = memory_->find<IpcSensor>(sensor_name.c_str());
return sensor;
}
// copybara:strip_begin(g3-shared-libs)
TlbmcMetrics* StaticClientSegment::GetMetrics() {
return StaticSharedMemoryMetrics::GetInProcessMetrics();
}
// copybara:strip_end
} // namespace milotic_tlbmc