blob: 9a053c80142cf7e4168e96f6aa585cab5db729ea [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"
Krzysztof Grobelnya8182be2022-07-04 11:26:20 +02007#include "utils/variant_utils.hpp"
Wludzik, Jozef76833cb2020-12-21 14:42:41 +01008
9#include <string>
10#include <tuple>
11#include <utility>
Wludzik, Jozefd960e1f2021-01-08 09:25:59 +010012#include <variant>
Wludzik, Jozef76833cb2020-12-21 14:42:41 +010013#include <vector>
14
Szymon Dompke20013012021-07-23 09:54:20 +020015enum class TriggerAction
16{
Szymon Dompkeb7b7e1b2022-05-19 10:15:48 +020017 LogToJournal = 0,
18 LogToRedfishEventLog,
Szymon Dompke20013012021-07-23 09:54:20 +020019 UpdateReport,
20};
21
22namespace details
23{
24constexpr std::array<std::pair<std::string_view, TriggerAction>, 3>
25 convDataTriggerAction = {
Szymon Dompkeb7b7e1b2022-05-19 10:15:48 +020026 std::make_pair("LogToJournal", TriggerAction::LogToJournal),
27 std::make_pair("LogToRedfishEventLog",
28 TriggerAction::LogToRedfishEventLog),
Szymon Dompke20013012021-07-23 09:54:20 +020029 std::make_pair("UpdateReport", TriggerAction::UpdateReport)};
30}
31
Krzysztof Grobelny51497a02021-11-09 14:56:22 +010032inline TriggerAction toTriggerAction(const std::string& str)
Szymon Dompke20013012021-07-23 09:54:20 +020033{
Krzysztof Grobelny51497a02021-11-09 14:56:22 +010034 return utils::toEnum(details::convDataTriggerAction, str);
Szymon Dompke20013012021-07-23 09:54:20 +020035}
36
Szymon Dompke94f71c52021-12-10 07:16:33 +010037inline std::string actionToString(TriggerAction v)
38{
39 return std::string(utils::enumToString(details::convDataTriggerAction, v));
40}
41
Wludzik, Jozef76833cb2020-12-21 14:42:41 +010042namespace discrete
43{
44
45enum class Severity
46{
47 ok = 0,
48 warning,
49 critical
50};
51
Wludzik, Jozef9f145912021-02-11 08:54:10 +010052namespace details
Wludzik, Jozefd960e1f2021-01-08 09:25:59 +010053{
Wludzik, Jozef9f145912021-02-11 08:54:10 +010054constexpr std::array<std::pair<std::string_view, Severity>, 3>
Lukasz Kazmierczake702a5d2021-08-06 16:59:31 +020055 convDataSeverity = {std::make_pair("OK", Severity::ok),
Wludzik, Jozef9f145912021-02-11 08:54:10 +010056 std::make_pair("Warning", Severity::warning),
57 std::make_pair("Critical", Severity::critical)};
58
59} // namespace details
60
Krzysztof Grobelny51497a02021-11-09 14:56:22 +010061inline Severity toSeverity(const std::string& str)
Wludzik, Jozef9f145912021-02-11 08:54:10 +010062{
Krzysztof Grobelny51497a02021-11-09 14:56:22 +010063 return utils::toEnum(details::convDataSeverity, str);
Wludzik, Jozefd960e1f2021-01-08 09:25:59 +010064}
65
Wludzik, Jozef9f145912021-02-11 08:54:10 +010066inline std::string severityToString(Severity v)
67{
68 return std::string(utils::enumToString(details::convDataSeverity, v));
69}
70
Szymon Dompke9f346792021-07-14 21:07:11 +020071using ThresholdParam =
72 std::tuple<std::string, std::string, uint64_t, std::string>;
Cezary Zwolaka4e67612021-02-18 13:16:16 +010073
Szymon Dompke9f346792021-07-14 21:07:11 +020074using LabeledThresholdParam = utils::LabeledTuple<
75 std::tuple<std::string, Severity, uint64_t, std::string>,
76 utils::tstring::UserId, utils::tstring::Severity, utils::tstring::DwellTime,
77 utils::tstring::ThresholdValue>;
Wludzik, Jozef76833cb2020-12-21 14:42:41 +010078} // namespace discrete
79
80namespace numeric
81{
82
83enum class Type
84{
85 lowerCritical = 0,
86 lowerWarning,
87 upperWarning,
88 upperCritical
89};
90
91enum class Direction
92{
93 either = 0,
94 decreasing,
95 increasing
96};
97
Wludzik, Jozef9f145912021-02-11 08:54:10 +010098namespace details
Wludzik, Jozefd960e1f2021-01-08 09:25:59 +010099{
Wludzik, Jozef9f145912021-02-11 08:54:10 +0100100
101constexpr std::array<std::pair<std::string_view, Type>, 4> convDataType = {
102 std::make_pair("LowerCritical", Type::lowerCritical),
103 std::make_pair("LowerWarning", Type::lowerWarning),
104 std::make_pair("UpperWarning", Type::upperWarning),
105 std::make_pair("UpperCritical", Type::upperCritical)};
106
107constexpr std::array<std::pair<std::string_view, Direction>, 3>
108 convDataDirection = {std::make_pair("Either", Direction::either),
109 std::make_pair("Decreasing", Direction::decreasing),
110 std::make_pair("Increasing", Direction::increasing)};
111
112} // namespace details
113
Krzysztof Grobelny51497a02021-11-09 14:56:22 +0100114inline Type toType(const std::string& str)
Wludzik, Jozef9f145912021-02-11 08:54:10 +0100115{
Krzysztof Grobelny51497a02021-11-09 14:56:22 +0100116 return utils::toEnum(details::convDataType, str);
Wludzik, Jozefd960e1f2021-01-08 09:25:59 +0100117}
118
Wludzik, Jozef9f145912021-02-11 08:54:10 +0100119inline std::string typeToString(Type v)
Wludzik, Jozefd960e1f2021-01-08 09:25:59 +0100120{
Wludzik, Jozef9f145912021-02-11 08:54:10 +0100121 return std::string(utils::enumToString(details::convDataType, v));
Wludzik, Jozefd960e1f2021-01-08 09:25:59 +0100122}
123
Krzysztof Grobelny51497a02021-11-09 14:56:22 +0100124inline Direction toDirection(const std::string& str)
Wludzik, Jozef9f145912021-02-11 08:54:10 +0100125{
Krzysztof Grobelny51497a02021-11-09 14:56:22 +0100126 return utils::toEnum(details::convDataDirection, str);
Wludzik, Jozef9f145912021-02-11 08:54:10 +0100127}
128
129inline std::string directionToString(Direction v)
130{
131 return std::string(utils::enumToString(details::convDataDirection, v));
132}
133
134using ThresholdParam = std::tuple<std::string, uint64_t, std::string, double>;
Cezary Zwolaka4e67612021-02-18 13:16:16 +0100135
136using LabeledThresholdParam =
137 utils::LabeledTuple<std::tuple<Type, uint64_t, Direction, double>,
138 utils::tstring::Type, utils::tstring::DwellTime,
139 utils::tstring::Direction,
140 utils::tstring::ThresholdValue>;
Wludzik, Jozef76833cb2020-12-21 14:42:41 +0100141} // namespace numeric
142
Cezary Zwolak4416fce2021-03-17 03:21:06 +0100143using TriggerThresholdParamsExt =
144 std::variant<std::monostate, std::vector<numeric::ThresholdParam>,
145 std::vector<discrete::ThresholdParam>>;
146
Wludzik, Jozef76833cb2020-12-21 14:42:41 +0100147using TriggerThresholdParams =
Krzysztof Grobelnya8182be2022-07-04 11:26:20 +0200148 utils::WithoutMonostate<TriggerThresholdParamsExt>;
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}