diff options
author | Lorenz Kästle <12514511+RincewindsHat@users.noreply.github.com> | 2025-08-27 16:41:46 +0200 |
---|---|---|
committer | Lorenz Kästle <12514511+RincewindsHat@users.noreply.github.com> | 2025-08-27 16:41:46 +0200 |
commit | e490c5f969b3844c1c48fcff129091fdca849d58 (patch) | |
tree | 26ce870094a6d22444098b49f51e9484acf49f12 /plugins | |
parent | f976155863357e15961b280413244cc0badd89cb (diff) | |
download | monitoring-plugins-e490c5f969b3844c1c48fcff129091fdca849d58.tar.gz |
check_snmp: hopefully fix helpers
Diffstat (limited to 'plugins')
-rw-r--r-- | plugins/check_snmp.d/check_snmp_helpers.c | 70 | ||||
-rw-r--r-- | plugins/check_snmp.d/check_snmp_helpers.h | 3 |
2 files changed, 41 insertions, 32 deletions
diff --git a/plugins/check_snmp.d/check_snmp_helpers.c b/plugins/check_snmp.d/check_snmp_helpers.c index 9db1d9f4..7725cc18 100644 --- a/plugins/check_snmp.d/check_snmp_helpers.c +++ b/plugins/check_snmp.d/check_snmp_helpers.c | |||
@@ -9,56 +9,66 @@ check_snmp_test_unit check_snmp_test_unit_init() { | |||
9 | return tmp; | 9 | return tmp; |
10 | } | 10 | } |
11 | 11 | ||
12 | int check_snmp_set_thresholds(const char *threshold_string, check_snmp_test_unit test_units[], | ||
13 | size_t max_test_units, bool is_critical) { | ||
14 | |||
15 | if (threshold_string == NULL || strlen(threshold_string) == 0) { | ||
16 | // No input, do nothing | ||
17 | return 0; | ||
18 | } | ||
12 | 19 | ||
13 | int check_snmp_set_thresholds(char *threshold_string, check_snmp_test_unit tu[], | ||
14 | size_t max_test_units, bool is_critical) { | ||
15 | if (strchr(threshold_string, ',') != NULL) { | 20 | if (strchr(threshold_string, ',') != NULL) { |
16 | // Got a comma in the string, should be multiple values | 21 | // Got a comma in the string, should be multiple values |
17 | size_t tmp_counter = 0; | 22 | size_t tu_index = 0; |
18 | mp_range range_buffer; | 23 | |
19 | bool first_value = true; | 24 | while (threshold_string[0] == ',') { |
25 | // got commas at the beginning, so skip some values | ||
26 | tu_index++; | ||
27 | threshold_string++; | ||
28 | } | ||
29 | |||
20 | for (char *ptr = strtok(threshold_string, ", "); ptr != NULL; | 30 | for (char *ptr = strtok(threshold_string, ", "); ptr != NULL; |
21 | ptr = strtok(NULL, ", "), tmp_counter++) { | 31 | ptr = strtok(NULL, ", "), tu_index++) { |
32 | |||
33 | if (tu_index > max_test_units) { | ||
34 | // More thresholds then values, just ignore them | ||
35 | return 0; | ||
36 | } | ||
22 | 37 | ||
23 | // edge case: maybe we got `,,` to skip a value | 38 | // edge case: maybe we got `,,` to skip a value |
24 | if (strlen(ptr) == 0) { | 39 | if (strlen(ptr) == 0) { |
25 | // use the previous value in this case | 40 | // no threshold given, do not set it then |
26 | // or do not overwrite the loop value to be specific | 41 | continue; |
27 | if (first_value) { | 42 | } |
28 | die(STATE_UNKNOWN, "Empty threshold value"); | 43 | |
29 | } | 44 | mp_range_parsed tmp = mp_parse_range_string(ptr); |
30 | } else { | 45 | if (tmp.error != MP_PARSING_SUCCES) { |
31 | mp_range_parsed tmp = mp_parse_range_string(ptr); | 46 | die(STATE_UNKNOWN, "Unable to parse critical threshold range: %s", ptr); |
32 | if (tmp.error != MP_PARSING_SUCCES) { | ||
33 | die(STATE_UNKNOWN, "Unable to parse critical threshold range: %s", ptr); | ||
34 | } | ||
35 | range_buffer = tmp.range; | ||
36 | } | 47 | } |
37 | 48 | ||
38 | if (is_critical) { | 49 | if (is_critical) { |
39 | tu[tmp_counter].threshold.critical = range_buffer; | 50 | test_units[tu_index].threshold.critical = tmp.range; |
40 | tu[tmp_counter].threshold.critical_is_set = true; | 51 | test_units[tu_index].threshold.critical_is_set = true; |
41 | } else { | 52 | } else { |
42 | tu[tmp_counter].threshold.warning = range_buffer; | 53 | test_units[tu_index].threshold.warning = tmp.range; |
43 | tu[tmp_counter].threshold.warning_is_set = true; | 54 | test_units[tu_index].threshold.warning_is_set = true; |
44 | } | 55 | } |
45 | first_value = false; | ||
46 | } | 56 | } |
57 | |||
47 | } else { | 58 | } else { |
48 | // Single value | 59 | // Single value |
60 | // only valid for the first test unit | ||
49 | mp_range_parsed tmp = mp_parse_range_string(threshold_string); | 61 | mp_range_parsed tmp = mp_parse_range_string(threshold_string); |
50 | if (tmp.error != MP_PARSING_SUCCES) { | 62 | if (tmp.error != MP_PARSING_SUCCES) { |
51 | die(STATE_UNKNOWN, "Unable to parse critical threshold range: %s", threshold_string); | 63 | die(STATE_UNKNOWN, "Unable to parse critical threshold range: %s", threshold_string); |
52 | } | 64 | } |
53 | 65 | ||
54 | for (size_t i = 0; i < max_test_units; i++) { | 66 | if (is_critical) { |
55 | if (is_critical) { | 67 | test_units[0].threshold.critical = tmp.range; |
56 | tu[i].threshold.critical = tmp.range; | 68 | test_units[0].threshold.critical_is_set = true; |
57 | tu[i].threshold.critical_is_set = true; | 69 | } else { |
58 | } else { | 70 | test_units[0].threshold.warning = tmp.range; |
59 | tu[i].threshold.warning = tmp.range; | 71 | test_units[0].threshold.warning_is_set = true; |
60 | tu[i].threshold.warning_is_set = true; | ||
61 | } | ||
62 | } | 72 | } |
63 | } | 73 | } |
64 | 74 | ||
diff --git a/plugins/check_snmp.d/check_snmp_helpers.h b/plugins/check_snmp.d/check_snmp_helpers.h index 74e7d0cd..28e3c4e3 100644 --- a/plugins/check_snmp.d/check_snmp_helpers.h +++ b/plugins/check_snmp.d/check_snmp_helpers.h | |||
@@ -3,6 +3,5 @@ | |||
3 | #include "./config.h" | 3 | #include "./config.h" |
4 | 4 | ||
5 | check_snmp_test_unit check_snmp_test_unit_init(); | 5 | check_snmp_test_unit check_snmp_test_unit_init(); |
6 | int check_snmp_set_thresholds(char *threshold_string, check_snmp_test_unit tu[], | 6 | int check_snmp_set_thresholds(const char *, check_snmp_test_unit[], size_t, bool); |
7 | size_t max_test_units, bool is_critical); | ||
8 | check_snmp_config check_snmp_config_init(); | 7 | check_snmp_config check_snmp_config_init(); |