| #ifndef THIRD_PARTY_MILOTIC_EXTERNAL_CC_TLBMC_STORE_FACTORY_H_ |
| #define THIRD_PARTY_MILOTIC_EXTERNAL_CC_TLBMC_STORE_FACTORY_H_ |
| |
| #include <cstddef> |
| #include <memory> |
| #include <vector> |
| |
| #include "absl/status/status.h" |
| #include "absl/status/statusor.h" |
| #include "absl/strings/string_view.h" |
| #include "nlohmann/json_fwd.hpp" |
| #include "tlbmc/collector/fru_collector.h" |
| #include "tlbmc/collector/sensor_collector.h" |
| #include "tlbmc/configs/entity_config.h" |
| #include "tlbmc/configs/entity_config_json_impl.h" |
| #include "fru.pb.h" |
| #include "sensor.pb.h" |
| |
| namespace milotic_tlbmc { |
| |
| // Factory to create collectors. |
| // This is useful for dependency injection for tests. |
| class CollectorFactory { |
| public: |
| virtual ~CollectorFactory() = default; |
| virtual absl::StatusOr<std::unique_ptr<SensorCollector>> |
| CreateSensorCollector(const SensorCollector::Params& params) = 0; |
| virtual absl::StatusOr<std::unique_ptr<FruCollector>> CreateFruCollector( |
| const FruCollector::Options& options) = 0; |
| }; |
| |
| class CollectorFactoryImpl : public CollectorFactory { |
| public: |
| absl::StatusOr<std::unique_ptr<SensorCollector>> CreateSensorCollector( |
| const SensorCollector::Params& params) override { |
| return SensorCollector::Create(params); |
| } |
| |
| absl::StatusOr<std::unique_ptr<FruCollector>> CreateFruCollector( |
| const FruCollector::Options& options) override { |
| return FruCollector::Create(options); |
| } |
| }; |
| |
| // Factory to create a config reader. |
| // This is useful for dependency injection for tests. |
| class EntityConfigReader { |
| public: |
| virtual ~EntityConfigReader() = default; |
| virtual absl::Status LoadEntityConfig(absl::string_view config_location) = 0; |
| virtual const std::vector<nlohmann::json>& GetConfig() |
| const = 0; |
| virtual absl::StatusOr<std::unique_ptr<EntityConfig>> CreateEntityConfig( |
| const RawFruTable& fru_table, size_t ad_hoc_fru_count) = 0; |
| }; |
| |
| class EntityConfigReaderImpl : public EntityConfigReader { |
| public: |
| absl::Status LoadEntityConfig(absl::string_view config_location) override; |
| |
| absl::StatusOr<std::unique_ptr<EntityConfig>> CreateEntityConfig( |
| const RawFruTable& fru_table, size_t ad_hoc_fru_count) override; |
| |
| const std::vector<nlohmann::json>& GetConfig() |
| const override; |
| |
| private: |
| std::vector<nlohmann::json> config_list_; |
| }; |
| |
| } // namespace milotic_tlbmc |
| |
| #endif // THIRD_PARTY_MILOTIC_EXTERNAL_CC_TLBMC_STORE_FACTORY_H_ |