added support for onChange report
Report is now notified when metric changes and updates reading values.
Tested:
- Added new unit tests
- OnChange report updates Readings when metric values changes
Change-Id: I3be9ef7aa0486cb15bac627aa1de5cc632613b3b
Signed-off-by: Krzysztof Grobelny <krzysztof.grobelny@intel.com>
diff --git a/src/metric.hpp b/src/metric.hpp
index 859315e..b627b4e 100644
--- a/src/metric.hpp
+++ b/src/metric.hpp
@@ -2,8 +2,11 @@
#include "interfaces/clock.hpp"
#include "interfaces/metric.hpp"
+#include "interfaces/metric_listener.hpp"
#include "interfaces/sensor.hpp"
#include "interfaces/sensor_listener.hpp"
+#include "metrics/collection_data.hpp"
+#include "types/collection_duration.hpp"
class Metric :
public interfaces::Metric,
@@ -14,28 +17,22 @@
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&, Milliseconds) override;
void sensorUpdated(interfaces::Sensor&, Milliseconds,
double value) override;
LabeledMetricParameters dumpConfiguration() const override;
uint64_t sensorCount() const override;
+ void registerForUpdates(interfaces::MetricListener& listener) override;
+ void unregisterFromUpdates(interfaces::MetricListener& listener) override;
+ void updateReadings(Milliseconds) override;
+ bool isTimerRequired() 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);
+ metrics::CollectionData&
+ findAssociatedData(const interfaces::Sensor& notifier);
std::string id;
std::vector<MetricValue> readings;
@@ -43,6 +40,7 @@
OperationType operationType;
CollectionTimeScope collectionTimeScope;
CollectionDuration collectionDuration;
- std::vector<std::unique_ptr<CollectionData>> collectionAlgorithms;
+ std::vector<std::unique_ptr<metrics::CollectionData>> collectionAlgorithms;
std::unique_ptr<interfaces::Clock> clock;
+ std::vector<std::reference_wrapper<interfaces::MetricListener>> listeners;
};