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