rrd4j的使用详解2--从rrd文件中读取数据

来源:互联网 发布:蒙特卡洛算法求圆周率 编辑:程序博客网 时间:2024/06/07 01:39

从rrd文件中读取数据例子:


import static org.rrd4j.ConsolFun.AVERAGE;import java.io.BufferedOutputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.PrintWriter;import java.util.Calendar;import java.util.Date;import java.util.Random;import org.rrd4j.core.FetchData;import org.rrd4j.core.FetchRequest;import org.rrd4j.core.RrdDb;import org.rrd4j.core.Util;/** * Simple demo just to check that everything is OK with this library. Creates two files in your * $HOME/rrd4j-demo directory: demo.rrd and demo.png. */public class DemoRead {    static final long SEED = 1909752002L;    static final Random RANDOM = new Random(SEED);    static final String FILE = "demo";    /*static final long START = Util.getTimestamp(2013, 10, 19);    static final long END = Util.getTimestamp(2013, 10, 21);*/       static final int MAX_STEP = 300;    static final int IMG_WIDTH = 500;    static final int IMG_HEIGHT = 300;    /**     * <p>To start the demo, use the following command:</p>     * <pre>     * java -cp rrd4j-{version}.jar org.rrd4j.demo.Demo     * </pre>     *     * @param args the name of the backend factory to use (optional)     * @throws IOException Thrown     */    public static void main(String[] args) throws IOException {         //获取昨天当前时间        Calendar cal = Calendar.getInstance();        long END = Util.getTimestamp(cal);        cal.add(Calendar.DATE, -1);        long START = Util.getTimestamp(cal) + 3*60;        System.out.println("start=" + START);        System.out.println("end=" + END);            System.out.println("date=" + new Date(1396422600L * 1000));                long start = START ;        long end = END;                String rrdPath = Util.getRrd4jDemoPath(FILE + ".rrd");        String logPath = Util.getRrd4jDemoPath(FILE + ".log");        PrintWriter log = new PrintWriter(new BufferedOutputStream(new FileOutputStream(logPath, false)));        // creation                // test read-only access!        //rrdPath = "d:/rrd/test.rrd";        rrdPath = Util.getUserHomeDirectory() + "\\rrd\\NetworkDevice\\switch-B_slot-1_switch-ether_port-1.rrd";        RrdDb rrdDb = new RrdDb(rrdPath, true);        println("File reopen in read-only mode");        println("== Last update time was: " + rrdDb.getLastUpdateTime());        println("== Last info was: " + rrdDb.getInfo());        // fetch data        println("== Fetching data for the whole month");        FetchRequest request = rrdDb.createFetchRequest(AVERAGE, start, end);        println(request.dump());        log.println(request.dump());        FetchData fetchData = request.fetchData();        //double[] value = fetchData.getValues("cpu_usagemhz");        println("== Data fetched. " + fetchData.getRowCount() + " points obtained");        println(fetchData.toString());        log.close();    }    static void println(String msg) {        System.out.println(msg);    }    static void print(String msg) {        System.out.print(msg);    }    static class GaugeSource {        private double value;        private double step;        GaugeSource(double value, double step) {            this.value = value;            this.step = step;        }        long getValue() {            double oldValue = value;            double increment = RANDOM.nextDouble() * step;            if (RANDOM.nextDouble() > 0.5) {                increment *= -1;            }            value += increment;            if (value <= 0) {                value = 0;            }            return Math.round(oldValue);        }    }}


结果:


0 0
原创粉丝点击