增加task历史记录生成功能
This commit is contained in:
parent
2773927a24
commit
996766a96d
|
|
@ -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()
|
||||
Loading…
Reference in New Issue