예제 #1
0
    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})
예제 #2
0
    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)}
            )
예제 #3
0
    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