xref: /openbmc/telemetry/src/report_manager.hpp (revision d22381949a8705da399107fcff71f8fbfe910f46)
1 #pragma once
2 
3 #include "interfaces/json_storage.hpp"
4 #include "interfaces/report.hpp"
5 #include "interfaces/report_factory.hpp"
6 #include "interfaces/report_manager.hpp"
7 
8 #include <sdbusplus/asio/object_server.hpp>
9 
10 #include <chrono>
11 #include <memory>
12 #include <vector>
13 
14 class ReportManager : public interfaces::ReportManager
15 {
16   public:
17     ReportManager(
18         std::unique_ptr<interfaces::ReportFactory> reportFactory,
19         std::unique_ptr<interfaces::JsonStorage> reportStorage,
20         const std::shared_ptr<sdbusplus::asio::object_server>& objServer);
21     ~ReportManager() = default;
22 
23     ReportManager(ReportManager&) = delete;
24     ReportManager(ReportManager&&) = delete;
25     ReportManager& operator=(ReportManager&) = delete;
26     ReportManager& operator=(ReportManager&&) = delete;
27 
28     void removeReport(const interfaces::Report* report) override;
29     static bool verifyScanPeriod(const uint64_t scanPeriod);
30 
31   private:
32     std::unique_ptr<interfaces::ReportFactory> reportFactory;
33     std::unique_ptr<interfaces::JsonStorage> reportStorage;
34     std::shared_ptr<sdbusplus::asio::object_server> objServer;
35     std::unique_ptr<sdbusplus::asio::dbus_interface> reportManagerIface;
36     std::vector<std::unique_ptr<interfaces::Report>> reports;
37 
38     void verifyAddReport(const std::string& reportName,
39                          std::chrono::milliseconds interval);
40     interfaces::Report& addReport(boost::asio::yield_context& yield,
41                                   const std::string& reportName,
42                                   const std::string& reportingType,
43                                   const bool emitsReadingsUpdate,
44                                   const bool logToMetricReportsCollection,
45                                   std::chrono::milliseconds interval,
46                                   ReadingParameters metricParams);
47     interfaces::Report& addReport(
48         const std::string& reportName, const std::string& reportingType,
49         const bool emitsReadingsUpdate, const bool logToMetricReportsCollection,
50         std::chrono::milliseconds interval,
51         std::vector<LabeledMetricParameters> metricParams);
52     void loadFromPersistent();
53 
54   public:
55     static constexpr uint32_t maxReports{20};
56     static constexpr std::chrono::milliseconds minInterval{1000};
57     static constexpr const char* reportManagerIfaceName =
58         "xyz.openbmc_project.Telemetry.ReportManager";
59     static constexpr const char* reportManagerPath =
60         "/xyz/openbmc_project/Telemetry/Reports";
61 };
62