Ejemplo n.º 1
0
 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()
Ejemplo n.º 2
0
    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")
Ejemplo n.º 3
0
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") )
Ejemplo n.º 4
0
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") )