Java ECharts 实现网卡流量实时监控折线图

12 篇文章 1 订阅
3 篇文章 0 订阅

Java ECharts 实现网卡流量实时监控折线图

主题

使用 java echarts 实现网卡流量实时监控折线图。

html主要代码

<div>
	<label>网口:</label>
	<select id="network" name="network" th:with="networks = ${@ferry.getNetworkList()}">
		<option th:each="network:${networks}" th:text="${network}" th:value="${network}"></option>
	</select>
</div>
<div>
	<label>流量单位:</label>
	 <select id="flowUnit" name="flowUnit">
	     <option value="KB">KB</option>
         <option value="MB">MB</option>
         <option value="GB">GB</option>
     </select>
</div>
<div>
	<div class="echarts" id="flowReportChart"></div>
</div>

js主要代码

$(function (){
	echarts.init(document.getElementById('flowReportChart')).dispose();
	chart();
})

function searchChart(){
	$("#flowReportChart").removeAttr("_echarts_instance_").empty(); 	
	echarts.init(document.getElementById('flowReportChart')).dispose();
	chart();
}

function chart(){
	var i = 0;
	var myChart = echarts.init(document.getElementById('flowReportChart'));
	
	let data = [];
	var option = {
		title: {
			text: '网口流量实时监控'
		},
		tooltip: {
			trigger: 'axis',
			axisPointer: {
				type: 'cross',
				animation: true
			}
		},
		xAxis: {
			type: 'time',
			splitLine: {
				show: false
			},
			name: '时间'
		},
		yAxis: {
			type: 'value',
            	boundaryGap: [0, '100%'],
                splitLine: {
				show: true
            },
        	name: '('+$("#flowUnit").find("option:selected").val()+'/S)'
		},
		series: [
			{
				name: '流量速度',
                   type: 'line',
                   showSymbol: false,
                   data: data,
                   color: ["rgb(84,112,198)"],
			}
		]
	};

	setInterval(function () {
		$.get(ctx + "ferry/flowReport/info/"+$("#network").find("option:selected").val()+"/"+$("#flowUnit").find("option:selected").val(), function(result){
			if(i>60){
            	data.shift();
            }else{
                i++;
            }
            data.push({
				name:new Date().toString(),
                value: [
                    new Date(),
                    result
                ]
			});
			myChart.setOption({
				series: [
					{
						data: data
					}
				]
			});
		});
	}, 1000);
	option && myChart.setOption(option);
}

java主要代码

//获取
@GetMapping("/info/{network}/{flowUnit}")
public @ResponseBody
Double checkPlanAll(@PathVariable("network") String network,@PathVariable("flowUnit") String flowUnit)
{
	try {
		ProcessBuilder pb = new ProcessBuilder("/bin/bash", /cds/data/flowNetwork.sh, network);
		pb.redirectErrorStream(true);//合并标准错误和标准输出
		Process pr = pb.start();
		// 读取输出,脚本运行结束后获取返回值,流的转换
		BufferedReader br = new BufferedReader(new InputStreamReader(pr.getInputStream()));
		String line = br.readLine();
		
		pr.waitFor();
		br.close();
		if(line != null && !line.equals("")){
        	if(flowUnit.equals("KB")){
            	return new BigDecimal(Double.parseDouble(line)/1024).setScale(5, BigDecimal.ROUND_HALF_UP).doubleValue();
            }else if(flowUnit.equals("MB")){
	            return new BigDecimal(Double.parseDouble(line)/(1024*1024)).setScale(5, BigDecimal.ROUND_HALF_UP).doubleValue();
            }else if(flowUnit.equals("GB")){
                return new BigDecimal(Double.parseDouble(line)/(1024*1024*1024)).setScale(5, BigDecimal.ROUND_HALF_UP).doubleValue();
            }
		}
		return Double.parseDouble("0");
	} catch (Exception e) {
		return Double.parseDouble("0");
	}
}
//获取所有网卡名
@Service("ferry")
public class FerryService
{
	public List<String> getNetworkList()
	{
		try{
			line = new ArrayList<>();
			String cmd = "cat /proc/net/dev";
			Process p = Runtime.getRuntime().exec(cmd);//执行
			LineNumberReader input = new LineNumberReader(new InputStreamReader(p.getInputStream()));
			String s = "";
			int i = 0;
			while ((s=input.readLine()) != null){
				i++;
				if(i>2){
					String net = s.trim().substring(0,s.trim().indexOf(":"));
					if(net.contains("enp")){
						line.add(net);
					}
				}
			}
			input.close();
		}catch (Exception e){
			e.printStackTrace();    
		}
	    return line;
	}
}
#!/bin/bash

ethn=$1

RX_pre=$(cat /proc/net/dev | grep $ethn | sed 's/:/ /g' | awk '{print $2}')

sleep 1

RX_next=$(cat /proc/net/dev | grep $ethn | sed 's/:/ /g' | awk '{print $2}')

RX=$((${RX_next}-${RX_pre}))

echo $RX

最终结果

请添加图片描述

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
为了在Java后端实现ECharts折线图,您需要遵循以下步骤: 1.首先,您需要在Java项目中引入ECharts库。您可以从以下链接下载ECharts-2.2.7.jar文件:http://mvnrepository.com/artifact/com.github.abel533/ECharts 2.接下来,您需要在前端使用ECharts.js。您可以从以下链接下载ECharts.js文件:http://echarts.baidu.com/echarts2/ 3.在Java代码中,您需要使用ECharts库提供的类来创建图表。以下是一个简单的示例代码,用于创建一个折线图: ```java import com.github.abel533.echarts.Option; import com.github.abel533.echarts.axis.CategoryAxis; import com.github.abel533.echarts.axis.ValueAxis; import com.github.abel533.echarts.code.AxisType; import com.github.abel533.echarts.code.LineType; import com.github.abel533.echarts.series.Line; import com.github.abel533.echarts.series.Series; public class EChartsLineChart { public Option getLineChart() { // 创建Option对象 Option option = new Option(); // 设置图表标题 option.title().text("折线图"); // 设置图表工具栏 option.toolbox().show(true); // 设置图表图例 option.legend().data("数据1", "数据2"); // 设置X轴 CategoryAxis xAxis = new CategoryAxis(); xAxis.type(AxisType.category); xAxis.data("一月", "二月", "三月", "四月", "五月", "六月"); option.xAxis(xAxis); // 设置Y轴 ValueAxis yAxis = new ValueAxis(); yAxis.type(AxisType.value); option.yAxis(yAxis); // 添加数据系列 Line line1 = new Line(); line1.name("数据1"); line1.type(Series.Type.line); line1.data(10, 20, 30, 40, 50, 60); Line line2 = new Line(); line2.name("数据2"); line2.type(Series.Type.line); line2.data(20, 30, 40, 50, 60, 70); option.series(line1, line2); return option; } } ``` 4.在您的Java代码中,您需要将数据整合到Option对象中,并将其返回给前端。以下是一个简单的示例代码: ```java import com.github.abel533.echarts.Option; import com.github.abel533.echarts.json.GsonOption; public class EChartsController { public String getLineChartData() { // 创建ECharts折线图对象 EChartsLineChart lineChart = new EChartsLineChart(); // 获取Option对象 Option option = lineChart.getLineChart(); // 将Option对象转换为JSON字符串 GsonOption gsonOption = new GsonOption(); gsonOption.setOption(option); String json = gsonOption.toString(); // 返回JSON字符串 return json; } } ``` 5.最后,在前端代码中,您需要使用Ajax从后端获取数据,并使用ECharts.js将数据渲染为折线图。以下是一个简单的示例代码: ```javascript $.ajax({ url: "/getLineChartData", type: "GET", dataType: "json", success: function (data) { // 使用ECharts.js将数据渲染为折线图 var myChart = echarts.init(document.getElementById("lineChart")); myChart.setOption(data); } }); ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值