1 #pragma once 2 3 #include "interfaces/clock.hpp" 4 #include "interfaces/metric.hpp" 5 #include "interfaces/sensor.hpp" 6 #include "interfaces/sensor_listener.hpp" 7 8 class Metric : 9 public interfaces::Metric, 10 public interfaces::SensorListener, 11 public std::enable_shared_from_this<Metric> 12 { 13 public: 14 Metric(Sensors sensors, OperationType operationType, std::string id, 15 CollectionTimeScope, CollectionDuration, 16 std::unique_ptr<interfaces::Clock>); 17 ~Metric(); 18 19 void initialize() override; 20 void deinitialize() override; 21 std::vector<MetricValue> getReadings() const override; 22 void sensorUpdated(interfaces::Sensor&, uint64_t) override; 23 void sensorUpdated(interfaces::Sensor&, uint64_t, double value) override; 24 LabeledMetricParameters dumpConfiguration() const override; 25 uint64_t sensorCount() const override; 26 27 private: 28 class CollectionData; 29 class DataPoint; 30 class DataInterval; 31 class DataStartup; 32 33 static std::vector<std::unique_ptr<CollectionData>> 34 makeCollectionData(size_t size, OperationType, CollectionTimeScope, 35 CollectionDuration); 36 37 CollectionData& findAssociatedData(const interfaces::Sensor& notifier); 38 39 std::string id; 40 std::vector<MetricValue> readings; 41 Sensors sensors; 42 OperationType operationType; 43 CollectionTimeScope collectionTimeScope; 44 CollectionDuration collectionDuration; 45 std::vector<std::unique_ptr<CollectionData>> collectionAlgorithms; 46 std::unique_ptr<interfaces::Clock> clock; 47 }; 48