xref: /openbmc/telemetry/src/metrics/collection_data.hpp (revision 583ba441654657bb4ba9d051b747144a7258c159)
1 #pragma once
2 
3 #include "types/collection_duration.hpp"
4 #include "types/collection_time_scope.hpp"
5 #include "types/duration_types.hpp"
6 #include "types/operation_type.hpp"
7 
8 #include <memory>
9 #include <optional>
10 #include <vector>
11 
12 namespace metrics
13 {
14 
15 class CollectionData
16 {
17   public:
18     virtual ~CollectionData() = default;
19 
20     virtual std::optional<double> update(Milliseconds timestamp) = 0;
21     virtual double update(Milliseconds timestamp, double value) = 0;
22     bool updateLastValue(double value);
23 
24   private:
25     std::optional<double> lastValue;
26 };
27 
28 std::vector<std::unique_ptr<CollectionData>> makeCollectionData(
29     size_t size, OperationType, CollectionTimeScope, CollectionDuration);
30 
31 } // namespace metrics
32