def post(self, *args, **kwargs): arguments = [] # appIdToWorkerId = {} # blank = u'None' for workerId, stageCount in self.request.arguments.items(): arguments.append( (int(workerId), stageCount) ) #resourceManagerService = ResourceManagerService(self.getConfigValue(Config.HADOOP_YARN_RESOURCEMANAGER)) # получаем прогресс задач #progressResult = None #diedWorkers = [] # #if toGetProgress: # progressResult = resourceManagerService.getWorkerProgresses(toGetProgress) diedWorkers = [] workerIds = [workerId for workerId, stageCount in arguments] aliveThreadNames = ThredService.getAliveThreads() for workerId in workerIds: if not 'worker-' + str(workerId) in aliveThreadNames: diedWorkers.append(workerId) workerStates = [] if diedWorkers: db = self.getDBSession() workerStates = db.query(Worker.workerId, Worker.status).filter(Worker.workerId.in_(diedWorkers)).all() self.renderJSON({'workerStates':workerStates})
def get(self, *args, **kwargs): appcode, workerId = args aliveThreadNames = ThredService.getAliveThreads() if not "worker-" + workerId in aliveThreadNames: self.renderJSON({"redirect": "status/" + workerId}) else: dbSession = self.getDBSession() # загружаем воркер из базы worker = dbSession.query(Worker).filter_by(workerId=int(workerId)).first() workerService = WorkerService(self.application.getResultPath(), worker) workerService.load() self.renderJSON( {"html": self.render("/dashboard/result/taskAlive.jinja2", query=workerService.query, _return=True)} )
def getWorkerList(self, app, page = 1): db_session = self.getDBSession() user = self.get_current_user() perPage = 5 # получаем количество count, = db_session.query(func.count(Worker.workerId)).filter(Worker.userId == user.userId, Worker.appId == app.appId).first() pageCount = int(math.ceil(float(count) / perPage)) # получаем список последних запросов lastWorkers = db_session.query(Worker).filter(Worker.userId == user.userId, Worker.appId == app.appId).order_by(desc(Worker.startDate)).offset(perPage * (page - 1)).limit(perPage) # определяем, какие воркеры уже умерли workers = [] alivedWorkers= [] for worker in lastWorkers: if worker.status == Worker.STATUS_ALIVE: alivedWorkers.append(worker) workers.append(worker) aliveThreadNames = ThredService.getAliveThreads() for worker in alivedWorkers: # определяем мертвые воркеры if not 'worker-' + str(worker.workerId) in aliveThreadNames: worker.status = Worker.STATUS_DIED db_session.add(worker) alivedWorkers.remove(worker) db_session.commit() # для живых воркеров загружаем таски if alivedWorkers: workerService = WorkerService(self.application.getResultPath()) for worker in alivedWorkers: workerService.setWorker(worker) worker.task = workerService.getTask() return workers, pageCount