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) |