1 #pragma once 2 3 #include "interfaces/metric.hpp" 4 #include "interfaces/report.hpp" 5 #include "interfaces/report_manager.hpp" 6 #include "interfaces/types.hpp" 7 8 #include <boost/asio/io_context.hpp> 9 #include <boost/asio/steady_timer.hpp> 10 #include <sdbusplus/asio/object_server.hpp> 11 12 #include <chrono> 13 #include <memory> 14 15 class Report : public interfaces::Report 16 { 17 public: 18 Report(boost::asio::io_context& ioc, 19 const std::shared_ptr<sdbusplus::asio::object_server>& objServer, 20 const std::string& reportName, const std::string& reportingType, 21 const bool emitsReadingsSignal, 22 const bool logToMetricReportsCollection, 23 const std::chrono::milliseconds period, 24 const ReadingParameters& metricParams, 25 interfaces::ReportManager& reportManager, 26 std::vector<std::shared_ptr<interfaces::Metric>> metrics); 27 ~Report() = default; 28 29 Report(const Report&) = delete; 30 Report(Report&&) = delete; 31 Report& operator=(const Report&) = delete; 32 Report& operator=(Report&&) = delete; 33 34 std::string getName() const override 35 { 36 return name; 37 } 38 39 std::string getPath() const override 40 { 41 return path; 42 } 43 44 private: 45 static void timerProc(boost::system::error_code, Report& self); 46 void scheduleTimer(std::chrono::milliseconds interval); 47 void updateReadings(); 48 49 const std::string name; 50 const std::string path; 51 std::chrono::milliseconds interval; 52 Readings readings = {}; 53 std::tuple_element_t<1, Readings> readingsCache = {}; 54 std::shared_ptr<sdbusplus::asio::object_server> objServer; 55 std::unique_ptr<sdbusplus::asio::dbus_interface> reportIface; 56 std::unique_ptr<sdbusplus::asio::dbus_interface> deleteIface; 57 std::vector<std::shared_ptr<interfaces::Metric>> metrics; 58 boost::asio::steady_timer timer; 59 60 public: 61 static constexpr const char* reportIfaceName = 62 "xyz.openbmc_project.Telemetry.Report"; 63 static constexpr const char* reportDir = 64 "/xyz/openbmc_project/Telemetry/Reports/"; 65 static constexpr const char* deleteIfaceName = 66 "xyz.openbmc_project.Object.Delete"; 67 }; 68