Files
EdgeAdmin/web/views/@default/dashboard/boards/index.js

346 lines
9.1 KiB
JavaScript
Raw Normal View History

2021-07-11 18:05:49 +08:00
Tea.context(function () {
this.trafficTab = "hourly"
this.$delay(function () {
this.reloadHourlyTrafficChart()
2021-07-13 11:04:18 +08:00
this.reloadHourlyRequestsChart()
this.reloadTopDomainsChart()
this.reloadTopNodesChart()
2021-07-11 18:05:49 +08:00
})
this.selectTrafficTab = function (tab) {
this.trafficTab = tab
if (tab == "hourly") {
this.$delay(function () {
this.reloadHourlyTrafficChart()
})
} else if (tab == "daily") {
this.$delay(function () {
this.reloadDailyTrafficChart()
})
}
}
2021-07-13 11:04:18 +08:00
this.reloadHourlyTrafficChart = function () {
let stats = this.hourlyTrafficStats
this.reloadTrafficChart("hourly-traffic-chart-box", stats, function (args) {
let index = args.dataIndex
let cachedRatio = 0
let attackRatio = 0
if (stats[index].bytes > 0) {
cachedRatio = Math.round(stats[index].cachedBytes * 10000 / stats[index].bytes) / 100
attackRatio = Math.round(stats[index].attackBytes * 10000 / stats[index].bytes) / 100
}
return stats[index].day + " " + stats[index].hour + "时<br/>总流量:" + teaweb.formatBytes(stats[index].bytes) + "<br/>缓存流量:" + teaweb.formatBytes(stats[index].cachedBytes) + "<br/>缓存命中率:" + cachedRatio + "%<br/>拦截攻击流量:" + teaweb.formatBytes(stats[index].attackBytes) + "<br/>拦截比例:" + attackRatio + "%"
})
}
this.reloadDailyTrafficChart = function () {
let stats = this.dailyTrafficStats
this.reloadTrafficChart("daily-traffic-chart-box", stats, function (args) {
let index = args.dataIndex
let cachedRatio = 0
let attackRatio = 0
if (stats[index].bytes > 0) {
cachedRatio = Math.round(stats[index].cachedBytes * 10000 / stats[index].bytes) / 100
attackRatio = Math.round(stats[index].attackBytes * 10000 / stats[index].bytes) / 100
}
return stats[index].day + "<br/>总流量:" + teaweb.formatBytes(stats[index].bytes) + "<br/>缓存流量:" + teaweb.formatBytes(stats[index].cachedBytes) + "<br/>缓存命中率:" + cachedRatio + "%<br/>拦截攻击流量:" + teaweb.formatBytes(stats[index].attackBytes) + "<br/>拦截比例:" + attackRatio + "%"
})
}
this.reloadTrafficChart = function (chartId, stats, tooltipFunc) {
let axis = teaweb.bytesAxis(stats, function (v) {
2021-07-11 18:05:49 +08:00
return v.bytes
})
2021-07-13 11:04:18 +08:00
let chartBox = document.getElementById(chartId)
2021-07-21 08:07:46 +08:00
let chart = teaweb.initChart(chartBox)
2021-07-11 18:05:49 +08:00
let option = {
xAxis: {
2021-07-13 11:04:18 +08:00
data: stats.map(function (v) {
if (v.hour != null) {
return v.hour
}
return v.day
2021-07-11 18:05:49 +08:00
})
},
yAxis: {
axisLabel: {
formatter: function (v) {
return v + axis.unit
}
}
},
tooltip: {
show: true,
trigger: "item",
2021-07-13 11:04:18 +08:00
formatter: tooltipFunc
2021-07-11 18:05:49 +08:00
},
grid: {
2021-07-13 11:04:18 +08:00
left: 50,
top: 40,
right: 20,
bottom: 20
2021-07-11 18:05:49 +08:00
},
series: [
{
2021-07-13 11:04:18 +08:00
name: "总流量",
2021-07-11 18:05:49 +08:00
type: "line",
2021-07-13 11:04:18 +08:00
data: stats.map(function (v) {
2021-07-11 18:05:49 +08:00
return v.bytes / axis.divider;
}),
itemStyle: {
color: "#9DD3E8"
},
lineStyle: {
color: "#9DD3E8"
},
areaStyle: {
color: "#9DD3E8"
}
2021-07-13 11:04:18 +08:00
},
{
name: "缓存流量",
type: "line",
data: stats.map(function (v) {
return v.cachedBytes / axis.divider;
}),
itemStyle: {
color: "#61A0A8"
},
lineStyle: {
color: "#61A0A8"
}
},
{
name: "攻击流量",
type: "line",
data: stats.map(function (v) {
return v.attackBytes / axis.divider;
}),
itemStyle: {
color: "#F39494"
},
lineStyle: {
color: "#F39494"
}
2021-07-11 18:05:49 +08:00
}
],
2021-07-13 11:04:18 +08:00
legend: {
data: ["总流量", "缓存流量", "攻击流量"]
},
2021-07-11 18:05:49 +08:00
animation: false
}
chart.setOption(option)
chart.resize()
}
2021-07-13 11:04:18 +08:00
/**
* 请求数统计
*/
this.requestsTab = "hourly"
this.selectRequestsTab = function (tab) {
this.requestsTab = tab
if (tab == "hourly") {
this.$delay(function () {
this.reloadHourlyRequestsChart()
})
} else if (tab == "daily") {
this.$delay(function () {
this.reloadDailyRequestsChart()
})
}
2021-07-11 18:05:49 +08:00
}
2021-07-13 11:04:18 +08:00
this.reloadHourlyRequestsChart = function () {
let stats = this.hourlyTrafficStats
this.reloadRequestsChart("hourly-requests-chart", "请求数统计", stats, function (args) {
let index = args.dataIndex
let cachedRatio = 0
let attackRatio = 0
if (stats[index].countRequests > 0) {
cachedRatio = Math.round(stats[index].countCachedRequests * 10000 / stats[index].countRequests) / 100
attackRatio = Math.round(stats[index].countAttackRequests * 10000 / stats[index].countRequests) / 100
}
return stats[index].day + " " + stats[index].hour + "时<br/>总请求数:" + stats[index].countRequests + "<br/>缓存请求数:" + stats[index].countCachedRequests + "<br/>缓存命中率:" + cachedRatio + "%<br/>拦截攻击数:" + stats[index].countAttackRequests + "<br/>拦截比例:" + attackRatio + "%"
2021-07-11 18:05:49 +08:00
})
2021-07-13 11:04:18 +08:00
}
this.reloadDailyRequestsChart = function () {
let stats = this.dailyTrafficStats
this.reloadRequestsChart("daily-requests-chart", "请求数统计", stats, function (args) {
let index = args.dataIndex
let cachedRatio = 0
let attackRatio = 0
if (stats[index].countRequests > 0) {
cachedRatio = Math.round(stats[index].countCachedRequests * 10000 / stats[index].countRequests) / 100
attackRatio = Math.round(stats[index].countAttackRequests * 10000 / stats[index].countRequests) / 100
}
return stats[index].day + "<br/>总请求数:" + stats[index].countRequests + "<br/>缓存请求数:" + stats[index].countCachedRequests + "<br/>缓存命中率:" + cachedRatio + "%<br/>拦截攻击数:" + stats[index].countAttackRequests + "<br/>拦截比例:" + attackRatio + "%"
})
}
this.reloadRequestsChart = function (chartId, name, stats, tooltipFunc) {
let chartBox = document.getElementById(chartId)
if (chartBox == null) {
return
}
let axis = teaweb.countAxis(stats, function (v) {
return Math.max(v.countRequests, v.countCachedRequests)
})
2021-07-21 08:07:46 +08:00
let chart = teaweb.initChart(chartBox)
2021-07-11 18:05:49 +08:00
let option = {
xAxis: {
2021-07-13 11:04:18 +08:00
data: stats.map(function (v) {
if (v.hour != null) {
return v.hour
}
if (v.day != null) {
return v.day
}
return ""
2021-07-11 18:05:49 +08:00
})
},
yAxis: {
axisLabel: {
2021-07-13 11:04:18 +08:00
formatter: function (value) {
return value + axis.unit
2021-07-11 18:05:49 +08:00
}
}
},
tooltip: {
show: true,
trigger: "item",
2021-07-13 11:04:18 +08:00
formatter: tooltipFunc
2021-07-11 18:05:49 +08:00
},
grid: {
2021-07-13 11:04:18 +08:00
left: 50,
top: 40,
right: 20,
bottom: 20
2021-07-11 18:05:49 +08:00
},
series: [
{
2021-07-13 11:04:18 +08:00
name: "请求数",
2021-07-11 18:05:49 +08:00
type: "line",
2021-07-13 11:04:18 +08:00
data: stats.map(function (v) {
return v.countRequests / axis.divider
2021-07-11 18:05:49 +08:00
}),
itemStyle: {
color: "#9DD3E8"
},
2021-07-13 11:04:18 +08:00
areaStyle: {
2021-07-11 18:05:49 +08:00
color: "#9DD3E8"
2021-07-13 11:04:18 +08:00
}
},
{
name: "缓存请求数",
type: "line",
data: stats.map(function (v) {
return v.countCachedRequests / axis.divider
}),
itemStyle: {
color: "#61A0A8"
2021-07-11 18:05:49 +08:00
},
areaStyle: {
2021-07-13 11:04:18 +08:00
color: "#61A0A8"
}
},
{
name: "攻击请求数",
type: "line",
data: stats.map(function (v) {
return v.countAttackRequests / axis.divider;
}),
itemStyle: {
color: "#F39494"
},
lineStyle: {
color: "#F39494"
2021-07-11 18:05:49 +08:00
}
}
],
2021-07-13 11:04:18 +08:00
legend: {
data: ["请求数", "缓存请求数", "攻击请求数"]
},
animation: true
2021-07-11 18:05:49 +08:00
}
chart.setOption(option)
chart.resize()
}
2021-07-13 11:04:18 +08:00
// 节点排行
this.reloadTopNodesChart = function () {
let that = this
let axis = teaweb.countAxis(this.topNodeStats, function (v) {
return v.countRequests
})
teaweb.renderBarChart({
id: "top-nodes-chart",
name: "节点",
values: this.topNodeStats,
x: function (v) {
return v.nodeName
},
tooltip: function (args, stats) {
return stats[args.dataIndex].nodeName + "<br/>请求数:" + " " + teaweb.formatNumber(stats[args.dataIndex].countRequests) + "<br/>流量:" + teaweb.formatBytes(stats[args.dataIndex].bytes)
},
value: function (v) {
return v.countRequests / axis.divider;
},
axis: axis,
click: function (args, stats) {
window.location = "/clusters/cluster/node?nodeId=" + stats[args.dataIndex].nodeId + "&clusterId=" + that.clusterId
}
})
}
// 域名排行
this.reloadTopDomainsChart = function () {
let axis = teaweb.countAxis(this.topDomainStats, function (v) {
return v.countRequests
})
teaweb.renderBarChart({
id: "top-domains-chart",
name: "域名",
values: this.topDomainStats,
x: function (v) {
return v.domain
},
tooltip: function (args, stats) {
return stats[args.dataIndex].domain + "<br/>请求数:" + " " + teaweb.formatNumber(stats[args.dataIndex].countRequests) + "<br/>流量:" + teaweb.formatBytes(stats[args.dataIndex].bytes)
},
value: function (v) {
return v.countRequests / axis.divider;
},
axis: axis,
click: function (args, stats) {
let index = args.dataIndex
window.location = "/servers/server?serverId=" + stats[index].serverId
}
})
}
2021-07-11 18:05:49 +08:00
/**
* 升级提醒
*/
this.closeMessage = function (e) {
let target = e.target
while (true) {
target = target.parentNode
if (target.tagName.toUpperCase() == "DIV") {
target.style.cssText = "display: none"
break
}
}
}
})