blob: 4d0b3bd237e861bea68bbdd6edb13cc18a2e2866 [file] [log] [blame]
Wludzik, Jozef76833cb2020-12-21 14:42:41 +01001#pragma once
2
Szymon Dompke94f71c52021-12-10 07:16:33 +01003#include "types/sensor_types.hpp"
Wludzik, Jozefd960e1f2021-01-08 09:25:59 +01004#include "utils/conversion.hpp"
Cezary Zwolaka4e67612021-02-18 13:16:16 +01005#include "utils/labeled_tuple.hpp"
6#include "utils/tstring.hpp"
Wludzik, Jozef76833cb2020-12-21 14:42:41 +01007
8#include <string>
9#include <tuple>
10#include <utility>
Wludzik, Jozefd960e1f2021-01-08 09:25:59 +010011#include <variant>
Wludzik, Jozef76833cb2020-12-21 14:42:41 +010012#include <vector>
13
Szymon Dompke20013012021-07-23 09:54:20 +020014enum class TriggerAction
15{
Szymon Dompkeb7b7e1b2022-05-19 10:15:48 +020016 LogToJournal = 0,
17 LogToRedfishEventLog,
Szymon Dompke20013012021-07-23 09:54:20 +020018 UpdateReport,
19};
20
21namespace details
22{
23constexpr std::array<std::pair<std::string_view, TriggerAction>, 3>
24 convDataTriggerAction = {
Szymon Dompkeb7b7e1b2022-05-19 10:15:48 +020025 std::make_pair("LogToJournal", TriggerAction::LogToJournal),
26 std::make_pair("LogToRedfishEventLog",
27 TriggerAction::LogToRedfishEventLog),
Szymon Dompke20013012021-07-23 09:54:20 +020028 std::make_pair("UpdateReport", TriggerAction::UpdateReport)};
29}
30
Krzysztof Grobelny51497a02021-11-09 14:56:22 +010031inline TriggerAction toTriggerAction(const std::string& str)
Szymon Dompke20013012021-07-23 09:54:20 +020032{
Krzysztof Grobelny51497a02021-11-09 14:56:22 +010033 return utils::toEnum(details::convDataTriggerAction, str);
Szymon Dompke20013012021-07-23 09:54:20 +020034}
35
Szymon Dompke94f71c52021-12-10 07:16:33 +010036inline std::string actionToString(TriggerAction v)
37{
38 return std::string(utils::enumToString(details::convDataTriggerAction, v));
39}
40
Wludzik, Jozef76833cb2020-12-21 14:42:41 +010041namespace discrete
42{
43
44enum class Severity
45{
46 ok = 0,
47 warning,
48 critical
49};
50
Wludzik, Jozef9f145912021-02-11 08:54:10 +010051namespace details
Wludzik, Jozefd960e1f2021-01-08 09:25:59 +010052{
Wludzik, Jozef9f145912021-02-11 08:54:10 +010053constexpr std::array<std::pair<std::string_view, Severity>, 3>
Lukasz Kazmierczake702a5d2021-08-06 16:59:31 +020054 convDataSeverity = {std::make_pair("OK", Severity::ok),
Wludzik, Jozef9f145912021-02-11 08:54:10 +010055 std::make_pair("Warning", Severity::warning),
56 std::make_pair("Critical", Severity::critical)};
57
58} // namespace details
59
Krzysztof Grobelny51497a02021-11-09 14:56:22 +010060inline Severity toSeverity(const std::string& str)
Wludzik, Jozef9f145912021-02-11 08:54:10 +010061{
Krzysztof Grobelny51497a02021-11-09 14:56:22 +010062 return utils::toEnum(details::convDataSeverity, str);
Wludzik, Jozefd960e1f2021-01-08 09:25:59 +010063}
64
Wludzik, Jozef9f145912021-02-11 08:54:10 +010065inline std::string severityToString(Severity v)
66{
67 return std::string(utils::enumToString(details::convDataSeverity, v));
68}
69
Szymon Dompke9f346792021-07-14 21:07:11 +020070using ThresholdParam =
71 std::tuple<std::string, std::string, uint64_t, std::string>;
Cezary Zwolaka4e67612021-02-18 13:16:16 +010072
Szymon Dompke9f346792021-07-14 21:07:11 +020073using LabeledThresholdParam = utils::LabeledTuple<
74 std::tuple<std::string, Severity, uint64_t, std::string>,
75 utils::tstring::UserId, utils::tstring::Severity, utils::tstring::DwellTime,
76 utils::tstring::ThresholdValue>;
Wludzik, Jozef76833cb2020-12-21 14:42:41 +010077} // namespace discrete
78
79namespace numeric
80{
81
82enum class Type
83{
84 lowerCritical = 0,
85 lowerWarning,
86 upperWarning,
87 upperCritical
88};
89
90enum class Direction
91{
92 either = 0,
93 decreasing,
94 increasing
95};
96
Wludzik, Jozef9f145912021-02-11 08:54:10 +010097namespace details
Wludzik, Jozefd960e1f2021-01-08 09:25:59 +010098{
Wludzik, Jozef9f145912021-02-11 08:54:10 +010099
100constexpr std::array<std::pair<std::string_view, Type>, 4> convDataType = {
101 std::make_pair("LowerCritical", Type::lowerCritical),
102 std::make_pair("LowerWarning", Type::lowerWarning),
103 std::make_pair("UpperWarning", Type::upperWarning),
104 std::make_pair("UpperCritical", Type::upperCritical)};
105
106constexpr std::array<std::pair<std::string_view, Direction>, 3>
107 convDataDirection = {std::make_pair("Either", Direction::either),
108 std::make_pair("Decreasing", Direction::decreasing),
109 std::make_pair("Increasing", Direction::increasing)};
110
111} // namespace details
112
Krzysztof Grobelny51497a02021-11-09 14:56:22 +0100113inline Type toType(const std::string& str)
Wludzik, Jozef9f145912021-02-11 08:54:10 +0100114{
Krzysztof Grobelny51497a02021-11-09 14:56:22 +0100115 return utils::toEnum(details::convDataType, str);
Wludzik, Jozefd960e1f2021-01-08 09:25:59 +0100116}
117
Wludzik, Jozef9f145912021-02-11 08:54:10 +0100118inline std::string typeToString(Type v)
Wludzik, Jozefd960e1f2021-01-08 09:25:59 +0100119{
Wludzik, Jozef9f145912021-02-11 08:54:10 +0100120 return std::string(utils::enumToString(details::convDataType, v));
Wludzik, Jozefd960e1f2021-01-08 09:25:59 +0100121}
122
Krzysztof Grobelny51497a02021-11-09 14:56:22 +0100123inline Direction toDirection(const std::string& str)
Wludzik, Jozef9f145912021-02-11 08:54:10 +0100124{
Krzysztof Grobelny51497a02021-11-09 14:56:22 +0100125 return utils::toEnum(details::convDataDirection, str);
Wludzik, Jozef9f145912021-02-11 08:54:10 +0100126}
127
128inline std::string directionToString(Direction v)
129{
130 return std::string(utils::enumToString(details::convDataDirection, v));
131}
132
133using ThresholdParam = std::tuple<std::string, uint64_t, std::string, double>;
Cezary Zwolaka4e67612021-02-18 13:16:16 +0100134
135using LabeledThresholdParam =
136 utils::LabeledTuple<std::tuple<Type, uint64_t, Direction, double>,
137 utils::tstring::Type, utils::tstring::DwellTime,
138 utils::tstring::Direction,
139 utils::tstring::ThresholdValue>;
Wludzik, Jozef76833cb2020-12-21 14:42:41 +0100140} // namespace numeric
141
Cezary Zwolak4416fce2021-03-17 03:21:06 +0100142using TriggerThresholdParamsExt =
143 std::variant<std::monostate, std::vector<numeric::ThresholdParam>,
144 std::vector<discrete::ThresholdParam>>;
145
Wludzik, Jozef76833cb2020-12-21 14:42:41 +0100146using TriggerThresholdParams =
147 std::variant<std::vector<numeric::ThresholdParam>,
148 std::vector<discrete::ThresholdParam>>;
Cezary Zwolak4416fce2021-03-17 03:21:06 +0100149
150using LabeledTriggerThresholdParams =
151 std::variant<std::vector<numeric::LabeledThresholdParam>,
152 std::vector<discrete::LabeledThresholdParam>>;
Szymon Dompke20013012021-07-23 09:54:20 +0200153
Szymon Dompke94f71c52021-12-10 07:16:33 +0100154using LabeledThresholdParam =
155 std::variant<std::monostate, numeric::LabeledThresholdParam,
156 discrete::LabeledThresholdParam>;
157
Szymon Dompke20013012021-07-23 09:54:20 +0200158inline bool
159 isTriggerThresholdDiscrete(const LabeledTriggerThresholdParams& params)
160{
161 return std::holds_alternative<std::vector<discrete::LabeledThresholdParam>>(
162 params);
163}
Szymon Dompkeb7b7e1b2022-05-19 10:15:48 +0200164
165using TriggerId = std::unique_ptr<const std::string>;
166using TriggerValue = std::variant<double, std::string>;
167using ThresholdName = std::optional<std::reference_wrapper<const std::string>>;
168
169inline std::string triggerValueToString(TriggerValue val)
170{
171 if (auto* doubleVal = std::get_if<double>(&val); doubleVal != nullptr)
172 {
173 return std::to_string(*doubleVal);
174 }
175 else
176 {
177 return std::get<std::string>(val);
178 }
179}