blob: a18a72a9824e0a366ab6afc7bc43d1604fa86e66 [file] [log] [blame]
Wludzik, Jozef76833cb2020-12-21 14:42:41 +01001#pragma once
2
Wludzik, Jozefd960e1f2021-01-08 09:25:59 +01003#include "interfaces/report_manager.hpp"
Wludzik, Jozef76833cb2020-12-21 14:42:41 +01004#include "interfaces/trigger_factory.hpp"
5#include "interfaces/trigger_manager.hpp"
Szymon Dompkee28aa532021-10-27 12:33:12 +02006#include "trigger.hpp"
Szymon Dompke1cdd7e42022-06-08 14:43:13 +02007#include "utils/dbus_path_utils.hpp"
Wludzik, Jozef76833cb2020-12-21 14:42:41 +01008
9#include <sdbusplus/asio/object_server.hpp>
10
11#include <memory>
12#include <vector>
13
14class TriggerManager : public interfaces::TriggerManager
15{
16 public:
17 TriggerManager(
18 std::unique_ptr<interfaces::TriggerFactory> triggerFactory,
Cezary Zwolaka4e67612021-02-18 13:16:16 +010019 std::unique_ptr<interfaces::JsonStorage> triggerStorage,
Wludzik, Jozef76833cb2020-12-21 14:42:41 +010020 const std::shared_ptr<sdbusplus::asio::object_server>& objServer);
21
Piotr Sulewskic1dbac12025-11-12 14:14:09 +010022 ~TriggerManager() = default;
Krzysztof Grobelny31db7f72021-12-21 12:26:22 +010023 TriggerManager(const TriggerManager&) = delete;
Wludzik, Jozef76833cb2020-12-21 14:42:41 +010024 TriggerManager(TriggerManager&&) = delete;
Krzysztof Grobelny31db7f72021-12-21 12:26:22 +010025 TriggerManager& operator=(const TriggerManager&) = delete;
Wludzik, Jozef76833cb2020-12-21 14:42:41 +010026 TriggerManager& operator=(TriggerManager&&) = delete;
27
28 void removeTrigger(const interfaces::Trigger* trigger) override;
29
Szymon Dompkeb4ef22e2022-02-07 15:15:12 +010030 static void verifyReportIds(const std::vector<std::string>& newReportIds);
Szymon Dompke32305f12022-07-05 15:37:21 +020031 static void verifyThresholdParams(
32 const LabeledTriggerThresholdParams& thresholdParams);
Szymon Dompkeb4ef22e2022-02-07 15:15:12 +010033
Wludzik, Jozef76833cb2020-12-21 14:42:41 +010034 private:
35 std::unique_ptr<interfaces::TriggerFactory> triggerFactory;
Cezary Zwolaka4e67612021-02-18 13:16:16 +010036 std::unique_ptr<interfaces::JsonStorage> triggerStorage;
Wludzik, Jozef76833cb2020-12-21 14:42:41 +010037 std::unique_ptr<sdbusplus::asio::dbus_interface> managerIface;
38 std::vector<std::unique_ptr<interfaces::Trigger>> triggers;
39
Szymon Dompke32305f12022-07-05 15:37:21 +020040 void verifyAddTrigger(
41 const std::vector<std::string>& reportIds,
42 const LabeledTriggerThresholdParams& thresholdParams) const;
Cezary Zwolak4416fce2021-03-17 03:21:06 +010043
Patrick Williams583ba442025-02-03 14:28:19 -050044 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);
Cezary Zwolak4416fce2021-03-17 03:21:06 +010050 void loadFromPersistent();
51
Wludzik, Jozef76833cb2020-12-21 14:42:41 +010052 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";
Szymon Dompke32305f12022-07-05 15:37:21 +020058 static constexpr std::string_view triggerNameDefault = "Trigger";
59
60 static_assert(!triggerNameDefault.empty(),
61 "Default trigger name cannot be empty.");
Wludzik, Jozef76833cb2020-12-21 14:42:41 +010062};