xref: /openbmc/telemetry/src/trigger_manager.hpp (revision b4ef22e4d365bde35a7fce7950033c9271c68ce7)
1 #pragma once
2 
3 #include "interfaces/report_manager.hpp"
4 #include "interfaces/trigger_factory.hpp"
5 #include "interfaces/trigger_manager.hpp"
6 #include "trigger.hpp"
7 
8 #include <sdbusplus/asio/object_server.hpp>
9 
10 #include <memory>
11 #include <vector>
12 
13 class TriggerManager : public interfaces::TriggerManager
14 {
15   public:
16     TriggerManager(
17         std::unique_ptr<interfaces::TriggerFactory> triggerFactory,
18         std::unique_ptr<interfaces::JsonStorage> triggerStorage,
19         const std::shared_ptr<sdbusplus::asio::object_server>& objServer);
20 
21     TriggerManager(const TriggerManager&) = delete;
22     TriggerManager(TriggerManager&&) = delete;
23     TriggerManager& operator=(const TriggerManager&) = delete;
24     TriggerManager& operator=(TriggerManager&&) = delete;
25 
26     void removeTrigger(const interfaces::Trigger* trigger) override;
27 
28     static void verifyReportIds(const std::vector<std::string>& newReportIds);
29 
30     std::vector<std::string>
31         getTriggerIdsForReport(const std::string& reportId) const override;
32 
33   private:
34     std::unique_ptr<interfaces::TriggerFactory> triggerFactory;
35     std::unique_ptr<interfaces::JsonStorage> triggerStorage;
36     std::unique_ptr<sdbusplus::asio::dbus_interface> managerIface;
37     std::vector<std::unique_ptr<interfaces::Trigger>> triggers;
38 
39     void verifyAddTrigger(const std::string& triggerId,
40                           const std::string& triggerName,
41                           const std::vector<std::string>& newReportIds) const;
42 
43     interfaces::Trigger&
44         addTrigger(const std::string& triggerId, const std::string& triggerName,
45                    const std::vector<std::string>& triggerActions,
46                    const std::vector<LabeledSensorInfo>& labeledSensors,
47                    const std::vector<std::string>& reportIds,
48                    const LabeledTriggerThresholdParams& labeledThresholdParams);
49     void loadFromPersistent();
50 
51   public:
52     static constexpr size_t maxTriggers{TELEMETRY_MAX_TRIGGERS};
53     static constexpr size_t maxTriggerIdLength{
54         TELEMETRY_MAX_DBUS_PATH_LENGTH -
55         std::string_view(Trigger::triggerDir).length()};
56     static constexpr const char* triggerManagerIfaceName =
57         "xyz.openbmc_project.Telemetry.TriggerManager";
58     static constexpr const char* triggerManagerPath =
59         "/xyz/openbmc_project/Telemetry/Triggers";
60     static constexpr const char* triggerNameDefault = "Trigger";
61 };
62