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