コード例 #1
0
 def apply(self, task):
     nodeId = None
     name = task.name
     parent, created = self.getOrCreateParentNode(task)
     user = task.user
     priority = task.priority
     dispatchKey = task.dispatchKey
     maxRN = task.maxRN
     if isinstance(task, TaskGroup):
         strategy = task.strategy
         node = FolderNode(nodeId,
                           name,
                           parent,
                           user,
                           priority,
                           dispatchKey,
                           maxRN,
                           strategy,
                           taskGroup=task)
     else:
         node = TaskNode(None, name, parent, user, priority, dispatchKey,
                         maxRN, task)
     task.nodes[RULENAME] = node
     if created:
         return [node.parent, node]
     else:
         return [node]
コード例 #2
0
 def register(cls, dispatchTree, userName, rootName):
     rootNode = FolderNode(None, rootName, dispatchTree.root, userName, 1,
                           1, 0, FifoStrategy(), None)
     rule = cls(dispatchTree, rootNode)
     dispatchTree.rules.append(rule)
     for task in dispatchTree.tasks.values():
         rule.apply(task)
     return rule
コード例 #3
0
 def getOrCreateParentNode(self, task):
     if task.parent:
         return (task.parent.nodes[RULENAME], False)
     userName = task.user
     for child in self.root.children:
         if child.name == userName:
             return (child, False)
     userNode = FolderNode(None, userName, self.root, userName, 1, 1.0, -1,
                           FifoStrategy(), None)
     return (userNode, True)
コード例 #4
0
 def __init__(self):
     # core data
     self.root = FolderNode(0, "root", None, "root", 1, 1, 0,
                            FifoStrategy())
     self.nodes = WeakValueDictionary()
     self.nodes[0] = self.root
     self.pools = {}
     self.renderNodes = {}
     self.tasks = {}
     self.rules = []
     self.poolShares = {}
     self.commands = {}
     # deduced properties
     self.nodeMaxId = 0
     self.poolMaxId = 0
     self.renderNodeMaxId = 0
     self.taskMaxId = 0
     self.commandMaxId = 0
     self.poolShareMaxId = 0
     self.toCreateElements = []
     self.toModifyElements = []
     self.toArchiveElements = []
     # listeners
     self.nodeListener = ObjectListener(self.onNodeCreation,
                                        self.onNodeDestruction,
                                        self.onNodeChange)
     self.taskListener = ObjectListener(self.onTaskCreation,
                                        self.onTaskDestruction,
                                        self.onTaskChange)
     # # JSA
     # self.taskGroupListener = ObjectListener(self.onTaskCreation, self.onTaskDestruction, self.onTaskGroupChange)
     self.renderNodeListener = ObjectListener(self.onRenderNodeCreation,
                                              self.onRenderNodeDestruction,
                                              self.onRenderNodeChange)
     self.poolListener = ObjectListener(self.onPoolCreation,
                                        self.onPoolDestruction,
                                        self.onPoolChange)
     self.commandListener = ObjectListener(
         onCreationEvent=self.onCommandCreation,
         onChangeEvent=self.onCommandChange)
     self.poolShareListener = ObjectListener(self.onPoolShareCreation)
     self.modifiedNodes = []
コード例 #5
0
    def initPoolsDataFromBackend(self):
        '''
        Loads pools and workers from appropriate backend.
        '''
        try:
            if settings.POOLS_BACKEND_TYPE == "file":
                manager = FilePoolManager()
            elif settings.POOLS_BACKEND_TYPE == "ws":
                manager = WebServicePoolManager()
            elif settings.POOLS_BACKEND_TYPE == "db":
                return False
        except Exception:
            return False

        computers = manager.listComputers()

        ### recreate the pools
        poolsList = manager.listPools()
        poolsById = {}
        for poolDesc in poolsList:
            pool = Pool(id=int(poolDesc.id), name=str(poolDesc.name))
            self.dispatchTree.toCreateElements.append(pool)
            poolsById[pool.id] = pool

        ### recreate the rendernodes
        rnById = {}
        for computerDesc in computers:
            try:
                computerDesc.name = socket.getfqdn(computerDesc.name)
                ip = socket.gethostbyname(computerDesc.name)
            except socket.gaierror:
                continue
            renderNode = RenderNode(
                computerDesc.id,
                computerDesc.name + ":" + str(computerDesc.port),
                computerDesc.cpucount * computerDesc.cpucores,
                computerDesc.cpufreq, ip, computerDesc.port,
                computerDesc.ramsize, json.loads(computerDesc.properties))
            self.dispatchTree.toCreateElements.append(renderNode)
            ## add the rendernodes to the pools
            for pool in computerDesc.pools:
                poolsById[pool.id].renderNodes.append(renderNode)
                renderNode.pools.append(poolsById[pool.id])
            self.dispatchTree.renderNodes[str(renderNode.name)] = renderNode
            rnById[renderNode.id] = renderNode

        # add the pools to the dispatch tree
        for pool in poolsById.values():
            self.dispatchTree.pools[pool.name] = pool
        if self.cleanDB or not self.enablePuliDB:
            graphs = FolderNode(1, "graphs", self.dispatchTree.root, "root", 0,
                                0, 0, FifoStrategy())
            self.dispatchTree.toCreateElements.append(graphs)
            self.dispatchTree.nodes[graphs.id] = graphs
            ps = PoolShare(1, self.dispatchTree.pools["default"], graphs,
                           PoolShare.UNBOUND)
            self.dispatchTree.toCreateElements.append(ps)
        if self.enablePuliDB:
            # clean the tables pools and rendernodes (overwrite)
            self.pulidb.dropPoolsAndRnsTables()
            self.pulidb.createElements(self.dispatchTree.toCreateElements)
            self.dispatchTree.resetDbElements()

        return True