<!DOCTYPE html> <html style="height: 100%"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <title>网络</title> <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/echarts-nightly@5.1.2-dev.20210512/dist/echarts.min.js"></script> <script type="text/javascript" src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.js"></script> </head> <body style="height: 100%; margin: 0"> <div id="container" style="height: 100%"></div> <script type="text/javascript"> var dom = document.getElementById("container"); var myChart = echarts.init(dom); option = { title: [ { text: '发送' }, { top: '55%', text: '接收' } ], tooltip: { trigger: 'axis', formatter: function(params){ var myDom = params[0].name + '<br />'; $.each(params, function(index, item){ myDom += item.marker + item.seriesName + ': ' + formatBytes(item.value) + '<br>'; }) return myDom; } }, legend: { data: ['以太网', 'VMware Network Adapter VMnet1', 'VMware Network Adapter VMnet8'], selected: { '以太网': true, 'VMware Network Adapter VMnet1': true, 'VMware Network Adapter VMnet8': true, }, }, grid: [ { bottom: '60%' }, { top: '60%' } ], toolbox: { feature: { saveAsImage: {}, dataView: { show: true, optionToContent: function(opt){ var html = ''; $.each(opt.title, function(t_k, t_v){ html += '<p>' + t_v.text + ':</p>'; var table = '<table border=1 cellspacing=0 cellpadding=5><tbody><tr>'; table += '<th align="center">时间</th>'; $.each(opt.legend[0].data, function(l_k, l_v){ table += '<th align="center">' + l_v + '</th>'; }) table += '</tr>'; $.each(opt.xAxis[0].data, function(x_k, x_v){ table += '<tr>'; table += '<td align="center">' + x_v + '</td>'; $.each(opt.series, function(s_k, s_v){ if (s_v.xAxisIndex == t_k) { table += '<td align="center">' + formatBytes(s_v.data[x_k]) + '</td>'; } }); table += '</tr>'; }) table += '</tbody></table>'; html += table + '<br>'; }); return html; } } } }, xAxis: [ { type: 'category', boundaryGap: false, data: [ '2021/06/01 08:00:00', '2021/06/01 08:00:03', '2021/06/01 08:00:06', '2021/06/01 08:00:09', '2021/06/01 08:00:12', ] }, { type: 'category', boundaryGap: false, data: [ '2021/06/01 08:00:00', '2021/06/01 08:00:03', '2021/06/01 08:00:06', '2021/06/01 08:00:09', '2021/06/01 08:00:12', ], gridIndex: 1 }, ], yAxis: [ { type: 'value' }, { type: 'value', gridIndex: 1 }, ], series: [ // 发送 { name: '以太网', type: 'line', data: [10, 80, 300, 200, 160], xAxisIndex: 0, yAxisIndex: 0, }, { name: 'VMware Network Adapter VMnet1', type: 'line', data: [50, 200, 210, 60, 90], xAxisIndex: 0, yAxisIndex: 0, }, { name: 'VMware Network Adapter VMnet8', type: 'line', data: [80, 85, 96, 120, 200], xAxisIndex: 0, yAxisIndex: 0, }, // 接收 { name: '以太网', type: 'line', data: [20, 300, 700, 900, 1600], xAxisIndex: 1, yAxisIndex: 1, }, { name: 'VMware Network Adapter VMnet1', type: 'line', data: [800, 850, 960, 1200, 2000], xAxisIndex: 1, yAxisIndex: 1, }, { name: 'VMware Network Adapter VMnet8', type: 'line', data: [300, 400, 500, 600, 800], xAxisIndex: 1, yAxisIndex: 1, } ] }; myChart.setOption(option, true); // =================================== var legend_data = ['以太网', 'VMware Network Adapter VMnet1', 'VMware Network Adapter VMnet8']; var xAxis_data = []; var series = []; var max = 50; var time_unit = 2000; var base = +new Date() - max * time_unit; $.each(legend_data, function(l_k, l_v){ series.push({ name: l_v, type: 'line', data: [], xAxisIndex: 0, yAxisIndex: 0, }); series.push({ name: l_v, type: 'line', data: [], xAxisIndex: 1, yAxisIndex: 1, }); }) for (var i = 0; i < max; i++) { var now = new Date(base += time_unit); xAxis_data.push(getTime(now)); $.each(series, function(s_k, s_v){ var value = Math.round(Math.random() * 10000, 2); series[s_k].data.push(value); }); } option.legend.data = legend_data; option.xAxis[0].data = xAxis_data; option.xAxis[1].data = xAxis_data; option.series = series; myChart.setOption(option, true); // 初始化 var inter = setInterval(function(){ var now = new Date(base += time_unit); xAxis_data.shift(); xAxis_data.push(getTime(now)); $.each(series, function(s_k, s_v){ var value = Math.round(Math.random() * 10000, 2); series[s_k].data.shift(); series[s_k].data.push(value); }); option.legend.data = legend_data; option.xAxis[0].data = xAxis_data; option.xAxis[1].data = xAxis_data; option.series = series; myChart.setOption(option, true); }, time_unit); // 切换图例的选中状态 myChart.on('legendselectchanged', function(params){ option.legend.selected = params.selected; }); function getTime(date, format){ var ymd = [date.getFullYear(), date.getMonth() + 1, date.getDate()].join('/'); var hour = date.getHours() < 10 ? ('0' + date.getHours()) : date.getHours(); var minute = date.getMinutes() < 10 ? ('0' + date.getMinutes()) : date.getMinutes(); var second = date.getSeconds() < 10 ? ('0' + date.getSeconds()) : date.getSeconds(); var his = [hour, minute, second].join(':'); if (format == 'Ymd') { return ymd; } else if (format == 'His') { return his; } return ymd + ' ' + his; } function formatBytes(bytes){ var Kb = 1024, Mb = 1024 << 10, Gb = 1024 << 20, Tb = 1024 << 30; if (bytes < Kb) { return bytes + 'bps'; } else if (bytes < Mb) { return (bytes / Kb).toFixed(2) + 'Kbps'; } else if (bytes < Gb) { return (bytes / Mb).toFixed(2) + 'Mbps'; } else if (bytes < Tb) { return (bytes / Gb).toFixed(2) + 'Gbps'; } return bytes; } </script> </body> </html>