summaryrefslogtreecommitdiffstats
path: root/lib/states.h
blob: 4a170caa099d5ce5057c0796560daaee7aef3e9c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#ifndef _MP_STATES_
#define _MP_STATES_

#include "../config.h"
#include <sys/param.h>

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