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 #include "utils/dbus_path_utils.hpp" 10 11 #include <systemd/sd-bus-protocol.h> 12 13 #include <sdbusplus/asio/object_server.hpp> 14 15 #include <chrono> 16 #include <memory> 17 #include <string> 18 #include <vector> 19 20 class ReportManager : public interfaces::ReportManager 21 { 22 public: 23 ReportManager( 24 std::unique_ptr<interfaces::ReportFactory> reportFactory, 25 std::unique_ptr<interfaces::JsonStorage> reportStorage, 26 const std::shared_ptr<sdbusplus::asio::object_server>& objServer); 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 36 private: 37 std::unique_ptr<interfaces::ReportFactory> reportFactory; 38 std::unique_ptr<interfaces::JsonStorage> reportStorage; 39 std::shared_ptr<sdbusplus::asio::object_server> objServer; 40 std::unique_ptr<sdbusplus::asio::dbus_interface> reportManagerIface; 41 std::vector<std::unique_ptr<interfaces::Report>> reports; 42 43 void verifyAddReport( 44 const std::string& reportId, const std::string& reportName, 45 const ReportingType reportingType, Milliseconds interval, 46 const ReportUpdates reportUpdates, const uint64_t appendLimit, 47 const std::vector<LabeledMetricParameters>& readingParams); 48 interfaces::Report& addReport( 49 boost::asio::yield_context& yield, const std::string& reportId, 50 const std::string& reportName, const ReportingType reportingType, 51 const std::vector<ReportAction>& reportActions, Milliseconds interval, 52 const uint64_t appendLimit, const ReportUpdates reportUpdates, 53 ReadingParameters metricParams, const bool enabled); 54 interfaces::Report& 55 addReport(const std::string& reportId, const std::string& reportName, 56 const ReportingType reportingType, 57 const std::vector<ReportAction>& reportActions, 58 Milliseconds interval, const uint64_t appendLimit, 59 const ReportUpdates reportUpdates, 60 std::vector<LabeledMetricParameters> metricParams, 61 const bool enabled, Readings); 62 void loadFromPersistent(); 63 64 public: 65 static constexpr size_t maxReports{TELEMETRY_MAX_REPORTS}; 66 static constexpr size_t maxNumberMetrics{TELEMETRY_MAX_READING_PARAMS}; 67 static constexpr Milliseconds minInterval{TELEMETRY_MIN_INTERVAL}; 68 static constexpr size_t maxAppendLimit{TELEMETRY_MAX_APPEND_LIMIT}; 69 static constexpr const char* reportManagerIfaceName = 70 "xyz.openbmc_project.Telemetry.ReportManager"; 71 static constexpr const char* reportManagerPath = 72 "/xyz/openbmc_project/Telemetry/Reports"; 73 static constexpr std::string_view reportNameDefault = "Report"; 74 75 static_assert(!reportNameDefault.empty(), 76 "Default report name cannot be empty."); 77 }; 78