Search in sources :

Example 16 with RrdDb

use of org.rrd4j.core.RrdDb in project scheduling by ow2-proactive.

the class RRDSigarDataStoreTest method samplesAreCreated_2Beans.

@Test
public void samplesAreCreated_2Beans() throws Exception {
    File rrdFile = createTempRRDFile();
    Fake fakeBean = new Fake();
    Fake fakeBean2 = new Fake();
    MBeanServer beanServer = MBeanServerFactory.createMBeanServer();
    beanServer.registerMBean(fakeBean, new ObjectName("java.lang:type=Memory"));
    beanServer.registerMBean(fakeBean2, new ObjectName("sigar:Type=Mem"));
    RRDSigarDataStore store = new RRDSigarDataStore(beanServer, rrdFile.getPath(), 4, Logger.getLogger("test"));
    RrdDb dataBase = new RrdDb(rrdFile.getPath());
    // sample 5 times every 10 seconds
    long firstSampleTime = System.currentTimeMillis();
    for (int i = 1; i <= 5; i++) {
        store.sample(dataBase, firstSampleTime + i * TEN_SECONDS);
    }
    assertEquals((firstSampleTime + 5 * TEN_SECONDS) / 1000, dataBase.getLastUpdateTime());
    assertEquals(42, dataBase.getDatasource("ValueMemory").getLastValue(), 0.001);
    assertEquals(42, dataBase.getDatasource("ValueMem").getLastValue(), 0.001);
}
Also used : RrdDb(org.rrd4j.core.RrdDb) File(java.io.File) MBeanServer(javax.management.MBeanServer) ObjectName(javax.management.ObjectName) Test(org.junit.Test)

Example 17 with RrdDb

use of org.rrd4j.core.RrdDb in project scheduling by ow2-proactive.

the class RRDDataStore method initDatabase.

protected void initDatabase() throws IOException {
    if (!new File(dataBaseFile).exists()) {
        if (step <= 0) {
            logger.debug("Provided step is invalid, forcing it to " + DEFAULT_STEP_IN_SECONDS);
            step = DEFAULT_STEP_IN_SECONDS;
        }
        logger.info("Node's statistics are saved in " + dataBaseFile);
        RrdDef rrdDef = new RrdDef(dataBaseFile, System.currentTimeMillis() / 1000, step);
        for (String dataSource : dataSources.keySet()) {
            rrdDef.addDatasource(dataSource, DsType.GAUGE, 600, 0, Double.NaN);
        }
        // for step equals 4 seconds
        // Archive of 10 minutes = 600 seconds (4 * 1 * 150) of completely detailed data
        rrdDef.addArchive(ConsolFun.AVERAGE, 0.5, 1, 150);
        // An archive of 1 hour = 3600 seconds (4 * 5 * 180) i.e. 180 averages of 5 steps
        rrdDef.addArchive(ConsolFun.AVERAGE, 0.5, 5, 180);
        // An archive of 4 hours = 14400 seconds (4 * 10 * 360) i.e. 360 averages of 10 steps
        rrdDef.addArchive(ConsolFun.AVERAGE, 0.5, 10, 360);
        // An archive of 8 hours = 28800 seconds (4 * 20 * 360) i.e. 360 averages of 20 steps
        rrdDef.addArchive(ConsolFun.AVERAGE, 0.5, 20, 360);
        // An archive of 24 hours = 86400 seconds (4 * 30 * 720) i.e. 720 averages of 30 steps
        rrdDef.addArchive(ConsolFun.AVERAGE, 0.5, 30, 720);
        // An archive of 1 week = 604800 seconds (4 * 210 * 720) i.e. 720 averages of 210 steps
        rrdDef.addArchive(ConsolFun.AVERAGE, 0.5, 210, 720);
        // An archive of 1 month ~= 28 days = 604800 seconds (4 * 840 * 720) i.e. 720 averages of 840 steps
        rrdDef.addArchive(ConsolFun.AVERAGE, 0.5, 840, 720);
        // An archive of 1 year = 364 days = 31449600 seconds (4 * 10920 * 720) i.e. 720 averages of 10920 steps
        rrdDef.addArchive(ConsolFun.AVERAGE, 0.5, 10920, 720);
        RrdDb dataBase = new RrdDb(rrdDef);
        dataBase.close();
    } else {
        logger.info("Using existing RRD database: " + new File(dataBaseFile).getAbsolutePath());
    }
}
Also used : RrdDef(org.rrd4j.core.RrdDef) RrdDb(org.rrd4j.core.RrdDb) File(java.io.File)

Example 18 with RrdDb

use of org.rrd4j.core.RrdDb in project scheduling by ow2-proactive.

the class RRDDataStore method run.

/**
 * Periodically dumps the new mbean state to the data base
 */
public void run() {
    try {
        RrdDb dataBase = new RrdDb(dataBaseFile);
        Sample sample = dataBase.createSample();
        logger.debug("RRD data base configuration:\n" + dataBase.getRrdDef().dump());
        while (!terminate) {
            try {
                synchronized (dataSources) {
                    dataSources.wait(step * 1000);
                    if (terminate) {
                        break;
                    }
                    // updating the data base
                    for (String dataSource : dataSources.keySet()) {
                        Object attrValue = mbean.getAttribute(dataSources.get(dataSource));
                        sample.setValue(dataSource, Double.parseDouble(attrValue.toString()));
                        logger.debug(System.currentTimeMillis() / 1000 + " sampling: " + dataSource + " " + Double.parseDouble(attrValue.toString()));
                    }
                    sample.setTime(System.currentTimeMillis() / 1000);
                    sample.update();
                }
            } catch (Exception e) {
                logger.error(e.getMessage(), e);
            }
        }
        dataBase.close();
    } catch (Exception e) {
        logger.error(e.getMessage(), e);
    }
}
Also used : Sample(org.rrd4j.core.Sample) RrdDb(org.rrd4j.core.RrdDb) IOException(java.io.IOException)

Aggregations

RrdDb (org.rrd4j.core.RrdDb)18 IOException (java.io.IOException)6 File (java.io.File)5 DsType (org.rrd4j.DsType)5 FetchData (org.rrd4j.core.FetchData)5 FetchRequest (org.rrd4j.core.FetchRequest)5 Test (org.junit.Test)4 ConsolFun (org.rrd4j.ConsolFun)3 Datasource (org.rrd4j.core.Datasource)3 Header (org.rrd4j.core.Header)3 Sample (org.rrd4j.core.Sample)3 MetricsGraphException (ddf.metrics.reporting.internal.MetricsGraphException)2 DecimalFormat (java.text.DecimalFormat)2 DecimalFormatSymbols (java.text.DecimalFormatSymbols)2 ArrayList (java.util.ArrayList)2 RejectedExecutionException (java.util.concurrent.RejectedExecutionException)2 ObjectName (javax.management.ObjectName)2 Archive (org.rrd4j.core.Archive)2 RrdDef (org.rrd4j.core.RrdDef)2 Color (java.awt.Color)1