xref: /openbmc/telemetry/src/trigger_manager.hpp (revision 583ba441654657bb4ba9d051b747144a7258c159)
176833cb5SWludzik, Jozef #pragma once
276833cb5SWludzik, Jozef 
3d960e1f3SWludzik, Jozef #include "interfaces/report_manager.hpp"
476833cb5SWludzik, Jozef #include "interfaces/trigger_factory.hpp"
576833cb5SWludzik, Jozef #include "interfaces/trigger_manager.hpp"
6e28aa53dSSzymon Dompke #include "trigger.hpp"
71cdd7e4fSSzymon Dompke #include "utils/dbus_path_utils.hpp"
876833cb5SWludzik, Jozef 
976833cb5SWludzik, Jozef #include <sdbusplus/asio/object_server.hpp>
1076833cb5SWludzik, Jozef 
1176833cb5SWludzik, Jozef #include <memory>
1276833cb5SWludzik, Jozef #include <vector>
1376833cb5SWludzik, Jozef 
1476833cb5SWludzik, Jozef class TriggerManager : public interfaces::TriggerManager
1576833cb5SWludzik, Jozef {
1676833cb5SWludzik, Jozef   public:
1776833cb5SWludzik, Jozef     TriggerManager(
1876833cb5SWludzik, Jozef         std::unique_ptr<interfaces::TriggerFactory> triggerFactory,
19a4e67616SCezary Zwolak         std::unique_ptr<interfaces::JsonStorage> triggerStorage,
2076833cb5SWludzik, Jozef         const std::shared_ptr<sdbusplus::asio::object_server>& objServer);
2176833cb5SWludzik, Jozef 
2231db7f71SKrzysztof Grobelny     TriggerManager(const TriggerManager&) = delete;
2376833cb5SWludzik, Jozef     TriggerManager(TriggerManager&&) = delete;
2431db7f71SKrzysztof Grobelny     TriggerManager& operator=(const TriggerManager&) = delete;
2576833cb5SWludzik, Jozef     TriggerManager& operator=(TriggerManager&&) = delete;
2676833cb5SWludzik, Jozef 
2776833cb5SWludzik, Jozef     void removeTrigger(const interfaces::Trigger* trigger) override;
2876833cb5SWludzik, Jozef 
29b4ef22e4SSzymon Dompke     static void verifyReportIds(const std::vector<std::string>& newReportIds);
3032305f14SSzymon Dompke     static void verifyThresholdParams(
3132305f14SSzymon Dompke         const LabeledTriggerThresholdParams& thresholdParams);
32b4ef22e4SSzymon Dompke 
3376833cb5SWludzik, Jozef   private:
3476833cb5SWludzik, Jozef     std::unique_ptr<interfaces::TriggerFactory> triggerFactory;
35a4e67616SCezary Zwolak     std::unique_ptr<interfaces::JsonStorage> triggerStorage;
3676833cb5SWludzik, Jozef     std::unique_ptr<sdbusplus::asio::dbus_interface> managerIface;
3776833cb5SWludzik, Jozef     std::vector<std::unique_ptr<interfaces::Trigger>> triggers;
3876833cb5SWludzik, Jozef 
3932305f14SSzymon Dompke     void verifyAddTrigger(
4032305f14SSzymon Dompke         const std::vector<std::string>& reportIds,
4132305f14SSzymon Dompke         const LabeledTriggerThresholdParams& thresholdParams) const;
424416fce6SCezary Zwolak 
43*583ba441SPatrick Williams     interfaces::Trigger& addTrigger(
44*583ba441SPatrick Williams         const std::string& triggerId, const std::string& triggerName,
452001301aSSzymon Dompke         const std::vector<std::string>& triggerActions,
464416fce6SCezary Zwolak         const std::vector<LabeledSensorInfo>& labeledSensors,
47b8cc78ddSKrzysztof Grobelny         const std::vector<std::string>& reportIds,
484416fce6SCezary Zwolak         const LabeledTriggerThresholdParams& labeledThresholdParams);
494416fce6SCezary Zwolak     void loadFromPersistent();
504416fce6SCezary Zwolak 
5176833cb5SWludzik, Jozef   public:
5276833cb5SWludzik, Jozef     static constexpr size_t maxTriggers{TELEMETRY_MAX_TRIGGERS};
5376833cb5SWludzik, Jozef     static constexpr const char* triggerManagerIfaceName =
5476833cb5SWludzik, Jozef         "xyz.openbmc_project.Telemetry.TriggerManager";
5576833cb5SWludzik, Jozef     static constexpr const char* triggerManagerPath =
5676833cb5SWludzik, Jozef         "/xyz/openbmc_project/Telemetry/Triggers";
5732305f14SSzymon Dompke     static constexpr std::string_view triggerNameDefault = "Trigger";
5832305f14SSzymon Dompke 
5932305f14SSzymon Dompke     static_assert(!triggerNameDefault.empty(),
6032305f14SSzymon Dompke                   "Default trigger name cannot be empty.");
6176833cb5SWludzik, Jozef };
62