xref: /openbmc/telemetry/src/report_manager.hpp (revision 405c1e4bf8b993cb3800adead546e91b030ecb9b)
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 <string>
13 #include <vector>
14 
15 class ReportManager : public interfaces::ReportManager
16 {
17   public:
18     ReportManager(
19         std::unique_ptr<interfaces::ReportFactory> reportFactory,
20         std::unique_ptr<interfaces::JsonStorage> reportStorage,
21         const std::shared_ptr<sdbusplus::asio::object_server>& objServer);
22     ~ReportManager() = default;
23 
24     ReportManager(ReportManager&) = delete;
25     ReportManager(ReportManager&&) = delete;
26     ReportManager& operator=(ReportManager&) = delete;
27     ReportManager& operator=(ReportManager&&) = delete;
28 
29     void removeReport(const interfaces::Report* report) override;
30     void updateReport(const std::string& name) override;
31 
32   private:
33     std::unique_ptr<interfaces::ReportFactory> reportFactory;
34     std::unique_ptr<interfaces::JsonStorage> reportStorage;
35     std::shared_ptr<sdbusplus::asio::object_server> objServer;
36     std::unique_ptr<sdbusplus::asio::dbus_interface> reportManagerIface;
37     std::vector<std::unique_ptr<interfaces::Report>> reports;
38 
39     void verifyAddReport(const std::string& reportName,
40                          const std::string& reportingType,
41                          std::chrono::milliseconds interval,
42                          const ReadingParameters& readingParams);
43     interfaces::Report& addReport(boost::asio::yield_context& yield,
44                                   const std::string& reportName,
45                                   const std::string& reportingType,
46                                   const bool emitsReadingsUpdate,
47                                   const bool logToMetricReportsCollection,
48                                   std::chrono::milliseconds interval,
49                                   ReadingParameters metricParams);
50     interfaces::Report& addReport(
51         const std::string& reportName, const std::string& reportingType,
52         const bool emitsReadingsUpdate, const bool logToMetricReportsCollection,
53         std::chrono::milliseconds interval,
54         std::vector<LabeledMetricParameters> metricParams);
55     void loadFromPersistent();
56 
57   public:
58     static constexpr size_t maxReports{TELEMETRY_MAX_REPORTS};
59     static constexpr size_t maxReadingParams{TELEMETRY_MAX_READING_PARAMS};
60     static constexpr std::chrono::milliseconds minInterval{
61         TELEMETRY_MIN_INTERVAL};
62     static constexpr const char* reportManagerIfaceName =
63         "xyz.openbmc_project.Telemetry.ReportManager";
64     static constexpr const char* reportManagerPath =
65         "/xyz/openbmc_project/Telemetry/Reports";
66     static constexpr std::array<std::string_view, 2> supportedReportingType = {
67         "Periodic", "OnRequest"};
68 };
69