1 #pragma once 2 3 #include "interfaces/json_storage.hpp" 4 #include "interfaces/metric.hpp" 5 #include "interfaces/report.hpp" 6 #include "interfaces/report_manager.hpp" 7 #include "types/report_types.hpp" 8 #include "utils/circular_vector.hpp" 9 10 #include <boost/asio/io_context.hpp> 11 #include <boost/asio/steady_timer.hpp> 12 #include <sdbusplus/asio/object_server.hpp> 13 14 #include <chrono> 15 #include <memory> 16 17 class Report : public interfaces::Report 18 { 19 public: 20 Report(boost::asio::io_context& ioc, 21 const std::shared_ptr<sdbusplus::asio::object_server>& objServer, 22 const std::string& reportName, const ReportingType reportingType, 23 const bool emitsReadingsSignal, 24 const bool logToMetricReportsCollection, const Milliseconds period, 25 const uint64_t appendLimitIn, const ReportUpdates reportUpdatesIn, 26 interfaces::ReportManager& reportManager, 27 interfaces::JsonStorage& reportStorage, 28 std::vector<std::shared_ptr<interfaces::Metric>> metrics, 29 const bool enabled); 30 ~Report() = default; 31 32 Report(const Report&) = delete; 33 Report(Report&&) = delete; 34 Report& operator=(const Report&) = delete; 35 Report& operator=(Report&&) = delete; 36 37 std::string getName() const override 38 { 39 return name; 40 } 41 42 std::string getPath() const override 43 { 44 return path; 45 } 46 47 void updateReadings() override; 48 bool storeConfiguration() const; 49 50 private: 51 std::unique_ptr<sdbusplus::asio::dbus_interface> makeReportInterface(); 52 static void timerProc(boost::system::error_code, Report& self); 53 void scheduleTimer(Milliseconds interval); 54 uint64_t deduceAppendLimit(const uint64_t appendLimitIn) const; 55 uint64_t deduceBufferSize(const ReportUpdates reportUpdatesIn, 56 const ReportingType reportingTypeIn) const; 57 void setReportUpdates(const ReportUpdates newReportUpdates); 58 static uint64_t getSensorCount( 59 std::vector<std::shared_ptr<interfaces::Metric>>& metrics); 60 61 std::string name; 62 std::string path; 63 ReportingType reportingType; 64 Milliseconds interval; 65 bool emitsReadingsUpdate; 66 bool logToMetricReportsCollection; 67 ReadingParametersPastVersion readingParametersPastVersion; 68 ReadingParameters readingParameters; 69 bool persistency = false; 70 uint64_t sensorCount; 71 uint64_t appendLimit; 72 ReportUpdates reportUpdates; 73 CircularVector<ReadingData> readingsBuffer; 74 Readings readings = {}; 75 std::shared_ptr<sdbusplus::asio::object_server> objServer; 76 std::unique_ptr<sdbusplus::asio::dbus_interface> reportIface; 77 std::unique_ptr<sdbusplus::asio::dbus_interface> deleteIface; 78 std::vector<std::shared_ptr<interfaces::Metric>> metrics; 79 boost::asio::steady_timer timer; 80 81 interfaces::JsonStorage::FilePath fileName; 82 interfaces::JsonStorage& reportStorage; 83 bool enabled; 84 85 public: 86 static constexpr const char* reportIfaceName = 87 "xyz.openbmc_project.Telemetry.Report"; 88 static constexpr const char* reportDir = 89 "/xyz/openbmc_project/Telemetry/Reports/"; 90 static constexpr const char* deleteIfaceName = 91 "xyz.openbmc_project.Object.Delete"; 92 static constexpr size_t reportVersion = 4; 93 }; 94