backup.py

changeset 34
9fce700d42de
parent 32
06fc14211ba9
child 38
085a635f23f5
equal deleted inserted replaced
33:91421eeb4426 34:9fce700d42de
4 4
5 import config 5 import config
6 import logging 6 import logging
7 import time 7 import time
8 import keyring 8 import keyring
9 import borgend
9 from instance import BorgInstance 10 from instance import BorgInstance
10 from queue import Queue 11 from queue import Queue
11 from threading import Thread, Lock, Timer 12 from threading import Thread, Lock, Timer
12 13
13 logger=logging.getLogger(__name__) 14 logger=borgend.logger.getChild(__name__)
14 15
15 loglevel_translation={ 16 loglevel_translation={
16 'CRITICAL': logging.CRITICAL, 17 'CRITICAL': logging.CRITICAL,
17 'ERROR': logging.ERROR, 18 'ERROR': logging.ERROR,
18 'WARNING': logging.WARNING, 19 'WARNING': logging.WARNING,
289 self.common_parameters + 290 self.common_parameters +
290 self.prune_parameters)) 291 self.prune_parameters))
291 else: 292 else:
292 raise NotImplementedError("Invalid operation '%s'" % op['operation']) 293 raise NotImplementedError("Invalid operation '%s'" % op['operation'])
293 except Exception as err: 294 except Exception as err:
294 logging.debug('Rescheduling after failure') 295 logger.debug('Rescheduling after failure')
295 self.lastrun_when=time.monotonic() 296 self.lastrun_when=time.monotonic()
296 self.lastrun_success=False 297 self.lastrun_success=False
297 self.__schedule_unlocked() 298 self.__schedule_unlocked()
298 raise err 299 raise err
299 300
346 op=self.scheduled_operation 347 op=self.scheduled_operation
347 self.scheduled_operation=None 348 self.scheduled_operation=None
348 self.timer=None 349 self.timer=None
349 350
350 if self.__is_running_unlocked(): 351 if self.__is_running_unlocked():
351 logging.info('Aborted queue operation, as an operation is already running') 352 logger.info('Aborted queue operation, as an operation is already running')
352 else: 353 else:
353 # TODO: Queue on 'repository' and online status for SSH, etc. 354 # TODO: Queue on 'repository' and online status for SSH, etc.
354 355
355 # TODO: UI comms. queue? 356 # TODO: UI comms. queue?
356 self.__launch(op, None) 357 self.__launch(op, None)
390 op=self.__next_operation_unlocked() 391 op=self.__next_operation_unlocked()
391 392
392 if op: 393 if op:
393 now=time.monotonic() 394 now=time.monotonic()
394 delay=max(0, op['when_monotonic']-now) 395 delay=max(0, op['when_monotonic']-now)
395 logging.info("Scheduling '%s' (detail: %s) of '%s' in %d seconds" % 396 logger.info("Scheduling '%s' (detail: %s) of '%s' in %d seconds" %
396 (op['operation'], op['detail'], self.name, delay)) 397 (op['operation'], op['detail'], self.name, delay))
397 tmr=Timer(delay, self.__queue_timed_operation) 398 tmr=Timer(delay, self.__queue_timed_operation)
398 self.scheduled_operation=op 399 self.scheduled_operation=op
399 self.timer=tmr 400 self.timer=tmr
400 tmr.start() 401 tmr.start()
401 402

mercurial