blob: a2a2e82f5fb89fe5381fb33d81ce09083f76c1c2 [file] [log] [blame]
Wludzik, Jozef76833cb2020-12-21 14:42:41 +01001#pragma once
2
Wludzik, Jozefd960e1f2021-01-08 09:25:59 +01003#include "utils/conversion.hpp"
Cezary Zwolaka4e67612021-02-18 13:16:16 +01004#include "utils/labeled_tuple.hpp"
5#include "utils/tstring.hpp"
Wludzik, Jozef76833cb2020-12-21 14:42:41 +01006
7#include <string>
8#include <tuple>
9#include <utility>
Wludzik, Jozefd960e1f2021-01-08 09:25:59 +010010#include <variant>
Wludzik, Jozef76833cb2020-12-21 14:42:41 +010011#include <vector>
12
Szymon Dompke20013012021-07-23 09:54:20 +020013enum class TriggerAction
14{
15 LogToLogService = 0,
16 RedfishEvent,
17 UpdateReport,
18};
19
20namespace details
21{
22constexpr std::array<std::pair<std::string_view, TriggerAction>, 3>
23 convDataTriggerAction = {
24 std::make_pair("LogToLogService", TriggerAction::LogToLogService),
25 std::make_pair("RedfishEvent", TriggerAction::RedfishEvent),
26 std::make_pair("UpdateReport", TriggerAction::UpdateReport)};
27}
28
29inline TriggerAction stringToTriggerAction(const std::string& str)
30{
31 return utils::stringToEnum(details::convDataTriggerAction, str);
32}
33
Wludzik, Jozef76833cb2020-12-21 14:42:41 +010034namespace discrete
35{
36
37enum class Severity
38{
39 ok = 0,
40 warning,
41 critical
42};
43
Wludzik, Jozef9f145912021-02-11 08:54:10 +010044namespace details
Wludzik, Jozefd960e1f2021-01-08 09:25:59 +010045{
Wludzik, Jozef9f145912021-02-11 08:54:10 +010046constexpr std::array<std::pair<std::string_view, Severity>, 3>
Lukasz Kazmierczake702a5d2021-08-06 16:59:31 +020047 convDataSeverity = {std::make_pair("OK", Severity::ok),
Wludzik, Jozef9f145912021-02-11 08:54:10 +010048 std::make_pair("Warning", Severity::warning),
49 std::make_pair("Critical", Severity::critical)};
50
51} // namespace details
52
53inline Severity stringToSeverity(const std::string& str)
54{
55 return utils::stringToEnum(details::convDataSeverity, str);
Wludzik, Jozefd960e1f2021-01-08 09:25:59 +010056}
57
Wludzik, Jozef9f145912021-02-11 08:54:10 +010058inline std::string severityToString(Severity v)
59{
60 return std::string(utils::enumToString(details::convDataSeverity, v));
61}
62
Szymon Dompke9f346792021-07-14 21:07:11 +020063using ThresholdParam =
64 std::tuple<std::string, std::string, uint64_t, std::string>;
Cezary Zwolaka4e67612021-02-18 13:16:16 +010065
Szymon Dompke9f346792021-07-14 21:07:11 +020066using LabeledThresholdParam = utils::LabeledTuple<
67 std::tuple<std::string, Severity, uint64_t, std::string>,
68 utils::tstring::UserId, utils::tstring::Severity, utils::tstring::DwellTime,
69 utils::tstring::ThresholdValue>;
Wludzik, Jozef76833cb2020-12-21 14:42:41 +010070} // namespace discrete
71
72namespace numeric
73{
74
75enum class Type
76{
77 lowerCritical = 0,
78 lowerWarning,
79 upperWarning,
80 upperCritical
81};
82
83enum class Direction
84{
85 either = 0,
86 decreasing,
87 increasing
88};
89
Wludzik, Jozef9f145912021-02-11 08:54:10 +010090namespace details
Wludzik, Jozefd960e1f2021-01-08 09:25:59 +010091{
Wludzik, Jozef9f145912021-02-11 08:54:10 +010092
93constexpr std::array<std::pair<std::string_view, Type>, 4> convDataType = {
94 std::make_pair("LowerCritical", Type::lowerCritical),
95 std::make_pair("LowerWarning", Type::lowerWarning),
96 std::make_pair("UpperWarning", Type::upperWarning),
97 std::make_pair("UpperCritical", Type::upperCritical)};
98
99constexpr std::array<std::pair<std::string_view, Direction>, 3>
100 convDataDirection = {std::make_pair("Either", Direction::either),
101 std::make_pair("Decreasing", Direction::decreasing),
102 std::make_pair("Increasing", Direction::increasing)};
103
104} // namespace details
105
106inline Type stringToType(const std::string& str)
107{
108 return utils::stringToEnum(details::convDataType, str);
Wludzik, Jozefd960e1f2021-01-08 09:25:59 +0100109}
110
Wludzik, Jozef9f145912021-02-11 08:54:10 +0100111inline std::string typeToString(Type v)
Wludzik, Jozefd960e1f2021-01-08 09:25:59 +0100112{
Wludzik, Jozef9f145912021-02-11 08:54:10 +0100113 return std::string(utils::enumToString(details::convDataType, v));
Wludzik, Jozefd960e1f2021-01-08 09:25:59 +0100114}
115
Wludzik, Jozef9f145912021-02-11 08:54:10 +0100116inline Direction stringToDirection(const std::string& str)
117{
118 return utils::stringToEnum(details::convDataDirection, str);
119}
120
121inline std::string directionToString(Direction v)
122{
123 return std::string(utils::enumToString(details::convDataDirection, v));
124}
125
126using ThresholdParam = std::tuple<std::string, uint64_t, std::string, double>;
Cezary Zwolaka4e67612021-02-18 13:16:16 +0100127
128using LabeledThresholdParam =
129 utils::LabeledTuple<std::tuple<Type, uint64_t, Direction, double>,
130 utils::tstring::Type, utils::tstring::DwellTime,
131 utils::tstring::Direction,
132 utils::tstring::ThresholdValue>;
Wludzik, Jozef76833cb2020-12-21 14:42:41 +0100133} // namespace numeric
134
Cezary Zwolak4416fce2021-03-17 03:21:06 +0100135using SensorsInfo =
Cezary Zwolaka4e67612021-02-18 13:16:16 +0100136 std::vector<std::pair<sdbusplus::message::object_path, std::string>>;
137
Cezary Zwolak4416fce2021-03-17 03:21:06 +0100138using LabeledSensorInfo =
139 utils::LabeledTuple<std::tuple<std::string, std::string, std::string>,
140 utils::tstring::Service, utils::tstring::SensorPath,
Cezary Zwolaka4e67612021-02-18 13:16:16 +0100141 utils::tstring::SensorMetadata>;
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 =
148 std::variant<std::vector<numeric::ThresholdParam>,
149 std::vector<discrete::ThresholdParam>>;
Cezary Zwolak4416fce2021-03-17 03:21:06 +0100150
151using LabeledTriggerThresholdParams =
152 std::variant<std::vector<numeric::LabeledThresholdParam>,
153 std::vector<discrete::LabeledThresholdParam>>;
Szymon Dompke20013012021-07-23 09:54:20 +0200154
155inline bool
156 isTriggerThresholdDiscrete(const LabeledTriggerThresholdParams& params)
157{
158 return std::holds_alternative<std::vector<discrete::LabeledThresholdParam>>(
159 params);
160}