2010年1月19日 星期二
* 介绍一下 Jrobin 的语法
* 创建Rrd文件
* RrdDef def = new RrdDef("D:/rrd/test.rrd", 300);
* 定义rrd的路径和step
* step 表示时间间隔。真正存储的时间点的间隔。DS.在每一个 step 周期内会产生一组新的DS值,用以更新资料库.这个值也称为Primary
Data Point (PDP).在上例,每 300 秒产生一个新的 PDP 值.
注:如果无法刚好在每 300 秒产生一个值,JRobin 会自动补偿修正.
* 加入数据源
* def.addDatasource("input", "COUNTER", 600, 0, Double.NaN);
def.addDatasource("output", "COUNTER", 600, 0, Double.NaN);
* 数据源名称为input,dsType为 COUNTER ,heartbeat 为600,设置的下限和上限为0,和NaN;(Use <code>Double.NaN</code> if
unknown)
* 加入archive
* def.addArchive("AVERAGE", 0.5, 1, 600);
def.addArchive("AVERAGE", 0.5, 6, 700);
def.addArchive("AVERAGE", 0.5, 24, 797);
def.addArchive("AVERAGE", 0.5, 288, 775);
def.addArchive("MAX", 0.5, 1, 600);
def.addArchive("MAX", 0.5, 6, 700);
def.addArchive("MAX", 0.5, 24, 797);
def.addArchive("MAX", 0.5, 288, 775);
* 数据合并类型CF 为AVERAGE(取平均值)和 MAX(取最大值),xff为0.5表示有效数据要超过百分之五十才能计算Archive,1,6,24,
288,表示多少个PDP合成一个Archive!例如 6 就是 6个PDP合成一个Archive。最后一个数字表示总共要生成多少个Archive。
* 如 第二个 def.addArchive("AVERAGE", 0.5, 6, 700); 前面定义step为300秒即五分钟,这个Archive定义6个PDP合成一个Archive,
即三十分钟合成一个Archive,总共是700个,700*30分钟 为 14.5天 约为两星期。所以这个Archive就是存两星期平均值的Archive。
* RrdDb rrd = new RrdDb(def);
* 生成rrd文件,这样就按照你所定义的方式生成了rrd文件,但是文件中没有数据,都被填充为NaN。
* ***************************************************************
* 更新数据
* RrdDb rrdDb = new RrdDb("D:/rrd/test.rrd");
* 这样就生成了rrdDb对象,将路径下面的rrd文件读入到内存中了!
* long timestamp = ....;//开始更新时间 ,必须大于开始时间和最后更新时间
* Sample sample = rrd.createSample(timestamp);//创建实例对象
* sample.setValue("input", inputValue); //inputValue和outputValue为
//double类型数据。
sample.setValue("output", outputValue);
sample.update();
* 调用update()方法之后数据将被更新到rrd文件中。
* **********************************************************
* long timestamp = rrdDb .getLastUpdateTime();
* 得到最后更新的时间
* FetchRequest request = rrd.createFetchRequest("AVERAGE", 100100000L, 100200000L);
* FetchData fetchData = request.fetchData();
* for(int i = 0; i < fetchData.getRowCount(); i++) {
FetchPoint point = fetchData.getRow(i);
System.out.println(point.dump());
}
* 取得 rrd文件中的数据 并打印出来!
* 具体取数据的方法见API文档!这里就不做说明了。