#!/usr/bin/env python3
import argparse
import os
import datetime
import time


def get_args():
    parser = argparse.ArgumentParser(
        description='backup_check - check whether backups are current')

    parser.add_argument('-H', '--host',
                        required=True,
                        action='store',
                        help='host name, used also as backup filename base ')
    parser.add_argument('-o', '--backupdir',
                        required=True,
                        action='store',
                        help='backup directory')
    parser.add_argument('-m', '--maxage',
                        required=False,
                        action='store',
                        type=int,
                        help='maximum backup age in hours, default: 24')
    parser.add_argument('-v', '--verbose',
                        required=False,
                        action='store_true',
                        help='be verbose')

    args = parser.parse_args()
    return args

def main():
    args = get_args()
    if args.maxage:
        maxage = args.maxage
    else:
        maxage = 24
    configpath = f'{args.backupdir}/{args.host}.config'

    try:
        info = os.stat(configpath)
        backuptime = info.st_mtime
    except FileNotFoundError:
        print(f'Last backup: never (backup file not found: {configpath})')
        exit(1)

    age = (time.time() - backuptime) / 3600
    if age > 24:
        agetext = f'{age // 24:.0f}d{age % 24:.0f}h'
    else:
        agetext = f'{age:.1f}h'
    backuptimestamp = datetime.datetime.fromtimestamp(backuptime).strftime('%F %H:%M:%S')
    if age > maxage:
        print(f'WARNING: {args.host}: last backup {backuptimestamp}, {agetext} ago (>{maxage}h)')
        exit(1)
    if args.verbose:
        print(f'{args.host}: last backup {backuptimestamp}, {agetext} ago')

if __name__ == "__main__":
    main()
# vim: set ft=python tabstop=4 shiftwidth=4 expandtab smarttab:
