xref: /openbmc/telemetry/src/trigger_manager.hpp (revision 4416fce6fb6539b4e2a6a94a8248934c2eb29820)
1 #pragma once
2 
3 #include "interfaces/report_manager.hpp"
4 #include "interfaces/trigger_factory.hpp"
5 #include "interfaces/trigger_manager.hpp"
6 
7 #include <sdbusplus/asio/object_server.hpp>
8 
9 #include <memory>
10 #include <vector>
11 
12 class TriggerManager : public interfaces::TriggerManager
13 {
14   public:
15     TriggerManager(
16         std::unique_ptr<interfaces::TriggerFactory> triggerFactory,
17         std::unique_ptr<interfaces::JsonStorage> triggerStorage,
18         const std::shared_ptr<sdbusplus::asio::object_server>& objServer);
19 
20     TriggerManager(TriggerManager&) = delete;
21     TriggerManager(TriggerManager&&) = delete;
22     TriggerManager& operator=(TriggerManager&) = delete;
23     TriggerManager& operator=(TriggerManager&&) = delete;
24 
25     void removeTrigger(const interfaces::Trigger* trigger) override;
26 
27   private:
28     std::unique_ptr<interfaces::TriggerFactory> triggerFactory;
29     std::unique_ptr<interfaces::JsonStorage> triggerStorage;
30     std::unique_ptr<sdbusplus::asio::dbus_interface> managerIface;
31     std::vector<std::unique_ptr<interfaces::Trigger>> triggers;
32 
33     void verifyAddTrigger(const std::string& triggerName, bool isDiscrete,
34                           const LabeledTriggerThresholdParams& thresholdParams);
35 
36     interfaces::Trigger&
37         addTrigger(const std::string& triggerName, bool isDiscrete,
38                    bool logToJournal, bool logToRedfish, bool updateReport,
39                    const std::vector<LabeledSensorInfo>& labeledSensors,
40                    const std::vector<std::string>& reportNames,
41                    const LabeledTriggerThresholdParams& labeledThresholdParams);
42     void loadFromPersistent();
43 
44   public:
45     static constexpr size_t maxTriggers{TELEMETRY_MAX_TRIGGERS};
46     static constexpr const char* triggerManagerIfaceName =
47         "xyz.openbmc_project.Telemetry.TriggerManager";
48     static constexpr const char* triggerManagerPath =
49         "/xyz/openbmc_project/Telemetry/Triggers";
50 };
51