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