@Test public void testRrdFileCreationForGaugeDataSource() throws Exception { // Set sample rate to 1 sec (default is 60 seconds) so that unit test runs quickly int sampleRate = 1; createJmxCollector("Uptime", JmxCollector.GAUGE_DATA_SOURCE_TYPE, sampleRate); String rrdFilename = jmxCollector.getRrdPath(); assertThat(rrdFilename, is(TEST_DIR + rrdPath)); rrdDb = new RrdDb(rrdFilename); assertThat(rrdDb, not(nullValue())); assertThat(rrdDb.isClosed(), is(false)); Header header = rrdDb.getHeader(); assertThat(header, not(nullValue())); assertThat(header.getStep(), is((long) sampleRate)); // verify 60 second sample rate assertThat(rrdDb.getDsCount(), is(1)); Datasource dataSource = rrdDb.getDatasource(dataSourceName); assertThat(dataSource, not(nullValue())); DsType dataSourceType = dataSource.getType(); assertThat(dataSourceType, is(DsType.GAUGE)); assertThat(rrdDb.getArcCount(), is(8)); Archive archive = rrdDb.getArchive(ConsolFun.MIN, 1); assertThat(archive, not(nullValue())); assertThat(archive.getRows(), is(60)); archive = rrdDb.getArchive(ConsolFun.MIN, 15); assertThat(archive, not(nullValue())); assertThat(archive.getRows(), is(JmxCollector.ONE_YEAR_IN_15_MINUTE_STEPS)); archive = rrdDb.getArchive(ConsolFun.MAX, 1); assertThat(archive, not(nullValue())); assertThat(archive.getRows(), is(60)); archive = rrdDb.getArchive(ConsolFun.MAX, 15); assertThat(archive, not(nullValue())); assertThat(archive.getRows(), is(JmxCollector.ONE_YEAR_IN_15_MINUTE_STEPS)); archive = rrdDb.getArchive(ConsolFun.AVERAGE, 1); assertThat(archive, not(nullValue())); assertThat(archive.getRows(), is(60)); archive = rrdDb.getArchive(ConsolFun.AVERAGE, 15); assertThat(archive, not(nullValue())); assertThat(archive.getRows(), is(JmxCollector.ONE_YEAR_IN_15_MINUTE_STEPS)); }
private void collectData(int numRrdStepIterations) throws Exception { String rrdFilename = jmxCollector.getRrdPath(); rrdDb = new RrdDb(rrdFilename); Header header = rrdDb.getHeader(); // Wait for "n" iterations of RRDB's sample rate, then see if MBean value was collected LOGGER.debug("Sleeping for " + (header.getStep() * numRrdStepIterations) + " seconds"); Thread.sleep((header.getStep() * numRrdStepIterations) * 1000); // LOGGER.debug(rrdDb.dump()); long endTime = Calendar.getInstance().getTimeInMillis() / 1000; // +1 because the fetch gets data for times inclusively, e.g., // endTime=12345, so startTime=12345-4=12341, // then fetch data for timestamps 12341, 12342, 12343, 12344, 12345 (which is 5 values) long startTime = endTime - numRrdStepIterations + 1; LOGGER.debug("startTime = " + startTime + ", endTime = " + endTime); FetchRequest fetchRequest = rrdDb.createFetchRequest(ConsolFun.TOTAL, startTime, endTime); FetchData fetchData = fetchRequest.fetchData(); double[] values = fetchData.getValues(dataSourceName); assertThat(values.length, is(numRrdStepIterations)); logFetchData(fetchData, "TOTAL"); fetchRequest = rrdDb.createFetchRequest(ConsolFun.AVERAGE, startTime, endTime); fetchData = fetchRequest.fetchData(); values = fetchData.getValues(dataSourceName); assertThat(values.length, is(numRrdStepIterations)); logFetchData(fetchData, "AVERAGE"); fetchRequest = rrdDb.createFetchRequest(ConsolFun.MIN, startTime, endTime); fetchData = fetchRequest.fetchData(); values = fetchData.getValues(dataSourceName); assertThat(values.length, is(numRrdStepIterations)); logFetchData(fetchData, "MIN"); fetchRequest = rrdDb.createFetchRequest(ConsolFun.MAX, startTime, endTime); fetchData = fetchRequest.fetchData(); values = fetchData.getValues(dataSourceName); assertThat(values.length, is(numRrdStepIterations)); logFetchData(fetchData, "MAX"); }