1cb88cfdfSWludzik, Jozef #pragma once 2cb88cfdfSWludzik, Jozef 3e2362796SWludzik, Jozef #include "interfaces/json_storage.hpp" 4c8e3a64aSKrzysztof Grobelny #include "interfaces/metric.hpp" 52f9f9b87SWludzik, Jozef #include "interfaces/report.hpp" 62f9f9b87SWludzik, Jozef #include "interfaces/report_manager.hpp" 72f9f9b87SWludzik, Jozef #include "interfaces/types.hpp" 82f9f9b87SWludzik, Jozef 9cb88cfdfSWludzik, Jozef #include <boost/asio/io_context.hpp> 10c8e3a64aSKrzysztof Grobelny #include <boost/asio/steady_timer.hpp> 11cb88cfdfSWludzik, Jozef #include <sdbusplus/asio/object_server.hpp> 12cb88cfdfSWludzik, Jozef 13cb88cfdfSWludzik, Jozef #include <chrono> 14cb88cfdfSWludzik, Jozef #include <memory> 15cb88cfdfSWludzik, Jozef 162f9f9b87SWludzik, Jozef class Report : public interfaces::Report 17cb88cfdfSWludzik, Jozef { 18cb88cfdfSWludzik, Jozef public: 19cb88cfdfSWludzik, Jozef Report(boost::asio::io_context& ioc, 20cb88cfdfSWludzik, Jozef const std::shared_ptr<sdbusplus::asio::object_server>& objServer, 212f9f9b87SWludzik, Jozef const std::string& reportName, const std::string& reportingType, 22cb88cfdfSWludzik, Jozef const bool emitsReadingsSignal, 23cb88cfdfSWludzik, Jozef const bool logToMetricReportsCollection, 24cb88cfdfSWludzik, Jozef const std::chrono::milliseconds period, 252f9f9b87SWludzik, Jozef const ReadingParameters& metricParams, 26c8e3a64aSKrzysztof Grobelny interfaces::ReportManager& reportManager, 27e2362796SWludzik, Jozef interfaces::JsonStorage& reportStorage, 28c8e3a64aSKrzysztof Grobelny std::vector<std::shared_ptr<interfaces::Metric>> metrics); 29cb88cfdfSWludzik, Jozef ~Report() = default; 30cb88cfdfSWludzik, Jozef 31c8e3a64aSKrzysztof Grobelny Report(const Report&) = delete; 32cb88cfdfSWludzik, Jozef Report(Report&&) = delete; 33c8e3a64aSKrzysztof Grobelny Report& operator=(const Report&) = delete; 34cb88cfdfSWludzik, Jozef Report& operator=(Report&&) = delete; 35cb88cfdfSWludzik, Jozef 362f9f9b87SWludzik, Jozef std::string getName() const override 372f9f9b87SWludzik, Jozef { 382f9f9b87SWludzik, Jozef return name; 392f9f9b87SWludzik, Jozef } 402f9f9b87SWludzik, Jozef 412f9f9b87SWludzik, Jozef std::string getPath() const override 422f9f9b87SWludzik, Jozef { 432f9f9b87SWludzik, Jozef return path; 442f9f9b87SWludzik, Jozef } 45cb88cfdfSWludzik, Jozef 46*d960e1f3SWludzik, Jozef void updateReadings() override; 47e2362796SWludzik, Jozef bool storeConfiguration() const; 48e2362796SWludzik, Jozef 49cb88cfdfSWludzik, Jozef private: 50c8e3a64aSKrzysztof Grobelny static void timerProc(boost::system::error_code, Report& self); 51c8e3a64aSKrzysztof Grobelny void scheduleTimer(std::chrono::milliseconds interval); 52c8e3a64aSKrzysztof Grobelny 532f9f9b87SWludzik, Jozef const std::string name; 542f9f9b87SWludzik, Jozef const std::string path; 55e2362796SWludzik, Jozef std::string reportingType; 56cb88cfdfSWludzik, Jozef std::chrono::milliseconds interval; 57e2362796SWludzik, Jozef bool emitsReadingsUpdate; 58e2362796SWludzik, Jozef bool logToMetricReportsCollection; 59e2362796SWludzik, Jozef ReadingParameters readingParameters; 60e2362796SWludzik, Jozef bool persistency; 61c8e3a64aSKrzysztof Grobelny Readings readings = {}; 62cb88cfdfSWludzik, Jozef std::shared_ptr<sdbusplus::asio::object_server> objServer; 63cb88cfdfSWludzik, Jozef std::unique_ptr<sdbusplus::asio::dbus_interface> reportIface; 64cb88cfdfSWludzik, Jozef std::unique_ptr<sdbusplus::asio::dbus_interface> deleteIface; 65c8e3a64aSKrzysztof Grobelny std::vector<std::shared_ptr<interfaces::Metric>> metrics; 66c8e3a64aSKrzysztof Grobelny boost::asio::steady_timer timer; 672f9f9b87SWludzik, Jozef 68e2362796SWludzik, Jozef interfaces::JsonStorage::FilePath fileName; 69e2362796SWludzik, Jozef interfaces::JsonStorage& reportStorage; 70e2362796SWludzik, Jozef 712f9f9b87SWludzik, Jozef public: 722f9f9b87SWludzik, Jozef static constexpr const char* reportIfaceName = 732f9f9b87SWludzik, Jozef "xyz.openbmc_project.Telemetry.Report"; 742f9f9b87SWludzik, Jozef static constexpr const char* reportDir = 752f9f9b87SWludzik, Jozef "/xyz/openbmc_project/Telemetry/Reports/"; 762f9f9b87SWludzik, Jozef static constexpr const char* deleteIfaceName = 772f9f9b87SWludzik, Jozef "xyz.openbmc_project.Object.Delete"; 78d2238194SKrzysztof Grobelny static constexpr size_t reportVersion = 2; 79cb88cfdfSWludzik, Jozef }; 80