xref: /openbmc/telemetry/src/trigger_manager.hpp (revision c1dbac16fe3c705b773155f607a4541cf2ad79fa)
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 #include "utils/dbus_path_utils.hpp"
8 
9 #include <sdbusplus/asio/object_server.hpp>
10 
11 #include <memory>
12 #include <vector>
13 
14 class TriggerManager : public interfaces::TriggerManager
15 {
16   public:
17     TriggerManager(
18         std::unique_ptr<interfaces::TriggerFactory> triggerFactory,
19         std::unique_ptr<interfaces::JsonStorage> triggerStorage,
20         const std::shared_ptr<sdbusplus::asio::object_server>& objServer);
21 
22     ~TriggerManager() = default;
23     TriggerManager(const TriggerManager&) = delete;
24     TriggerManager(TriggerManager&&) = delete;
25     TriggerManager& operator=(const TriggerManager&) = delete;
26     TriggerManager& operator=(TriggerManager&&) = delete;
27 
28     void removeTrigger(const interfaces::Trigger* trigger) override;
29 
30     static void verifyReportIds(const std::vector<std::string>& newReportIds);
31     static void verifyThresholdParams(
32         const LabeledTriggerThresholdParams& thresholdParams);
33 
34   private:
35     std::unique_ptr<interfaces::TriggerFactory> triggerFactory;
36     std::unique_ptr<interfaces::JsonStorage> triggerStorage;
37     std::unique_ptr<sdbusplus::asio::dbus_interface> managerIface;
38     std::vector<std::unique_ptr<interfaces::Trigger>> triggers;
39 
40     void verifyAddTrigger(
41         const std::vector<std::string>& reportIds,
42         const LabeledTriggerThresholdParams& thresholdParams) const;
43 
44     interfaces::Trigger& addTrigger(
45         const std::string& triggerId, const std::string& triggerName,
46         const std::vector<std::string>& triggerActions,
47         const std::vector<LabeledSensorInfo>& labeledSensors,
48         const std::vector<std::string>& reportIds,
49         const LabeledTriggerThresholdParams& labeledThresholdParams);
50     void loadFromPersistent();
51 
52   public:
53     static constexpr size_t maxTriggers{TELEMETRY_MAX_TRIGGERS};
54     static constexpr const char* triggerManagerIfaceName =
55         "xyz.openbmc_project.Telemetry.TriggerManager";
56     static constexpr const char* triggerManagerPath =
57         "/xyz/openbmc_project/Telemetry/Triggers";
58     static constexpr std::string_view triggerNameDefault = "Trigger";
59 
60     static_assert(!triggerNameDefault.empty(),
61                   "Default trigger name cannot be empty.");
62 };
63