added support for Collection Functions
new supported operations: min,max,sum,avg
new supported time scopes: interval,startup
added unit test to verify that each collection function returns correct
timestamp and value
Tested:
- POST/GET on telemetry features in bmcweb, no regression detected
- Using dbus API metric with collection function works as expected
Change-Id: Ib364c433915e07fd7a102f00109525362c40ab8a
Signed-off-by: Krzysztof Grobelny <krzysztof.grobelny@intel.com>
diff --git a/src/metric.hpp b/src/metric.hpp
index 08684da..dfed383 100644
--- a/src/metric.hpp
+++ b/src/metric.hpp
@@ -1,5 +1,6 @@
#pragma once
+#include "interfaces/clock.hpp"
#include "interfaces/metric.hpp"
#include "interfaces/sensor.hpp"
#include "interfaces/sensor_listener.hpp"
@@ -11,24 +12,36 @@
{
public:
Metric(Sensors sensors, OperationType operationType, std::string id,
- std::string metadata, CollectionTimeScope, CollectionDuration);
+ std::string metadata, CollectionTimeScope, CollectionDuration,
+ std::unique_ptr<interfaces::Clock>);
+ ~Metric();
void initialize() override;
- const std::vector<MetricValue>& getReadings() const 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;
private:
- void tryUnpackJsonMetadata();
+ class CollectionData;
+ class DataPoint;
+ class DataInterval;
+ class DataStartup;
- MetricValue& findMetric(interfaces::Sensor&);
+ static std::vector<std::unique_ptr<CollectionData>>
+ makeCollectionData(size_t size, OperationType, CollectionTimeScope,
+ CollectionDuration);
+
+ void attemptUnpackJsonMetadata();
+ CollectionData& findAssociatedData(const interfaces::Sensor& notifier);
std::string id;
std::string metadata;
std::vector<MetricValue> readings;
Sensors sensors;
OperationType operationType;
- CollectionTimeScope timeScope;
+ CollectionTimeScope collectionTimeScope;
CollectionDuration collectionDuration;
+ std::vector<std::unique_ptr<CollectionData>> collectionAlgorithms;
+ std::unique_ptr<interfaces::Clock> clock;
};