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