| #include "include/common_utility.hpp" |
| #include "include/power_rail/power_rail_utility.hpp" |
| #include "include/voltage_regulator/voltage_regulator_utility.hpp" |
| |
| #include <CLI/CLI.hpp> |
| |
| constexpr std::string_view kPowerRailLogType = "power_rail"; |
| constexpr std::string_view kVoltageRegulatorLogType = "voltage_regulator"; |
| |
| namespace |
| { |
| void handlePowerRail(const std::filesystem::path& cfgDirPath, |
| const std::filesystem::path& logDirPath, |
| std::string_view specifiedName) |
| { |
| fs::path priorityDirPath = cfgDirPath / "priority"; |
| fs::path registerMapDirPath = cfgDirPath / "register_map"; |
| |
| if (!fs::exists(priorityDirPath) || !fs::exists(registerMapDirPath)) |
| { |
| lg2::error( |
| "Required directories 'priority' or 'register_map' not found under {PATH}", |
| "PATH", cfgDirPath); |
| return; |
| } |
| |
| fs::create_directories(logDirPath); |
| |
| if (!powerfault::logRailState(priorityDirPath, registerMapDirPath, |
| logDirPath, specifiedName)) |
| { |
| lg2::error("Logging rail state failed for {PATH}", "PATH", cfgDirPath); |
| } |
| } |
| |
| void handleVoltageRegulator(const std::filesystem::path& cfgDirPath, |
| const std::filesystem::path& logDirPath, |
| std::string_view specifiedName) |
| { |
| fs::create_directories(logDirPath); |
| |
| std::vector<fs::path> cfgFiles = util::findFiles(cfgDirPath, ".json"); |
| |
| for (const auto& cfgFile : cfgFiles) |
| { |
| if (!vrlog::logSensorState(cfgFile, logDirPath, specifiedName)) |
| { |
| lg2::error("Logging sensor state failed for {PATH}", "PATH", |
| cfgFile); |
| } |
| } |
| } |
| } // namespace |
| |
| int main(int argc, char* argv[]) |
| { |
| CLI::App app{"Dump and Parse Logs (power_rail or voltage_regulator)"}; |
| fs::path cfgDirPath; |
| fs::path logDirPath = "/mnt/luks-mmcblk0_fs/power-fault-logs/"; |
| #ifdef DEFAULT_LOG_DIR_PATH |
| logDirPath = fs::path(DEFAULT_LOG_DIR_PATH); |
| #endif |
| std::string_view specifiedName; |
| std::string_view logType; |
| |
| app.add_option("-c,--config", cfgDirPath, "config directory path") |
| ->required() |
| ->check(CLI::ExistingDirectory); |
| app.add_option("-l,--log", logDirPath, "log directory path"); |
| app.add_option("-n,--name", specifiedName, "specified name"); |
| app.add_option("-t,--type", logType, |
| "type of log (power_rail or voltage_regulator)") |
| ->required(); |
| |
| try |
| { |
| app.parse(argc, argv); |
| } |
| catch (const CLI::Error& e) |
| { |
| return app.exit(e); |
| } |
| |
| if (logType == kPowerRailLogType) |
| { |
| handlePowerRail(cfgDirPath, logDirPath, specifiedName); |
| } |
| else if (logType == kVoltageRegulatorLogType) |
| { |
| handleVoltageRegulator(cfgDirPath, logDirPath, specifiedName); |
| } |
| else |
| { |
| lg2::error("Type must be either 'power_rail' or 'voltage_regulator'"); |
| return EXIT_FAILURE; |
| } |
| |
| return EXIT_SUCCESS; |
| } |