#pragma once #include "health_metric.hpp" namespace phosphor::health::metric::collection { namespace ConfigIntf = phosphor::health::metric::config; namespace MetricIntf = phosphor::health::metric; using configs_t = std::vector<ConfigIntf::HealthMetric>; class HealthMetricCollection { public: HealthMetricCollection(sdbusplus::bus_t& bus, MetricIntf::Type type, const configs_t& configs, MetricIntf::paths_t& bmcPaths) : bus(bus), type(type), configs(configs) { create(bmcPaths); } /** @brief Read the health metric collection from the system */ void read(); private: using map_t = std::unordered_map<std::string, std::unique_ptr<MetricIntf::HealthMetric>>; using time_map_t = std::unordered_map<MetricIntf::SubType, uint64_t>; /** @brief Create a new health metric collection object */ void create(const MetricIntf::paths_t& bmcPaths); /** @brief Read the CPU */ auto readCPU() -> bool; /** @brief Read the memory */ auto readMemory() -> bool; /** @brief Read the storage */ auto readStorage() -> bool; /** @brief D-Bus bus connection */ sdbusplus::bus_t& bus; /** @brief Metric type */ MetricIntf::Type type; /** @brief Health metric configs */ const configs_t& configs; /** @brief Map of health metrics by subtype */ map_t metrics; /** @brief Map for active time by subtype */ time_map_t preActiveTime; /** @brief Map for total time by subtype */ time_map_t preTotalTime; }; } // namespace phosphor::health::metric::collection