summaryrefslogtreecommitdiff
path: root/test/nagios/support/nagios_test.py
blob: 3eb8d55690382420de2b2dc775c45633a768f369 (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
import __main__ as main
import os
import sys
import nagios_report

def run(test):
    """
    run takes a function and tries it out.
    If it returns nothing or 0 everything is fine and run prints an OK message
    with the function name.
    >>> def this_works_fine(): return
    >>> run(this_works_fine)
    0 nagios_test.py - OK - this_works_fine
    0
    >>> def this_also_works_fine(): return 0
    >>> run(this_also_works_fine)
    0 nagios_test.py - OK - this_also_works_fine
    0

    If the function returns something else it will be printed as a warning.
    >>> run(lambda : "this is a warning")
    1 nagios_test.py - WARNING - this is a warning
    1

    Errors raised will result in a CRITICAL nagios string.
    >>> def failure(): raise Exception("something went wrong")
    >>> run(failure)
    2 nagios_test.py - CRITICAL - something went wrong
    2
    """
    try:
        name = os.path.basename(main.__file__)
    except AttributeError: 
        name = sys.argv[0]
    ok, warn, fail, unknown = nagios_report.functions_for_system(name)
    try:
        warning = test()
        if warning and warning != 0:
            code = warn(warning)
        else:
            code = ok(test.__name__)
    except Exception as exc:
        code = fail(exc.message or str(exc))
    return code


if __name__ == "__main__":
    import doctest
    doctest.testmod()