You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
68 lines
1.8 KiB
Python
68 lines
1.8 KiB
Python
import sys
|
|
import traceback
|
|
import argparse
|
|
from enums import Enum
|
|
|
|
"""
|
|
CheckLib: a simple wrapper around Icinga checks dealing with common
|
|
code like correct error codes and output formatting
|
|
|
|
The main class is `Check`, other classes are just helpers.
|
|
"""
|
|
|
|
class Result(Enum):
|
|
"""
|
|
Enumeration of possible check results.
|
|
|
|
The values are related return codes.
|
|
"""
|
|
OK = 0
|
|
WARNING = 1
|
|
CRITICAL = 2
|
|
UNKNOWN = 3
|
|
|
|
class Check:
|
|
"""
|
|
The class representing the check.
|
|
|
|
Expected usage is by invoking the `run` classmethod, which overtakes
|
|
the control, performs the check and returns the correct return
|
|
value.
|
|
|
|
The sequence is following:
|
|
1. run: Runs the check:
|
|
1. __init__: initialization
|
|
- Creation of default values in the instance
|
|
- Preparation of argument parser (TODO: Do we want this here?)
|
|
1. prepare_argparse: Optionally tweaks argparse's
|
|
ArgumentParser, e.g. adding more parameters
|
|
1. self.args = argparse.parse_args(sys.argv)
|
|
1. check(): the function to check state and populate
|
|
self.result, self.short_message and so on.
|
|
1. sys.exit with the relevant exit code according to
|
|
self.result
|
|
- If anything fails, e.g. by raising an exception,
|
|
the run method returns the UNKNOWN result and
|
|
uses the traceback as message.
|
|
|
|
Instead of using self.check, the default implementation invokes
|
|
measure method and compares its value to thresholds given either
|
|
by semi-standard arguments, or defaults defined in the class.
|
|
(If neither method is defined, the check fails. In other words,
|
|
you need to either implement measure, or override check.)
|
|
|
|
FIXME: It is currently not documented, which attributes of the instance
|
|
are used.
|
|
"""
|
|
|
|
@classmethod
|
|
def run(cls, *args, **kwargs):
|
|
"""
|
|
This method implements the checking start-to-end.
|
|
|
|
The arguments, if any, are passed to the __init__ of the class.
|
|
"""
|
|
|
|
try:
|
|
|