xref: /openbmc/telemetry/src/report_manager.hpp (revision b4ef22e4)
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 #include "interfaces/trigger_manager.hpp"
8 #include "report.hpp"
9 
10 #include <systemd/sd-bus-protocol.h>
11 
12 #include <sdbusplus/asio/object_server.hpp>
13 
14 #include <chrono>
15 #include <memory>
16 #include <string>
17 #include <vector>
18 
19 class ReportManager : public interfaces::ReportManager
20 {
21   public:
22     ReportManager(
23         std::unique_ptr<interfaces::ReportFactory> reportFactory,
24         std::unique_ptr<interfaces::JsonStorage> reportStorage,
25         const std::shared_ptr<sdbusplus::asio::object_server>& objServer,
26         std::unique_ptr<interfaces::TriggerManager>& triggerManager);
27     ~ReportManager() = default;
28 
29     ReportManager(const ReportManager&) = delete;
30     ReportManager(ReportManager&&) = delete;
31     ReportManager& operator=(const ReportManager&) = delete;
32     ReportManager& operator=(ReportManager&&) = delete;
33 
34     void removeReport(const interfaces::Report* report) override;
35     void updateReport(const std::string& id) override;
36     void updateTriggerIds(const std::string& reportId,
37                           const std::string& triggerId,
38                           TriggerIdUpdate updateType) override;
39 
40   private:
41     std::unique_ptr<interfaces::ReportFactory> reportFactory;
42     std::unique_ptr<interfaces::JsonStorage> reportStorage;
43     std::shared_ptr<sdbusplus::asio::object_server> objServer;
44     std::unique_ptr<sdbusplus::asio::dbus_interface> reportManagerIface;
45     std::vector<std::unique_ptr<interfaces::Report>> reports;
46     std::unique_ptr<interfaces::TriggerManager>& triggerManager;
47 
48     void verifyAddReport(
49         const std::string& reportId, const std::string& reportName,
50         const ReportingType reportingType, Milliseconds interval,
51         const ReportUpdates reportUpdates, const uint64_t appendLimit,
52         const std::vector<LabeledMetricParameters>& readingParams);
53     interfaces::Report& addReport(
54         boost::asio::yield_context& yield, const std::string& reportId,
55         const std::string& reportName, const ReportingType reportingType,
56         const std::vector<ReportAction>& reportActions, Milliseconds interval,
57         const uint64_t appendLimit, const ReportUpdates reportUpdates,
58         ReadingParameters metricParams, const bool enabled);
59     interfaces::Report& addReport(
60         const std::string& reportId, const std::string& reportName,
61         const ReportingType reportingType,
62         const std::vector<ReportAction>& reportActions, Milliseconds interval,
63         const uint64_t appendLimit, const ReportUpdates reportUpdates,
64         std::vector<LabeledMetricParameters> metricParams, const bool enabled);
65     void loadFromPersistent();
66 
67   public:
68     static constexpr size_t maxReports{TELEMETRY_MAX_REPORTS};
69     static constexpr size_t maxNumberMetrics{TELEMETRY_MAX_READING_PARAMS};
70     static constexpr size_t maxReportIdLength{
71         TELEMETRY_MAX_DBUS_PATH_LENGTH -
72         std::string_view(Report::reportDir).length()};
73     static constexpr Milliseconds minInterval{TELEMETRY_MIN_INTERVAL};
74     static constexpr size_t maxAppendLimit{TELEMETRY_MAX_APPEND_LIMIT};
75     static constexpr const char* reportManagerIfaceName =
76         "xyz.openbmc_project.Telemetry.ReportManager";
77     static constexpr const char* reportManagerPath =
78         "/xyz/openbmc_project/Telemetry/Reports";
79     static constexpr const char* reportNameDefault = "Report";
80 };
81