blob: cef5f872613d87adb84dc3ea4c9bbf7f6485e948 [file] [log] [blame]
Krzysztof Grobelnydcc4e192021-03-08 09:09:34 +00001#pragma once
2
3#include "types/collection_duration.hpp"
4#include "types/collection_time_scope.hpp"
5#include "types/operation_type.hpp"
6
Krzysztof Grobelny80697712021-03-04 09:49:27 +00007#include <chrono>
8#include <cstdint>
9#include <ostream>
Krzysztof Grobelnydcc4e192021-03-08 09:09:34 +000010#include <string>
Krzysztof Grobelny80697712021-03-04 09:49:27 +000011#include <vector>
Krzysztof Grobelnydcc4e192021-03-08 09:09:34 +000012
13class 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
Krzysztof Grobelnydcc4e192021-03-08 09:09:34 +000027 MetricParams& collectionTimeScope(CollectionTimeScope val)
28 {
29 collectionTimeScopeProperty = val;
30 return *this;
31 }
32
33 const CollectionTimeScope& collectionTimeScope() const
34 {
35 return collectionTimeScopeProperty;
36 }
37
38 MetricParams& collectionDuration(CollectionDuration val)
39 {
40 collectionDurationProperty = val;
41 return *this;
42 }
43
44 const CollectionDuration& collectionDuration() const
45 {
46 return collectionDurationProperty;
47 }
48
Krzysztof Grobelny80697712021-03-04 09:49:27 +000049 MetricParams& readings(std::vector<std::pair<Milliseconds, double>> value)
50 {
51 readingsProperty = std::move(value);
52 return *this;
53 }
54
55 const std::vector<std::pair<Milliseconds, double>>& readings() const
56 {
57 return readingsProperty;
58 }
59
60 MetricParams& expectedReading(Milliseconds delta, double reading)
61 {
62 expectedReadingProperty = std::make_pair(delta, reading);
63 return *this;
64 }
65
66 const std::pair<Milliseconds, double>& expectedReading() const
67 {
68 return expectedReadingProperty;
69 }
70
Krzysztof Grobelnyf7ea2992022-01-27 11:04:58 +010071 bool expectedIsTimerRequired() const
72 {
73 return expectedIsTimerRequiredProperty;
74 }
75
76 MetricParams& expectedIsTimerRequired(bool value)
77 {
78 expectedIsTimerRequiredProperty = value;
79 return *this;
80 }
81
Krzysztof Grobelnydcc4e192021-03-08 09:09:34 +000082 private:
83 OperationType operationTypeProperty = {};
Krzysztof Grobelnydcc4e192021-03-08 09:09:34 +000084 CollectionTimeScope collectionTimeScopeProperty = {};
85 CollectionDuration collectionDurationProperty =
86 CollectionDuration(Milliseconds(0u));
Krzysztof Grobelny80697712021-03-04 09:49:27 +000087 std::vector<std::pair<Milliseconds, double>> readingsProperty = {};
88 std::pair<Milliseconds, double> expectedReadingProperty = {};
Krzysztof Grobelnyf7ea2992022-01-27 11:04:58 +010089 bool expectedIsTimerRequiredProperty = true;
Krzysztof Grobelnydcc4e192021-03-08 09:09:34 +000090};
Krzysztof Grobelny80697712021-03-04 09:49:27 +000091
92inline std::ostream& operator<<(std::ostream& os, const MetricParams& mp)
93{
94 using utils::enumToString;
95
96 os << "{ op: " << enumToString(mp.operationType())
97 << ", timeScope: " << enumToString(mp.collectionTimeScope())
98 << ", duration: " << mp.collectionDuration().t.count()
99 << ", readings: { ";
100 for (auto [timestamp, reading] : mp.readings())
101 {
102 os << reading << "(" << timestamp.count() << "ms), ";
103 }
104
105 auto [timestamp, reading] = mp.expectedReading();
Krzysztof Grobelnyf7ea2992022-01-27 11:04:58 +0100106 os << " }, expectedReading: " << reading << "(" << timestamp.count()
107 << "ms), expectedIsTimerRequired: " << std::boolalpha
108 << mp.expectedIsTimerRequired() << " }";
Krzysztof Grobelny80697712021-03-04 09:49:27 +0000109 return os;
110}