xref: /openbmc/telemetry/src/trigger.hpp (revision b4ef22e4d365bde35a7fce7950033c9271c68ce7)
1 #pragma once
2 
3 #include "interfaces/json_storage.hpp"
4 #include "interfaces/report_manager.hpp"
5 #include "interfaces/threshold.hpp"
6 #include "interfaces/trigger.hpp"
7 #include "interfaces/trigger_factory.hpp"
8 #include "interfaces/trigger_manager.hpp"
9 #include "types/trigger_types.hpp"
10 
11 #include <boost/asio/io_context.hpp>
12 #include <sdbusplus/asio/object_server.hpp>
13 
14 #include <memory>
15 
16 class Trigger : public interfaces::Trigger
17 {
18   public:
19     Trigger(boost::asio::io_context& ioc,
20             const std::shared_ptr<sdbusplus::asio::object_server>& objServer,
21             const std::string& id, const std::string& name,
22             const std::vector<TriggerAction>& triggerActions,
23             const std::shared_ptr<std::vector<std::string>> reportIds,
24             std::vector<std::shared_ptr<interfaces::Threshold>>&& thresholds,
25             interfaces::TriggerManager& triggerManager,
26             interfaces::JsonStorage& triggerStorage,
27             const interfaces::TriggerFactory& triggerFactory, Sensors sensorsIn,
28             interfaces::ReportManager& reportManager);
29 
30     Trigger(const Trigger&) = delete;
31     Trigger(Trigger&&) = delete;
32     Trigger& operator=(const Trigger&) = delete;
33     Trigger& operator=(Trigger&&) = delete;
34 
35     std::string getId() const override
36     {
37         return id;
38     }
39 
40     std::string getPath() const override
41     {
42         return path;
43     }
44 
45     bool storeConfiguration() const;
46 
47     const std::vector<std::string>& getReportIds() const override
48     {
49         return *reportIds;
50     }
51 
52   private:
53     std::string id;
54     std::string name;
55     std::vector<TriggerAction> triggerActions;
56     std::string path;
57     bool persistent = false;
58     std::shared_ptr<std::vector<std::string>> reportIds;
59     std::unique_ptr<sdbusplus::asio::dbus_interface> deleteIface;
60     std::unique_ptr<sdbusplus::asio::dbus_interface> triggerIface;
61     std::vector<std::shared_ptr<interfaces::Threshold>> thresholds;
62 
63     interfaces::JsonStorage::FilePath fileName;
64     interfaces::JsonStorage& triggerStorage;
65     Sensors sensors;
66     interfaces::ReportManager& reportManager;
67 
68     void
69         updateTriggerIdsInReports(const std::vector<std::string>& newReportIds);
70 
71   public:
72     static constexpr const char* triggerIfaceName =
73         "xyz.openbmc_project.Telemetry.Trigger";
74     static constexpr const char* triggerDir =
75         "/xyz/openbmc_project/Telemetry/Triggers/";
76     static constexpr const char* deleteIfaceName =
77         "xyz.openbmc_project.Object.Delete";
78     static constexpr size_t triggerVersion = 1;
79 };
80