1c8e3a64aSKrzysztof Grobelny #pragma once
2c8e3a64aSKrzysztof Grobelny 
3*b3e03d2dSMichal Orzel #include "helpers.hpp"
4e2362796SWludzik, Jozef #include "report_manager.hpp"
5dcc4e193SKrzysztof Grobelny #include "types/report_types.hpp"
6e2362796SWludzik, Jozef 
7c8e3a64aSKrzysztof Grobelny #include <chrono>
8c8e3a64aSKrzysztof Grobelny #include <string>
9c8e3a64aSKrzysztof Grobelny 
10c8e3a64aSKrzysztof Grobelny class ReportParams final
11c8e3a64aSKrzysztof Grobelny {
12c8e3a64aSKrzysztof Grobelny   public:
reportId(std::string_view val)1332305f14SSzymon Dompke     ReportParams& reportId(std::string_view val)
14b8cc78ddSKrzysztof Grobelny     {
1532305f14SSzymon Dompke         reportIdProperty = val;
16b8cc78ddSKrzysztof Grobelny         return *this;
17b8cc78ddSKrzysztof Grobelny     }
18b8cc78ddSKrzysztof Grobelny 
reportId() const19b8cc78ddSKrzysztof Grobelny     const std::string& reportId() const
20b8cc78ddSKrzysztof Grobelny     {
21b8cc78ddSKrzysztof Grobelny         return reportIdProperty;
22b8cc78ddSKrzysztof Grobelny     }
23b8cc78ddSKrzysztof Grobelny 
reportName(std::string_view val)2432305f14SSzymon Dompke     ReportParams& reportName(std::string_view val)
25c8e3a64aSKrzysztof Grobelny     {
2632305f14SSzymon Dompke         reportNameProperty = val;
27c8e3a64aSKrzysztof Grobelny         return *this;
28c8e3a64aSKrzysztof Grobelny     }
29c8e3a64aSKrzysztof Grobelny 
reportName() const30c8e3a64aSKrzysztof Grobelny     const std::string& reportName() const
31c8e3a64aSKrzysztof Grobelny     {
32c8e3a64aSKrzysztof Grobelny         return reportNameProperty;
33c8e3a64aSKrzysztof Grobelny     }
34c8e3a64aSKrzysztof Grobelny 
reportingType(const ReportingType val)3551497a0cSKrzysztof Grobelny     ReportParams& reportingType(const ReportingType val)
36c8e3a64aSKrzysztof Grobelny     {
3751497a0cSKrzysztof Grobelny         reportingTypeProperty = val;
38c8e3a64aSKrzysztof Grobelny         return *this;
39c8e3a64aSKrzysztof Grobelny     }
40c8e3a64aSKrzysztof Grobelny 
reportingType() const4151497a0cSKrzysztof Grobelny     ReportingType reportingType() const
42c8e3a64aSKrzysztof Grobelny     {
43c8e3a64aSKrzysztof Grobelny         return reportingTypeProperty;
44c8e3a64aSKrzysztof Grobelny     }
45c8e3a64aSKrzysztof Grobelny 
reportActions(std::vector<ReportAction> val)4651497a0cSKrzysztof Grobelny     ReportParams& reportActions(std::vector<ReportAction> val)
47e2362796SWludzik, Jozef     {
4851497a0cSKrzysztof Grobelny         reportActionsProperty = std::move(val);
49e2362796SWludzik, Jozef         return *this;
50e2362796SWludzik, Jozef     }
51e2362796SWludzik, Jozef 
reportActions() const5251497a0cSKrzysztof Grobelny     std::vector<ReportAction> reportActions() const
53e2362796SWludzik, Jozef     {
5451497a0cSKrzysztof Grobelny         return reportActionsProperty;
55e2362796SWludzik, Jozef     }
56e2362796SWludzik, Jozef 
interval(Milliseconds val)57dcc4e193SKrzysztof Grobelny     ReportParams& interval(Milliseconds val)
58e2362796SWludzik, Jozef     {
59e2362796SWludzik, Jozef         intervalProperty = val;
60e2362796SWludzik, Jozef         return *this;
61e2362796SWludzik, Jozef     }
62e2362796SWludzik, Jozef 
interval() const63dcc4e193SKrzysztof Grobelny     Milliseconds interval() const
64e2362796SWludzik, Jozef     {
65e2362796SWludzik, Jozef         return intervalProperty;
66e2362796SWludzik, Jozef     }
67e2362796SWludzik, Jozef 
enabled(bool val)687e098e93SLukasz Kazmierczak     ReportParams& enabled(bool val)
697e098e93SLukasz Kazmierczak     {
707e098e93SLukasz Kazmierczak         enabledProperty = val;
717e098e93SLukasz Kazmierczak         return *this;
727e098e93SLukasz Kazmierczak     }
737e098e93SLukasz Kazmierczak 
enabled() const747e098e93SLukasz Kazmierczak     bool enabled() const
757e098e93SLukasz Kazmierczak     {
767e098e93SLukasz Kazmierczak         return enabledProperty;
777e098e93SLukasz Kazmierczak     }
787e098e93SLukasz Kazmierczak 
appendLimit(uint64_t val)793eb56865SSzymon Dompke     ReportParams& appendLimit(uint64_t val)
803eb56865SSzymon Dompke     {
813eb56865SSzymon Dompke         appendLimitProperty = val;
823eb56865SSzymon Dompke         return *this;
833eb56865SSzymon Dompke     }
843eb56865SSzymon Dompke 
appendLimit() const853eb56865SSzymon Dompke     uint64_t appendLimit() const
863eb56865SSzymon Dompke     {
873eb56865SSzymon Dompke         return appendLimitProperty;
883eb56865SSzymon Dompke     }
893eb56865SSzymon Dompke 
reportUpdates(ReportUpdates val)9051497a0cSKrzysztof Grobelny     ReportParams& reportUpdates(ReportUpdates val)
913eb56865SSzymon Dompke     {
923eb56865SSzymon Dompke         reportUpdatesProperty = val;
933eb56865SSzymon Dompke         return *this;
943eb56865SSzymon Dompke     }
953eb56865SSzymon Dompke 
reportUpdates() const9651497a0cSKrzysztof Grobelny     ReportUpdates reportUpdates() const
973eb56865SSzymon Dompke     {
983eb56865SSzymon Dompke         return reportUpdatesProperty;
993eb56865SSzymon Dompke     }
1003eb56865SSzymon Dompke 
metricParameters(std::vector<LabeledMetricParameters> val)101dcc4e193SKrzysztof Grobelny     ReportParams& metricParameters(std::vector<LabeledMetricParameters> val)
102e2362796SWludzik, Jozef     {
103dcc4e193SKrzysztof Grobelny         metricParametersProperty = std::move(val);
104e2362796SWludzik, Jozef         return *this;
105e2362796SWludzik, Jozef     }
106e2362796SWludzik, Jozef 
metricParameters() const107dcc4e193SKrzysztof Grobelny     const std::vector<LabeledMetricParameters>& metricParameters() const
108e2362796SWludzik, Jozef     {
109dcc4e193SKrzysztof Grobelny         return metricParametersProperty;
110e2362796SWludzik, Jozef     }
111e2362796SWludzik, Jozef 
readings(Readings val)112493e62ebSKrzysztof Grobelny     ReportParams& readings(Readings val)
113493e62ebSKrzysztof Grobelny     {
114493e62ebSKrzysztof Grobelny         readingsProperty = std::move(val);
115493e62ebSKrzysztof Grobelny         return *this;
116493e62ebSKrzysztof Grobelny     }
117493e62ebSKrzysztof Grobelny 
readings() const118493e62ebSKrzysztof Grobelny     Readings readings() const
119493e62ebSKrzysztof Grobelny     {
120493e62ebSKrzysztof Grobelny         return readingsProperty;
121493e62ebSKrzysztof Grobelny     }
122493e62ebSKrzysztof Grobelny 
PrintTo(const ReportParams & params,std::ostream * os)123*b3e03d2dSMichal Orzel     friend void PrintTo(const ReportParams& params, std::ostream* os)
124*b3e03d2dSMichal Orzel     {
125*b3e03d2dSMichal Orzel         *os << "{ Id: \"" << params.reportIdProperty << "\", Name: \""
126*b3e03d2dSMichal Orzel             << params.reportNameProperty << "\", ReportingType: \""
127*b3e03d2dSMichal Orzel             << utils::enumToString(params.reportingTypeProperty)
128*b3e03d2dSMichal Orzel             << "\", ReportActions: ";
129*b3e03d2dSMichal Orzel         PrintTo(params.reportActionsProperty, os);
130*b3e03d2dSMichal Orzel         *os << ", Interval: " << params.intervalProperty
131*b3e03d2dSMichal Orzel             << ", Enabled: " << params.enabledProperty
132*b3e03d2dSMichal Orzel             << ", AppendLimit: " << std::to_string(params.appendLimitProperty)
133*b3e03d2dSMichal Orzel             << ", ReportUpdates: \""
134*b3e03d2dSMichal Orzel             << utils::enumToString(params.reportUpdatesProperty)
135*b3e03d2dSMichal Orzel             << "\", MetricParameters: ";
136*b3e03d2dSMichal Orzel         PrintTo(params.metricParametersProperty, os);
137*b3e03d2dSMichal Orzel         *os << ", Readings: ";
138*b3e03d2dSMichal Orzel         PrintTo(params.readingsProperty, os);
139*b3e03d2dSMichal Orzel         *os << " }";
140*b3e03d2dSMichal Orzel     }
141*b3e03d2dSMichal Orzel 
142e2362796SWludzik, Jozef   private:
143b8cc78ddSKrzysztof Grobelny     std::string reportIdProperty = "TestId";
144c8e3a64aSKrzysztof Grobelny     std::string reportNameProperty = "TestReport";
145973b4bb0SKrzysztof Grobelny     ReportingType reportingTypeProperty = ReportingType::onChange;
146fdb06a14SSzymon Dompke     std::vector<ReportAction> reportActionsProperty = {
147fdb06a14SSzymon Dompke         ReportAction::logToMetricReportsCollection};
148973b4bb0SKrzysztof Grobelny     Milliseconds intervalProperty{};
1493eb56865SSzymon Dompke     uint64_t appendLimitProperty = 123;
15051497a0cSKrzysztof Grobelny     ReportUpdates reportUpdatesProperty = ReportUpdates::overwrite;
151dcc4e193SKrzysztof Grobelny     std::vector<LabeledMetricParameters> metricParametersProperty{
152dcc4e193SKrzysztof Grobelny         {LabeledMetricParameters{
15394f71c51SSzymon Dompke              {LabeledSensorInfo{"Service",
154b8cc78ddSKrzysztof Grobelny                                 "/xyz/openbmc_project/sensors/power/p1",
155b8cc78ddSKrzysztof Grobelny                                 "metadata1"}},
15660fee077SKrzysztof Grobelny              OperationType::avg,
157dcc4e193SKrzysztof Grobelny              CollectionTimeScope::point,
158dcc4e193SKrzysztof Grobelny              CollectionDuration(Milliseconds(0u))},
159dcc4e193SKrzysztof Grobelny          LabeledMetricParameters{
16094f71c51SSzymon Dompke              {LabeledSensorInfo{"Service",
161b8cc78ddSKrzysztof Grobelny                                 "/xyz/openbmc_project/sensors/power/p2",
162b8cc78ddSKrzysztof Grobelny                                 "metadata2"}},
16360fee077SKrzysztof Grobelny              OperationType::avg,
164dcc4e193SKrzysztof Grobelny              CollectionTimeScope::point,
165dcc4e193SKrzysztof Grobelny              CollectionDuration(Milliseconds(0u))}}};
1667e098e93SLukasz Kazmierczak     bool enabledProperty = true;
167493e62ebSKrzysztof Grobelny     Readings readingsProperty = {};
168c8e3a64aSKrzysztof Grobelny };
169