Writing custom checks¶
Infracheck provides very basic scripts for health checking, you may probably want to write your own. It’s really simple.
- “check” scripts are in “checks” directory of your project structure, here you can add a new check script
- Your script needs to take uppercase environment variables as input
- It is considered a good practice to validate environment variables presence in scripts
- Your script needs to return a valid exit code when:
- Any of environment variables is missing or has invalid value
- The check fails
- The check success
That’s all!
A few examples:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | #!/bin/bash
#
# Directory presence check
#
# @author Krzysztof Wesołowski
# @url https://iwa-ait.org
#
if [[ ! "${DIR}" ]]; then
echo "DIR parameter is missing"
exit 1
fi
if [[ ! -d "${DIR}" ]]; then
echo "Failed asserting that directory at '${DIR}' is present"
exit 1
fi
echo "'${DIR}' directory is present"
exit 0
|
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 | #!/usr/bin/env python3
"""
<sphinx>
load-average
------------
Checks if the load average is not below specified number
Parameters:
- max_load (unit: processor cores, example: 5.0, default: 1)
- timing (default: 15. The load average time: 1, 5, 15)
</sphinx>
"""
import os
import sys
import inspect
path = os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe()))) + '/../../'
sys.path.insert(0, path)
from infracheck.infracheck.checklib.loadavg import BaseLoadAverageCheck
class LoadAverageAuto(BaseLoadAverageCheck):
def main(self, timing: str, max_load: float):
current_load_average = self.get_load_average(timing)
if current_load_average > max_load:
return False, "Load {:.2f} exceeds allowed max. load of {:.2f}. Current load: {:s}".format(
current_load_average, max_load, self.get_complete_avg()
)
return True, "Load at level of {:.2f} is ok, current load: {:s}".format(
current_load_average, self.get_complete_avg())
if __name__ == '__main__':
app = LoadAverageAuto()
status, message = app.main(
timing=os.getenv('TIMING', '15'),
max_load=float(os.getenv('MAX_LOAD', 1))
)
print(message)
sys.exit(0 if status else 1)
|