示例#1
0
def analyzeProfile(fileLocation= None):

	
	
	metadata = MetaData()
	
	myDBDesign = DBDesign()
	
	hostDB = myDBDesign.HostDBDesign(metadata)
	applicationDB = myDBDesign.ApplicationDesign(metadata)
	appProfileDB = myDBDesign.AppProfileDBDesign(metadata)
	gridTaskDesignDB = myDBDesign.GridTaskDBDesign(metadata)
	
	metadata.create_all(base.engine)
	
	print("Starting connection with GridWay metascheduler")
	ExecutionManager.initGridSession()
	print("Connection stablished")
	
	
	
	#load application
	myApp = base.Session.query(Application).order_by(Application.id.desc()).first()
	
	base.tmpExecutionFolder = base.tmpExecutionFolder + "/" + str(myApp.id) + "/"
	
	myTasks = base.Session.query(GridTask).filter(GridTask.applicationID==myApp.id)
	
	for task in myTasks:
		ExecutionManager.updateGridTaskStatus(task)
				
	finishedTasks = [gridTask for gridTask in myTasks if gridTask.status=="DONE"]
	for gridTask in finishedTasks:
		if gridTask.type == "applicationProfiling":
			myApp.updateInfoAfterProfiling(gridTask)

	print ("")
	print("Closing conection with GridWay metascheduler")
	ExecutionManager.exitGridSession()
	print("Connection closed")
示例#2
0
    def execute(self):

        while True:
            # update status of tasks being executed
            print("---")
            print("date:" + str(datetime.now()))

            print("")
            print("CHECKING FOR GRID CERTIFICATE")
            if not InformationManager.checkForValidCertificates():
                print("Could not find a valid certificate")
                print("Finishing execution now :(")
                break

                # ===================================================================
                # print ("PRINCICIPIO DE EXECUTE")
                # for task in self.infrastructureTasks:
                # 	print ("Task " + task.gwID + "has hosttype " +  str(task.host.__class__))
                #
                #
                # ===================================================================

            print("")
            print("UPDATING INFRASTRUCTURE STATUS")
            for gridTask in self.infrastructureTasks:
                ExecutionManager.updateGridTaskStatus(gridTask)

            finishedTasks = [gridTask for gridTask in self.infrastructureTasks if gridTask.status == "DONE"]
            for gridTask in finishedTasks:
                if gridTask.type == "hostProfiling":
                    self.myInfrastructure.updateInfoAfterProfiling(gridTask)
                    # and update gridTask status
                ExecutionManager.removeTaskFromGW(gridTask)
                self.infrastructureTasks.remove(gridTask)

            self.myInfrastructure.updateStatus(self.infrastructureTasks)

            print("")
            print("CREATING INFRASTRUCTURE TASKS")
            self.executeInfrastructureTasks()

            # ===================================================================
            # print ("FILNAL DE EXECUTE")
            # for task in self.infrastructureTasks:
            # 	print ("Task " + task.gwID + "has hosttype " +  str(task.host.__class__))
            # ===================================================================

            print("UPDATE APPLICATION STATUS")
            for gridTask in self.applicationTasks:
                ExecutionManager.updateGridTaskStatus(gridTask)

                # estoe s una chapuza
            totalTasks = self.infrastructureTasks + self.applicationTasks

            self.myInfrastructure.updateStatus(totalTasks)

            # process recently finishedTasks
            finishedTasks = [gridTask for gridTask in self.applicationTasks if gridTask.status == "DONE"]
            for gridTask in finishedTasks:
                if gridTask.type == "applicationProfiling":
                    self.myApplication.updateInfoAfterProfiling(gridTask)
                elif gridTask.type == "applicationExecution":
                    self.myApplication.updateInfoAfterExecution(gridTask)

                    # and update gridTask status
                ExecutionManager.removeTaskFromGW(gridTask)
                self.applicationTasks.remove(gridTask)

                # check for execution finish
            if self.myApplication.remainingSamples <= 0:
                print("Starting the exit of  execution loop")

                # TODO: poner en los hosts que el máximo de host total es el maximo del total y del maximoThisTime
                self.myApplication.finished = 1
                base.Session.add(self.myApplication)

                print("Application marked as finished")

                print("")
                print("Storing information about available hosts on remote sites")
                for host in self.myInfrastructure.hosts:
                    host.maxSlotCount = max(host.maxSlotCount, host.maxSlotCountThisTime)
                    base.Session.add(host)

                print("")
                print("Removing finished tasks from gridWay")

                # esto es discutible,
                # ahora, si una tarea de profiling ha llegado hasta el final de la ejecución sin ser completada, la marco como fallida
                # esto perjudica a los sitios que tienen un tiempo enorme de respuesta
                # lo contrario hace que si un sitio no contesta se siga considerando pendiente de profiling hasta el infinito

                for gridTask in self.applicationTasks:
                    ExecutionManager.removeTaskFromGW(gridTask)
                    if gridTask.type == "hostProfiling":
                        self.myInfrastructure.updateInfoAfterProfiling(gridTask)
                try:
                    base.Session.commit()
                except:
                    base.Session.rollback()
                    print("Lost connection with database, not storing anything!")

                print("Exiting execution loop")
                break

            print("")
            print("CREATING NEW EXECUTION TASKS")
            # ===================================================================
            # self.myInfrastructure.showHosts()
            # ===================================================================
            applicationExecutionTasks = self.mySchedulingAlgorithm.createApplicationTasks(
                self.myInfrastructure, self.myApplication, self.applicationTasks
            )
            for gridTask in applicationExecutionTasks:
                ExecutionManager.submit(gridTask)
                self.applicationTasks.append(gridTask)
                base.Session.add(gridTask)

            try:
                base.Session.commit()
            except:
                base.Session.rollback()
                print("Lost connection with database, not storing anything!")

            print("...")
            sleep(15)