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