blob: 551683349345b2090d25a3ff65612a2163a8adaa [file]
#include "tlbmc/configs/proto_config_parser.h"
#include <stdint.h>
#include <fstream>
#include <memory>
#include "absl/log/log.h"
#include "absl/strings/str_cat.h"
#include "absl/strings/string_view.h"
#include "gpio_config.pb.h"
#include "gpio_fru_config.pb.h"
#include "led_config.pb.h"
#include "pcie_config.pb.h"
#include "power_control.pb.h"
#include "power_fault_log_config.pb.h"
#include "sel_config.pb.h"
#include "software_metrics_config.pb.h"
#include "thermal_config.pb.h"
#include "usb_fru_config.pb.h"
#include "resource.pb.h"
#include "google/protobuf/io/zero_copy_stream_impl.h"
#include "google/protobuf/text_format.h"
namespace milotic_tlbmc {
using ::google::protobuf::TextFormat;
using ::google::protobuf::io::IstreamInputStream;
template <typename T>
static T GetConfigFromProto(absl::string_view config_path) {
std::ifstream config_file(config_path.data());
if (!config_file.is_open()) {
LOG(WARNING) << "Failed to open config file at '" << config_path
<< "'. Using default config.";
return T();
}
T config;
IstreamInputStream istream_source(&config_file);
if (!TextFormat::Parse(&istream_source, &config)) {
LOG(WARNING) << "Failed to parse config from file: '" << config_path
<< "'. Using default config.";
return T();
}
return config;
}
void ProtoConfigParser::LoadProtoConfigs() {
data_store_.software_metrics_configs =
GetConfigFromProto<SoftwareMetricsConfig>(
absl::StrCat(config_path_, "software_metrics_config.textproto"));
if (!data_store_.software_metrics_configs
.has_true_hitless_metrics_refresh_interval_ms()) {
// Set default TH metrics refresh interval to 1 minute if not set.
data_store_.software_metrics_configs
.set_true_hitless_metrics_refresh_interval_ms(60000);
}
data_store_.gpio_configs = GetConfigFromProto<GpioConfigs>(
absl::StrCat(config_path_, "gpio_config.textproto"));
data_store_.power_control_configs = GetConfigFromProto<PowerControlConfigs>(
absl::StrCat(config_path_, "power_control_configs.textproto"));
data_store_.thermal_configs = GetConfigFromProto<ThermalConfigs>(
absl::StrCat(config_path_, "thermal_config.textproto"));
data_store_.power_fault_log_config = GetConfigFromProto<PowerFaultLogConfig>(
absl::StrCat(config_path_, "power_fault_log_config.textproto"));
data_store_.sel_config = GetConfigFromProto<SelConfig>(
absl::StrCat(config_path_, "sel_config.textproto"));
data_store_.pcie_configs = GetConfigFromProto<PcieConfigs>(
absl::StrCat(config_path_, "pcie_config.textproto"));
data_store_.gpio_fru_component_configs =
GetConfigFromProto<GpioFruComponentConfigs>(
absl::StrCat(config_path_, "gpio_fru_config.textproto"));
data_store_.usb_fru_component_configs =
GetConfigFromProto<UsbFruComponentConfigs>(
absl::StrCat(config_path_, "usb_fru_config.textproto"));
data_store_.led_configs = GetConfigFromProto<LedConfigs>(
absl::StrCat(config_path_, "led_config.textproto"));
}
SoftwareMetricsConfig ProtoConfigParser::GetSoftwareMetricsConfig() const {
return data_store_.software_metrics_configs;
}
GpioConfigs ProtoConfigParser::GetGpioConfigs() const {
return data_store_.gpio_configs;
}
PowerControlConfigs ProtoConfigParser::GetPowerControlConfigs() const {
return data_store_.power_control_configs;
}
ThermalConfigs ProtoConfigParser::GetThermalConfigs() const {
return data_store_.thermal_configs;
}
PowerFaultLogConfig ProtoConfigParser::GetPowerFaultLogConfig() const {
return data_store_.power_fault_log_config;
}
SelConfig ProtoConfigParser::GetSelConfig() const {
return data_store_.sel_config;
}
PcieConfigs ProtoConfigParser::GetPcieConfigs() const {
return data_store_.pcie_configs;
}
GpioFruComponentConfigs ProtoConfigParser::GetGpioFruComponentConfigs() const {
return data_store_.gpio_fru_component_configs;
}
UsbFruComponentConfigs ProtoConfigParser::GetUsbFruComponentConfigs() const {
return data_store_.usb_fru_component_configs;
}
LedConfigs ProtoConfigParser::GetLedConfigs() const {
return data_store_.led_configs;
}
std::unique_ptr<ProtoConfigParser> ProtoConfigParser::Create(
absl::string_view config_path) {
return std::make_unique<ProtoConfigParser>(config_path);
}
} // namespace milotic_tlbmc