xref: /openbmc/telemetry/src/report.hpp (revision 51497a0c878d939c9ed2a6ed30d12b465af4d51c)
1 #pragma once
2 
3 #include "interfaces/json_storage.hpp"
4 #include "interfaces/metric.hpp"
5 #include "interfaces/report.hpp"
6 #include "interfaces/report_manager.hpp"
7 #include "types/report_action.hpp"
8 #include "types/report_types.hpp"
9 #include "types/report_updates.hpp"
10 #include "types/reporting_type.hpp"
11 #include "utils/circular_vector.hpp"
12 
13 #include <boost/asio/io_context.hpp>
14 #include <boost/asio/steady_timer.hpp>
15 #include <sdbusplus/asio/object_server.hpp>
16 
17 #include <chrono>
18 #include <memory>
19 
20 class Report : public interfaces::Report
21 {
22   public:
23     Report(boost::asio::io_context& ioc,
24            const std::shared_ptr<sdbusplus::asio::object_server>& objServer,
25            const std::string& reportName, const ReportingType reportingType,
26            std::vector<ReportAction> reportActions, const Milliseconds period,
27            const uint64_t appendLimitIn, const ReportUpdates reportUpdatesIn,
28            interfaces::ReportManager& reportManager,
29            interfaces::JsonStorage& reportStorage,
30            std::vector<std::shared_ptr<interfaces::Metric>> metrics,
31            const bool enabled);
32     ~Report() = default;
33 
34     Report(const Report&) = delete;
35     Report(Report&&) = delete;
36     Report& operator=(const Report&) = delete;
37     Report& operator=(Report&&) = delete;
38 
39     std::string getName() const override
40     {
41         return name;
42     }
43 
44     std::string getPath() const override
45     {
46         return path;
47     }
48 
49     void updateReadings() override;
50     bool storeConfiguration() const;
51 
52   private:
53     std::unique_ptr<sdbusplus::asio::dbus_interface> makeReportInterface();
54     static void timerProc(boost::system::error_code, Report& self);
55     void scheduleTimer(Milliseconds interval);
56     uint64_t deduceAppendLimit(const uint64_t appendLimitIn) const;
57     uint64_t deduceBufferSize(const ReportUpdates reportUpdatesIn,
58                               const ReportingType reportingTypeIn) const;
59     void setReportUpdates(const ReportUpdates newReportUpdates);
60     static uint64_t getSensorCount(
61         std::vector<std::shared_ptr<interfaces::Metric>>& metrics);
62 
63     std::string name;
64     std::string path;
65     ReportingType reportingType;
66     Milliseconds interval;
67     std::vector<ReportAction> reportActions;
68     ReadingParametersPastVersion readingParametersPastVersion;
69     ReadingParameters readingParameters;
70     bool persistency = false;
71     uint64_t sensorCount;
72     uint64_t appendLimit;
73     ReportUpdates reportUpdates;
74     CircularVector<ReadingData> readingsBuffer;
75     Readings readings = {};
76     std::shared_ptr<sdbusplus::asio::object_server> objServer;
77     std::unique_ptr<sdbusplus::asio::dbus_interface> reportIface;
78     std::unique_ptr<sdbusplus::asio::dbus_interface> deleteIface;
79     std::vector<std::shared_ptr<interfaces::Metric>> metrics;
80     boost::asio::steady_timer timer;
81 
82     interfaces::JsonStorage::FilePath fileName;
83     interfaces::JsonStorage& reportStorage;
84     bool enabled;
85 
86   public:
87     static constexpr const char* reportIfaceName =
88         "xyz.openbmc_project.Telemetry.Report";
89     static constexpr const char* reportDir =
90         "/xyz/openbmc_project/Telemetry/Reports/";
91     static constexpr const char* deleteIfaceName =
92         "xyz.openbmc_project.Object.Delete";
93     static constexpr size_t reportVersion = 6;
94 };
95