--- a/borgend.py Sun Dec 05 00:42:01 2021 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,129 +0,0 @@ -#!/usr/local/bin/python3 -# -# Borgend by Tuomo Valkonen, 2018 -# - -# Common modules -import os -import sys -import argparse -import platform -import logging -# Own modules needed at this stage -import borgend.branding as branding -import borgend.locations as locations - -# -# Argument processing -# - -epilog_format=""" -Configuration file location: - - %s - -Log directory: - - %s/ - """ - -parser=argparse.ArgumentParser( - description=branding.appname_stylised + ": BorgBackup scheduler, queue, and tray icon.", - epilog=epilog_format % (locations.cfgfile, locations.logs_dir), - formatter_class=argparse.RawDescriptionHelpFormatter) - -parser.add_argument( - '--no-tray', - dest='notray', - action='store_true', - help='Do not show the tray icon') - -parser.add_argument( - '--debug', - dest='debug', - action='store_true', - help='Set logging level to debug') - -args=parser.parse_args() - -# -# Done parsing args, import our own modules, and launch everything -# - -import borgend.config as config -import borgend.dreamtime as dreamtime -import borgend.loggers as loggers -from borgend.scheduler import Scheduler -from borgend.repository import Repository -from borgend.backup import Backup - -logger=loggers.mainlogger - -if args.debug: - logger.setLevel(logging.DEBUG) - -tray = None -repos=[] -backups=[] - -try: - dreamtime.start_monitoring() - - scheduler = Scheduler() - scheduler.start() - - repoconfigs=config.settings['repositories'] - - logger.info('Initialising repositories') - for i in range(len(repoconfigs)): - r=Repository(i, repoconfigs[i]) - repos.append(r) - - backupconfigs=config.settings['backups'] - - logger.info('Initialising backups') - for i in range(len(backupconfigs)): - b=Backup(i, backupconfigs[i], scheduler) - backups.append(b) - - if args.notray or platform.system()!='Darwin': - # Wait for scheduler to finish - run=scheduler.join - else: - # This is needed for Ctrl+C to work. - # TODO: proper exit handler, which seems to require - # ditching/forking/extending rumps to extend the NSApp class - from PyObjCTools.AppHelper import installMachInterrupt - installMachInterrupt() - # Start UI, and let it handle exit control - from borgend.ui import BorgendTray - tray=BorgendTray(backups); - run=tray.run - - for r in repos: - r.start() - - for b in backups: - b.start() - - run() - -except Exception as err: - # TODO: Should write errors here to stderr; - # perhaps add an extra stderr logger for error level messages - logger.exception("Exception fell through: exiting") - -finally: - logger.debug("Exiting") - - for b in backups: - b.terminate() - - for r in repos: - r.terminate() - - if tray: - tray.quit() - else: - logging.shutdown() -