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" 7dcc4e193SKrzysztof Grobelny #include "types/report_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, 23dcc4e193SKrzysztof Grobelny const bool logToMetricReportsCollection, const Milliseconds period, 24c8e3a64aSKrzysztof Grobelny interfaces::ReportManager& reportManager, 25e2362796SWludzik, Jozef interfaces::JsonStorage& reportStorage, 26*7e098e93SLukasz Kazmierczak std::vector<std::shared_ptr<interfaces::Metric>> metrics, 27*7e098e93SLukasz Kazmierczak const bool enabled); 28cb88cfdfSWludzik, Jozef ~Report() = default; 29cb88cfdfSWludzik, Jozef 30c8e3a64aSKrzysztof Grobelny Report(const Report&) = delete; 31cb88cfdfSWludzik, Jozef Report(Report&&) = delete; 32c8e3a64aSKrzysztof Grobelny Report& operator=(const Report&) = delete; 33cb88cfdfSWludzik, Jozef Report& operator=(Report&&) = delete; 34cb88cfdfSWludzik, Jozef 352f9f9b87SWludzik, Jozef std::string getName() const override 362f9f9b87SWludzik, Jozef { 372f9f9b87SWludzik, Jozef return name; 382f9f9b87SWludzik, Jozef } 392f9f9b87SWludzik, Jozef 402f9f9b87SWludzik, Jozef std::string getPath() const override 412f9f9b87SWludzik, Jozef { 422f9f9b87SWludzik, Jozef return path; 432f9f9b87SWludzik, Jozef } 44cb88cfdfSWludzik, Jozef 45d960e1f3SWludzik, Jozef void updateReadings() override; 46e2362796SWludzik, Jozef bool storeConfiguration() const; 47e2362796SWludzik, Jozef 48cb88cfdfSWludzik, Jozef private: 4985db8bdfSKrzysztof Grobelny std::unique_ptr<sdbusplus::asio::dbus_interface> makeReportInterface(); 50c8e3a64aSKrzysztof Grobelny static void timerProc(boost::system::error_code, Report& self); 51dcc4e193SKrzysztof Grobelny void scheduleTimer(Milliseconds interval); 52c8e3a64aSKrzysztof Grobelny 532f9f9b87SWludzik, Jozef const std::string name; 542f9f9b87SWludzik, Jozef const std::string path; 55e2362796SWludzik, Jozef std::string reportingType; 56dcc4e193SKrzysztof Grobelny Milliseconds interval; 57e2362796SWludzik, Jozef bool emitsReadingsUpdate; 58e2362796SWludzik, Jozef bool logToMetricReportsCollection; 59dcc4e193SKrzysztof Grobelny ReadingParametersPastVersion readingParametersPastVersion; 60e2362796SWludzik, Jozef ReadingParameters readingParameters; 6185db8bdfSKrzysztof Grobelny bool persistency = false; 62dcc4e193SKrzysztof Grobelny Readings cachedReadings = {}; 63c8e3a64aSKrzysztof Grobelny Readings readings = {}; 64cb88cfdfSWludzik, Jozef std::shared_ptr<sdbusplus::asio::object_server> objServer; 65cb88cfdfSWludzik, Jozef std::unique_ptr<sdbusplus::asio::dbus_interface> reportIface; 66cb88cfdfSWludzik, Jozef std::unique_ptr<sdbusplus::asio::dbus_interface> deleteIface; 67c8e3a64aSKrzysztof Grobelny std::vector<std::shared_ptr<interfaces::Metric>> metrics; 68c8e3a64aSKrzysztof Grobelny boost::asio::steady_timer timer; 692f9f9b87SWludzik, Jozef 70e2362796SWludzik, Jozef interfaces::JsonStorage::FilePath fileName; 71e2362796SWludzik, Jozef interfaces::JsonStorage& reportStorage; 72*7e098e93SLukasz Kazmierczak bool enabled; 73e2362796SWludzik, Jozef 742f9f9b87SWludzik, Jozef public: 752f9f9b87SWludzik, Jozef static constexpr const char* reportIfaceName = 762f9f9b87SWludzik, Jozef "xyz.openbmc_project.Telemetry.Report"; 772f9f9b87SWludzik, Jozef static constexpr const char* reportDir = 782f9f9b87SWludzik, Jozef "/xyz/openbmc_project/Telemetry/Reports/"; 792f9f9b87SWludzik, Jozef static constexpr const char* deleteIfaceName = 802f9f9b87SWludzik, Jozef "xyz.openbmc_project.Object.Delete"; 81dcc4e193SKrzysztof Grobelny static constexpr size_t reportVersion = 4; 82cb88cfdfSWludzik, Jozef }; 83