mirror of
https://github.com/fatedier/frp.git
synced 2025-02-02 16:04:21 +00:00
188 lines
5.2 KiB
JavaScript
188 lines
5.2 KiB
JavaScript
|
import Humanize from "humanize-plus"
|
||
|
import echarts from "echarts/lib/echarts"
|
||
|
|
||
|
import "echarts/theme/macarons"
|
||
|
import "echarts/lib/chart/bar"
|
||
|
import "echarts/lib/chart/pie"
|
||
|
import "echarts/lib/component/tooltip"
|
||
|
import "echarts/lib/component/title"
|
||
|
|
||
|
function DrawTrafficChart(elementId, trafficIn, trafficOut) {
|
||
|
let myChart = echarts.init(document.getElementById(elementId), 'macarons');
|
||
|
myChart.showLoading()
|
||
|
|
||
|
let option = {
|
||
|
title: {
|
||
|
text: 'Network Traffic',
|
||
|
subtext: 'today',
|
||
|
x: 'center'
|
||
|
},
|
||
|
tooltip: {
|
||
|
trigger: 'item',
|
||
|
formatter: function(v) {
|
||
|
return Humanize.fileSize(v.data.value) + " (" + v.percent + "%)"
|
||
|
}
|
||
|
},
|
||
|
series: [{
|
||
|
type: 'pie',
|
||
|
radius: '55%',
|
||
|
center: ['50%', '60%'],
|
||
|
data: [{
|
||
|
value: trafficIn,
|
||
|
name: 'Traffic In'
|
||
|
}, {
|
||
|
value: trafficOut,
|
||
|
name: 'Traffic Out'
|
||
|
}, ],
|
||
|
itemStyle: {
|
||
|
emphasis: {
|
||
|
shadowBlur: 10,
|
||
|
shadowOffsetX: 0,
|
||
|
shadowColor: 'rgba(0, 0, 0, 0.5)'
|
||
|
}
|
||
|
}
|
||
|
}]
|
||
|
};
|
||
|
myChart.setOption(option);
|
||
|
myChart.hideLoading()
|
||
|
}
|
||
|
|
||
|
function DrawProxyChart(elementId, serverInfo) {
|
||
|
if (serverInfo.proxy_type_count.tcp == null) {
|
||
|
serverInfo.proxy_type_count.tcp = 0
|
||
|
}
|
||
|
if (serverInfo.proxy_type_count.udp == null) {
|
||
|
serverInfo.proxy_type_count.udp = 0
|
||
|
}
|
||
|
if (serverInfo.proxy_type_count.http == null) {
|
||
|
serverInfo.proxy_type_count.http = 0
|
||
|
}
|
||
|
if (serverInfo.proxy_type_count.https == null) {
|
||
|
serverInfo.proxy_type_count.https = 0
|
||
|
}
|
||
|
let myChart = echarts.init(document.getElementById(elementId), 'macarons')
|
||
|
myChart.showLoading()
|
||
|
|
||
|
let option = {
|
||
|
title: {
|
||
|
text: 'Proxies',
|
||
|
subtext: 'now',
|
||
|
x: 'center'
|
||
|
},
|
||
|
tooltip: {
|
||
|
trigger: 'item',
|
||
|
formatter: function(v) {
|
||
|
return v.data.value
|
||
|
}
|
||
|
},
|
||
|
series: [{
|
||
|
type: 'pie',
|
||
|
radius: '55%',
|
||
|
center: ['50%', '60%'],
|
||
|
data: [{
|
||
|
value: serverInfo.proxy_type_count.tcp,
|
||
|
name: 'TCP'
|
||
|
}, {
|
||
|
value: serverInfo.proxy_type_count.udp,
|
||
|
name: 'UDP'
|
||
|
}, {
|
||
|
value: serverInfo.proxy_type_count.http,
|
||
|
name: 'HTTP'
|
||
|
}, {
|
||
|
value: serverInfo.proxy_type_count.https,
|
||
|
name: 'HTTPS'
|
||
|
}],
|
||
|
itemStyle: {
|
||
|
emphasis: {
|
||
|
shadowBlur: 10,
|
||
|
shadowOffsetX: 0,
|
||
|
shadowColor: 'rgba(0, 0, 0, 0.5)'
|
||
|
}
|
||
|
}
|
||
|
}]
|
||
|
};
|
||
|
myChart.setOption(option);
|
||
|
myChart.hideLoading()
|
||
|
}
|
||
|
|
||
|
// 7 days
|
||
|
function DrawProxyTrafficChart(elementId, trafficInArr, trafficOutArr) {
|
||
|
let params = {
|
||
|
width: '600px',
|
||
|
height: '400px'
|
||
|
}
|
||
|
|
||
|
let myChart = echarts.init(document.getElementById(elementId), 'macarons', params);
|
||
|
myChart.showLoading()
|
||
|
|
||
|
trafficInArr = trafficInArr.reverse()
|
||
|
trafficOutArr = trafficOutArr.reverse()
|
||
|
let now = new Date()
|
||
|
now = new Date(now.getFullYear(), now.getMonth(), now.getDate() - 6)
|
||
|
let dates = new Array()
|
||
|
for (let i = 0; i < 7; i++) {
|
||
|
dates.push(now.getFullYear() + '-' + (now.getMonth() + 1) + '-' + now.getDate())
|
||
|
now = new Date(now.getFullYear(), now.getMonth(), now.getDate() + 1)
|
||
|
}
|
||
|
|
||
|
let option = {
|
||
|
tooltip: {
|
||
|
trigger: 'axis',
|
||
|
axisPointer: {
|
||
|
type: 'shadow'
|
||
|
},
|
||
|
formatter: function(data) {
|
||
|
let html = ''
|
||
|
if (data.length > 0) {
|
||
|
html += data[0].name + '<br/>'
|
||
|
}
|
||
|
for (let v of data) {
|
||
|
let colorEl = '<span style="display:inline-block;margin-right:5px;' +
|
||
|
'border-radius:10px;width:9px;height:9px;background-color:' + v.color + '"></span>';
|
||
|
html += colorEl + v.seriesName + ': ' + Humanize.fileSize(v.value) + '<br/>'
|
||
|
}
|
||
|
return html
|
||
|
}
|
||
|
},
|
||
|
legend: {
|
||
|
data: ['Traffic In', 'Traffic Out']
|
||
|
},
|
||
|
grid: {
|
||
|
left: '3%',
|
||
|
right: '4%',
|
||
|
bottom: '3%',
|
||
|
containLabel: true
|
||
|
},
|
||
|
xAxis: [{
|
||
|
type: 'category',
|
||
|
data: dates
|
||
|
}],
|
||
|
yAxis: [{
|
||
|
type: 'value',
|
||
|
axisLabel: {
|
||
|
formatter: function(value) {
|
||
|
return Humanize.fileSize(value)
|
||
|
}
|
||
|
}
|
||
|
}],
|
||
|
series: [{
|
||
|
name: 'Traffic In',
|
||
|
type: 'bar',
|
||
|
data: trafficInArr
|
||
|
}, {
|
||
|
|
||
|
name: 'Traffic Out',
|
||
|
type: 'bar',
|
||
|
data: trafficOutArr
|
||
|
}]
|
||
|
};
|
||
|
myChart.setOption(option);
|
||
|
myChart.hideLoading()
|
||
|
}
|
||
|
|
||
|
export {
|
||
|
DrawTrafficChart,
|
||
|
DrawProxyChart,
|
||
|
DrawProxyTrafficChart
|
||
|
}
|