增加milestone历史记录生成功能

This commit is contained in:
lusiyi 2023-02-22 18:12:37 +08:00
parent 465b097ae6
commit 2773927a24
2 changed files with 163 additions and 0 deletions

View File

@ -0,0 +1,134 @@
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_milestone_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_milestone_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("当前日期的milestone数据已存在跳过生成")
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_milestone(generate_day)
generate_day = generate_day + delta
insert_today_milestone(today)
config.logger.info("milestone历史数据记录完成")
def insert_test_milestone(generate_day:datetime):
generate_day_str=generate_day.strftime('%Y-%m-%d')
generate_sql=f"""
insert into ai_milestone_history(date,
milestone_id,
repo_id,
NAME,
CONTENT,
is_closed,
num_issues,
num_closed_issues,
completeness,
deadline_unix,
closed_date_unix,
is_test)
SELECT
'{generate_day_str}' as date,
ID AS milestone_id,
repo_id,
NAME,
CONTENT,
is_closed,
ceil(num_issues+random()*10) as num_issues,
ceil(num_closed_issues+random()*10) as num_closed_issues,
ceil(completeness+random()*10) as completeness,
deadline_unix,
closed_date_unix,
true as is_test
FROM
milestone
"""
execute_sql(generate_sql)
def insert_today_milestone(generate_day:datetime):
generate_day_str = generate_day.strftime('%Y-%m-%d')
generate_sql = f"""
insert into ai_milestone_history(date,
milestone_id,
repo_id,
NAME,
CONTENT,
is_closed,
num_issues,
num_closed_issues,
completeness,
deadline_unix,
closed_date_unix,
is_test)
SELECT
'{generate_day_str}' as date,
ID AS milestone_id,
repo_id,
NAME,
CONTENT,
is_closed,
num_issues,
num_closed_issues,
completeness,
deadline_unix,
closed_date_unix,
false as is_test
FROM
milestone
"""
execute_sql(generate_sql)
if __name__ == '__main__':
# 生成测试数据
record_milestone_history()

View File

@ -107,3 +107,32 @@ CREATE TABLE "public"."ai_user_portraint_detail" (
"created_unix" int8
);
DROP TABLE IF EXISTS "public"."ai_milestone_history";
CREATE TABLE "public"."ai_milestone_history" (
"milestone_id" int8,
"repo_id" int8,
"name" varchar(255) COLLATE "pg_catalog"."default",
"content" text COLLATE "pg_catalog"."default",
"is_closed" bool,
"num_issues" int4,
"num_closed_issues" int4,
"completeness" int4,
"deadline_unix" int8,
"closed_date_unix" int8,
"id" int8 NOT NULL GENERATED BY DEFAULT AS IDENTITY (
INCREMENT 1
MINVALUE 1
MAXVALUE 9223372036854775807
START 1
CACHE 1
),
"date" date NOT NULL,
"is_test" bool
)
;
COMMENT ON COLUMN "public"."ai_milestone_history"."date" IS '记录日期';
-- ----------------------------
-- Primary Key structure for table ai_milestone_history
-- ----------------------------
ALTER TABLE "public"."ai_milestone_history" ADD CONSTRAINT "ai_milestone_history_pkey" PRIMARY KEY ("id");