My RRD was created using the following template:
<rrd_def>
<path>${path}</path>
<step>300</step>
<datasource>
<name>${datasourceName}</name>
<type>GAUGE</type>
<heartbeat>600</heartbeat>
<min>U</min>
<max>U</max>
</datasource>
<archive>
<cf>LAST</cf>
<xff>0.5</xff>
<steps>1</steps>
<rows>105120</rows>
</archive>
<archive>
<cf>AVERAGE</cf>
<xff>0.5</xff>
<steps>12</steps>
<rows>8760</rows>
</archive>
<archive>
<cf>AVERAGE</cf>
<xff>0.5</xff>
<steps>288</steps>
<rows>366</rows>
</archive>
<archive>
<cf>AVERAGE</cf>
<xff>0.5</xff>
<steps>8928</steps>
<rows>12</rows>
</archive>
<archive>
<cf>MAX</cf>
<xff>0.5</xff>
<steps>1</steps>
<rows>288</rows>
</archive>
<archive>
<cf>MAX</cf>
<xff>0.5</xff>
<steps>288</steps>
<rows>366</rows>
</archive>
</rrd_def>
]]>
</rrd_template>
The database is popuated with 7 days worth of data. When I create a graph for the last 5 days the graph created is correct. When I create a graph starting 8 days ago, which includes NaN data the graph contains a spike for the first day in which data exists and nothing is plotted for the remainder of the days in which good data is available. Is this a configuration error?
The following method is called to create the graph.
public static void createGraphStartingAt(String fullyQualifiedRrdFileName, String fullyQualifiedGraphFileName,
Map<String, String> attributes, long startingAt) throws Exception
{
RrdDb rrdDb = new RrdDb(fullyQualifiedRrdFileName, true);
RrdGraphDef rrdGraphDef = new RrdGraphDef\(\); Color color = new Color\(0x84, 0x93, 0x21\); String legend = ""; String verticalLabel = ""; String consolidationFunction = DEFAULT\_CONSOLIDATION; String title = attributes.get\(TITLE\_ATTRIBUTE\); if\(attributes.containsKey\(CONSOLIDATION\_FUNCTION\)\) consolidationFunction = attributes.get\(CONSOLIDATION\_FUNCTION\); if\(attributes.containsKey\(LEGEND\_ATTRIBUTE\)\) legend = attributes.get\(LEGEND\_ATTRIBUTE\); if\(attributes.containsKey\(VERTICAL\_LABEL\_ATTRIBUTE\)\) verticalLabel = attributes.get\(VERTICAL\_LABEL\_ATTRIBUTE\); if\(attributes.containsKey\(COLOR\_ATTRIBUTE\)\) color = KinetoColor.getColor\(attributes.get\(COLOR\_ATTRIBUTE\)\); int datasourceIndex = 0; int archiveIndex = 0; if\(attributes.containsKey\(ARCHIVE\_INDEX\)\) archiveIndex = Integer.parseInt\(attributes.get\(ARCHIVE\_INDEX\)\); Datasource ds = rrdDb.getDatasource\(datasourceIndex\); String datasourceName = ds.getDsName\(\); Archive arc = rrdDb.getArchive\(archiveIndex\); long startTime = arc.getStartTime\(\); long endTime = arc.getEndTime\(\); long rraStep = arc.getArcStep\(\); rrdDb.close\(\); if\(startingAt == -1\) startingAt = startTime; logger.info\("rrd startTime=" + startTime + " endTime=" + endTime + " graph startTime=" + startingAt\); if\(legend.length\(\) == 0\) \{ rrdGraphDef.setNoLegend\(true\); \} rrdGraphDef.setFilename\(fullyQualifiedGraphFileName\); if\(verticalLabel.length\(\) > 0\) \{ rrdGraphDef.setVerticalLabel\(verticalLabel\); \} String minValue = attributes.get\("minValue"\); String maxValue = attributes.get\("maxValue"\); if\(minValue \!= null\) \{ rrdGraphDef.setMinValue\(Double.parseDouble\(minValue\)\); rrdGraphDef.setRigid\(true\); \} if\(maxValue \!= null\) \{ rrdGraphDef.setMaxValue\(Double.parseDouble\(maxValue\)\); rrdGraphDef.setRigid\(true\); \} rrdGraphDef.datasource\(datasourceName, fullyQualifiedRrdFileName, datasourceName, consolidationFunction\); rrdGraphDef.line\(datasourceName, color, legend + "\\\l"\); rrdGraphDef.setHeight\(200\); rrdGraphDef.setWidth\(400\); rrdGraphDef.setShowSignature\(false\); rrdGraphDef.setUnitsExponent\(0\); rrdGraphDef.setStep\(rraStep\); rrdGraphDef.setImageFormat\(PNG\); rrdGraphDef.setColor\(RrdGraphConstants.COLOR\_ARROW, new Color\(0x84, 0x93, 0x21\)\); long timeNow = Calendar.getInstance\(\).getTimeInMillis\(\) / 1000; rrdGraphDef.setTimeSpan\(startingAt, timeNow\); rrdGraphDef.setTitle\(String.format\("%s - %s", title, DateAndTime.date\_now\(\)\)\); @SuppressWarnings\("unused"\) RrdGraph rrdGraph = new RrdGraph\(rrdGraphDef\);
}
The default CF is "LAST" and the archive index is 0.