#!/usr/bin/env python3

"""
<sphinx>
load-average-auto
-----------------

Checks if the load average is not more than 100%

Parameters:

- maximum_above (unit: processor cores, default: 0.5 - half of a core)
- 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, maximum_above: float):
        current_load_average = self.get_load_average(timing)
        cpu_count = self.available_cpu_count()
        max_load = cpu_count + maximum_above

        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'),
        maximum_above=float(os.getenv('MAXIMUM_ABOVE', 0.5))
    )

    print(message)
    sys.exit(0 if status else 1)

