def __init__(self, daemon, spool): """Initialize the TaskManager.""" singleton.Singleton.__init__(self) Observable.__init__(self) self.spool = spool self.tasks = {} self.mtx = threading.RLock() self.daemon = daemon self.activityQueue = ActivityQueue()
def __init__(self, daemon, spool): """Initialize the TaskManager.""" singleton.Singleton.__init__(self) Observable.__init__(self) self.spool = spool self.tasks = {} self.mtx = threading.RLock() self.daemon = daemon self.activityQueue = ActivityQueue() # TODO: fixme -> this has to be moved somewhere else self.taskStateLog = open("/var/log/xenbee/task-state.log", "a")
class TaskManager(singleton.Singleton, Observable): """The task-manager. Through this class every known task can be controlled: - create new tasks """ def __init__(self, daemon, spool): """Initialize the TaskManager.""" singleton.Singleton.__init__(self) Observable.__init__(self) self.spool = spool self.tasks = {} self.mtx = threading.RLock() self.daemon = daemon self.activityQueue = ActivityQueue() # TODO: fixme -> this has to be moved somewhere else self.taskStateLog = open("/var/log/xenbee/task-state.log", "a") def new(self, ticket_id): """Returns a new task.""" from xbe.util.uuid import uuid self.mtx.acquire() task = Task(ticket_id, uuid(), self) self.tasks[task.id()] = task self.mtx.release() self.notify( (task, "newTask") ) return task def removeTask(self, task): """Remove the 'task' from the manager.""" try: self.mtx.acquire() self.tasks.pop(task.id()) task.cleanUp() del task.mgr self.notify( (task, "removeTask") ) finally: self.mtx.release() def registerActivity(self, task, activity, on_finish, on_fail, on_abort): log.debug("registering new activity %s for task %s" % (repr(activity), task.id())) self.activityQueue.registerActivity(task, activity, on_finish, on_fail, on_abort) def abortActivities(self, task): self.activityQueue.abortActivities(task) def lookupByID(self, id): """Return the task for the given ID. returns the task object or None """ return self.tasks.get(id) def logStateChange(self, task, state): stateMap = { "Pending:Reserved" : 1, "Pending:Confirmed" : 1, "Running:Stage-In" : 64, "Running:Instance-Starting" : 2, "Running:Executing" : 2, "Running:Stage-Out" : 128, "Running:Instance-Stopping" : 128, "Finished" : 8, "Failed" : 4, "Terminated" : 4 } XBEDaemon.getInstance().protocolfactory.brokerJobState(task.ticket_id(), task.id(), state, stateMap[state]) try: log.info("state of task changed: %s -> %s", task.id(), state) # calana extension self.mtx.acquire() exitcode = 0 if hasattr(task, "exitcode"): exitcode = task.exitcode self.taskStateLog.write("%s;%d;%s;%d;%d\n" % ("001", int(time.time()), task.ticket_id(), stateMap[state], exitcode )) self.taskStateLog.flush() finally: self.mtx.release() def terminateTask(self, task, reason): self.abortActivities(task) task.terminate(reason) def taskFailed(self, task): """Called when a task has failed somehow.""" self.notify( (task, "taskFailed") ) def taskReady(self, task): """Called when a task says, that it's ready.""" self.notify( (task, "taskReady") ) def taskFinished(self, task): """Called when a task finished.""" self.notify( (task, "taskFinished") )
class TaskManager(singleton.Singleton, Observable): """The task-manager. Through this class every known task can be controlled: - create new tasks """ def __init__(self, daemon, spool): """Initialize the TaskManager.""" singleton.Singleton.__init__(self) Observable.__init__(self) self.spool = spool self.tasks = {} self.mtx = threading.RLock() self.daemon = daemon self.activityQueue = ActivityQueue() def new(self): """Returns a new task.""" from xbe.util.uuid import uuid self.mtx.acquire() task = Task(uuid(), self) self.tasks[task.id()] = task self.mtx.release() self.notify( (task, "newTask") ) return task def removeTask(self, task): """Remove the 'task' from the manager.""" try: self.mtx.acquire() self.tasks.pop(task.id()) del task.mgr self.notify( (task, "removeTask") ) finally: self.mtx.release() def registerActivity(self, task, activity, on_finish, on_fail, on_abort): log.debug("registering new activity %s for task %s" % (repr(activity), task.id())) self.activityQueue.registerActivity(task, activity, on_finish, on_fail, on_abort) def abortActivities(self, task): self.activityQueue.abortActivities(task) def lookupByID(self, id): """Return the task for the given ID. returns the task object or None """ return self.tasks.get(id) def terminateTask(self, task, reason): self.abortActivities(task) task.terminate(reason) def taskFailed(self, task): """Called when a task has failed somehow.""" self.notify( (task, "taskFailed") ) def taskReady(self, task): """Called when a task says, that it's ready.""" self.notify( (task, "taskReady") ) def taskFinished(self, task): """Called when a task finished.""" self.notify( (task, "taskFinished") )