RRD数据库读写

来源:互联网 发布:淘宝卖家怎么激活 编辑:程序博客网 时间:2024/06/05 16:59

RRD数据库读写

1、环境配置:

操作系统:Centos7.2Java Version:1.8.0_131RRD Version:3.1

2、代码

import javafx.util.Pair;import org.rrd4j.ConsolFun;import org.rrd4j.DsType;import org.rrd4j.core.*;import java.io.IOException;import java.util.List;public class RRDUtil {    private String rrdName = "";    private long rrdStart = 0;    private long rrdStep = 0;    private RrdDef rrdDef = null;    private RrdDb rrdDb = null;    /**     * 1、定义RRD数据库     * */    public RRDUtil(String rrdName, long start, long step){        this.rrdName = rrdName;        this.rrdStart = start;        this.rrdStep = step;        this.rrdDb = null;        this.rrdDef = new RrdDef(this.rrdName, this.rrdStart, this.rrdStep);        this.rrdDef.setVersion(2);    }    /**     * 2、定义RRD数据源     * */    public RRDUtil addDataSource(String dsName, DsType dsType, long heartbeat, double minValue, double maxValue){        if(this.rrdDef == null || dsName == null || dsName.equals("")){            return null;        }        this.rrdDef.addDatasource(dsName, dsType, heartbeat, minValue, maxValue);        return this;    }    public RRDUtil addDataSource(DsDef dsDef){        if(this.rrdDef == null || dsDef == null){            return null;        }        this.rrdDef.addDatasource(dsDef);        return this;    }    public RRDUtil addDataSources(List<DsDef> dsDefList){        if(this.rrdDef == null || dsDefList == null){            return null;        }        for(DsDef dsDef : dsDefList){            this.rrdDef.addDatasource(dsDef);        }        return this;    }    /**     * 3、定义RRD存档     * */    public RRDUtil addArchive(ConsolFun consolFun, double xff, int steps, int rows){        this.rrdDef.addArchive(consolFun, xff, steps, rows);        return this;    }    public RRDUtil addArchive(ArcDef arcDef){        if(this.rrdDef == null || arcDef == null){            return null;        }        this.rrdDef.addArchive(arcDef);        return this;    }    public RRDUtil addArchives(List<ArcDef> arcDefsList){        if(this.rrdDef == null || arcDefsList == null){            return null;        }        for(ArcDef arcDef : arcDefsList){            this.rrdDef.addArchive(arcDef);        }        return this;    }    /**     * 4、构建,关闭数据库     * */    public RRDUtil build(){        try {            this.rrdDb = new RrdDb(this.rrdDef);        } catch (IOException e) {            e.printStackTrace();            return null;        }        return this;    }    public void close(){        try {            this.rrdDb.close();        } catch (IOException e) {            e.printStackTrace();        }    }    /**     * 5、插入数据     * */    public boolean rrdUpdate(Pair<String, Double>...values){        try {            Sample sample = this.rrdDb.createSample();            long time = System.currentTimeMillis() / 1000;            sample.setTime(time);            for(Pair<String, Double> val : values){                sample.setValue(val.getKey(), val.getValue());            }            sample.update();        } catch (IOException e) {            e.printStackTrace();            return false;        }        return true;    }    public boolean rrdUpdate(String dsName, double value){        try {            Sample sample = this.rrdDb.createSample();            long time = System.currentTimeMillis() / 1000;            sample.setTime(time);            sample.setValue(dsName, value);            sample.update();        } catch (IOException e) {            e.printStackTrace();            return false;        }        return true;    }    public boolean rrdUpdate(double...values){        try {            Sample sample = this.rrdDb.createSample();            long time = System.currentTimeMillis() / 1000;            sample.setTime(time);            sample.setValues(values);            sample.update();        } catch (IOException e) {            e.printStackTrace();            return false;        }        return true;    }    /**     * 6、查询数据     * */    public FetchData rrdQuery(ConsolFun fun, long start, long end){        FetchData fetchData;        FetchRequest request = this.rrdDb.createFetchRequest(fun, start, end, 1L);        try {            fetchData = request.fetchData();            System.out.println("== Data fetched. " + fetchData.getRowCount() + " points obtained");            System.out.println(fetchData.toString());        } catch (IOException e) {            e.printStackTrace();            return null;        }        return fetchData;    }    public FetchData rrdQuery(ConsolFun fun, long start, long end, long resolution){        FetchData fetchData;        FetchRequest request = this.rrdDb.createFetchRequest(fun, start, end, resolution);        try {            fetchData = request.fetchData();            System.out.println("== Data fetched. " + fetchData.getRowCount() + " points obtained");            System.out.println(fetchData.toString());        } catch (IOException e) {            e.printStackTrace();            return null;        }        return fetchData;    }    /**     * 7、导出与恢复     * */    public void exportToXml(String xmlPath){        try {            rrdDb.exportXml(xmlPath);        } catch (IOException e) {            e.printStackTrace();        }    }    public static RrdDb restoreFromXml(String restoredPath, String xmlPath){        RrdDb rrdDb = null;        try {            rrdDb = new RrdDb(restoredPath, xmlPath);        } catch (IOException e) {            e.printStackTrace();        }        return rrdDb;    }}

3、POM依赖

<dependency>    <groupId>org.rrd4j</groupId>    <artifactId>rrd4j</artifactId>    <version>3.1</version></dependency>

4、测试

public static void main(String[] args) throws InterruptedException{    final Random random = new Random();    long START = System.currentTimeMillis() / 1000;    RRDUtil rrdObj = new RRDUtil("demo.rrd", START - 1, 2);    rrdObj.addDataSource("users", DsType.GAUGE, 4, 0, Double.NaN)        .addDataSource("devices", DsType.GAUGE, 4, 0, Double.NaN)        .addArchive(ConsolFun.AVERAGE, 0.5, 1, 1 * 2 * 60 * 60)        .addArchive(ConsolFun.AVERAGE, 0.5, 5, 5 * 2 * 60 * 60)        .build();    Timer timer = new Timer();    timer.schedule(new TimerTask() {        @Override        public void run() {            rrdObj.rrdUpdate(new Pair<>("users", 1.1 + random.nextInt(1000)),            new Pair<>("devices", 2.2 + random.nextInt(1000)));            //rrdObj.rrdUpdate("users", 1.0);        }    }, 100, 2000);    while(true){        rrdObj.rrdQuery(ConsolFun.AVERAGE, START, System.currentTimeMillis() / 1000, 2);        Thread.sleep(2000);    }}
原创粉丝点击