blob: 6c23340177d34f6bf7eea9b7d0d12c6a51afcf7c [file] [log] [blame]
#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_