Esempio n. 1
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