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 |
|