blob: b467cd1884d3c1877746a85aad8af6d5c212664f [file]
#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_