增加task历史记录生成功能

This commit is contained in:
lusiyi 2023-02-23 15:35:03 +08:00
parent 2773927a24
commit 996766a96d
1 changed files with 116 additions and 0 deletions

View File

@ -0,0 +1,116 @@
import sys
import os
import config
curPath = os.path.abspath(os.path.dirname(__file__))
rootPath = os.path.split(curPath)[0]
sys.path.append(rootPath)
import warnings
from datetime import datetime,timedelta
from utils import get_conn, get_month_date
warnings.filterwarnings("ignore")
def execute_sql(sql:str):
conn = get_conn()
curs = conn.cursor()
curs.execute(sql)
conn.commit()
conn.close()
def record_task_history():
#每次调用此函数默认记录当前日期的里程碑数据然后回顾最近2个月的数据若2个月之前的数据不存在则以随机数的方式生成填充并在is_test字段标记为true
# 查看当前历史表中已经有的数据
now = datetime.now()
today_str=now.strftime('%Y-%m-%d')
today=datetime.strptime(today_str,'%Y-%m-%d')
delta = timedelta(days=60)
begin_date=now-delta
begin_date_str=begin_date.strftime('%Y-%m-%d')
# 取出数据库中已有的最后一天的日期
last_date_sql=f'''SELECT max(date) as last_date from (
SELECT date from ai_task_static_history where date>'{begin_date_str}' GROUP BY date order by date
) as a'''
conn = get_conn()
curs = conn.cursor()
curs.execute(last_date_sql)
last_date=curs.fetchone()[0]
last_date_str=""
if last_date is None:
last_date_str=(today-timedelta(days=60)).strftime('%Y-%m-%d')
else:
last_date_str=last_date.strftime('%Y-%m-%d')
#last_date_str='2023-02-01'
if last_date_str==today_str:
config.logger.info("当前日期的task数据已存在跳过生成")
return
last_date=datetime.strptime(last_date_str,'%Y-%m-%d')
delta=timedelta(days=1)
generate_day=last_date+delta
config.logger.info(f"开始生成{generate_day}{today}的数据")
while generate_day<today:
insert_test_task(generate_day)
generate_day = generate_day + delta
insert_today_task(today)
config.logger.info("task历史数据记录完成")
def insert_test_task(generate_day:datetime):
generate_day_str=generate_day.strftime('%Y-%m-%d')
generate_sql=f"""
insert into ai_task_static_history (repo_id,closed_count,open_count,date,is_test)
SELECT rc.repo_id,
case when rc.closed_count is null then ceil(random()*10)
else ceil(rc.closed_count+random()*10)
END as closed_count,
case when o.open_count is null then ceil(random()*10)
else ceil(random()*10+o.open_count)
END as open_count,
'{generate_day_str}' as date,true as is_test from
(
SELECT r.repo_id,c.closed_count from (
SELECT repo_id from issue GROUP BY repo_id ) as r LEFT JOIN (
SELECT repo_id,count(repo_id) as closed_count from issue where is_closed=true and is_pull=false GROUP BY repo_id
) as c on r.repo_id=c.repo_id
) as rc left JOIN (
SELECT repo_id,count(repo_id) as open_count from issue where is_closed=false and is_pull=false GROUP BY repo_id
) as o on rc.repo_id=o.repo_id ORDER BY rc.repo_id"""
execute_sql(generate_sql)
def insert_today_task(generate_day:datetime):
generate_day_str = generate_day.strftime('%Y-%m-%d')
generate_sql = f"""
insert into ai_task_static_history (repo_id,closed_count,open_count,date,is_test)
SELECT rc.repo_id,
case when rc.closed_count is null then 0
else rc.closed_count
END as closed_count,
case when o.open_count is null then 0
else o.open_count
END as open_count,
'{generate_day_str}' as date,false as is_test from
(
SELECT r.repo_id,c.closed_count from (
SELECT repo_id from issue GROUP BY repo_id ) as r LEFT JOIN (
SELECT repo_id,count(repo_id) as closed_count from issue where is_closed=true and is_pull=false GROUP BY repo_id
) as c on r.repo_id=c.repo_id
) as rc left JOIN (
SELECT repo_id,count(repo_id) as open_count from issue where is_closed=false and is_pull=false GROUP BY repo_id
) as o on rc.repo_id=o.repo_id ORDER BY rc.repo_id
"""
execute_sql(generate_sql)
if __name__ == '__main__':
# 生成测试数据
record_task_history()