爬虫任务监控
环境准备
- 后台接口
- 322隧道访问9878,http://127.0.0.1:9878/docs#/
- 前台开发环境
- 解决
ENOSPC
报错 - 迁移前台开发环境至内网,通过隧道统一访问
- 解决
- 端口号
-
8080
:前台端口 -
18080
:vscode
端口 -
9878/docs
:后台接口路径
-
第三方库
flexible.js
- 课件代码(简易版)
flexible.js/flexible.js at master · posuihushui/flexible.js · GitHub
代码目录
1 | src |
功能模块
首页
src/layout/home/echarts
template
引入
Header
公共组件引入
PageCard
公共组件,显示图标显示总数
显示告警文件
图一:显示每个爬虫文件的爬取总量,柱状图
图二:显示每个爬虫文件,按天爬取的数量,折线图
el-select
与图二交互,支持按天查看数据
script
data
optionsAllCounter
:柱状图的初始化配置,对应的data
为空数组
lineOptions
:折线图的初始化配合,对应的data
为空数组
showLoadingA
:柱状图交互优化
showLoadingB
:折线图交互优化
selectOptions
:el-select
双向绑定的值
selectValue
:el-select
选中的值,默认值为7
selectShow
:根据折叠状态,显示隐藏el-select
echartsInstance
:折线图挂载的echarts
实例对象
echartsMounted
:echartsInstance
对应的挂载状态,默认为false
,每次折线图实例化后,状态变更为为true
,每次直线图实例化前,判断是否已挂载,若挂载则需要移除echartsMounted
实例重新生成实例挂载
totalNumber
:所有爬虫的数量
alarmData
:告警数据
methods
selectChange
:el-select
的change
事件,调用getCounterByDays
方法
getAllCounter
:
getCounterByDays
:按天获取爬虫数量
- 显示加载状态
- 调用
getCounterByDays
接口,then
方法成功的回调中- 关闭加载状态
- 获取到数据后,根据
res.data
处理数据,并存到lineOptions
对应的配置项中 - 判断是否已经有
echarts
实例挂载,若有,则移除 - 拿到
dom
节点,根据新的配置项,实例化echarts
,并挂载到this
上(vm
) - 通知已挂载,更改挂载状态
列表页
src/layout/home/echarts
template
引入
Header
公共组件启停按钮组、爬虫调度的时间间隔输入框
搜索(搜索任务ID和任务中文名)
任务列表
script
data
searchInput
:保存搜索框的值
methods
公共组件
Header
组件
参数 | 说明 | 类型 | 可选值 | 默认值 |
---|---|---|---|---|
PageCard
组件
Attributes
参数 | 说明 | 类型 | 可选值 | 默认值 |
---|---|---|---|---|
iconfontL | 左侧显示的图标,需要先引入阿里图标库 | string | — | — |
iconfontR | 右侧显示的图标,需要先引入阿里图标库 | string | — | — |
showloading | 内容区正式显示前的加载图标 | boolean | — | — |
name | 名称,必须值 | string | — | — |
height | 自定义内容区高度 | string | number | — | — |
slots
参数 | 说明 |
---|---|
text | 内容区中显示的文本 |
chart | 内容区中显示的echarts图表,已经固定好宽高 |
events
事件名称 | 说明 | 回调参数 |
---|---|---|
collapse | 通知父组件折叠状态,右侧图标点击触发 | (boolean: ‘false’ | ‘true’) |
公共方法
更新日志
时间 | 更新项 | 【bug】 | 【新增】 | 【优化】 |
---|---|---|---|---|
2022年12月13日 | 1.修正首页折线图显示【bug】 2.新增预警功能展示【新增】 3.界面修改成中文【优化】 4.告警信息【优化】 5.修改爬虫调度默认值为3600【优化】 |
1 | 1 | 3 |
2022年12月14日 | 1.告警页面优化【优化】 2.Echarts渲染模式更改为SVG【优化】 3.列表页搜索功能【新增】 |
1 | 2 | |
2022年12月19日 | 1.首页新增刷新功能【优化】 | 1 | ||
2022年12月21日 | 1.告警显示优化【优化】 2.柱状图支持左右拖拽【优化】 3.折线图显示优化【优化】 |
3 | ||
2022年12月13日
1.修正首页折线图显示【bug】
现象描述:
堆叠折线图目前又两条折线,数据获取的是没问题的,但一起展示的时候,显示的有问题
绿色的只有最后一天有数据,但之前的都跟着蓝色的折线走了
1 | lineOptions: { |
原因:复制折线图演示demo时,demo中的stack配置项未注释,并且当时也不清楚其配置项的具体作用
- 数据堆叠,同个类目轴上系列配置相同的
stack
值可以堆叠放置。测试2的显示效果是堆叠效果。 - 详见:https://echarts.apache.org/zh/option.html#series-line.stack
方案:注释掉stack
配置项即可
2.新增预警功能展示【新增】
封装预警接口
1
2
3
4
5
6
7
8
9// crawler.js
// 爬虫告警,获取7天内所有爬虫数量小于7的job
export function getAlarmAdmin() {
return request({
url: "/admin/alarm",
});
}首页图标页的路由组件引入,挂载时调用该接口,获取告警数据
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34// 获取告警信息
getAlarmAdmin() {
this.showLoadingC = true;
getAlarmAdmin().then(
(res) => {
this.showLoadingC = false;
if (res.errcode == 200) {
// console.log(res.data);
let keys = this.getKeys(res.data);
let values = this.getValues(res.data);
console.log(keys, values);
keys.forEach((item, index) => {
this.alarmData.push({
fileName: item,
nums: values[index],
});
});
} else {
this.$message({
message: "告警数据获取失败",
type: "error",
});
}
},
(err) => {
console.log(err);
this.$message({
message: "告警数据获取失败",
type: "error",
});
}
);
},
},在页面上合适的地方,以表格的形式展示
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27<PageCard iconfontL="icon-tishi" name="统计" :height="100">
<template v-slot:text>
<!-- <span>
This view displays real-time statistics about the spider jobs
</span> -->
<div class="total-number">
<div class="text-container">
<span>总数:</span>
<span class="text">{{ totalNumber }}</span>
</div>
<div class="alarm-container" v-show="alarmData.length">
<el-table :data="alarmData" style="width: 100%" :max-height="90">
<el-table-column
prop="fileName"
label="告警文件"
sortable
></el-table-column>
<el-table-column
prop="nums"
label="数量"
sortable
></el-table-column>
</el-table>
</div>
</div>
</template>
</PageCard>样式
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17.total-number {
position: relative;
// font-family: electronicFont;
font-size: 18px;
// float: right;
.text-container {
.text {
font-size: 30px;
}
}
.alarm-container {
position: absolute;
top: -20px;
right: 0;
width: 20%;
}
}
3.界面修改成中文【优化】
需求:只要中文,不要英文,不要支持中英文切换
原因:无UI稿
方案:手动将每个页面的英文,修改成对应的中文
4.告警信息【优化】
告警一
警告信息如下:[Violation] Added non-passive event listener to a scroll-blocking ‘mousewheel’ event. Consider marking event handler as ‘passive’ to make the page more responsive.
解决办法:
1、直接在项目终端下载安装npm install default-passive-events
2、在main.js
中引入就可以了import "default-passive-events";
添加事件管理者’passive’,来阻止’touchstart’事件,让页面更加流畅。 解决chrome下的warning问题
告警二
Unchecked runtime.lastError: The message port closed before a response was received.
解决办法:重启下已安装的插件(不确定是哪个,所有的都点一下)
5.修改爬虫调度默认值为3600【优化】
新增变量defaultInterval
,值为3600,在操作里需要重置默认值的,直接使用该值,此后如果需要修改默认值,只要修改这一处即可
2022年12月14日
1.告警页面优化【优化】
需要实现的效果:在总条数显示的地方右边,按单元格显示告警数据,从左到右展示,多余数据撑开父元素(不要下拉框)
2.Echarts渲染模式更改为SVG【优化】
1 | initChart(ref, options) { |
注意:echarts按需导入里,要引入svg渲染器
1 | import { SVGRenderer } from "echarts/renderers"; |
3.列表页搜索功能【新增】
获取列表数据后,需要另存一份副本allSpiderDataCopy
el-table
绑定的是需要操作的那一份数据allSpiderData
1 | inputChange() { |
2022年12月19日
1.首页新增刷新功能【优化】
主要逻辑
1 | refreshData() { |