From 7e819edc7919739d77de4d64dd46e91aebc57466 Mon Sep 17 00:00:00 2001 From: ngfchl Date: Wed, 7 Dec 2022 15:43:46 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E5=85=A8=E7=AB=99=E5=8E=86?= =?UTF-8?q?=E5=8F=B2=E6=95=B0=E6=8D=AE=E5=A2=9E=E9=87=8F=E5=9B=BE=EF=BC=8C?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E9=87=8F=E5=A4=A7=E4=BC=9A=E6=AF=94=E8=BE=83?= =?UTF-8?q?=E5=8D=A1=EF=BC=8C=E5=BE=85=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- auto_pt/views.py | 180 +++++++++++++++++++++------------- templates/auto_pt/status.html | 113 +++++++++++++++++++-- 2 files changed, 219 insertions(+), 74 deletions(-) diff --git a/auto_pt/views.py b/auto_pt/views.py index 3b3f084..a5c1a51 100644 --- a/auto_pt/views.py +++ b/auto_pt/views.py @@ -414,68 +414,6 @@ def do_update(request): return JsonResponse(data=pt_site.auto_upgrade().to_dict(), safe=False) -""" - try: - logger.info('开始更新') - pt_site_site_mtime = os.stat('pt_site_site.json').st_mtime - requirements_mtime = os.stat('requirements.txt').st_mtime - update_commands = { - # 'cp db/db.sqlite3 db/db.sqlite3-$(date "+%Y%m%d%H%M%S")', - '强制覆盖本地': 'git reset --hard', - '获取更新信息': 'git fetch --all', - '拉取代码更新': 'git pull origin {}'.format(os.getenv('DEV')), - } - requirements_commands = { - '安装依赖': 'pip install -r requirements.txt', - } - migrate_commands = { - '同步数据库': 'python manage.py migrate', - } - logger.info('拉取最新代码') - result = exec_command(update_commands) - new_requirements_mtime = os.stat('requirements.txt').st_mtime - if new_requirements_mtime > requirements_mtime: - logger.info('更新环境依赖') - result.extend(exec_command(requirements_commands)) - new_pt_site_site = os.stat('pt_site_site.json').st_mtime - logger.info('更新前文件最后修改时间') - logger.info(pt_site_site_mtime) - logger.info('更新后文件最后修改时间') - logger.info(new_pt_site_site) - if new_pt_site_site == pt_site_site_mtime: - logger.info('本次无规则更新,跳过!') - result.append({ - 'command': '本次无更新规则', - 'res': 0 - }) - pass - else: - logger.info('拉取更新完毕,开始更新Xpath规则') - p = subprocess.run('cp db/db.sqlite3 db/db.sqlite3-$(date "+%Y%m%d%H%M%S")', shell=True) - logger.info('备份数据库 命令执行结果:\n{}'.format(p)) - result.append({ - 'command': '备份数据库', - 'res': p.returncode - }) - result.extend(exec_command(migrate_commands)) - logger.info('同步数据库 命令执行结果:\n{}'.format(p)) - logger.info('更新完毕') - return JsonResponse(data=CommonResponse.success( - msg='更新成功,15S后自动刷新页面!', - data={ - 'result': result - } - ).to_dict(), safe=False) - except Exception as e: - # raise - msg = '更新失败!{},请初始化Xpath!'.format(str(e)) - logger.error(msg) - return JsonResponse(data=CommonResponse.error( - msg=msg - ).to_dict(), safe=False) -""" - - def do_xpath(request): """初始化Xpath规则""" migrate_commands = { @@ -691,10 +629,120 @@ def site_data_api(request): my_site_id = request.GET.get('id') logger.info(f'ID值:{type(my_site_id)}') if int(my_site_id) == 0: - # pt_site.auto_sign_in() - return JsonResponse(data=CommonResponse.error( - msg='全站数据展示功能还未完成,敬请期待!' + my_site_list = MySite.objects.all() + diff_list = [] + # 提取日期 + date_list = set([ + status.created_at.date().strftime('%Y-%m-%d') for status in SiteStatus.objects.all() + ]) + date_list = list(date_list) + date_list.sort() + print(f'日期列表:{date_list}') + print(f'日期数量:{len(date_list)}') + # for date in date_list: + # status_list = SiteStatus.objects.filter(created_at__date=date) + # diff_list.append({ + # 'name': date.strftime('%Y-%m-%d'), + # 'stack': date.strftime('%Y-%m-%d'), + # 'data': [{ + # 'name': status.site.site.name, + # 'value': status.uploaded + # } for status in status_list] + # + # }) + # print(diff_list) + + for my_site in my_site_list: + # 每个站点获取自己站点的所有信息 + site_status_list = my_site.sitestatus_set.order_by('created_at').all() + print(f'站点数据条数:{len(site_status_list)}') + info_list = [ + { + 'uploaded': site_info.uploaded, + 'date': site_info.created_at.date().strftime('%Y-%m-%d') + } for site_info in site_status_list + ] + print(f'提取完后站点数据条数:{len(info_list)}') + + # 生成本站点的增量列表,并标注时间 + ''' + site_info_list = [{ + 'name': my_site.site.name, + 'type': 'bar', + 'stack': info_list[index + 1]['date'], + 'value': info_list[index + 1]['uploaded'] - info['uploaded'] if index < len( + info_list) - 1 else 0, + 'date': info['date'] + } for (index, info) in enumerate(info_list) if index < len(info_list) - 1] + ''' + diff_info_list = { + info['date']: info_list[index + 1]['uploaded'] - info['uploaded'] if index < len( + info_list) - 1 else 0 for (index, info) in enumerate(info_list) if index < len(info_list) - 1 + } + print(f'处理完后站点数据条数:{len(info_list)}') + for date in date_list: + if not diff_info_list.get(date): + diff_info_list[date] = 0 + # print(diff_info_list) + print(len(diff_info_list)) + diff_info_list = sorted(diff_info_list.items(), key=lambda x: x[0]) + diff_list.append({ + 'name': my_site.site.name, + 'type': 'bar', + 'large': 'true', + 'stack': 'increment', + 'data': [value[1] if value[1] > 0 else 0 for value in diff_info_list] + }) + print(diff_list) + # diff_list.append( + # { + # 'name': my_site.site.name, + # 'diff': {info['date']: info_list[index + 1]['uploaded'] - info['uploaded'] if index < len( + # info_list) - 1 else 0 for (index, info) in enumerate(info_list)} + # }¬ + # ) + info_list = [] + # print(diff_list) + # print(len(diff_list)) + + # 提取日期 + # date_list = set([ + # diff['date'] for diff in site_status_list + # ]) + # date_list = list(date_list) + # date_list.sort() + # print(date_list) + # print(len(date_list)) + # 填充数据 + data_list = [] + # for date in date_list: + # list1 = [] + # for diff in diff_list: + # print(date, diff['date']) + # if date == diff['date']: + # list1.append(diff) + # print(list1) + # data_list.append({ + # date: list1 + # }) + # list1 = [] + # print(data_list) + # + # x = [{ + # 'name': diff['name'], + # 'type': 'bar', + # 'stack': 'diff', + # + # } for diff in diff_list] + + return JsonResponse(data=CommonResponse.success( + # msg='全站数据展示功能还未完成,敬请期待!' + data={ + 'date_list': date_list, + 'diff': diff_list + } ).to_dict(), safe=False) + logger.info(f'前端传来的站点ID:{my_site_id}') my_site = MySite.objects.filter(id=my_site_id).first() if not my_site: @@ -762,7 +810,7 @@ def sign_in_api(request): def update_site_api(request): try: my_site_id = request.GET.get('id') - logger.info(f'ID值:{type(my_site_id)}') + logger.info(f'ID值:{my_site_id}') if int(my_site_id) == 0: pt_site.auto_get_status() return JsonResponse(data=CommonResponse.success( diff --git a/templates/auto_pt/status.html b/templates/auto_pt/status.html index 829a999..dfd70dd 100644 --- a/templates/auto_pt/status.html +++ b/templates/auto_pt/status.html @@ -41,6 +41,10 @@ margin-right: 5px; } + .el-drawer__header { + height: 35px !important; + } + @@ -84,7 +88,7 @@ - +
@@ -341,13 +345,17 @@ :visible.sync="showSiteChart" direction="btt" size="96%" + append-to-body :title="site.name + '--历史数据'" style="background-color: rgba(227, 229, 229, 0.6);"> {#
#} {#

-历史数据

#} {#
#}
- + + + @@ -379,7 +387,7 @@ data() { return { chart: null, - ptData: {}, + ptData: null, site: {}, option: {}, showList: true, @@ -391,10 +399,10 @@ searchKey: '', sortStep: 1, showData: [], + showAllHistory: false, } }, beforeMount() { - }, mounted() { {#this.chart = this.$refs.charts.chart#} @@ -548,9 +556,8 @@ {#this.ptData = res.data.data#} {#this.setPie()#} {#this.setCard()#} - this.setLine(res.data.data) + id == 0 ? this.showAllIncrementHistory(res.data.data) : this.setLine(res.data.data) } else { - this.$message({ type: 'warning', message: res.data.msg @@ -564,6 +571,92 @@ }); }) }, + showAllIncrementHistory(data) { + let option = { + //title: { + // text: site.name, + // textStyle: { + // color: 'orangered', + // }, + // left: 'center', + // top: '3%', + //}, + tooltip: { + show: true, + trigger: 'axis', + axisPointer: { + type: 'shadow' + }, + formatter: function (params) { + //console.log(params) + // console.log(params[0].value[1]) + let text = '' + params.forEach((param, index) => { + let temp = param.value == 0 ? '' : ` +
+ + ${param.seriesName}: ${renderSize(param.value)} +
+ ` + text += temp + }) + + return `
${text}
` + }, + //position: function (point, params, dom, rect, size) { + // return [point[1], 0] + //}, + + order: 'valueDesc', + confine: false, + extraCssText: 'box-shadow: 0 0 3px rgba(0, 0, 0, 0.3);z-index: 9999;', // 附加阴影样式 + }, + legend: { + show: false, + top: '3%', + left: 'center', + }, + grid: { + left: '3%', + right: '4%', + bottom: '3%', + containLabel: true + }, + toolbox: { + feature: { + saveAsImage: {} + } + }, + xAxis: { + type: 'category', + boundaryGap: true, + axisTick: { + {#alignWithLabel: true#} + }, + axisLine: { + onZero: false + }, + data: data.date_list + }, + yAxis: { + type: 'value', + axisLabel: { + formatter: function (value, index) { + return renderSize(value); + } + }, + + }, + series: data.diff, + }; + this.showSiteChart = true + this.showAllHistory = true + setTimeout(() => { + this.site.name = '全部站点' + this.chart = this.$refs.history_charts.chart + this.setChartOption(this.chart, option) + }, 15) + }, begInviteMode() { this.begInvite = !this.begInvite if (this.begInvite) { @@ -930,12 +1023,14 @@ name: '上传量', type: 'bar', stack: 'Ad', + barMaxWidth: '60%', data: uploadedList } let downloaded = { name: '下载量', type: 'bar', stack: 'Ad', + barMaxWidth: '60%', data: downloadedList } option.series.push(downloaded, uploaded) @@ -953,7 +1048,6 @@ let ratioList = [] let seedingSizeList = [] let dateList = [] - let increment = [] dataList.sort((a, b) => { return a.info_date - b.info_date }) @@ -1020,7 +1114,7 @@ }, xAxis: { type: 'category', - boundaryGap: false, + boundaryGap: true, data: dateList }, yAxis: [{ @@ -1089,6 +1183,7 @@ name: '上传增量', type: 'bar', yAxisIndex: 0, + barMaxWidth: '60%', {#stack: 'Total',#} data: diff }, @@ -1147,6 +1242,7 @@ ] }; this.showSiteChart = true + this.showAllHistory = false setTimeout(() => { this.chart = this.$refs.seeding_charts.chart this.setChartOption(this.chart, option) @@ -1154,6 +1250,7 @@ name: '上传增量', type: 'bar', {#stack: 'Total',#} + barMaxWidth: '60%', data: diff }] this.setChartOption(this.$refs.diff_charts.chart, option)