from decorator.singleton import singleton
|
from db.db_conn import db_conn
|
from db.models.tables import RequestTask, RequestTaskLog
|
from datetime import datetime
|
|
|
@singleton
|
class RequestTaskRepository(object):
|
"""爬取任务相关数据库操作"""
|
|
def __init__(self) -> None:
|
pass
|
|
def create_task(self) -> str:
|
"""创建任务记录"""
|
# 根据任务编号降序获取历史最新任务
|
task = db_conn.query_sql(lambda session: session.query(RequestTask).order_by(RequestTask.start_time.desc()).first(), new_session=True)
|
# 创建新任务
|
if task == None:
|
id = 1
|
else:
|
id = task.id + 1
|
new_task = RequestTask(id=id, start_time=datetime.now())
|
db_conn.insert(new_task)
|
return id
|
|
def complete_task(self, task_id, s):
|
"""完成任务,更新任务状态"""
|
def f(session):
|
task = session.query(RequestTask).filter_by(id=task_id).one()
|
task.end_time = datetime.now()
|
task.running_status = False
|
task.success = s
|
session.commit()
|
return db_conn.query_sql(f, new_session=True)
|
|
def insert_log(self, task_id, type, log):
|
"""记录任务日志"""
|
task_log = RequestTaskLog()
|
task_log.create_time = datetime.now()
|
task_log.request_id = task_id
|
task_log.log_type = type
|
task_log.log = log
|
return db_conn.insert(task_log)
|