diff --git a/src/restic/snapshots.py b/src/restic/snapshots.py new file mode 100644 index 0000000..c51d90d --- /dev/null +++ b/src/restic/snapshots.py @@ -0,0 +1,44 @@ +import json +import logging +import subprocess + +import click +from rich.logging import RichHandler + +from restic.console import console, logger +from restic.loki import send_to_loki + + +def run(loki_url: str = None): + cmd = 'restic snapshots --json' + + logger.debug(f'Running cmd [bright_black]{cmd}[/]') + process = subprocess.Popen( + cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True, shell=True + ) + + with process.stdout: + for line in iter(process.stdout.readline, ''): + try: + data = json.loads(line) + except Exception as e: + logger.exception(e) + else: + console.print(data) + + if loki_url is not None: + send_to_loki(loki_url=loki_url, line=line, backup='snapshots') + + +@click.command() +@click.option('--loki-url', type=str, help='Loki URL for logging', envvar='LOKI_URL') +def main(loki_url: str = None): + logging.basicConfig( + level='DEBUG', format='%(message)s', handlers=[RichHandler(markup=True, console=console)] + ) + + run(loki_url) + + +if __name__ == '__main__': + main()