blob: 90db484e80cd367080034c60494b477a4b8d2c6f [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
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
Krzysztof Grobelnydcc4e192021-03-08 09:09:34 +000038 MetricParams& collectionTimeScope(CollectionTimeScope val)
39 {
40 collectionTimeScopeProperty = val;
41 return *this;
42 }
43
44 const CollectionTimeScope& collectionTimeScope() const
45 {
46 return collectionTimeScopeProperty;
47 }
48
49 MetricParams& collectionDuration(CollectionDuration val)
50 {
51 collectionDurationProperty = val;
52 return *this;
53 }
54
55 const CollectionDuration& collectionDuration() const
56 {
57 return collectionDurationProperty;
58 }
59
Krzysztof Grobelny80697712021-03-04 09:49:27 +000060 MetricParams& readings(std::vector<std::pair<Milliseconds, double>> value)
61 {
62 readingsProperty = std::move(value);
63 return *this;
64 }
65
66 const std::vector<std::pair<Milliseconds, double>>& readings() const
67 {
68 return readingsProperty;
69 }
70
71 MetricParams& expectedReading(Milliseconds delta, double reading)
72 {
73 expectedReadingProperty = std::make_pair(delta, reading);
74 return *this;
75 }
76
77 const std::pair<Milliseconds, double>& expectedReading() const
78 {
79 return expectedReadingProperty;
80 }
81
Krzysztof Grobelnydcc4e192021-03-08 09:09:34 +000082 private:
83 OperationType operationTypeProperty = {};
84 std::string idProperty = "MetricId";
Krzysztof Grobelnydcc4e192021-03-08 09:09:34 +000085 CollectionTimeScope collectionTimeScopeProperty = {};
86 CollectionDuration collectionDurationProperty =
87 CollectionDuration(Milliseconds(0u));
Krzysztof Grobelny80697712021-03-04 09:49:27 +000088 std::vector<std::pair<Milliseconds, double>> readingsProperty = {};
89 std::pair<Milliseconds, double> expectedReadingProperty = {};
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();
106 os << " }, expected: " << reading << "(" << timestamp.count() << "ms) }";
107 return os;
108}