/** * Adds DEF datasource with datasource values already available in the FetchData object. This method is * used internally by JRobin and probably has no purpose outside of it. * * @param name Source name. * @param fetchData Fetched data containing values for the given source name. */ public void addDatasource(String name, FetchData fetchData) { Def def = new Def(name, fetchData); sources.put(name, def); }
private void fixZeroEndingTimestamp() throws RrdException { if (tEnd == 0) { if (defSources.length == 0) { throw new RrdException("Could not adjust zero ending timestamp, no DEF source provided"); } tEnd = defSources[0].getArchiveEndTime(); for (int i = 1; i < defSources.length; i++) { tEnd = Math.min(tEnd, defSources[i].getArchiveEndTime()); } if (tEnd <= tStart) { throw new RrdException("Could not resolve zero ending timestamp."); } } }
private RrdDb getRrd(Def def) throws IOException, RrdException { String path = def.getPath(), backend = def.getBackend(); if (poolUsed && backend == null) { return RrdDbPool.getInstance().requestRrdDb(path); } else if (backend != null) { return new RrdDb(path, true, RrdBackendFactory.getFactory(backend)); } else { return new RrdDb(path, true); } }
boolean isCompatibleWith(Def def) throws IOException { return getCanonicalPath().equals(def.getCanonicalPath()) && getConsolFun().equals(def.consolFun) && ((backend == null && def.backend == null) || (backend != null && def.backend != null && backend.equals(def.backend))); }
private void normalizeRrdValues() throws RrdException { Normalizer normalizer = new Normalizer(timestamps); for (Def def : defSources) { long[] rrdTimestamps = def.getRrdTimestamps(); double[] rrdValues = def.getRrdValues(); double[] values = normalizer.normalize(rrdTimestamps, rrdValues); def.setValues(values); } }
Aggregates getAggregates(long tStart, long tEnd) throws RrdException { long[] t = getRrdTimestamps(); double[] v = getRrdValues(); Aggregator agg = new Aggregator(t, v); return agg.getAggregates(tStart, tEnd); }
private void fetchRrdData() throws IOException, RrdException { long tEndFixed = (tEnd == 0) ? Util.getTime() : tEnd; for (int i = 0; i < defSources.length; i++) { if (!defSources[i].isLoaded()) { dsNames.add(defSources[i].getDsName()); if (defSources[i].isCompatibleWith(defSources[j])) { dsNames.add(defSources[j].getDsName()); rrd = getRrd(defSources[i]); lastRrdArchiveUpdateTime = Math.max(lastRrdArchiveUpdateTime, rrd.getLastArchiveUpdateTime()); FetchRequest req = rrd.createFetchRequest(defSources[i].getConsolFun(), tStart, tEndFixed, fetchRequestResolution); req.setFilter(dsNames); FetchData data = req.fetchData(); defSources[i].setFetchData(data); for (int j = i + 1; j < defSources.length; j++) { if (defSources[i].isCompatibleWith(defSources[j])) { defSources[j].setFetchData(data);
private void releaseRrd(RrdDb rrd, Def def) throws IOException, RrdException { String backend = def.getBackend(); if (poolUsed && backend == null) { RrdDbPool.getInstance().release(rrd); } else { rrd.close(); } }
private void chooseOptimalStep() { long newStep = Long.MAX_VALUE; for (Def defSource : defSources) { long fetchStep = defSource.getFetchStep(), tryStep = fetchStep; if (step > 0) { tryStep = Math.min(newStep, (((step - 1) / fetchStep) + 1) * fetchStep); } newStep = Math.min(newStep, tryStep); } if (newStep != Long.MAX_VALUE) { // step resolved from a RRD file step = newStep; } else { // choose step based on the number of pixels (useful for plottable datasources) step = Math.max((tEnd - tStart) / pixelCount, 1); } }
private void fetchRrdData() throws IOException, RrdException { long tEndFixed = (tEnd == 0) ? Util.getTime() : tEnd; for (int i = 0; i < defSources.length; i++) { if (!defSources[i].isLoaded()) { dsNames.add(defSources[i].getDsName()); if (defSources[i].isCompatibleWith(defSources[j])) { dsNames.add(defSources[j].getDsName()); rrd = getRrd(defSources[i]); lastRrdArchiveUpdateTime = Math.max(lastRrdArchiveUpdateTime, rrd.getLastArchiveUpdateTime()); FetchRequest req = rrd.createFetchRequest(defSources[i].getConsolFun(), tStart, tEndFixed, fetchRequestResolution); req.setFilter(dsNames); FetchData data = req.fetchData(); defSources[i].setFetchData(data); for (int j = i + 1; j < defSources.length; j++) { if (defSources[i].isCompatibleWith(defSources[j])) { defSources[j].setFetchData(data);
private void normalizeRrdValues() throws RrdException { Normalizer normalizer = new Normalizer(timestamps); for (Def def : defSources) { long[] rrdTimestamps = def.getRrdTimestamps(); double[] rrdValues = def.getRrdValues(); double[] values = normalizer.normalize(rrdTimestamps, rrdValues); def.setValues(values); } }
double getPercentile(long tStart, long tEnd, double percentile) throws RrdException { long[] t = getRrdTimestamps(); double[] v = getRrdValues(); Aggregator agg = new Aggregator(t, v); return agg.getPercentile(tStart, tEnd, percentile); }
boolean isCompatibleWith(Def def) throws IOException { return getCanonicalPath().equals(def.getCanonicalPath()) && getConsolFun().equals(def.consolFun) && ((backend == null && def.backend == null) || (backend != null && def.backend != null && backend.equals(def.backend))); }
private void releaseRrd(RrdDb rrd, Def def) throws IOException, RrdException { String backend = def.getBackend(); if (poolUsed && backend == null) { RrdDbPool.getInstance().release(rrd); } else { rrd.close(); } }
private void chooseOptimalStep() { long newStep = Long.MAX_VALUE; for (Def defSource : defSources) { long fetchStep = defSource.getFetchStep(), tryStep = fetchStep; if (step > 0) { tryStep = Math.min(newStep, (((step - 1) / fetchStep) + 1) * fetchStep); } newStep = Math.min(newStep, tryStep); } if (newStep != Long.MAX_VALUE) { // step resolved from a RRD file step = newStep; } else { // choose step based on the number of pixels (useful for plottable datasources) step = Math.max((tEnd - tStart) / pixelCount, 1); } }
double getPercentile(long tStart, long tEnd, double percentile) throws RrdException { long[] t = getRrdTimestamps(); double[] v = getRrdValues(); Aggregator agg = new Aggregator(t, v); return agg.getPercentile(tStart, tEnd, percentile); }
private RrdDb getRrd(Def def) throws IOException, RrdException { String path = def.getPath(), backend = def.getBackend(); if (poolUsed && backend == null) { return RrdDbPool.getInstance().requestRrdDb(path); } else if (backend != null) { return new RrdDb(path, true, RrdBackendFactory.getFactory(backend)); } else { return new RrdDb(path, true); } }
/** * <p>Adds simple source (<b>DEF</b>). Source <code>name</code> can be used:</p> * <ul> * <li>To specify sources for line, area and stack plots.</li> * <li>To define complex sources * </ul> * * @param name Source name. * @param file Path to RRD file. * @param dsName Data source name defined in the RRD file. * @param consolFunc Consolidation function that will be used to extract data from the RRD * file ("AVERAGE", "MIN", "MAX" or "LAST" - these string constants are conveniently defined * in the {@link org.jrobin.core.ConsolFuns ConsolFuns} class). * @param backend Name of the RrdBackendFactory that should be used for this RrdDb. */ public void addDatasource(String name, String file, String dsName, String consolFunc, String backend) { Def def = new Def(name, file, dsName, consolFunc, backend); sources.put(name, def); }
private void fixZeroEndingTimestamp() throws RrdException { if (tEnd == 0) { if (defSources.length == 0) { throw new RrdException("Could not adjust zero ending timestamp, no DEF source provided"); } tEnd = defSources[0].getArchiveEndTime(); for (int i = 1; i < defSources.length; i++) { tEnd = Math.min(tEnd, defSources[i].getArchiveEndTime()); } if (tEnd <= tStart) { throw new RrdException("Could not resolve zero ending timestamp."); } } }
Aggregates getAggregates(long tStart, long tEnd) throws RrdException { long[] t = getRrdTimestamps(); double[] v = getRrdValues(); Aggregator agg = new Aggregator(t, v); return agg.getAggregates(tStart, tEnd); }