JRobin Rrd画图出现值NaN的情况

shanshan0211_99 2011-12-13 10:07:43
我在使用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);
...全文
185 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

51,409

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧