| #pragma once |
| |
| #include "interfaces/clock.hpp" |
| #include "interfaces/metric.hpp" |
| #include "interfaces/sensor.hpp" |
| #include "interfaces/sensor_listener.hpp" |
| |
| class Metric : |
| public interfaces::Metric, |
| public interfaces::SensorListener, |
| public std::enable_shared_from_this<Metric> |
| { |
| public: |
| Metric(Sensors sensors, OperationType operationType, std::string id, |
| CollectionTimeScope, CollectionDuration, |
| std::unique_ptr<interfaces::Clock>); |
| ~Metric(); |
| |
| void initialize() override; |
| void deinitialize() override; |
| std::vector<MetricValue> getReadings() const override; |
| void sensorUpdated(interfaces::Sensor&, uint64_t) override; |
| void sensorUpdated(interfaces::Sensor&, uint64_t, double value) override; |
| LabeledMetricParameters dumpConfiguration() const override; |
| uint64_t sensorCount() const override; |
| |
| private: |
| class CollectionData; |
| class DataPoint; |
| class DataInterval; |
| class DataStartup; |
| |
| static std::vector<std::unique_ptr<CollectionData>> |
| makeCollectionData(size_t size, OperationType, CollectionTimeScope, |
| CollectionDuration); |
| |
| CollectionData& findAssociatedData(const interfaces::Sensor& notifier); |
| |
| std::string id; |
| std::vector<MetricValue> readings; |
| Sensors sensors; |
| OperationType operationType; |
| CollectionTimeScope collectionTimeScope; |
| CollectionDuration collectionDuration; |
| std::vector<std::unique_ptr<CollectionData>> collectionAlgorithms; |
| std::unique_ptr<interfaces::Clock> clock; |
| }; |