xref: /openbmc/telemetry/src/report.hpp (revision d960e1f3)
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