Hide keyboard shortcuts

Hot-keys on this page

r m x p   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

from lbCVMFSTools.Injector import inject, injector 

from lbCVMFSTools.TaskHandlerInterface import TaskHandlerInterface 

from lbCVMFSTools.TransactionHandlerInterface import \ 

TransactionHandlerInterface 

from contextlib import contextmanager 

import logging 

 

 

@inject(taskHandler=TaskHandlerInterface, 

transactionHandler=TransactionHandlerInterface) 

class Scheduler(): 

def __init__(self, taskHandler=None, transactionHandler=None): 

self.taskHandler = taskHandler 

self.transactionHandler = transactionHandler 

if hasattr(self.taskHandler, 'no_auto_start'): 

if self.taskHandler.no_auto_start: 

return 

self.start() 

 

def start(self): 

if not self.taskHandler.should_run(): 

return 

tasks = self.taskHandler.get_list_of_tasks() 

all_ok = True 

for task in tasks: 

logging.info("Starting executing: %s" % str(task)) 

error = self.execute(task=task) 

if error: 

all_ok = False 

logging.info("Fail executing: %s" % str(task)) 

logging.error(error) 

else: 

logging.info("Successfully executed: %s" % str(task)) 

if all_ok: 

self.taskHandler.update_last_run() 

 

def execute(self, task): 

try: 

with self.transaction(): 

self.taskHandler.perform_task(task) 

return None 

except UserWarning as e: 

return None 

except Exception as e: 

return e 

 

@contextmanager 

def transaction(self): 

logging.info("Starting transaction") 

self.transactionHandler.transactionStart() 

try: 

yield 

logging.info("Sending transaction") 

self.transactionHandler.transactionPublish() 

except Exception as e: 

logging.info("Aborting transaction") 

self.transactionHandler.transactionAbort() 

raise e