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