1 #pragma once
2 
3 #include "interfaces/json_storage.hpp"
4 #include "interfaces/report.hpp"
5 #include "interfaces/report_manager.hpp"
6 #include "types/report_types.hpp"
7 
8 #include <boost/asio/spawn.hpp>
9 
10 #include <chrono>
11 #include <memory>
12 #include <optional>
13 
14 namespace interfaces
15 {
16 
17 class ReportFactory
18 {
19   public:
20     virtual ~ReportFactory() = default;
21 
22     virtual std::vector<LabeledMetricParameters>
23         convertMetricParams(boost::asio::yield_context& yield,
24                             const ReadingParameters& metricParams) const = 0;
25 
26     virtual std::unique_ptr<interfaces::Report>
27         make(const std::string& name, const std::string& reportingType,
28              bool emitsReadingsSignal, bool logToMetricReportsCollection,
29              Milliseconds period, ReportManager& reportManager,
30              JsonStorage& reportStorage,
31              std::vector<LabeledMetricParameters> labeledMetricParams,
32              bool enabled) const = 0;
33 };
34 
35 } // namespace interfaces
36