xref: /openbmc/telemetry/src/trigger_manager.hpp (revision e28aa53dc1492f09a64dc9f1dbfd5b6dba06e31f)
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(TriggerManager&) = delete;
22     TriggerManager(TriggerManager&&) = delete;
23     TriggerManager& operator=(TriggerManager&) = delete;
24     TriggerManager& operator=(TriggerManager&&) = delete;
25 
26     void removeTrigger(const interfaces::Trigger* trigger) override;
27 
28   private:
29     std::unique_ptr<interfaces::TriggerFactory> triggerFactory;
30     std::unique_ptr<interfaces::JsonStorage> triggerStorage;
31     std::unique_ptr<sdbusplus::asio::dbus_interface> managerIface;
32     std::vector<std::unique_ptr<interfaces::Trigger>> triggers;
33 
34     void verifyAddTrigger(const std::string& triggerId,
35                           const std::string& triggerName) const;
36     std::string generateId(const std::string& prefix,
37                            const std::string& triggerName) const;
38     static void verifyTriggerIdLength(const std::string& triggerId);
39     static void verifyIdCharacters(const std::string& triggerId);
40 
41     interfaces::Trigger&
42         addTrigger(const std::string& triggerId, const std::string& triggerName,
43                    const std::vector<std::string>& triggerActions,
44                    const std::vector<LabeledSensorInfo>& labeledSensors,
45                    const std::vector<std::string>& reportNames,
46                    const LabeledTriggerThresholdParams& labeledThresholdParams);
47     void loadFromPersistent();
48 
49   public:
50     static constexpr size_t maxTriggers{TELEMETRY_MAX_TRIGGERS};
51     static constexpr size_t maxTriggerIdLength{
52         TELEMETRY_MAX_DBUS_PATH_LENGTH -
53         std::string_view(Trigger::triggerDir).length()};
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 
59     static constexpr std::string_view allowedCharactersInId =
60         "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_/";
61     static constexpr const char* triggerNameDefault = "Trigger";
62 };
63