Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
Adrian Schollmeyer
icinga-ampel
Commits
1553590a
Commit
1553590a
authored
Jan 26, 2020
by
Adrian Schollmeyer
Browse files
Add support for string group names
parent
1cbd83de
Changes
1
Hide whitespace changes
Inline
Side-by-side
src/main.cpp
View file @
1553590a
...
@@ -35,7 +35,7 @@ std::ostringstream output_buf;
...
@@ -35,7 +35,7 @@ std::ostringstream output_buf;
using
json
=
nlohmann
::
json
;
using
json
=
nlohmann
::
json
;
using
health_data_t
=
std
::
tuple
<
unsigned
long
,
unsigned
long
>
;
using
health_data_t
=
std
::
tuple
<
unsigned
long
,
unsigned
long
>
;
using
health_data_map_t
=
std
::
unordered_map
<
in
t
,
health_data_t
>
;
using
health_data_map_t
=
std
::
unordered_map
<
std
::
str
in
g
,
health_data_t
>
;
}
// namespace
}
// namespace
void
print_plugin_output
(
int
return_code
,
std
::
string
status_message
)
void
print_plugin_output
(
int
return_code
,
std
::
string
status_message
)
...
@@ -56,12 +56,13 @@ void print_plugin_output(int return_code, std::string status_message)
...
@@ -56,12 +56,13 @@ void print_plugin_output(int return_code, std::string status_message)
}
}
}
}
void
print_health
(
int
return_code
,
float
health
,
float
threshold_warning
,
float
threshold_critical
)
void
print_health
(
int
return_code
,
float
health
,
float
threshold_warning
,
float
threshold_critical
,
const
std
::
string
&
group_name
)
{
{
std
::
string
health_as_str
=
std
::
to_string
(
health
);
std
::
string
health_as_str
=
std
::
to_string
(
health
);
print_plugin_output
(
return_code
,
"Health "
+
health_as_str
+
" | health="
+
health_as_str
+
"%;"
print_plugin_output
(
return_code
,
"Health "
+
health_as_str
+
" (group "
+
std
::
to_string
(
threshold_warning
)
+
":;"
+
group_name
+
") | health="
+
health_as_str
+
"%;"
+
+
std
::
to_string
(
threshold_critical
)
+
":;0;100"
);
std
::
to_string
(
threshold_warning
)
+
":;"
+
std
::
to_string
(
threshold_critical
)
+
":;0;100"
);
}
}
#ifndef NDEBUG
#ifndef NDEBUG
...
@@ -106,9 +107,12 @@ void parse_result(health_data_map_t& output, const std::string& raw_data)
...
@@ -106,9 +107,12 @@ void parse_result(health_data_map_t& output, const std::string& raw_data)
continue
;
continue
;
}
}
int
ampel_group
{
0
};
std
::
string
ampel_group
{
"default"
};
if
(
object
[
"attrs"
][
"vars"
][
"ampel_group"
]
>
0
)
{
auto
&
raw_ampel_group
=
object
[
"attrs"
][
"vars"
][
"ampel_group"
];
ampel_group
=
static_cast
<
int
>
(
object
[
"attrs"
][
"vars"
][
"ampel_group"
]);
if
(
raw_ampel_group
.
is_string
())
{
ampel_group
=
raw_ampel_group
.
get
<
std
::
string
>
();
}
else
if
(
raw_ampel_group
.
is_number
())
{
ampel_group
=
std
::
to_string
(
raw_ampel_group
.
get
<
int
>
());
}
}
int
last_result
=
object
[
"attrs"
][
"last_check_result"
][
"exit_status"
];
int
last_result
=
object
[
"attrs"
][
"last_check_result"
][
"exit_status"
];
...
@@ -219,11 +223,13 @@ int main(int argc, char** argv)
...
@@ -219,11 +223,13 @@ int main(int argc, char** argv)
parse_result
(
health_data
,
output_buf
.
str
());
parse_result
(
health_data
,
output_buf
.
str
());
float
min_health
{
1.
f
};
float
min_health
{
1.
f
};
std
::
string
min_health_group
;
for
(
auto
&
health
:
health_data
)
{
for
(
auto
&
health
:
health_data
)
{
float
this_health
=
std
::
get
<
0
>
(
health
.
second
)
*
1.
f
/
std
::
get
<
1
>
(
health
.
second
);
float
this_health
=
std
::
get
<
0
>
(
health
.
second
)
*
1.
f
/
std
::
get
<
1
>
(
health
.
second
);
if
(
this_health
<
min_health
)
{
if
(
this_health
<
min_health
)
{
min_health
=
this_health
;
min_health
=
this_health
;
min_health_group
=
health
.
first
;
}
}
print_debug
(
"Calculated min health: "
+
std
::
to_string
(
min_health
)
+
'\n'
);
print_debug
(
"Calculated min health: "
+
std
::
to_string
(
min_health
)
+
'\n'
);
}
}
...
@@ -234,13 +240,13 @@ int main(int argc, char** argv)
...
@@ -234,13 +240,13 @@ int main(int argc, char** argv)
float
health
=
min_health
*
100.
f
;
float
health
=
min_health
*
100.
f
;
if
(
health
<
crit
)
{
if
(
health
<
crit
)
{
print_health
(
RETURN_CRITICAL
,
health
,
warn
,
crit
);
print_health
(
RETURN_CRITICAL
,
health
,
warn
,
crit
,
min_health_group
);
return
RETURN_CRITICAL
;
return
RETURN_CRITICAL
;
}
else
if
(
health
<
warn
)
{
}
else
if
(
health
<
warn
)
{
print_health
(
RETURN_WARNING
,
health
,
warn
,
crit
);
print_health
(
RETURN_WARNING
,
health
,
warn
,
crit
,
min_health_group
);
return
RETURN_WARNING
;
return
RETURN_WARNING
;
}
else
{
}
else
{
print_health
(
RETURN_OK
,
health
,
warn
,
crit
);
print_health
(
RETURN_OK
,
health
,
warn
,
crit
,
min_health_group
);
return
RETURN_OK
;
return
RETURN_OK
;
}
}
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment