blob: a74cc7a149b65e6e06a46a973cf5645b561bcad2 [file] [log] [blame]
Wludzik, Jozefd960e1f2021-01-08 09:25:59 +01001#pragma once
2
Wludzik, Jozefd960e1f2021-01-08 09:25:59 +01003#include "interfaces/trigger_action.hpp"
Krzysztof Grobelnydcc4e192021-03-08 09:09:34 +00004#include "types/trigger_types.hpp"
Wludzik, Jozefd960e1f2021-01-08 09:25:59 +01005
Krzysztof Grobelnye6d48872022-02-08 13:41:30 +01006#include <boost/asio/io_context.hpp>
7
Wludzik, Jozefd960e1f2021-01-08 09:25:59 +01008namespace action
9{
10
Szymon Dompkeb7b7e1b2022-05-19 10:15:48 +020011namespace redfish_message_ids
12{
13constexpr const char* TriggerNumericWarning =
14 "OpenBMC.0.1.TriggerNumericWarning";
15constexpr const char* TriggerNumericCritical =
16 "OpenBMC.0.1.TriggerNumericCritical";
17constexpr const char* TriggerDiscreteOK = "OpenBMC.0.1.TriggerDiscreteOK";
18constexpr const char* TriggerDiscreteWarning =
19 "OpenBMC.0.1.TriggerDiscreteWarning";
20constexpr const char* TriggerDiscreteCritical =
21 "OpenBMC.0.1.TriggerDiscreteCritical";
22} // namespace redfish_message_ids
23
Szymon Dompkef763c9e2021-03-12 09:19:22 +010024namespace numeric
25{
Wludzik, Jozefd960e1f2021-01-08 09:25:59 +010026class LogToJournal : public interfaces::TriggerAction
27{
28 public:
Szymon Dompkef763c9e2021-03-12 09:19:22 +010029 LogToJournal(::numeric::Type type, double val) : type(type), threshold(val)
Wludzik, Jozefd960e1f2021-01-08 09:25:59 +010030 {}
31
Szymon Dompkeb7b7e1b2022-05-19 10:15:48 +020032 void commit(const std::string& triggerId, const ThresholdName thresholdName,
33 const std::string& sensorName, const Milliseconds timestamp,
34 const TriggerValue value) override;
Wludzik, Jozefd960e1f2021-01-08 09:25:59 +010035
36 private:
Szymon Dompkeb7b7e1b2022-05-19 10:15:48 +020037 const ::numeric::Type type;
38 const double threshold;
Wludzik, Jozefd960e1f2021-01-08 09:25:59 +010039};
40
Szymon Dompkeb7b7e1b2022-05-19 10:15:48 +020041class LogToRedfishEventLog : public interfaces::TriggerAction
Wludzik, Jozefd960e1f2021-01-08 09:25:59 +010042{
43 public:
Szymon Dompkeb7b7e1b2022-05-19 10:15:48 +020044 LogToRedfishEventLog(::numeric::Type type, double val) :
45 type(type), threshold(val)
Wludzik, Jozefd960e1f2021-01-08 09:25:59 +010046 {}
47
Szymon Dompkeb7b7e1b2022-05-19 10:15:48 +020048 void commit(const std::string& triggerId, const ThresholdName thresholdName,
49 const std::string& sensorName, const Milliseconds timestamp,
50 const TriggerValue value) override;
Wludzik, Jozefd960e1f2021-01-08 09:25:59 +010051
52 private:
Szymon Dompkeb7b7e1b2022-05-19 10:15:48 +020053 const ::numeric::Type type;
54 const double threshold;
Wludzik, Jozefd960e1f2021-01-08 09:25:59 +010055
Szymon Dompkeb7b7e1b2022-05-19 10:15:48 +020056 const char* getRedfishMessageId() const;
Wludzik, Jozefd960e1f2021-01-08 09:25:59 +010057};
Szymon Dompke20013012021-07-23 09:54:20 +020058
59void fillActions(
60 std::vector<std::unique_ptr<interfaces::TriggerAction>>& actionsIf,
61 const std::vector<TriggerAction>& ActionsEnum, ::numeric::Type type,
Krzysztof Grobelnye6d48872022-02-08 13:41:30 +010062 double thresholdValue, boost::asio::io_context& ioc,
Szymon Dompke94f71c52021-12-10 07:16:33 +010063 const std::shared_ptr<std::vector<std::string>>& reportIds);
Szymon Dompkef763c9e2021-03-12 09:19:22 +010064} // namespace numeric
65
66namespace discrete
67{
68class LogToJournal : public interfaces::TriggerAction
69{
70 public:
Krzysztof Grobelnyfbeb5bf2022-01-03 09:41:29 +010071 explicit LogToJournal(::discrete::Severity severity) : severity(severity)
Szymon Dompkef763c9e2021-03-12 09:19:22 +010072 {}
73
Szymon Dompkeb7b7e1b2022-05-19 10:15:48 +020074 void commit(const std::string& triggerId, const ThresholdName thresholdName,
75 const std::string& sensorName, const Milliseconds timestamp,
76 const TriggerValue value) override;
Szymon Dompkef763c9e2021-03-12 09:19:22 +010077
78 private:
Szymon Dompkeb7b7e1b2022-05-19 10:15:48 +020079 const ::discrete::Severity severity;
Szymon Dompkef763c9e2021-03-12 09:19:22 +010080};
81
Szymon Dompkeb7b7e1b2022-05-19 10:15:48 +020082class LogToRedfishEventLog : public interfaces::TriggerAction
Szymon Dompkef763c9e2021-03-12 09:19:22 +010083{
84 public:
Szymon Dompkeb7b7e1b2022-05-19 10:15:48 +020085 explicit LogToRedfishEventLog(::discrete::Severity severity) :
86 severity(severity)
Szymon Dompkef763c9e2021-03-12 09:19:22 +010087 {}
88
Szymon Dompkeb7b7e1b2022-05-19 10:15:48 +020089 void commit(const std::string& triggerId, const ThresholdName thresholdName,
90 const std::string& sensorName, const Milliseconds timestamp,
91 const TriggerValue value) override;
Szymon Dompkef763c9e2021-03-12 09:19:22 +010092
93 private:
Szymon Dompkeb7b7e1b2022-05-19 10:15:48 +020094 const ::discrete::Severity severity;
Szymon Dompkef763c9e2021-03-12 09:19:22 +010095
Szymon Dompkeb7b7e1b2022-05-19 10:15:48 +020096 const char* getRedfishMessageId() const;
Szymon Dompkef763c9e2021-03-12 09:19:22 +010097};
98
Szymon Dompke20013012021-07-23 09:54:20 +020099void fillActions(
100 std::vector<std::unique_ptr<interfaces::TriggerAction>>& actionsIf,
101 const std::vector<TriggerAction>& ActionsEnum,
Krzysztof Grobelnye6d48872022-02-08 13:41:30 +0100102 ::discrete::Severity severity, boost::asio::io_context& ioc,
Szymon Dompke94f71c52021-12-10 07:16:33 +0100103 const std::shared_ptr<std::vector<std::string>>& reportIds);
Szymon Dompke20013012021-07-23 09:54:20 +0200104
Szymon Dompkef763c9e2021-03-12 09:19:22 +0100105namespace onChange
106{
107class LogToJournal : public interfaces::TriggerAction
108{
109 public:
110 LogToJournal()
111 {}
112
Szymon Dompkeb7b7e1b2022-05-19 10:15:48 +0200113 void commit(const std::string& triggerId, const ThresholdName thresholdName,
114 const std::string& sensorName, const Milliseconds timestamp,
115 const TriggerValue value) override;
Szymon Dompkef763c9e2021-03-12 09:19:22 +0100116};
117
Szymon Dompkeb7b7e1b2022-05-19 10:15:48 +0200118class LogToRedfishEventLog : public interfaces::TriggerAction
Szymon Dompkef763c9e2021-03-12 09:19:22 +0100119{
120 public:
Szymon Dompkeb7b7e1b2022-05-19 10:15:48 +0200121 LogToRedfishEventLog()
Szymon Dompkef763c9e2021-03-12 09:19:22 +0100122 {}
123
Szymon Dompkeb7b7e1b2022-05-19 10:15:48 +0200124 void commit(const std::string& triggerId, const ThresholdName thresholdName,
125 const std::string& sensorName, const Milliseconds timestamp,
126 const TriggerValue value) override;
Szymon Dompkef763c9e2021-03-12 09:19:22 +0100127};
Szymon Dompke20013012021-07-23 09:54:20 +0200128
129void fillActions(
130 std::vector<std::unique_ptr<interfaces::TriggerAction>>& actionsIf,
Krzysztof Grobelnye6d48872022-02-08 13:41:30 +0100131 const std::vector<TriggerAction>& ActionsEnum, boost::asio::io_context& ioc,
Szymon Dompke94f71c52021-12-10 07:16:33 +0100132 const std::shared_ptr<std::vector<std::string>>& reportIds);
Szymon Dompkef763c9e2021-03-12 09:19:22 +0100133} // namespace onChange
134
135} // namespace discrete
Wludzik, Jozefd960e1f2021-01-08 09:25:59 +0100136
137class UpdateReport : public interfaces::TriggerAction
138{
139 public:
Krzysztof Grobelnye6d48872022-02-08 13:41:30 +0100140 UpdateReport(boost::asio::io_context& ioc,
Szymon Dompke94f71c52021-12-10 07:16:33 +0100141 std::shared_ptr<std::vector<std::string>> ids) :
Krzysztof Grobelnye6d48872022-02-08 13:41:30 +0100142 ioc(ioc),
Krzysztof Grobelnyb8cc78d2021-11-29 15:54:53 +0100143 reportIds(std::move(ids))
Wludzik, Jozefd960e1f2021-01-08 09:25:59 +0100144 {}
145
Szymon Dompkeb7b7e1b2022-05-19 10:15:48 +0200146 void commit(const std::string& triggerId, const ThresholdName thresholdName,
147 const std::string& sensorName, const Milliseconds timestamp,
148 const TriggerValue value) override;
Wludzik, Jozefd960e1f2021-01-08 09:25:59 +0100149
150 private:
Krzysztof Grobelnye6d48872022-02-08 13:41:30 +0100151 boost::asio::io_context& ioc;
Szymon Dompke94f71c52021-12-10 07:16:33 +0100152 std::shared_ptr<std::vector<std::string>> reportIds;
Wludzik, Jozefd960e1f2021-01-08 09:25:59 +0100153};
154} // namespace action