1 #pragma once
2 
3 #include "interfaces/json_storage.hpp"
4 #include "interfaces/metric.hpp"
5 #include "interfaces/report.hpp"
6 #include "interfaces/report_manager.hpp"
7 #include "types/report_action.hpp"
8 #include "types/report_types.hpp"
9 #include "types/report_updates.hpp"
10 #include "types/reporting_type.hpp"
11 
12 #include <boost/asio/spawn.hpp>
13 
14 #include <chrono>
15 #include <memory>
16 #include <optional>
17 
18 namespace interfaces
19 {
20 
21 class ReportFactory
22 {
23   public:
24     virtual ~ReportFactory() = default;
25 
26     virtual std::vector<LabeledMetricParameters>
27         convertMetricParams(boost::asio::yield_context& yield,
28                             const ReadingParameters& metricParams) const = 0;
29     virtual std::vector<LabeledMetricParameters>
30         convertMetricParams(const ReadingParameters& metricParams) const = 0;
31 
32     virtual void
33         updateMetrics(std::vector<std::shared_ptr<interfaces::Metric>>& metrics,
34                       bool enabled,
35                       const ReadingParameters& metricParams) const = 0;
36 
37     virtual std::unique_ptr<interfaces::Report>
38         make(const std::string& id, const std::string& name,
39              const ReportingType reportingType,
40              const std::vector<ReportAction>& reportActions,
41              Milliseconds period, uint64_t appendLimit,
42              const ReportUpdates reportUpdates, ReportManager& reportManager,
43              JsonStorage& reportStorage,
44              std::vector<LabeledMetricParameters> labeledMetricParams,
45              bool enabled) const = 0;
46 };
47 
48 } // namespace interfaces
49