blob: 4b6e150e8fd257a32182c874b88f654ca50f51fc [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
13namespace discrete
14{
15
16enum class Severity
17{
18 ok = 0,
19 warning,
20 critical
21};
22
Wludzik, Jozef9f145912021-02-11 08:54:10 +010023namespace details
Wludzik, Jozefd960e1f2021-01-08 09:25:59 +010024{
Wludzik, Jozef9f145912021-02-11 08:54:10 +010025constexpr std::array<std::pair<std::string_view, Severity>, 3>
Lukasz Kazmierczake702a5d2021-08-06 16:59:31 +020026 convDataSeverity = {std::make_pair("OK", Severity::ok),
Wludzik, Jozef9f145912021-02-11 08:54:10 +010027 std::make_pair("Warning", Severity::warning),
28 std::make_pair("Critical", Severity::critical)};
29
30} // namespace details
31
32inline Severity stringToSeverity(const std::string& str)
33{
34 return utils::stringToEnum(details::convDataSeverity, str);
Wludzik, Jozefd960e1f2021-01-08 09:25:59 +010035}
36
Wludzik, Jozef9f145912021-02-11 08:54:10 +010037inline std::string severityToString(Severity v)
38{
39 return std::string(utils::enumToString(details::convDataSeverity, v));
40}
41
Szymon Dompke9f346792021-07-14 21:07:11 +020042using ThresholdParam =
43 std::tuple<std::string, std::string, uint64_t, std::string>;
Cezary Zwolaka4e67612021-02-18 13:16:16 +010044
Szymon Dompke9f346792021-07-14 21:07:11 +020045using LabeledThresholdParam = utils::LabeledTuple<
46 std::tuple<std::string, Severity, uint64_t, std::string>,
47 utils::tstring::UserId, utils::tstring::Severity, utils::tstring::DwellTime,
48 utils::tstring::ThresholdValue>;
Wludzik, Jozef76833cb2020-12-21 14:42:41 +010049} // namespace discrete
50
51namespace numeric
52{
53
54enum class Type
55{
56 lowerCritical = 0,
57 lowerWarning,
58 upperWarning,
59 upperCritical
60};
61
62enum class Direction
63{
64 either = 0,
65 decreasing,
66 increasing
67};
68
Wludzik, Jozef9f145912021-02-11 08:54:10 +010069namespace details
Wludzik, Jozefd960e1f2021-01-08 09:25:59 +010070{
Wludzik, Jozef9f145912021-02-11 08:54:10 +010071
72constexpr std::array<std::pair<std::string_view, Type>, 4> convDataType = {
73 std::make_pair("LowerCritical", Type::lowerCritical),
74 std::make_pair("LowerWarning", Type::lowerWarning),
75 std::make_pair("UpperWarning", Type::upperWarning),
76 std::make_pair("UpperCritical", Type::upperCritical)};
77
78constexpr std::array<std::pair<std::string_view, Direction>, 3>
79 convDataDirection = {std::make_pair("Either", Direction::either),
80 std::make_pair("Decreasing", Direction::decreasing),
81 std::make_pair("Increasing", Direction::increasing)};
82
83} // namespace details
84
85inline Type stringToType(const std::string& str)
86{
87 return utils::stringToEnum(details::convDataType, str);
Wludzik, Jozefd960e1f2021-01-08 09:25:59 +010088}
89
Wludzik, Jozef9f145912021-02-11 08:54:10 +010090inline std::string typeToString(Type v)
Wludzik, Jozefd960e1f2021-01-08 09:25:59 +010091{
Wludzik, Jozef9f145912021-02-11 08:54:10 +010092 return std::string(utils::enumToString(details::convDataType, v));
Wludzik, Jozefd960e1f2021-01-08 09:25:59 +010093}
94
Wludzik, Jozef9f145912021-02-11 08:54:10 +010095inline Direction stringToDirection(const std::string& str)
96{
97 return utils::stringToEnum(details::convDataDirection, str);
98}
99
100inline std::string directionToString(Direction v)
101{
102 return std::string(utils::enumToString(details::convDataDirection, v));
103}
104
105using ThresholdParam = std::tuple<std::string, uint64_t, std::string, double>;
Cezary Zwolaka4e67612021-02-18 13:16:16 +0100106
107using LabeledThresholdParam =
108 utils::LabeledTuple<std::tuple<Type, uint64_t, Direction, double>,
109 utils::tstring::Type, utils::tstring::DwellTime,
110 utils::tstring::Direction,
111 utils::tstring::ThresholdValue>;
Wludzik, Jozef76833cb2020-12-21 14:42:41 +0100112} // namespace numeric
113
Cezary Zwolak4416fce2021-03-17 03:21:06 +0100114using SensorsInfo =
Cezary Zwolaka4e67612021-02-18 13:16:16 +0100115 std::vector<std::pair<sdbusplus::message::object_path, std::string>>;
116
Cezary Zwolak4416fce2021-03-17 03:21:06 +0100117using LabeledSensorInfo =
118 utils::LabeledTuple<std::tuple<std::string, std::string, std::string>,
119 utils::tstring::Service, utils::tstring::SensorPath,
Cezary Zwolaka4e67612021-02-18 13:16:16 +0100120 utils::tstring::SensorMetadata>;
121
Cezary Zwolak4416fce2021-03-17 03:21:06 +0100122using TriggerThresholdParamsExt =
123 std::variant<std::monostate, std::vector<numeric::ThresholdParam>,
124 std::vector<discrete::ThresholdParam>>;
125
Wludzik, Jozef76833cb2020-12-21 14:42:41 +0100126using TriggerThresholdParams =
127 std::variant<std::vector<numeric::ThresholdParam>,
128 std::vector<discrete::ThresholdParam>>;
Cezary Zwolak4416fce2021-03-17 03:21:06 +0100129
130using LabeledTriggerThresholdParams =
131 std::variant<std::vector<numeric::LabeledThresholdParam>,
132 std::vector<discrete::LabeledThresholdParam>>;