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 <systemd/sd-bus-protocol.h> 9 10 #include <sdbusplus/asio/object_server.hpp> 11 12 #include <chrono> 13 #include <memory> 14 #include <string> 15 #include <vector> 16 17 class ReportManager : public interfaces::ReportManager 18 { 19 public: 20 ReportManager( 21 std::unique_ptr<interfaces::ReportFactory> reportFactory, 22 std::unique_ptr<interfaces::JsonStorage> reportStorage, 23 const std::shared_ptr<sdbusplus::asio::object_server>& objServer); 24 ~ReportManager() = default; 25 26 ReportManager(ReportManager&) = delete; 27 ReportManager(ReportManager&&) = delete; 28 ReportManager& operator=(ReportManager&) = delete; 29 ReportManager& operator=(ReportManager&&) = delete; 30 31 void removeReport(const interfaces::Report* report) override; 32 void updateReport(const std::string& name) override; 33 34 private: 35 std::unique_ptr<interfaces::ReportFactory> reportFactory; 36 std::unique_ptr<interfaces::JsonStorage> reportStorage; 37 std::shared_ptr<sdbusplus::asio::object_server> objServer; 38 std::unique_ptr<sdbusplus::asio::dbus_interface> reportManagerIface; 39 std::vector<std::unique_ptr<interfaces::Report>> reports; 40 41 void verifyReportNameLength(const std::string& reportName); 42 void verifyAddReport( 43 const std::string& reportName, const std::string& reportingType, 44 Milliseconds interval, 45 const std::vector<LabeledMetricParameters>& readingParams); 46 interfaces::Report& addReport( 47 boost::asio::yield_context& yield, const std::string& reportName, 48 const std::string& reportingType, const bool emitsReadingsUpdate, 49 const bool logToMetricReportsCollection, Milliseconds interval, 50 ReadingParameters metricParams, const bool enabled); 51 interfaces::Report& addReport( 52 const std::string& reportName, const std::string& reportingType, 53 const bool emitsReadingsUpdate, const bool logToMetricReportsCollection, 54 Milliseconds interval, 55 std::vector<LabeledMetricParameters> metricParams, const bool enabled); 56 void loadFromPersistent(); 57 58 public: 59 static constexpr size_t maxReports{TELEMETRY_MAX_REPORTS}; 60 static constexpr size_t maxReadingParams{TELEMETRY_MAX_READING_PARAMS}; 61 static constexpr size_t maxReportNameLength{ 62 TELEMETRY_MAX_REPORT_NAME_LENGTH}; 63 static constexpr Milliseconds minInterval{TELEMETRY_MIN_INTERVAL}; 64 static constexpr const char* reportManagerIfaceName = 65 "xyz.openbmc_project.Telemetry.ReportManager"; 66 static constexpr const char* reportManagerPath = 67 "/xyz/openbmc_project/Telemetry/Reports"; 68 static constexpr std::array<std::string_view, 2> supportedReportingType = { 69 "Periodic", "OnRequest"}; 70 }; 71