#!/usr/bin/env python3 from datetime import datetime from json import load from subprocess import check_output from sys import argv, exit from time import time NODE = argv[1] NOW = int(time()) DAY_SECONDS = 60 * 60 * 24 snaps = set() try: with open(f'/etc/backup-server/config.json', 'r') as f: server_settings = load(f) # get all existing snapshots for NODE for line in check_output('LC_ALL=C zfs list -H -t snapshot -o name', shell=True).splitlines(): line = line.decode('UTF-8') if line.startswith('{}/{}@'.format(server_settings['zfs-base'], NODE)): _, snapname = line.split('@', 1) if 'zfs-auto-snap' in snapname: # migration from auto-snapshots, ignore continue ts, bucket = snapname.split('-', 1) snaps.add(int(ts)) if not snaps: print('No backups found!') exit(2) last_snap = sorted(snaps)[-1] delta = NOW - last_snap print('Last backup was on {} UTC'.format( datetime.fromtimestamp(last_snap).strftime('%Y-%m-%d %H:%M:%S'), )) if delta > (DAY_SECONDS * 2): exit(2) elif delta > DAY_SECONDS: exit(1) else: exit(0) except Exception as e: print(repr(e)) exit(3)