blob: 483706231c92174f50cd2e86a48c0e28516c254b [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"
Wludzik, Jozef76833cb2020-12-21 14:42:41 +01007
8#include <sdbusplus/asio/object_server.hpp>
9
10#include <memory>
11#include <vector>
12
13class TriggerManager : public interfaces::TriggerManager
14{
15 public:
16 TriggerManager(
17 std::unique_ptr<interfaces::TriggerFactory> triggerFactory,
Cezary Zwolaka4e67612021-02-18 13:16:16 +010018 std::unique_ptr<interfaces::JsonStorage> triggerStorage,
Wludzik, Jozef76833cb2020-12-21 14:42:41 +010019 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;
Cezary Zwolaka4e67612021-02-18 13:16:16 +010030 std::unique_ptr<interfaces::JsonStorage> triggerStorage;
Wludzik, Jozef76833cb2020-12-21 14:42:41 +010031 std::unique_ptr<sdbusplus::asio::dbus_interface> managerIface;
32 std::vector<std::unique_ptr<interfaces::Trigger>> triggers;
33
Szymon Dompkee28aa532021-10-27 12:33:12 +020034 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);
Cezary Zwolak4416fce2021-03-17 03:21:06 +010040
41 interfaces::Trigger&
Szymon Dompkee28aa532021-10-27 12:33:12 +020042 addTrigger(const std::string& triggerId, const std::string& triggerName,
Szymon Dompke20013012021-07-23 09:54:20 +020043 const std::vector<std::string>& triggerActions,
Cezary Zwolak4416fce2021-03-17 03:21:06 +010044 const std::vector<LabeledSensorInfo>& labeledSensors,
45 const std::vector<std::string>& reportNames,
46 const LabeledTriggerThresholdParams& labeledThresholdParams);
47 void loadFromPersistent();
48
Wludzik, Jozef76833cb2020-12-21 14:42:41 +010049 public:
50 static constexpr size_t maxTriggers{TELEMETRY_MAX_TRIGGERS};
Szymon Dompkee28aa532021-10-27 12:33:12 +020051 static constexpr size_t maxTriggerIdLength{
52 TELEMETRY_MAX_DBUS_PATH_LENGTH -
53 std::string_view(Trigger::triggerDir).length()};
Wludzik, Jozef76833cb2020-12-21 14:42:41 +010054 static constexpr const char* triggerManagerIfaceName =
55 "xyz.openbmc_project.Telemetry.TriggerManager";
56 static constexpr const char* triggerManagerPath =
57 "/xyz/openbmc_project/Telemetry/Triggers";
Szymon Dompkee28aa532021-10-27 12:33:12 +020058
59 static constexpr std::string_view allowedCharactersInId =
60 "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_/";
61 static constexpr const char* triggerNameDefault = "Trigger";
Wludzik, Jozef76833cb2020-12-21 14:42:41 +010062};