| #ifndef THIRD_PARTY_MILOTIC_EXTERNAL_CC_TLBMC_COLLECTOR_BULK_SENSOR_COLLECTOR_BASE_H_ |
| #define THIRD_PARTY_MILOTIC_EXTERNAL_CC_TLBMC_COLLECTOR_BULK_SENSOR_COLLECTOR_BASE_H_ |
| |
| #include <memory> |
| #include <string> |
| #include <string_view> |
| #include <vector> |
| |
| #include "absl/status/status.h" |
| #include "absl/status/statusor.h" |
| #include "thread/thread.h" |
| #include "time/clock.h" |
| #include <nlohmann/json_fwd.hpp> |
| #include "tlbmc/collector/collector.h" |
| #include "tlbmc/collector/monitoring_change_base.h" |
| #include "sensor.pb.h" |
| #include "tlbmc/sensors/sensor.h" |
| |
| namespace milotic_tlbmc { |
| |
| class EntityConfig; |
| |
| // The base class for bulk sensor collectors. |
| class BulkSensorCollectorBase : public Collector { |
| public: |
| BulkSensorCollectorBase() = default; |
| virtual ~BulkSensorCollectorBase() = default; |
| |
| BulkSensorCollectorBase(const BulkSensorCollectorBase&) = delete; |
| BulkSensorCollectorBase& operator=(const BulkSensorCollectorBase&) = delete; |
| |
| // SensorCollector like methods. |
| virtual void GetAllSensorKeysByConfigKey( |
| std::string_view board_config_key, |
| std::vector<std::string>& sensor_keys) const = 0; |
| virtual void GetAllSensors( |
| std::vector<std::shared_ptr<const Sensor>>& sensors) const = 0; |
| virtual std::shared_ptr<const Sensor> GetSensorBySensorKey( |
| std::string_view sensor_key) const = 0; |
| virtual std::shared_ptr<const Sensor> GetSensorByConfigKeyAndSensorKey( |
| std::string_view board_config_key, std::string_view sensor_key) const = 0; |
| virtual void StartSensorCollection() = 0; |
| virtual absl::Status SetDevpathForSensor(std::string_view sensor_key, |
| std::string_view devpath) = 0; |
| // Write is not supported: always returns UNIMPLEMENTED. |
| absl::Status WriteToSensor(std::string_view sensor_key, |
| const SensorValue& value); |
| |
| virtual void HandleNewlyFoundFru(std::string_view /*config_key*/) { |
| // Default implementation does nothing. |
| } |
| |
| // From Collector |
| // Need to override nlohmann::json ToJson() const; |
| nlohmann::json GetSchedulerStats() const override; |
| |
| virtual std::unique_ptr<MonitoringChangeBase> CreateMonitoringChange() = 0; |
| }; |
| |
| // Factory function to create a BulkSensorCollector. |
| // A weak default implementation is provided in default_bulk_sensor_collector.cc |
| absl::StatusOr<std::shared_ptr<BulkSensorCollectorBase>> |
| CreateBulkSensorCollector(const EntityConfig& entity_config, |
| ecclesia::ThreadFactoryInterface* thread_factory, |
| const ecclesia::Clock* clock); |
| |
| } // namespace milotic_tlbmc |
| |
| #endif // THIRD_PARTY_MILOTIC_EXTERNAL_CC_TLBMC_COLLECTOR_BULK_SENSOR_COLLECTOR_BASE_H_ |