From 0645c9fc2c7f801ba3c7d68a17c137a63ada299f Mon Sep 17 00:00:00 2001 From: Lorenz Kästle <12514511+RincewindsHat@users.noreply.github.com> Date: Tue, 18 Feb 2025 21:58:34 +0100 Subject: Implement new output functionality --- lib/states.h | 71 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 lib/states.h (limited to 'lib/states.h') diff --git a/lib/states.h b/lib/states.h new file mode 100644 index 00000000..4a170caa --- /dev/null +++ b/lib/states.h @@ -0,0 +1,71 @@ +#ifndef _MP_STATES_ +#define _MP_STATES_ + +#include "../config.h" +#include + +typedef enum state_enum { + STATE_OK, + STATE_WARNING, + STATE_CRITICAL, + STATE_UNKNOWN, + STATE_DEPENDENT +} mp_state_enum; + +/* ************************************************************************** + * max_state(STATE_x, STATE_y) + * compares STATE_x to STATE_y and returns result based on the following + * STATE_UNKNOWN < STATE_OK < STATE_WARNING < STATE_CRITICAL + * + * Note that numerically the above does not hold + ****************************************************************************/ + +static inline mp_state_enum max_state(mp_state_enum a, mp_state_enum b) { + if (a == STATE_CRITICAL || b == STATE_CRITICAL) { + return STATE_CRITICAL; + } + if (a == STATE_WARNING || b == STATE_WARNING) { + return STATE_WARNING; + } + if (a == STATE_OK || b == STATE_OK) { + return STATE_OK; + } + if (a == STATE_UNKNOWN || b == STATE_UNKNOWN) { + return STATE_UNKNOWN; + } + if (a == STATE_DEPENDENT || b == STATE_DEPENDENT) { + return STATE_DEPENDENT; + } + return MAX(a, b); +} + +/* ************************************************************************** + * max_state_alt(STATE_x, STATE_y) + * compares STATE_x to STATE_y and returns result based on the following + * STATE_OK < STATE_DEPENDENT < STATE_UNKNOWN < STATE_WARNING < STATE_CRITICAL + * + * The main difference between max_state_alt and max_state it that it doesn't + * allow setting a default to UNKNOWN. It will instead prioritixe any valid + * non-OK state. + ****************************************************************************/ + +static inline mp_state_enum max_state_alt(mp_state_enum a, mp_state_enum b) { + if (a == STATE_CRITICAL || b == STATE_CRITICAL) { + return STATE_CRITICAL; + } + if (a == STATE_WARNING || b == STATE_WARNING) { + return STATE_WARNING; + } + if (a == STATE_UNKNOWN || b == STATE_UNKNOWN) { + return STATE_UNKNOWN; + } + if (a == STATE_DEPENDENT || b == STATE_DEPENDENT) { + return STATE_DEPENDENT; + } + if (a == STATE_OK || b == STATE_OK) { + return STATE_OK; + } + return MAX(a, b); +} + +#endif -- cgit v1.2.3-74-g34f1