我在使用JRobin Rrd绘制流量监控图的时候,发现一个问题,Jrobin存值的时候,如果在某一时刻碰巧没有值,就会存入Not a number,导致图片上的数据显示NaN。以下是我的代码,我能确定数据是没问题的。请问哪位知道Jrobin这种情况的解决方法,多谢了。
RrdDef rrdDef = new RrdDef(rrdFile, start - 1, perTime);//perTime=300 rrdDef.addDatasource("value1", "GAUGE", 2*perTime, Double.NaN, Double.NaN);//定义数据源,可以定义多个,value1代表流入值
rrdDef.addDatasource("value2", "GAUGE", 2*perTime, Double.NaN, Double.NaN);//value2代表流出值
rrdDef.addArchive("AVERAGE", 0.5, 1, listResult.size());//listResult--数据源 RrdDb rrdDb = new RrdDb(rrdDef);//根据数据定义创建数据文件
for(int j = 0; j < listResult.size(); j++) {
HashMap hashMap = (HashMap)listResult.get(j);
BigDecimal portInTraffic = (BigDecimal)hashMap.get("FLOW_IN");
BigDecimal portOutTraffic = (BigDecimal)hashMap.get("FLOW_OUT");
String dateString3 = (String)hashMap.get("GATHER_DATE");
SimpleDateFormat simDateFormat =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = simDateFormat.parse(dateString3);
long time0 = (long)date.getTime();
time0 = time0/1000;
//往流量图上加数据--开始
Sample sample = rrdDb.createSample(time0);//一笔数据一个点
if(portInTraffic != null) {
sample.setValue("value1", portInTraffic.doubleValue());
}
if(portOutTraffic != null) {
sample.setValue("value2", portOutTraffic.doubleValue());
}
try {
sample.update();
} catch (RuntimeException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//往流量图上加数据--结束
}
String pngFile = "";
RrdGraphDef gDef = null;
//生成最近一月的图形---图片格式为:端口编码+"-"+周期类型(Monthly)
pngFile = uploadPath + "port" + File.separator + userName
+ File.separator + circuitId+"-3-small.month.png";
gDef = new RrdGraphDef();
gDef.setFilename(pngFile);
gDef.setWidth(250);
gDef.setHeight(150);
gDef.setImageFormat("png");
gDef.setTimeSpan(end - 30 * 86400, end);
gDef.setTitle(circuitName + "最近一月流量图");
gDef.setVerticalLabel("字节每秒");
gDef.datasource("demo", rrdFile, "value1", "AVERAGE");
gDef.area("demo", Color.GREEN, "流入");
// gDef.gprint("demo", "MIN", "最小:%5.1lfb/s");
gDef.gprint("demo", "MIN", "最小:%.2f %sB/s");
gDef.gprint("demo", "AVERAGE", "平均:%.2f %sB/s");
gDef.gprint("demo", "MAX", "最大:%.2f %sB/s\\l");
gDef.datasource("demo2", rrdFile, "value2", "AVERAGE");
gDef.line("demo2", Color.BLUE, "流出");
gDef.gprint("demo2", "MIN", "最小:%.2f %sB/s");
gDef.gprint("demo2", "AVERAGE", "平均:%.2f %sB/s");
gDef.gprint("demo2", "MAX", "最大:%.2f %sB/s");
gDef.setSmallFont(new Font("Monospaced", Font.PLAIN, 7));
gDef.setLargeFont(new Font("SansSerif", Font.BOLD, 9));
new RrdGraph(gDef);