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
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")