xref: /openbmc/telemetry/src/report.hpp (revision c8e3a64a1d01cfafa589477ac65952df353e141d)
1 #pragma once
2 
3 #include "interfaces/metric.hpp"
4 #include "interfaces/report.hpp"
5 #include "interfaces/report_manager.hpp"
6 #include "interfaces/types.hpp"
7 
8 #include <boost/asio/io_context.hpp>
9 #include <boost/asio/steady_timer.hpp>
10 #include <sdbusplus/asio/object_server.hpp>
11 
12 #include <chrono>
13 #include <memory>
14 
15 class Report : public interfaces::Report
16 {
17   public:
18     Report(boost::asio::io_context& ioc,
19            const std::shared_ptr<sdbusplus::asio::object_server>& objServer,
20            const std::string& reportName, const std::string& reportingType,
21            const bool emitsReadingsSignal,
22            const bool logToMetricReportsCollection,
23            const std::chrono::milliseconds period,
24            const ReadingParameters& metricParams,
25            interfaces::ReportManager& reportManager,
26            std::vector<std::shared_ptr<interfaces::Metric>> metrics);
27     ~Report() = default;
28 
29     Report(const Report&) = delete;
30     Report(Report&&) = delete;
31     Report& operator=(const Report&) = delete;
32     Report& operator=(Report&&) = delete;
33 
34     std::string getName() const override
35     {
36         return name;
37     }
38 
39     std::string getPath() const override
40     {
41         return path;
42     }
43 
44   private:
45     static void timerProc(boost::system::error_code, Report& self);
46     void scheduleTimer(std::chrono::milliseconds interval);
47     void updateReadings();
48 
49     const std::string name;
50     const std::string path;
51     std::chrono::milliseconds interval;
52     Readings readings = {};
53     std::tuple_element_t<1, Readings> readingsCache = {};
54     std::shared_ptr<sdbusplus::asio::object_server> objServer;
55     std::unique_ptr<sdbusplus::asio::dbus_interface> reportIface;
56     std::unique_ptr<sdbusplus::asio::dbus_interface> deleteIface;
57     std::vector<std::shared_ptr<interfaces::Metric>> metrics;
58     boost::asio::steady_timer timer;
59 
60   public:
61     static constexpr const char* reportIfaceName =
62         "xyz.openbmc_project.Telemetry.Report";
63     static constexpr const char* reportDir =
64         "/xyz/openbmc_project/Telemetry/Reports/";
65     static constexpr const char* deleteIfaceName =
66         "xyz.openbmc_project.Object.Delete";
67 };
68