diff options
author | Lorenz Kästle <12514511+RincewindsHat@users.noreply.github.com> | 2025-02-25 17:20:05 +0100 |
---|---|---|
committer | Lorenz Kästle <12514511+RincewindsHat@users.noreply.github.com> | 2025-03-07 23:38:50 +0100 |
commit | 72fd885f4ff423d5351e3387867f2415f1ffc2d8 (patch) | |
tree | 50d47d6ec4ccc0d28f7a66503bfd960cf27c195e /lib | |
parent | 3cbd84ce754b1f7ce1ac8f9bc46059da62392ffe (diff) | |
download | monitoring-plugins-72fd885f4ff423d5351e3387867f2415f1ffc2d8.tar.gz |
Transform output format to a global state
This commit removes the format parameter from the mp_check
object and creates a module global variable instead.
This prevents thread safe usage of different mp_check objects
which should likely not present a big problem for now.
The reason for this change is effectively the very same,
the format was lost if an exit was triggered by a signal
handler (timeout in this example).
Diffstat (limited to 'lib')
-rw-r--r-- | lib/output.c | 12 | ||||
-rw-r--r-- | lib/output.h | 7 |
2 files changed, 15 insertions, 4 deletions
diff --git a/lib/output.c b/lib/output.c index 17919afc..61fbf832 100644 --- a/lib/output.c +++ b/lib/output.c | |||
@@ -11,6 +11,9 @@ | |||
11 | #include "perfdata.h" | 11 | #include "perfdata.h" |
12 | #include "states.h" | 12 | #include "states.h" |
13 | 13 | ||
14 | // == Global variables | ||
15 | static mp_output_format output_format = MP_FORMAT_DEFAULT; | ||
16 | |||
14 | // == Prototypes == | 17 | // == Prototypes == |
15 | static char *fmt_subcheck_output(mp_output_format output_format, mp_subcheck check, unsigned int indentation); | 18 | static char *fmt_subcheck_output(mp_output_format output_format, mp_subcheck check, unsigned int indentation); |
16 | static inline cJSON *json_serialize_subcheck(mp_subcheck subcheck); | 19 | static inline cJSON *json_serialize_subcheck(mp_subcheck subcheck); |
@@ -55,7 +58,6 @@ static inline char *fmt_subcheck_perfdata(mp_subcheck check) { | |||
55 | */ | 58 | */ |
56 | mp_check mp_check_init(void) { | 59 | mp_check mp_check_init(void) { |
57 | mp_check check = {0}; | 60 | mp_check check = {0}; |
58 | check.format = MP_FORMAT_DEFAULT; | ||
59 | return check; | 61 | return check; |
60 | } | 62 | } |
61 | 63 | ||
@@ -234,7 +236,7 @@ mp_state_enum mp_compute_check_state(const mp_check check) { | |||
234 | char *mp_fmt_output(mp_check check) { | 236 | char *mp_fmt_output(mp_check check) { |
235 | char *result = NULL; | 237 | char *result = NULL; |
236 | 238 | ||
237 | switch (check.format) { | 239 | switch (output_format) { |
238 | case MP_FORMAT_MULTI_LINE: { | 240 | case MP_FORMAT_MULTI_LINE: { |
239 | if (check.summary == NULL) { | 241 | if (check.summary == NULL) { |
240 | check.summary = get_subcheck_summary(check); | 242 | check.summary = get_subcheck_summary(check); |
@@ -482,7 +484,7 @@ void mp_print_output(mp_check check) { puts(mp_fmt_output(check)); } | |||
482 | */ | 484 | */ |
483 | void mp_exit(mp_check check) { | 485 | void mp_exit(mp_check check) { |
484 | mp_print_output(check); | 486 | mp_print_output(check); |
485 | if (check.format == MP_FORMAT_TEST_JSON) { | 487 | if (output_format == MP_FORMAT_TEST_JSON) { |
486 | exit(0); | 488 | exit(0); |
487 | } | 489 | } |
488 | 490 | ||
@@ -533,3 +535,7 @@ parsed_output_format mp_parse_output_format(char *format_string) { | |||
533 | 535 | ||
534 | return result; | 536 | return result; |
535 | } | 537 | } |
538 | |||
539 | void mp_set_format(mp_output_format format) { output_format = format; } | ||
540 | |||
541 | mp_output_format mp_get_format(void) { return output_format; } | ||
diff --git a/lib/output.h b/lib/output.h index ffc36f53..2bdfa074 100644 --- a/lib/output.h +++ b/lib/output.h | |||
@@ -36,13 +36,18 @@ typedef enum output_format { | |||
36 | #define MP_FORMAT_DEFAULT MP_FORMAT_MULTI_LINE | 36 | #define MP_FORMAT_DEFAULT MP_FORMAT_MULTI_LINE |
37 | 37 | ||
38 | /* | 38 | /* |
39 | * Format related functions | ||
40 | */ | ||
41 | void mp_set_format(mp_output_format format); | ||
42 | mp_output_format mp_get_format(void); | ||
43 | |||
44 | /* | ||
39 | * The main state object of a plugin. Exists only ONCE per plugin. | 45 | * The main state object of a plugin. Exists only ONCE per plugin. |
40 | * This is the "root" of a tree of singular checks. | 46 | * This is the "root" of a tree of singular checks. |
41 | * The final result is always derived from the children and the "worst" state | 47 | * The final result is always derived from the children and the "worst" state |
42 | * in the first layer of subchecks | 48 | * in the first layer of subchecks |
43 | */ | 49 | */ |
44 | typedef struct { | 50 | typedef struct { |
45 | mp_output_format format; // The output format | ||
46 | char *summary; // Overall summary, if not set a summary will be automatically generated | 51 | char *summary; // Overall summary, if not set a summary will be automatically generated |
47 | mp_subcheck_list *subchecks; | 52 | mp_subcheck_list *subchecks; |
48 | } mp_check; | 53 | } mp_check; |