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/interfaces/metric.hpp b/src/interfaces/metric.hpp
index 4e2fae3..c40e960 100644
--- a/src/interfaces/metric.hpp
+++ b/src/interfaces/metric.hpp
@@ -1,6 +1,8 @@
 #pragma once
 
+#include "interfaces/metric_listener.hpp"
 #include "metric_value.hpp"
+#include "types/duration_types.hpp"
 #include "types/report_types.hpp"
 
 #include <nlohmann/json.hpp>
@@ -20,6 +22,11 @@
     virtual std::vector<MetricValue> getReadings() const = 0;
     virtual LabeledMetricParameters dumpConfiguration() const = 0;
     virtual uint64_t sensorCount() const = 0;
+    virtual void registerForUpdates(interfaces::MetricListener& listener) = 0;
+    virtual void
+        unregisterFromUpdates(interfaces::MetricListener& listener) = 0;
+    virtual void updateReadings(Milliseconds) = 0;
+    virtual bool isTimerRequired() const = 0;
 };
 
 } // namespace interfaces
diff --git a/src/interfaces/metric_listener.hpp b/src/interfaces/metric_listener.hpp
new file mode 100644
index 0000000..3006a09
--- /dev/null
+++ b/src/interfaces/metric_listener.hpp
@@ -0,0 +1,14 @@
+#pragma once
+
+namespace interfaces
+{
+
+class MetricListener
+{
+  public:
+    virtual ~MetricListener() = default;
+
+    virtual void metricUpdated() = 0;
+};
+
+} // namespace interfaces
diff --git a/src/interfaces/sensor_listener.hpp b/src/interfaces/sensor_listener.hpp
index a47c8d4..3f35c38 100644
--- a/src/interfaces/sensor_listener.hpp
+++ b/src/interfaces/sensor_listener.hpp
@@ -15,7 +15,6 @@
   public:
     virtual ~SensorListener() = default;
 
-    virtual void sensorUpdated(interfaces::Sensor&, Milliseconds) = 0;
     virtual void sensorUpdated(interfaces::Sensor&, Milliseconds, double) = 0;
 };