Search in sources :

Example 1 with RrdGraph

use of org.jrobin.graph.RrdGraph in project opennms by OpenNMS.

the class JRobinRrdStrategy method createGraphReturnDetails.

/**
     * {@inheritDoc}
     *
     * This constructs a graphDef by parsing the rrdtool style command and using
     * the values to create the JRobin graphDef. It does not understand the 'AT
     * style' time arguments however. Also there may be some rrdtool parameters
     * that it does not understand. These will be ignored. The graphDef will be
     * used to construct an RrdGraph and a PNG image will be created. An input
     * stream returning the bytes of the PNG image is returned.
     */
@Override
public RrdGraphDetails createGraphReturnDetails(final String command, final File workDir) throws IOException, org.opennms.netmgt.rrd.RrdException {
    try {
        String[] commandArray = tokenize(command, " \t", false);
        RrdGraphDef graphDef = createGraphDef(workDir, commandArray);
        graphDef.setSignature("OpenNMS/JRobin");
        RrdGraph graph = new RrdGraph(graphDef);
        /*
             * We use a custom RrdGraphDetails object here instead of the
             * DefaultRrdGraphDetails because we won't have an InputStream
             * available if no graphing commands were used, e.g.: if we only
             * use PRINT or if the user goofs up a graph definition.
             *
             * We want to throw an RrdException if the caller calls
             * RrdGraphDetails.getInputStream and no graphing commands were
             * used.  If they just call RrdGraphDetails.getPrintLines, though,
             * we don't want to throw an exception.
             */
        return new JRobinRrdGraphDetails(graph, command);
    } catch (Throwable e) {
        LOG.error("JRobin: exception occurred creating graph", e);
        throw new org.opennms.netmgt.rrd.RrdException("An exception occurred creating the graph: " + e.getMessage(), e);
    }
}
Also used : RrdGraphDef(org.jrobin.graph.RrdGraphDef) RrdGraph(org.jrobin.graph.RrdGraph)

Example 2 with RrdGraph

use of org.jrobin.graph.RrdGraph in project opennms by OpenNMS.

the class JRobinRrdStrategyTest method testSampleVDEFPercentile.

@Test
public void testSampleVDEFPercentile() throws Exception {
    Double[] vals = { 39.0, 94.0, 95.0, 101.0, 155.0, 262.0, 274.0, 302.0, 319.0, 402.0, 466.0, 468.0, 494.0, 549.0, 550.0, 575.0, 600.0, 615.0, 625.0, 703.0, 729.0, 824.0, 976.0, 1018.0, 1036.0, 1138.0, 1195.0, 1265.0, 1287.0, 1323.0, 1410.0, 1443.0, 1516.0, 1538.0, 1664.0, 1686.0, 1801.0, 1912.0, 1921.0, 1929.0, 1936.0, 1941.0, 1985.0, 2003.0, 2010.0, 2013.0, 2082.0, 2106.0, 2213.0, 2358.0, 2394.0, 2572.0, 2616.0, 2627.0, 2676.0, 2694.0, 2736.0, 2740.0, 2966.0, 3005.0, 3037.0, 3041.0, 3146.0, 3194.0, 3228.0, 3235.0, 3243.0, 3339.0, 3365.0, 3414.0, 3440.0, 3454.0, 3567.0, 3570.0, 3615.0, 3619.0, 3802.0, 3831.0, 3864.0, 4061.0, 4084.0, 4106.0, 4233.0, 4328.0, 4362.0, 4372.0, 4376.0, 4388.0, 4413.0, 4527.0, 4612.0, 4643.0, 4684.0, 4750.0, 4799.0, 4810.0, 4824.0, 4825.0, 4871.0, 4932.0, 5028.0, 5112.0, 5118.0, 5163.0, 5198.0, 5256.0, 5296.0, 5413.0, 5471.0, 5568.0, 5628.0, 5645.0, 5733.0, 5790.0, 5851.0, 5886.0, 5927.0, 5937.0, 6018.0, 6027.0, 6046.0, 6145.0, 6147.0, 6289.0, 6371.0, 6384.0, 6393.0, 6431.0, 6469.0, 6543.0, 6649.0, 6772.0, 6864.0, 6943.0, 7009.0, 7014.0, 7037.0, 7258.0, 7356.0, 7364.0, 7386.0, 7387.0, 7399.0, 7450.0, 7519.0, 7527.0, 7578.0, 7632.0, 7709.0, 7849.0, 7896.0, 7952.0, 7980.0, 8050.0, 8126.0, 8152.0, 8165.0, 8332.0, 8347.0, 8520.0, 8522.0, 8542.0, 8587.0, 8621.0, 8678.0, 8721.0, 8739.0, 8765.0, 8889.0, 8951.0, 8962.0, 9082.0, 9149.0, 9199.0, 9278.0, 9334.0, 9339.0, 9345.0, 9365.0, 9383.0, 9402.0, 9471.0, 9483.0, 9492.0, 9496.0, 9532.0, 9553.0, 9563.0, 9571.0, 9574.0, 100000.0, 120000.0, 150000.0, 200000.0, 500000.0, 1000000.0, 2000000.0, 4000000.0, 8000000.0, 16000000.0 };
    File rrdFile = createRrdFile();
    RrdDb openedFile = m_strategy.openFile(rrdFile.getAbsolutePath());
    // This file's step size is 300
    int endTime = (int) (System.currentTimeMillis() / 1000);
    endTime -= (endTime % 300);
    int startTime = endTime - (200 * 300);
    // Got to throw away the first sample
    m_strategy.updateFile(openedFile, "huh?", (startTime - 300) + ":" + "0.0");
    int sampleTime = startTime;
    for (double val : vals) {
        m_strategy.updateFile(openedFile, "huh?", sampleTime + ":" + val);
        sampleTime += 300;
    }
    m_strategy.closeFile(openedFile);
    String[] command;
    RrdGraphDef graphDef;
    RrdGraph graph;
    RrdGraphInfo info;
    String[] printLines;
    command = new String[] { "--start=" + (startTime - 300), "--end=" + (endTime + 300), "DEF:baz=" + rrdFile.getAbsolutePath().replace("\\", "\\\\") + ":bar:AVERAGE", "VDEF:avg=baz,AVERAGE", "VDEF:min=baz,MIN", "VDEF:max=baz,MAX", "VDEF:tot=baz,TOTAL", "VDEF:nfp=baz,95,PERCENT", "PRINT:avg:AVERAGE:\"%le\"", "PRINT:min:AVERAGE:\"%le\"", "PRINT:max:AVERAGE:\"%le\"", "PRINT:tot:AVERAGE:\"%le\"", "PRINT:nfp:AVERAGE:\"%le\"" };
    graphDef = ((JRobinRrdStrategy) m_strategy).createGraphDef(new File(""), command);
    graph = new RrdGraph(graphDef);
    assertNotNull("graph object", graph);
    info = graph.getRrdGraphInfo();
    assertNotNull("graph info object", info);
    printLines = info.getPrintLines();
    assertNotNull("graph printLines - DEF", printLines);
    assertEquals("graph printLines - DEF size", 5, printLines.length);
    assertEquals("graph printLines - DEF item 0", "1.649453e+05", printLines[0]);
    assertEquals("graph printLines - DEF item 1", "3.900000e+01", printLines[1]);
    assertEquals("graph printLines - DEF item 2", "1.600000e+07", printLines[2]);
    assertEquals("graph printLines - DEF item 3", "9.896721e+09", printLines[3]);
    assertEquals("graph printLines - DEF item 4", "9.574000e+03", printLines[4]);
    // Now do it with a CDEF
    command = new String[] { "--start=" + (startTime - 300), "--end=" + (endTime + 300), "DEF:baz=" + rrdFile.getAbsolutePath().replace("\\", "\\\\") + ":bar:AVERAGE", "CDEF:bazX1=baz,1,*", "CDEF:bazX1P0=bazX1,0,+", "VDEF:avg=bazX1,AVERAGE", "VDEF:min=bazX1,MIN", "VDEF:max=bazX1,MAX", "VDEF:tot=bazX1,TOTAL", "VDEF:nfp=bazX1,95,PERCENT", "VDEF:nfp2=bazX1P0,95,PERCENT", "PRINT:avg:AVERAGE:\"%le\"", "PRINT:min:AVERAGE:\"%le\"", "PRINT:max:AVERAGE:\"%le\"", "PRINT:tot:AVERAGE:\"%le\"", "PRINT:nfp:AVERAGE:\"%le\"", "PRINT:nfp2:AVERAGE:\"%le\"" };
    graphDef = ((JRobinRrdStrategy) m_strategy).createGraphDef(new File(""), command);
    graph = new RrdGraph(graphDef);
    assertNotNull("graph object", graph);
    info = graph.getRrdGraphInfo();
    assertNotNull("graph info object", info);
    printLines = info.getPrintLines();
    assertNotNull("graph printLines - CDEF", printLines);
    assertEquals("graph printLines - CDEF size", 6, printLines.length);
    assertEquals("graph printLines - CDEF item 0", "1.649453e+05", printLines[0]);
    assertEquals("graph printLines - CDEF item 1", "3.900000e+01", printLines[1]);
    assertEquals("graph printLines - CDEF item 2", "1.600000e+07", printLines[2]);
    assertEquals("graph printLines - CDEF item 3", "9.896721e+09", printLines[3]);
    assertEquals("graph printLines - CDEF item 4", "9.574000e+03", printLines[4]);
    assertEquals("graph printLines - CDEF item 5", "9.574000e+03", printLines[5]);
}
Also used : RrdGraphDef(org.jrobin.graph.RrdGraphDef) RrdGraph(org.jrobin.graph.RrdGraph) RrdDb(org.jrobin.core.RrdDb) File(java.io.File) RrdGraphInfo(org.jrobin.graph.RrdGraphInfo) Test(org.junit.Test)

Example 3 with RrdGraph

use of org.jrobin.graph.RrdGraph in project opennms by OpenNMS.

the class JRobinRrdStrategyTest method testPrint.

@Test
public void testPrint() throws Exception {
    long end = System.currentTimeMillis();
    long start = end - (24 * 60 * 60 * 1000);
    String[] command = new String[] { "--start=" + start, "--end=" + end, "CDEF:something=1", "PRINT:something:AVERAGE:\"%le\"" };
    RrdGraphDef graphDef = ((JRobinRrdStrategy) m_strategy).createGraphDef(new File(""), command);
    RrdGraph graph = new RrdGraph(graphDef);
    assertNotNull("graph object", graph);
    RrdGraphInfo info = graph.getRrdGraphInfo();
    assertNotNull("graph info object", info);
    String[] printLines = info.getPrintLines();
    assertNotNull("graph printLines", printLines);
    assertEquals("graph printLines size", 1, printLines.length);
    assertEquals("graph printLines item 0", "1.000000e+00", printLines[0]);
    double d = Double.parseDouble(printLines[0]);
    assertEquals("graph printLines item 0 as a double", 1.0, d, 0.0);
}
Also used : RrdGraphDef(org.jrobin.graph.RrdGraphDef) RrdGraph(org.jrobin.graph.RrdGraph) File(java.io.File) RrdGraphInfo(org.jrobin.graph.RrdGraphInfo) Test(org.junit.Test)

Example 4 with RrdGraph

use of org.jrobin.graph.RrdGraph in project opennms by OpenNMS.

the class JRobinRrdStrategyTest method testCommentWithNewlines.

@Test
public void testCommentWithNewlines() throws Exception {
    long end = System.currentTimeMillis();
    long start = end - (24 * 60 * 60 * 1000);
    String[] command = new String[] { "--start=" + start, "--end=" + end, "COMMENT:foo\\n" };
    String[] command2 = new String[] { "--start=" + start, "--end=" + end, "COMMENT:foo\\n", "COMMENT:foo2\\n" };
    RrdGraphDef graphDef = ((JRobinRrdStrategy) m_strategy).createGraphDef(new File(""), command);
    RrdGraph graph = new RrdGraph(graphDef);
    assertNotNull("graph object", graph);
    int firstHeight = graph.getRrdGraphInfo().getHeight();
    RrdGraphDef graphDef2 = ((JRobinRrdStrategy) m_strategy).createGraphDef(new File(""), command2);
    RrdGraph graph2 = new RrdGraph(graphDef2);
    assertNotNull("second graph object", graph2);
    int secondHeight = graph2.getRrdGraphInfo().getHeight();
    assertFalse("first graph height " + firstHeight + " and second graph height " + secondHeight + " should not be equal... there should be another newline in the second one making it taller", firstHeight == secondHeight);
}
Also used : RrdGraphDef(org.jrobin.graph.RrdGraphDef) RrdGraph(org.jrobin.graph.RrdGraph) File(java.io.File) Test(org.junit.Test)

Example 5 with RrdGraph

use of org.jrobin.graph.RrdGraph in project opennms by OpenNMS.

the class JRobinRrdStrategyTest method testGprintWithNewlines.

@Test
public void testGprintWithNewlines() throws Exception {
    long end = System.currentTimeMillis();
    long start = end - (24 * 60 * 60 * 1000);
    String[] command = new String[] { "--start=" + start, "--end=" + end, "CDEF:a=1", "GPRINT:a:AVERAGE:\"%8.2lf\\n\"" };
    String[] command2 = new String[] { "--start=" + start, "--end=" + end, "CDEF:a=1", "CDEF:b=1", "GPRINT:a:AVERAGE:\"%8.2lf\\n\"", "GPRINT:b:AVERAGE:\"%8.2lf\\n\"" };
    RrdGraphDef graphDef = ((JRobinRrdStrategy) m_strategy).createGraphDef(new File(""), command);
    RrdGraph graph = new RrdGraph(graphDef);
    assertNotNull("graph object", graph);
    int firstHeight = graph.getRrdGraphInfo().getHeight();
    RrdGraphDef graphDef2 = ((JRobinRrdStrategy) m_strategy).createGraphDef(new File(""), command2);
    RrdGraph graph2 = new RrdGraph(graphDef2);
    assertNotNull("second graph object", graph2);
    int secondHeight = graph2.getRrdGraphInfo().getHeight();
    assertFalse("first graph height " + firstHeight + " and second graph height " + secondHeight + " should not be equal... there should be another line with a newline in the second one making it taller", firstHeight == secondHeight);
}
Also used : RrdGraphDef(org.jrobin.graph.RrdGraphDef) RrdGraph(org.jrobin.graph.RrdGraph) File(java.io.File) Test(org.junit.Test)

Aggregations

RrdGraph (org.jrobin.graph.RrdGraph)5 RrdGraphDef (org.jrobin.graph.RrdGraphDef)5 File (java.io.File)4 Test (org.junit.Test)4 RrdGraphInfo (org.jrobin.graph.RrdGraphInfo)2 RrdDb (org.jrobin.core.RrdDb)1