long[] getRrdTimestamps() { return fetchData.getTimestamps(); }
/** * Returns all archived values for a single datasource. * Returned values correspond to timestamps * returned with {@link #getTimestamps() getTimestamps()} method. * * @param dsName Datasource name. * @return Array of single datasource values. */ public double[] getValues(String dsName) { for (int dsIndex = 0; dsIndex < getColumnCount(); dsIndex++) { if (dsName.equals(dsNames[dsIndex])) { return getValues(dsIndex); } } throw new IllegalArgumentException("Datasource [" + dsName + "] not found"); }
/** * Dumps fetch data to file in XML format. * * @param filepath Path to destination file * @throws java.io.IOException Thrown in case of I/O error */ public void exportXml(String filepath) throws IOException { try(OutputStream outputStream = new FileOutputStream(filepath)) { exportXml(outputStream); } }
@Override public Map<TimeSeriesInfo<Double>, TimeSeriesProcessor<Double>> fetchData(String path, Instant begin, Instant end, List<TimeSeriesInfo<Double>> seriesInfo, boolean bypassCache) throws DataAdapterException { if (this.isClosed()) { throw new IllegalStateException("An attempt was made to fetch data from a closed adapter"); } Path dsPath = Path.of(path); try { FetchRequest request = rrdDbMap.get(dsPath.getParent()).createFetchRequest(ConsolFun.valueOf(dsPath.getFileName().toString()), begin.getEpochSecond(), end.getEpochSecond()); request.setFilter(seriesInfo.stream().map(s -> s.getBinding().getLabel()).toArray(String[]::new)); FetchData data = request.fetchData(); Map<TimeSeriesInfo<Double>, TimeSeriesProcessor<Double>> series = new HashMap<>(); for (int i = 0; i < data.getRowCount(); i++) { ZonedDateTime timeStamp = Instant.ofEpochSecond(data.getTimestamps()[i]).atZone(getTimeZoneId()); for (TimeSeriesInfo<Double> info : seriesInfo) { Double val = data.getValues(info.getBinding().getLabel())[i]; XYChart.Data<ZonedDateTime, Double> point = new XYChart.Data<>(timeStamp, val.isNaN() ? 0 : val); TimeSeriesProcessor<Double> seriesProcessor = series.computeIfAbsent(info, k -> new DoubleTimeSeriesProcessor()); seriesProcessor.addSample(point); } } logger.trace(() -> String.format("Built %d series with %d samples each (%d total samples)", seriesInfo.size(), data.getRowCount(), seriesInfo.size() * data.getRowCount())); return series; } catch (IOException e) { throw new FetchingDataFromAdapterException("IO Error while retrieving data from rrd db", e); } }
FetchData fetchData = new FetchData(this, request); fetchData.setTimestamps(timestamps); fetchData.setValues(values); return fetchData;
/** * Returns all aggregated values (MIN, MAX, LAST, FIRST, AVERAGE or TOTAL) calculated from the fetched data * for a single datasource. * * @param dsName Datasource name. * @return Simple object containing all aggregated values. * @throws IllegalArgumentException Thrown if the given datasource name cannot be found in the fetched data. */ public Aggregates getAggregates(String dsName) { DataProcessor dataProcessor = createDataProcessor(null); return dataProcessor.getAggregates(dsName); }
/** * Dumps the content of the whole FetchData object. Useful for debugging. * * @return a {@link java.lang.String} containing the contents of this object, for debugging. */ public String dump() { StringBuilder buffer = new StringBuilder(); for (int row = 0; row < getRowCount(); row++) { buffer.append(timestamps[row]); buffer.append(": "); for (int dsIndex = 0; dsIndex < getColumnCount(); dsIndex++) { buffer.append(Util.formatDouble(values[dsIndex][row], true)); buffer.append(" "); } buffer.append("\n"); } return buffer.toString(); }
log.println(request.dump()); FetchData fetchData = request.fetchData(); println("== Data fetched. " + fetchData.getRowCount() + " points obtained"); println(fetchData.toString()); println("== Dumping fetched data to XML format"); println(fetchData.exportXml()); println("== Fetch completed");
double[] getRrdValues() { return fetchData.getValues(dsName); }
long getArchiveEndTime() { return fetchData.getArcEndTime(); }
long getFetchStep() { return fetchData.getStep(); }
/** * Returns string representing fetched data in a RRDTool-like form. * * @return Fetched data as a string in a rrdfetch-like output form. */ public String toString() { // print header row StringBuilder buff = new StringBuilder(); buff.append(padWithBlanks("", 10)); buff.append(" "); for (String dsName : dsNames) { buff.append(padWithBlanks(dsName, 18)); } buff.append("\n \n"); for (int i = 0; i < timestamps.length; i++) { buff.append(padWithBlanks("" + timestamps[i], 10)); buff.append(":"); for (int j = 0; j < dsNames.length; j++) { double value = values[j][i]; String valueStr = Double.isNaN(value) ? "nan" : Util.formatDouble(value); buff.append(padWithBlanks(valueStr, 18)); } buff.append("\n"); } return buff.toString(); }
FetchData fetchData = new FetchData(this, request); fetchData.setTimestamps(timestamps); fetchData.setValues(values); return fetchData;
/** * Same as {@link #get95Percentile(String)}, but for a set of values calculated with the given * RPN expression. * * @param rpnExpression RRDTool-like RPN expression * @return 95-percentile * @throws IllegalArgumentException Thrown if invalid RPN expression is supplied */ public double getRpn95Percentile(String rpnExpression) { DataProcessor dataProcessor = createDataProcessor(rpnExpression); return dataProcessor.get95Percentile(RPN_SOURCE_NAME); }
/** * Dumps the content of the whole FetchData object. Useful for debugging. */ public String dump() { StringBuilder buffer = new StringBuilder(); for (int row = 0; row < getRowCount(); row++) { buffer.append(timestamps[row]); buffer.append(": "); for (int dsIndex = 0; dsIndex < getColumnCount(); dsIndex++) { buffer.append(Util.formatDouble(values[dsIndex][row], true)); buffer.append(" "); } buffer.append("\n"); } return buffer.toString(); }
double[] getRrdValues() { return fetchData.getValues(dsName); }
long getArchiveEndTime() { return fetchData.getArcEndTime(); }
long getFetchStep() { return fetchData.getStep(); }
/** * Returns string representing fetched data in a RRDTool-like form. * * @return Fetched data as a string in a rrdfetch-like output form. */ public String toString() { // print header row StringBuilder buff = new StringBuilder(); buff.append(padWithBlanks("", 10)) .append(" "); for (String dsName : dsNames) { buff.append(padWithBlanks(dsName, 18)); } buff.append("\n \n"); for (int i = 0; i < timestamps.length; i++) { buff.append(padWithBlanks(Long.toString(timestamps[i]), 10)); buff.append(":"); for (int j = 0; j < dsNames.length; j++) { double value = values[j][i]; String valueStr = Double.isNaN(value) ? "nan" : Util.formatDouble(value); buff.append(padWithBlanks(valueStr, 18)); } buff.append("\n"); } return buff.toString(); }
/** * Same as {@link #get95Percentile(String)}, but for a set of values calculated with the given * RPN expression. * * @param rpnExpression RRDTool-like RPN expression * @return 95-percentile * @throws java.lang.IllegalArgumentException Thrown if invalid RPN expression is supplied * @deprecated This method is deprecated. Uses instance of {@link org.rrd4j.data.Variable.PERCENTILE}, used with {@link org.rrd4j.data.DataProcessor#addDatasource(String, String, Variable)} */ @Deprecated public double getRpn95Percentile(String rpnExpression) { DataProcessor dataProcessor = createDataProcessor(rpnExpression); return dataProcessor.get95Percentile(RPN_SOURCE_NAME); }