| #ifndef THIRD_PARTY_MILOTIC_EXTERNAL_CC_TLBMC_COLLECTOR_COLLECTOR_H_ |
| #define THIRD_PARTY_MILOTIC_EXTERNAL_CC_TLBMC_COLLECTOR_COLLECTOR_H_ |
| |
| #include <climits> |
| #include <cstdint> |
| #include <string> |
| |
| #include "absl/status/status.h" |
| #include "nlohmann/json.hpp" |
| |
| namespace milotic_tlbmc { |
| |
| // Interface for collecting telemetry data. |
| // Each concrete collector shall be responsible for collecting telemetry data |
| // for a specific resource type. |
| // Example: FruCollector collects FRU data, SensorCollector collects sensor |
| // data etc. |
| // Collected data shall be written to the data store or stored locally |
| class Collector { |
| public: |
| enum class Type : uint8_t { |
| kFru = 0, |
| kSensor, |
| }; |
| |
| // Config parameters for the collector. |
| struct Config { |
| // The sampling interval of the collector. |
| int sampling_interval_ms = INT_MIN; |
| int max_batch_size = INT_MIN; |
| // The key of the resource to be collected. |
| std::string key; |
| }; |
| |
| virtual ~Collector() = default; |
| virtual nlohmann::json ToJson() const = 0; |
| // Returns the scheduler stats for the collector. |
| virtual nlohmann::json GetSchedulerStats() const = 0; |
| |
| // Configures the collector. |
| // |
| // Config::key is used to identify the resource to configure. If not provided, |
| // all resources are configured. |
| // |
| // Config::sampling_interval_ms is used to configure the sampling interval of |
| // the resource. If set to INT_MIN, no change is made to the sampling |
| // interval. If set to 0, the sampling interval is reset to the default value. |
| // |
| // Config::max_batch_size is used to configure the max batch size of the |
| // resource. If set to INT_MIN, no change is made to the batch size. If set to |
| // 0, the batch size is reset to the default value. |
| virtual absl::Status ConfigureCollection( |
| [[maybe_unused]] const Config& config) const { |
| return absl::UnimplementedError( |
| "ConfigureCollection is not implemented for " |
| "this collector."); |
| } |
| }; |
| |
| } // namespace milotic_tlbmc |
| |
| #endif // THIRD_PARTY_MILOTIC_EXTERNAL_CC_TLBMC_COLLECTOR_COLLECTOR_H_ |