xref: /openbmc/telemetry/tests/src/params/metric_params.hpp (revision 8069771c0db62887b72aa2b8c51cd64eb5f99b2d)
1 #pragma once
2 
3 #include "types/collection_duration.hpp"
4 #include "types/collection_time_scope.hpp"
5 #include "types/operation_type.hpp"
6 
7 #include <chrono>
8 #include <cstdint>
9 #include <ostream>
10 #include <string>
11 #include <vector>
12 
13 class MetricParams final
14 {
15   public:
16     MetricParams& operationType(OperationType val)
17     {
18         operationTypeProperty = val;
19         return *this;
20     }
21 
22     const OperationType& operationType() const
23     {
24         return operationTypeProperty;
25     }
26 
27     MetricParams& id(std::string val)
28     {
29         idProperty = std::move(val);
30         return *this;
31     }
32 
33     const std::string& id() const
34     {
35         return idProperty;
36     }
37 
38     MetricParams& metadata(std::string val)
39     {
40         metadataProperty = std::move(val);
41         return *this;
42     }
43 
44     const std::string& metadata() const
45     {
46         return metadataProperty;
47     }
48 
49     MetricParams& collectionTimeScope(CollectionTimeScope val)
50     {
51         collectionTimeScopeProperty = val;
52         return *this;
53     }
54 
55     const CollectionTimeScope& collectionTimeScope() const
56     {
57         return collectionTimeScopeProperty;
58     }
59 
60     MetricParams& collectionDuration(CollectionDuration val)
61     {
62         collectionDurationProperty = val;
63         return *this;
64     }
65 
66     const CollectionDuration& collectionDuration() const
67     {
68         return collectionDurationProperty;
69     }
70 
71     MetricParams& readings(std::vector<std::pair<Milliseconds, double>> value)
72     {
73         readingsProperty = std::move(value);
74         return *this;
75     }
76 
77     const std::vector<std::pair<Milliseconds, double>>& readings() const
78     {
79         return readingsProperty;
80     }
81 
82     MetricParams& expectedReading(Milliseconds delta, double reading)
83     {
84         expectedReadingProperty = std::make_pair(delta, reading);
85         return *this;
86     }
87 
88     const std::pair<Milliseconds, double>& expectedReading() const
89     {
90         return expectedReadingProperty;
91     }
92 
93   private:
94     OperationType operationTypeProperty = {};
95     std::string idProperty = "MetricId";
96     std::string metadataProperty = "MetricMetadata";
97     CollectionTimeScope collectionTimeScopeProperty = {};
98     CollectionDuration collectionDurationProperty =
99         CollectionDuration(Milliseconds(0u));
100     std::vector<std::pair<Milliseconds, double>> readingsProperty = {};
101     std::pair<Milliseconds, double> expectedReadingProperty = {};
102 };
103 
104 inline std::ostream& operator<<(std::ostream& os, const MetricParams& mp)
105 {
106     using utils::enumToString;
107 
108     os << "{ op: " << enumToString(mp.operationType())
109        << ", timeScope: " << enumToString(mp.collectionTimeScope())
110        << ", duration: " << mp.collectionDuration().t.count()
111        << ", readings: { ";
112     for (auto [timestamp, reading] : mp.readings())
113     {
114         os << reading << "(" << timestamp.count() << "ms), ";
115     }
116 
117     auto [timestamp, reading] = mp.expectedReading();
118     os << " }, expected: " << reading << "(" << timestamp.count() << "ms) }";
119     return os;
120 }
121