blob: 778a9a1da40ec6ba6b181264ffe56ef4a2b336df [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{
16 LogToLogService = 0,
17 RedfishEvent,
18 UpdateReport,
19};
20
21namespace details
22{
23constexpr std::array<std::pair<std::string_view, TriggerAction>, 3>
24 convDataTriggerAction = {
25 std::make_pair("LogToLogService", TriggerAction::LogToLogService),
26 std::make_pair("RedfishEvent", TriggerAction::RedfishEvent),
27 std::make_pair("UpdateReport", TriggerAction::UpdateReport)};
28}
29
Krzysztof Grobelny51497a02021-11-09 14:56:22 +010030inline TriggerAction toTriggerAction(const std::string& str)
Szymon Dompke20013012021-07-23 09:54:20 +020031{
Krzysztof Grobelny51497a02021-11-09 14:56:22 +010032 return utils::toEnum(details::convDataTriggerAction, str);
Szymon Dompke20013012021-07-23 09:54:20 +020033}
34
Szymon Dompke94f71c52021-12-10 07:16:33 +010035inline std::string actionToString(TriggerAction v)
36{
37 return std::string(utils::enumToString(details::convDataTriggerAction, v));
38}
39
Wludzik, Jozef76833cb2020-12-21 14:42:41 +010040namespace discrete
41{
42
43enum class Severity
44{
45 ok = 0,
46 warning,
47 critical
48};
49
Wludzik, Jozef9f145912021-02-11 08:54:10 +010050namespace details
Wludzik, Jozefd960e1f2021-01-08 09:25:59 +010051{
Wludzik, Jozef9f145912021-02-11 08:54:10 +010052constexpr std::array<std::pair<std::string_view, Severity>, 3>
Lukasz Kazmierczake702a5d2021-08-06 16:59:31 +020053 convDataSeverity = {std::make_pair("OK", Severity::ok),
Wludzik, Jozef9f145912021-02-11 08:54:10 +010054 std::make_pair("Warning", Severity::warning),
55 std::make_pair("Critical", Severity::critical)};
56
57} // namespace details
58
Krzysztof Grobelny51497a02021-11-09 14:56:22 +010059inline Severity toSeverity(const std::string& str)
Wludzik, Jozef9f145912021-02-11 08:54:10 +010060{
Krzysztof Grobelny51497a02021-11-09 14:56:22 +010061 return utils::toEnum(details::convDataSeverity, str);
Wludzik, Jozefd960e1f2021-01-08 09:25:59 +010062}
63
Wludzik, Jozef9f145912021-02-11 08:54:10 +010064inline std::string severityToString(Severity v)
65{
66 return std::string(utils::enumToString(details::convDataSeverity, v));
67}
68
Szymon Dompke9f346792021-07-14 21:07:11 +020069using ThresholdParam =
70 std::tuple<std::string, std::string, uint64_t, std::string>;
Cezary Zwolaka4e67612021-02-18 13:16:16 +010071
Szymon Dompke9f346792021-07-14 21:07:11 +020072using LabeledThresholdParam = utils::LabeledTuple<
73 std::tuple<std::string, Severity, uint64_t, std::string>,
74 utils::tstring::UserId, utils::tstring::Severity, utils::tstring::DwellTime,
75 utils::tstring::ThresholdValue>;
Wludzik, Jozef76833cb2020-12-21 14:42:41 +010076} // namespace discrete
77
78namespace numeric
79{
80
81enum class Type
82{
83 lowerCritical = 0,
84 lowerWarning,
85 upperWarning,
86 upperCritical
87};
88
89enum class Direction
90{
91 either = 0,
92 decreasing,
93 increasing
94};
95
Wludzik, Jozef9f145912021-02-11 08:54:10 +010096namespace details
Wludzik, Jozefd960e1f2021-01-08 09:25:59 +010097{
Wludzik, Jozef9f145912021-02-11 08:54:10 +010098
99constexpr std::array<std::pair<std::string_view, Type>, 4> convDataType = {
100 std::make_pair("LowerCritical", Type::lowerCritical),
101 std::make_pair("LowerWarning", Type::lowerWarning),
102 std::make_pair("UpperWarning", Type::upperWarning),
103 std::make_pair("UpperCritical", Type::upperCritical)};
104
105constexpr std::array<std::pair<std::string_view, Direction>, 3>
106 convDataDirection = {std::make_pair("Either", Direction::either),
107 std::make_pair("Decreasing", Direction::decreasing),
108 std::make_pair("Increasing", Direction::increasing)};
109
110} // namespace details
111
Krzysztof Grobelny51497a02021-11-09 14:56:22 +0100112inline Type toType(const std::string& str)
Wludzik, Jozef9f145912021-02-11 08:54:10 +0100113{
Krzysztof Grobelny51497a02021-11-09 14:56:22 +0100114 return utils::toEnum(details::convDataType, str);
Wludzik, Jozefd960e1f2021-01-08 09:25:59 +0100115}
116
Wludzik, Jozef9f145912021-02-11 08:54:10 +0100117inline std::string typeToString(Type v)
Wludzik, Jozefd960e1f2021-01-08 09:25:59 +0100118{
Wludzik, Jozef9f145912021-02-11 08:54:10 +0100119 return std::string(utils::enumToString(details::convDataType, v));
Wludzik, Jozefd960e1f2021-01-08 09:25:59 +0100120}
121
Krzysztof Grobelny51497a02021-11-09 14:56:22 +0100122inline Direction toDirection(const std::string& str)
Wludzik, Jozef9f145912021-02-11 08:54:10 +0100123{
Krzysztof Grobelny51497a02021-11-09 14:56:22 +0100124 return utils::toEnum(details::convDataDirection, str);
Wludzik, Jozef9f145912021-02-11 08:54:10 +0100125}
126
127inline std::string directionToString(Direction v)
128{
129 return std::string(utils::enumToString(details::convDataDirection, v));
130}
131
132using ThresholdParam = std::tuple<std::string, uint64_t, std::string, double>;
Cezary Zwolaka4e67612021-02-18 13:16:16 +0100133
134using LabeledThresholdParam =
135 utils::LabeledTuple<std::tuple<Type, uint64_t, Direction, double>,
136 utils::tstring::Type, utils::tstring::DwellTime,
137 utils::tstring::Direction,
138 utils::tstring::ThresholdValue>;
Wludzik, Jozef76833cb2020-12-21 14:42:41 +0100139} // namespace numeric
140
Cezary Zwolak4416fce2021-03-17 03:21:06 +0100141using TriggerThresholdParamsExt =
142 std::variant<std::monostate, std::vector<numeric::ThresholdParam>,
143 std::vector<discrete::ThresholdParam>>;
144
Wludzik, Jozef76833cb2020-12-21 14:42:41 +0100145using TriggerThresholdParams =
146 std::variant<std::vector<numeric::ThresholdParam>,
147 std::vector<discrete::ThresholdParam>>;
Cezary Zwolak4416fce2021-03-17 03:21:06 +0100148
149using LabeledTriggerThresholdParams =
150 std::variant<std::vector<numeric::LabeledThresholdParam>,
151 std::vector<discrete::LabeledThresholdParam>>;
Szymon Dompke20013012021-07-23 09:54:20 +0200152
Szymon Dompke94f71c52021-12-10 07:16:33 +0100153using LabeledThresholdParam =
154 std::variant<std::monostate, numeric::LabeledThresholdParam,
155 discrete::LabeledThresholdParam>;
156
Szymon Dompke20013012021-07-23 09:54:20 +0200157inline bool
158 isTriggerThresholdDiscrete(const LabeledTriggerThresholdParams& params)
159{
160 return std::holds_alternative<std::vector<discrete::LabeledThresholdParam>>(
161 params);
162}