borgend/__main__.py

changeset 135
45c1a38f8709
parent 134
a7aa8ca7b3d0
child 142
ad1d4a29ec75
equal deleted inserted replaced
134:a7aa8ca7b3d0 135:45c1a38f8709
42 '--debug', 42 '--debug',
43 dest='debug', 43 dest='debug',
44 action='store_true', 44 action='store_true',
45 help='Set logging level to debug') 45 help='Set logging level to debug')
46 46
47 args=parser.parse_args() 47 def main():
48 args=parser.parse_args()
48 49
49 # 50 # Done parsing args, import our own modules, and launch everything
50 # Done parsing args, import our own modules, and launch everything 51 import borgend.config as config
51 # 52 import borgend.dreamtime as dreamtime
53 import borgend.loggers as loggers
54 from borgend.scheduler import Scheduler
55 from borgend.repository import Repository
56 from borgend.backup import Backup
52 57
53 import borgend.config as config 58 logger=loggers.mainlogger
54 import borgend.dreamtime as dreamtime
55 import borgend.loggers as loggers
56 from borgend.scheduler import Scheduler
57 from borgend.repository import Repository
58 from borgend.backup import Backup
59 59
60 logger=loggers.mainlogger 60 if args.debug:
61 logger.setLevel(logging.DEBUG)
61 62
62 if args.debug: 63 tray = None
63 logger.setLevel(logging.DEBUG) 64 repos=[]
65 backups=[]
64 66
65 tray = None 67 try:
66 repos=[] 68 dreamtime.start_monitoring()
67 backups=[]
68 69
69 try: 70 scheduler = Scheduler()
70 dreamtime.start_monitoring() 71 scheduler.start()
71 72
72 scheduler = Scheduler() 73 repoconfigs=config.settings['repositories']
73 scheduler.start()
74 74
75 repoconfigs=config.settings['repositories'] 75 logger.info('Initialising repositories')
76 for i in range(len(repoconfigs)):
77 r=Repository(i, repoconfigs[i])
78 repos.append(r)
76 79
77 logger.info('Initialising repositories') 80 backupconfigs=config.settings['backups']
78 for i in range(len(repoconfigs)):
79 r=Repository(i, repoconfigs[i])
80 repos.append(r)
81 81
82 backupconfigs=config.settings['backups'] 82 logger.info('Initialising backups')
83 for i in range(len(backupconfigs)):
84 b=Backup(i, backupconfigs[i], scheduler)
85 backups.append(b)
83 86
84 logger.info('Initialising backups') 87 if args.notray or platform.system()!='Darwin':
85 for i in range(len(backupconfigs)): 88 # Wait for scheduler to finish
86 b=Backup(i, backupconfigs[i], scheduler) 89 run=scheduler.join
87 backups.append(b) 90 else:
91 # This is needed for Ctrl+C to work.
92 # TODO: proper exit handler, which seems to require
93 # ditching/forking/extending rumps to extend the NSApp class
94 from PyObjCTools.AppHelper import installMachInterrupt
95 installMachInterrupt()
96 # Start UI, and let it handle exit control
97 from borgend.ui import BorgendTray
98 tray=BorgendTray(backups);
99 run=tray.run
88 100
89 if args.notray or platform.system()!='Darwin': 101 for r in repos:
90 # Wait for scheduler to finish 102 r.start()
91 run=scheduler.join
92 else:
93 # This is needed for Ctrl+C to work.
94 # TODO: proper exit handler, which seems to require
95 # ditching/forking/extending rumps to extend the NSApp class
96 from PyObjCTools.AppHelper import installMachInterrupt
97 installMachInterrupt()
98 # Start UI, and let it handle exit control
99 from borgend.ui import BorgendTray
100 tray=BorgendTray(backups);
101 run=tray.run
102 103
103 for r in repos: 104 for b in backups:
104 r.start() 105 b.start()
105 106
106 for b in backups: 107 run()
107 b.start()
108 108
109 run() 109 except Exception as err:
110 # TODO: Should write errors here to stderr;
111 # perhaps add an extra stderr logger for error level messages
112 logger.exception("Exception fell through: exiting")
110 113
111 except Exception as err: 114 finally:
112 # TODO: Should write errors here to stderr; 115 logger.debug("Exiting")
113 # perhaps add an extra stderr logger for error level messages
114 logger.exception("Exception fell through: exiting")
115 116
116 finally: 117 for b in backups:
117 logger.debug("Exiting") 118 b.terminate()
118 119
119 for b in backups: 120 for r in repos:
120 b.terminate() 121 r.terminate()
121 122
122 for r in repos: 123 if tray:
123 r.terminate() 124 tray.quit()
125 else:
126 logging.shutdown()
124 127
125 if tray: 128 if __name__ == "__main__":
126 tray.quit() 129 sys.exit(main())
127 else:
128 logging.shutdown()
129

mercurial