#!/usr/bin/python3
# -*- coding: utf-8 -*-


import sys
import warnings
from time import sleep

with warnings.catch_warnings():
    warnings.simplefilter("ignore")
    from bareos.bsock import Password, DirectorConsole

from pyeole.process import system_code
from pyeole.bareos import run_bareos_cmd, bareos_query
from pyeole.service import manage_services
from creole.client import CreoleClient

client = CreoleClient()

def test_bareos():
    host = 'localhost'
    machine = client.get_creole('nom_machine')
    password = client.get('bareos.monitor.bareos_mon_password')
    port = 9101
    DirectorConsole(address=host,
                    port=port,
                    name=f'bareos-{machine}-mon',
                    password=Password(password),
                    tls_psk_enable=False,
                    protocolversion=1,
                    )

def update_needed():
    test_bareos()
    count_volumes = bareos_query('count_volumes', empty_not_allowed=True)
    if not count_volumes:
        print('impossible de compter le nombre de volume, le serveur bareos est peut être défaillant')
        sys.exit(1)
    #attention la locale est en_US avec séparateur virgule pour les milliers
    volume_count = int(bareos_query('count_volumes')[0]['volumes'].replace(',', ''))
    if volume_count > 0:
        return True
    return False

def update_volume_size():
    stdin = "@output /dev/null\nupdate volume\n14\nexit\n"
    code, stdout, stderr = run_bareos_cmd(stdin)
    if code != 0:
        sys.exit(code)


if __name__ == '__main__':
    idx = 0
    while True:
        try:
            if client.get_creole('activer_bareos_dir', 'non') == 'oui' and update_needed():
                update_volume_size()
        except Exception as err:
            if idx == 0:
                manage_services('restart', 'bareos-director')
            if idx == 10:
                print(err)
                system_code(['systemctl', '--no-pager', '-l', 'status', 'bareos-director.service'])
                sys.exit(1)
            idx += 1
            sleep(1)
        else:
            break
    sys.exit(0)
