package org.rrd4j.core; import org.rrd4j.ConsolFun; /** * Class to represent single archive definition within the RRD. * Archive definition consists of the following four elements: * * <ul> * <li>consolidation function * <li>X-files factor * <li>number of steps * <li>number of rows. * </ul> * For the complete explanation of all archive definition parameters, see RRDTool's * <a href="http://oss.oetiker.ch/rrdtool/doc/rrdcreate.en.html" target="man">rrdcreate man page</a> * * * @author Sasa Markovic */ public class ArcDef { private final ConsolFun consolFun; private final double xff; private final int steps; private int rows; /** * Creates new archive definition object. This object should be passed as argument to * {@link org.rrd4j.core.RrdDef#addArchive(ArcDef) addArchive()} method of * {@link RrdDb RrdDb} object. * <p>For the complete explanation of all archive definition parameters, see RRDTool's * <a href="http://oss.oetiker.ch/rrdtool/doc/rrdcreate.en.html" target="man">rrdcreate man page</a></p> * * @param consolFun Consolidation function. Allowed values are "AVERAGE", "MIN", * "MAX", "LAST" and "TOTAL" (these string constants are conveniently defined in the * {@link org.rrd4j.ConsolFun} class). * @param xff X-files factor, between 0 and 1. * @param steps Number of archive steps. * @param rows Number of archive rows. */ public ArcDef(ConsolFun consolFun, double xff, int steps, int rows) { if (consolFun == null) { throw new IllegalArgumentException("Null consolidation function specified"); } if (Double.isNaN(xff) || xff < 0.0 || xff >= 1.0) { throw new IllegalArgumentException("Invalid xff, must be >= 0 and < 1: " + xff); } if (steps < 1 || rows < 2) { throw new IllegalArgumentException("Invalid steps/rows settings: " + steps + "/" + rows + ". Minimal values allowed are steps=1, rows=2"); } this.consolFun = consolFun; this.xff = xff; this.steps = steps; this.rows = rows; } /** * Returns consolidation function. * * @return Consolidation function. */ public ConsolFun getConsolFun() { return consolFun; } /** * Returns the X-files factor. * * @return X-files factor value. */ public double getXff() { return xff; } /** * Returns the number of primary RRD steps which complete a single archive step. * * @return Number of steps. */ public int getSteps() { return steps; } /** * Returns the number of rows (aggregated values) stored in the archive. * * @return Number of rows. */ public int getRows() { return rows; } /** * Returns string representing archive definition (RRDTool format). * * @return String containing all archive definition parameters. */ public String dump() { return "RRA:" + consolFun + ":" + xff + ":" + steps + ":" + rows; } /** * {@inheritDoc} * * Checks if two archive definitions are equal. * Archive definitions are considered equal if they have the same number of steps * and the same consolidation function. It is not possible to create RRD with two * equal archive definitions. */ public boolean equals(Object obj) { if (obj instanceof ArcDef) { ArcDef arcObj = (ArcDef) obj; return consolFun == arcObj.consolFun && steps == arcObj.steps; } return false; } @Override public int hashCode() { return consolFun.hashCode() + steps * 19; } void setRows(int rows) { this.rows = rows; } boolean exactlyEqual(ArcDef def) { return consolFun == def.consolFun && xff == def.xff && steps == def.steps && rows == def.rows; } }