Ejemplo n.º 1
0
def MonitorWorkFunc(self,workItem):
    # for this function, data is the parallel multiprocess started for monitoring
    if self.deployed != True:
        self.workQueue.remove(workItem)
        return
    # get data from queue
    updateCanvas = False
    try:
        nodes = self.runningDeployment.getChildrenByKind('Node')
        nodeMap = {}
        for n in nodes:
            nodeMap[n.properties['name']] = n
        data = workItem.queue.get(False)
        while data != None:
            #print "GOT DATA: {}".format(data)
            dataList = data[0].split(' ')
            nodeName = dataList[0]
            node = nodeMap[nodeName]
            if dataList[1] == "UP":
                node.style['overlay']['outlineColor']=self.overlayDict['Node Up Overlay']
            else:
                node.style['overlay']['outlineColor']=self.overlayDict['Node Down Overlay']
            updateCanvas = True
            data = workItem.queue.get(False)
    except:
        # if we get here, we've read everything from the q
        if updateCanvas:
            self.DrawModel(self.runningDeployment,self.runningDeploymentCanvas)
    if not workItem.process.is_alive(): # process has terminated
        # update deployment overlays here
        workerThread = WorkerThread(func = lambda : deployment.monitorTest(self,
                                                                           workItem.queue)
                                )
        workerThread.start()
        workItem.data = workerThread
Ejemplo n.º 2
0
    def OnDeploymentDeploy(self,e):
        if self.deployed == False:
            selectedPage = self.activeAspect.GetSelection()
            objName = self.activeAspect.GetPageText(selectedPage)
            info = self.activeAspectInfo.GetPageInfo(objName)
            dep = info.obj
            canvas = info.canvas
            testName = "NewTest"
            properties = OrderedDict()
            properties['name'] = testName
            properties['period'] = str(self.workTimerPeriod)
            properties['hardware_reference'] = None
            referenceDict = OrderedDict()
            referenceDict['hardware_reference'] = dep.properties['rhw_reference'].children
            inputs = dialogs.EditorWindow(parent=self,
                                          editDict=properties,
                                          title="Deployment Options",
                                          referenceDict = referenceDict)
            if inputs != OrderedDict():
                for key,value in inputs.iteritems():
                    properties[key] = value

                self.rosCoreHost = properties['hardware_reference']
                rosCoreIP = self.rosCoreHost.properties['ip_address']
                numNodes, numHosts = self.BuildHostDict(dep,rosCoreIP)

                print "ROSMOD::Starting ROSCORE!"
                deployment.startMaster(self,None)
                testName = properties['name']

                self.workTimerPeriod = float(properties['period'])
                self.workTimer.Start(self.workTimerPeriod*1000)

                deploymentProgressQ = multiprocessing.Queue()
                dlg = dialogs.RMLProgressDialog( parent = self,
                                                 title="Deployment Progress",
                                                 progress_q = deploymentProgressQ,
                                                 numItems=numNodes)
                workerThread = WorkerThread(
                    func = lambda : deployment.deployTest(
                        self,
                        deploymentProgressQ
                    )
                )
                self.updatedHostDict = False
                workerThread.start()
                dlg.ShowModal()
                dlg.Destroy()
                self.runningDeployment = dep
                self.runningDeploymentCanvas = canvas
                self.runningNodes = numNodes
                self.deployed = True
                monitorQ = multiprocessing.Queue()
                workerThread = WorkerThread(
                    func = lambda : deployment.monitorTest(
                        self,
                        monitorQ
                    )
                )
                monitorWorkItem = WorkItem(process = workerThread,
                                           queue = monitorQ,
                                           workFunc = lambda e : MonitorWorkFunc(self,e))
                self.workQueue.append(monitorWorkItem)
                workerThread.start()
        else:
            dialogs.ErrorDialog(self,"System is already running a deployment!")