xref: /openbmc/telemetry/tests/src/params/metric_params.hpp (revision cff70c14ef8cadb7fffd0cd41e06b972fa240e56)
1dcc4e193SKrzysztof Grobelny #pragma once
2dcc4e193SKrzysztof Grobelny 
3dcc4e193SKrzysztof Grobelny #include "types/collection_duration.hpp"
4dcc4e193SKrzysztof Grobelny #include "types/collection_time_scope.hpp"
5dcc4e193SKrzysztof Grobelny #include "types/operation_type.hpp"
6dcc4e193SKrzysztof Grobelny 
78069771cSKrzysztof Grobelny #include <chrono>
88069771cSKrzysztof Grobelny #include <cstdint>
98069771cSKrzysztof Grobelny #include <ostream>
10dcc4e193SKrzysztof Grobelny #include <string>
118069771cSKrzysztof Grobelny #include <vector>
12dcc4e193SKrzysztof Grobelny 
13dcc4e193SKrzysztof Grobelny class MetricParams final
14dcc4e193SKrzysztof Grobelny {
15dcc4e193SKrzysztof Grobelny   public:
operationType(OperationType val)16dcc4e193SKrzysztof Grobelny     MetricParams& operationType(OperationType val)
17dcc4e193SKrzysztof Grobelny     {
18dcc4e193SKrzysztof Grobelny         operationTypeProperty = val;
19dcc4e193SKrzysztof Grobelny         return *this;
20dcc4e193SKrzysztof Grobelny     }
21dcc4e193SKrzysztof Grobelny 
operationType() const22dcc4e193SKrzysztof Grobelny     const OperationType& operationType() const
23dcc4e193SKrzysztof Grobelny     {
24dcc4e193SKrzysztof Grobelny         return operationTypeProperty;
25dcc4e193SKrzysztof Grobelny     }
26dcc4e193SKrzysztof Grobelny 
collectionTimeScope(CollectionTimeScope val)27dcc4e193SKrzysztof Grobelny     MetricParams& collectionTimeScope(CollectionTimeScope val)
28dcc4e193SKrzysztof Grobelny     {
29dcc4e193SKrzysztof Grobelny         collectionTimeScopeProperty = val;
30dcc4e193SKrzysztof Grobelny         return *this;
31dcc4e193SKrzysztof Grobelny     }
32dcc4e193SKrzysztof Grobelny 
collectionTimeScope() const33dcc4e193SKrzysztof Grobelny     const CollectionTimeScope& collectionTimeScope() const
34dcc4e193SKrzysztof Grobelny     {
35dcc4e193SKrzysztof Grobelny         return collectionTimeScopeProperty;
36dcc4e193SKrzysztof Grobelny     }
37dcc4e193SKrzysztof Grobelny 
collectionDuration(CollectionDuration val)38dcc4e193SKrzysztof Grobelny     MetricParams& collectionDuration(CollectionDuration val)
39dcc4e193SKrzysztof Grobelny     {
40dcc4e193SKrzysztof Grobelny         collectionDurationProperty = val;
41dcc4e193SKrzysztof Grobelny         return *this;
42dcc4e193SKrzysztof Grobelny     }
43dcc4e193SKrzysztof Grobelny 
collectionDuration() const44dcc4e193SKrzysztof Grobelny     const CollectionDuration& collectionDuration() const
45dcc4e193SKrzysztof Grobelny     {
46dcc4e193SKrzysztof Grobelny         return collectionDurationProperty;
47dcc4e193SKrzysztof Grobelny     }
48dcc4e193SKrzysztof Grobelny 
readings(std::vector<std::pair<Milliseconds,double>> value)498069771cSKrzysztof Grobelny     MetricParams& readings(std::vector<std::pair<Milliseconds, double>> value)
508069771cSKrzysztof Grobelny     {
518069771cSKrzysztof Grobelny         readingsProperty = std::move(value);
528069771cSKrzysztof Grobelny         return *this;
538069771cSKrzysztof Grobelny     }
548069771cSKrzysztof Grobelny 
readings() const558069771cSKrzysztof Grobelny     const std::vector<std::pair<Milliseconds, double>>& readings() const
568069771cSKrzysztof Grobelny     {
578069771cSKrzysztof Grobelny         return readingsProperty;
588069771cSKrzysztof Grobelny     }
598069771cSKrzysztof Grobelny 
expectedReading(Milliseconds delta,double reading)608069771cSKrzysztof Grobelny     MetricParams& expectedReading(Milliseconds delta, double reading)
618069771cSKrzysztof Grobelny     {
628069771cSKrzysztof Grobelny         expectedReadingProperty = std::make_pair(delta, reading);
638069771cSKrzysztof Grobelny         return *this;
648069771cSKrzysztof Grobelny     }
658069771cSKrzysztof Grobelny 
expectedReading() const668069771cSKrzysztof Grobelny     const std::pair<Milliseconds, double>& expectedReading() const
678069771cSKrzysztof Grobelny     {
688069771cSKrzysztof Grobelny         return expectedReadingProperty;
698069771cSKrzysztof Grobelny     }
708069771cSKrzysztof Grobelny 
expectedIsTimerRequired() const71*f7ea2997SKrzysztof Grobelny     bool expectedIsTimerRequired() const
72*f7ea2997SKrzysztof Grobelny     {
73*f7ea2997SKrzysztof Grobelny         return expectedIsTimerRequiredProperty;
74*f7ea2997SKrzysztof Grobelny     }
75*f7ea2997SKrzysztof Grobelny 
expectedIsTimerRequired(bool value)76*f7ea2997SKrzysztof Grobelny     MetricParams& expectedIsTimerRequired(bool value)
77*f7ea2997SKrzysztof Grobelny     {
78*f7ea2997SKrzysztof Grobelny         expectedIsTimerRequiredProperty = value;
79*f7ea2997SKrzysztof Grobelny         return *this;
80*f7ea2997SKrzysztof Grobelny     }
81*f7ea2997SKrzysztof Grobelny 
82dcc4e193SKrzysztof Grobelny   private:
83dcc4e193SKrzysztof Grobelny     OperationType operationTypeProperty = {};
84dcc4e193SKrzysztof Grobelny     CollectionTimeScope collectionTimeScopeProperty = {};
85dcc4e193SKrzysztof Grobelny     CollectionDuration collectionDurationProperty =
86dcc4e193SKrzysztof Grobelny         CollectionDuration(Milliseconds(0u));
878069771cSKrzysztof Grobelny     std::vector<std::pair<Milliseconds, double>> readingsProperty = {};
888069771cSKrzysztof Grobelny     std::pair<Milliseconds, double> expectedReadingProperty = {};
89*f7ea2997SKrzysztof Grobelny     bool expectedIsTimerRequiredProperty = true;
90dcc4e193SKrzysztof Grobelny };
918069771cSKrzysztof Grobelny 
operator <<(std::ostream & os,const MetricParams & mp)928069771cSKrzysztof Grobelny inline std::ostream& operator<<(std::ostream& os, const MetricParams& mp)
938069771cSKrzysztof Grobelny {
948069771cSKrzysztof Grobelny     using utils::enumToString;
958069771cSKrzysztof Grobelny 
968069771cSKrzysztof Grobelny     os << "{ op: " << enumToString(mp.operationType())
978069771cSKrzysztof Grobelny        << ", timeScope: " << enumToString(mp.collectionTimeScope())
988069771cSKrzysztof Grobelny        << ", duration: " << mp.collectionDuration().t.count()
998069771cSKrzysztof Grobelny        << ", readings: { ";
1008069771cSKrzysztof Grobelny     for (auto [timestamp, reading] : mp.readings())
1018069771cSKrzysztof Grobelny     {
1028069771cSKrzysztof Grobelny         os << reading << "(" << timestamp.count() << "ms), ";
1038069771cSKrzysztof Grobelny     }
1048069771cSKrzysztof Grobelny 
1058069771cSKrzysztof Grobelny     auto [timestamp, reading] = mp.expectedReading();
106*f7ea2997SKrzysztof Grobelny     os << " }, expectedReading: " << reading << "(" << timestamp.count()
107*f7ea2997SKrzysztof Grobelny        << "ms), expectedIsTimerRequired: " << std::boolalpha
108*f7ea2997SKrzysztof Grobelny        << mp.expectedIsTimerRequired() << " }";
1098069771cSKrzysztof Grobelny     return os;
1108069771cSKrzysztof Grobelny }
111