| #ifndef THIRD_PARTY_MILOTIC_EXTERNAL_CC_TLBMC_SENSORS_NIC_SENSOR_H_ |
| #define THIRD_PARTY_MILOTIC_EXTERNAL_CC_TLBMC_SENSORS_NIC_SENSOR_H_ |
| |
| #include <memory> |
| #include <optional> |
| #include <string> |
| |
| #include "absl/container/flat_hash_map.h" |
| #include "absl/functional/any_invocable.h" |
| #include "absl/status/statusor.h" |
| #include "boost/asio.hpp" //NOLINT: boost::asio is commonly used in BMC |
| #include "nic_telemetry_config.pb.h" |
| #include "tlbmc/hal/nic_veeprom/interface.h" |
| #include "sensor.pb.h" |
| #include "tlbmc/sensors/sensor.h" |
| |
| namespace milotic_tlbmc { |
| |
| class NicSensor : public Sensor, |
| public std::enable_shared_from_this<NicSensor> { |
| private: |
| class Token; |
| |
| public: |
| static absl::StatusOr<std::shared_ptr<NicSensor>> Create( |
| const std::string& sensor_name, |
| nic_veeprom::NicTelemetryName telemetry_name, SensorUnit sensor_unit, |
| const EntityCommonConfig& entity_common_config, |
| const ThresholdConfigs& threshold_configs, |
| const ReadingRangeConfigs& reading_range_configs, |
| const std::shared_ptr<boost::asio::io_context>& io_context, |
| const nic_veeprom::Accessor& accessor, |
| std::optional<NotificationCb> on_batch_notify = std::nullopt); |
| |
| NicSensor(Token token, const std::string& sensor_name, |
| nic_veeprom::NicTelemetryName telemetry_name, |
| SensorUnit sensor_unit, |
| const EntityCommonConfig& entity_common_config, |
| const ThresholdConfigs& threshold_configs, |
| const ReadingRangeConfigs& reading_range_configs, |
| const std::shared_ptr<boost::asio::io_context>& io_context, |
| const nic_veeprom::Accessor& accessor, |
| std::optional<NotificationCb> on_batch_notify = std::nullopt); |
| |
| ~NicSensor() override = default; |
| |
| void RefreshOnceAsync( |
| absl::AnyInvocable<void(const std::shared_ptr<const SensorValue>&)> |
| callback) override; |
| |
| protected: |
| absl::StatusOr<const std::shared_ptr<const SensorValue>> GetSensorValue() { |
| return accessor_.GetSensorValue(telemetry_name_); |
| } |
| |
| private: |
| class Token { |
| private: |
| explicit Token() = default; |
| friend NicSensor; |
| }; |
| |
| const nic_veeprom::NicTelemetryName telemetry_name_; |
| const SensorUnit sensor_unit_; |
| std::shared_ptr<boost::asio::io_context> io_context_; |
| const nic_veeprom::Accessor& accessor_; |
| }; |
| |
| } // namespace milotic_tlbmc |
| |
| #endif // THIRD_PARTY_MILOTIC_EXTERNAL_CC_TLBMC_SENSORS_NIC_SENSOR_H_ |