report.hpp (e6c417cfe7f092352b4d6058cf852b2d72023e74) report.hpp (b4ef22e4d365bde35a7fce7950033c9271c68ce7)
1#pragma once
2
3#include "interfaces/clock.hpp"
4#include "interfaces/json_storage.hpp"
5#include "interfaces/metric.hpp"
6#include "interfaces/report.hpp"
7#include "interfaces/report_manager.hpp"
8#include "types/report_action.hpp"
9#include "types/report_types.hpp"
10#include "types/report_updates.hpp"
11#include "types/reporting_type.hpp"
12#include "utils/circular_vector.hpp"
13
14#include <boost/asio/io_context.hpp>
15#include <boost/asio/steady_timer.hpp>
16#include <sdbusplus/asio/object_server.hpp>
17
18#include <chrono>
19#include <memory>
1#pragma once
2
3#include "interfaces/clock.hpp"
4#include "interfaces/json_storage.hpp"
5#include "interfaces/metric.hpp"
6#include "interfaces/report.hpp"
7#include "interfaces/report_manager.hpp"
8#include "types/report_action.hpp"
9#include "types/report_types.hpp"
10#include "types/report_updates.hpp"
11#include "types/reporting_type.hpp"
12#include "utils/circular_vector.hpp"
13
14#include <boost/asio/io_context.hpp>
15#include <boost/asio/steady_timer.hpp>
16#include <sdbusplus/asio/object_server.hpp>
17
18#include <chrono>
19#include <memory>
20#include <unordered_set>
20
21class Report : public interfaces::Report
22{
23 public:
24 Report(boost::asio::io_context& ioc,
25 const std::shared_ptr<sdbusplus::asio::object_server>& objServer,
26 const std::string& reportId, const std::string& reportName,
27 const ReportingType reportingType,
28 std::vector<ReportAction> reportActions, const Milliseconds period,
29 const uint64_t appendLimitIn, const ReportUpdates reportUpdatesIn,
30 interfaces::ReportManager& reportManager,
31 interfaces::JsonStorage& reportStorage,
32 std::vector<std::shared_ptr<interfaces::Metric>> metrics,
21
22class Report : public interfaces::Report
23{
24 public:
25 Report(boost::asio::io_context& ioc,
26 const std::shared_ptr<sdbusplus::asio::object_server>& objServer,
27 const std::string& reportId, const std::string& reportName,
28 const ReportingType reportingType,
29 std::vector<ReportAction> reportActions, const Milliseconds period,
30 const uint64_t appendLimitIn, const ReportUpdates reportUpdatesIn,
31 interfaces::ReportManager& reportManager,
32 interfaces::JsonStorage& reportStorage,
33 std::vector<std::shared_ptr<interfaces::Metric>> metrics,
33 const bool enabled, std::unique_ptr<interfaces::Clock> clock);
34 const bool enabled, std::unique_ptr<interfaces::Clock> clock,
35 const std::vector<std::string>& triggerIds);
34
35 Report(const Report&) = delete;
36 Report(Report&&) = delete;
37 Report& operator=(const Report&) = delete;
38 Report& operator=(Report&&) = delete;
39
40 std::string getId() const override
41 {
42 return id;
43 }
44
45 std::string getPath() const override
46 {
47 return reportDir + id;
48 }
49
50 void updateReadings() override;
36
37 Report(const Report&) = delete;
38 Report(Report&&) = delete;
39 Report& operator=(const Report&) = delete;
40 Report& operator=(Report&&) = delete;
41
42 std::string getId() const override
43 {
44 return id;
45 }
46
47 std::string getPath() const override
48 {
49 return reportDir + id;
50 }
51
52 void updateReadings() override;
53 void updateTriggerIds(const std::string& triggerId,
54 TriggerIdUpdate updateType) override;
51 bool storeConfiguration() const;
52
53 private:
54 std::unique_ptr<sdbusplus::asio::dbus_interface> makeReportInterface();
55 static void timerProc(boost::system::error_code, Report& self);
56 void scheduleTimer(Milliseconds interval);
57 std::optional<uint64_t>
58 deduceAppendLimit(const uint64_t appendLimitIn) const;

--- 17 unchanged lines hidden (view full) ---

76 ReportUpdates reportUpdates;
77 CircularVector<ReadingData> readingsBuffer;
78 Readings readings = {};
79 std::shared_ptr<sdbusplus::asio::object_server> objServer;
80 std::unique_ptr<sdbusplus::asio::dbus_interface> reportIface;
81 std::unique_ptr<sdbusplus::asio::dbus_interface> deleteIface;
82 std::vector<std::shared_ptr<interfaces::Metric>> metrics;
83 boost::asio::steady_timer timer;
55 bool storeConfiguration() const;
56
57 private:
58 std::unique_ptr<sdbusplus::asio::dbus_interface> makeReportInterface();
59 static void timerProc(boost::system::error_code, Report& self);
60 void scheduleTimer(Milliseconds interval);
61 std::optional<uint64_t>
62 deduceAppendLimit(const uint64_t appendLimitIn) const;

--- 17 unchanged lines hidden (view full) ---

80 ReportUpdates reportUpdates;
81 CircularVector<ReadingData> readingsBuffer;
82 Readings readings = {};
83 std::shared_ptr<sdbusplus::asio::object_server> objServer;
84 std::unique_ptr<sdbusplus::asio::dbus_interface> reportIface;
85 std::unique_ptr<sdbusplus::asio::dbus_interface> deleteIface;
86 std::vector<std::shared_ptr<interfaces::Metric>> metrics;
87 boost::asio::steady_timer timer;
88 std::unordered_set<std::string> triggerIds;
84
85 interfaces::JsonStorage& reportStorage;
86 bool enabled;
87 std::unique_ptr<interfaces::Clock> clock;
88
89 public:
90 static constexpr const char* reportIfaceName =
91 "xyz.openbmc_project.Telemetry.Report";
92 static constexpr const char* reportDir =
93 "/xyz/openbmc_project/Telemetry/Reports/";
94 static constexpr const char* deleteIfaceName =
95 "xyz.openbmc_project.Object.Delete";
96 static constexpr size_t reportVersion = 6;
97};
89
90 interfaces::JsonStorage& reportStorage;
91 bool enabled;
92 std::unique_ptr<interfaces::Clock> clock;
93
94 public:
95 static constexpr const char* reportIfaceName =
96 "xyz.openbmc_project.Telemetry.Report";
97 static constexpr const char* reportDir =
98 "/xyz/openbmc_project/Telemetry/Reports/";
99 static constexpr const char* deleteIfaceName =
100 "xyz.openbmc_project.Object.Delete";
101 static constexpr size_t reportVersion = 6;
102};