Beispiel #1
0
def get_repository_count_query(username=""):
    if username == "":
        query = Repository.select().count()
    else:
        user = User.get(User.username == username)
        query = Repository.select().where(Repository.user == user).count()
    return query
Beispiel #2
0
def get_repository_list_query(offset=0, limit=15, username="", my=False):
    repository_list = []
    user = User.get(User.username == username)
    if not my:
        if user.group != 0:
            return "-1"
        query = Repository.select().offset(offset).limit(limit)
    else:
        query = Repository.select().where(Repository.user == user).offset(offset).limit(limit)

    for repository in query:
        repository_list.append({
            "id": repository.get_id(),
            "name": repository.name,
            "user": repository.user.username,
            "schedule_status": repository.schedule_status,
            "schedule_run": repository.schedule_run,
            "updated_at": repository.updated_at
        })
    return repository_list
    def __run(self):
        num_thread = self.config['daemon'].getint('thread', self.args.thread)
        if num_thread < 1:
            num_thread = 1
        # create new process group, become its leader
        # os.setpgrp()
        # Запуск рабочих потоков
        for idx in range(num_thread):
            t = WorkerThread(self.config, self.logger, self.task_queue)
            self.threads.append(t)
            t.start()

        db = connect(self.config['database'].get('database_url'))
        db.connect(reuse_if_open=True)
        db.bind([Repository])

        while self.alive:
            self.logger.info("The daemon is still working")
            # репы для обновления или у которых init = False
            repos_to_update = Repository.select().where(
                (Repository.schedule_next_update <= datetime.now())
                | (not Repository.mirror_init)).order_by(
                    Repository.schedule_next_update)

            # определяем дату следующей обновы
            for repo in repos_to_update:
                queries.repository.set_next_update_date(repo)

            # send thirty task requests to the worker
            # Отмена тасков не нужна, так как таймаут таска расчитывается
            # на основе расписания и таск живет не дольше таймаута.

            # определяем timeout и заполняем task_queue
            for repo in repos_to_update:
                timeout = (repo.schedule_next_update -
                           datetime.now()).total_seconds()
                self.task_queue.put(MirrorTask(repo.get_id(), timeout))
            time.sleep(60)

        db.close()
        # Отправка нотификации завершения:
        for _ in self.threads:
            self.task_queue.put(None)
        # block until all daemon are done
        self.task_queue.join()
        # Завершение потоков
        for t in self.threads:
            t.join()
        self.threads = []
        # Демон завершился.
        self.logger.info("The daemon has been stopped")