⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fetchdata.java

📁 httptunnel.jar httptunnel java 源码
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
		for(int i = 0; i < getRowCount(); i++) {
			System.out.println(getRow(i).dump());
		}
	}

	/**
	 * 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() {
		final DecimalFormat df = new DecimalFormat("+0.0000000000E00");
		// print header row
		StringBuffer buff = new StringBuffer();
		buff.append(padWithBlanks("", 10));
		buff.append(" ");
		for(int i = 0; i < dsNames.length; i++) {
			buff.append(padWithBlanks(dsNames[i], 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": df.format(value);
				buff.append(padWithBlanks(valueStr, 18));
			}
			buff.append("\n");
		}
		return buff.toString();
	}

	private static String padWithBlanks(String input, int width) {
		StringBuffer buff = new StringBuffer("");
		int diff = width - input.length();
		while(diff-- > 0) {
			buff.append(' ');
		}
		buff.append(input);
		return buff.toString();
	}

	/**
	 * Returns aggregated value from the fetched data for a single datasource.
	 * @param dsName Datasource name
	 * @param consolFun Consolidation function to be applied to fetched datasource values.
	 * Valid consolidation functions are MIN, MAX, LAST and AVERAGE
	 * @return MIN, MAX, LAST or AVERAGE value calculated from the fetched data
	 * for the given datasource name
	 * @throws RrdException Thrown if the given datasource name cannot be found in fetched data.
	 */
	public double getAggregate(String dsName, String consolFun) throws RrdException {
		return getAggregate(dsName, consolFun, null);
	}

	/**
	 * Returns aggregated value from the fetched data for a single datasource.
	 * Before applying aggrregation functions, specified RPN expression is applied to fetched
	 * data. For example, if you have a gauge datasource named 'foots' but you wont to
	 * find the maximum fetched value in meters use something like:</p>
	 * <code>getAggregate("foots", "MAX", "value,0.3048,*");</code>
	 * Note that 'value' in the RPN expression is a reserved word and stands for the
	 * original value (value fetched from RRD)</p>
	 * @param dsName Datasource name
	 * @param consolFun Consolidation function to be applied to fetched datasource values.
	 * Valid consolidation functions are MIN, MAX, LAST and AVERAGE
	 * @return MIN, MAX, LAST or AVERAGE value calculated from the fetched data
	 * for the given datasource name
	 * @throws RrdException Thrown if the given datasource name cannot be found in fetched data.
	 */
	public double getAggregate(String dsName, String consolFun, String rpnExpression)
		throws RrdException {
		if(consolFun.equals("MAX")) {
			return getMax(dsName, rpnExpression);
		}
		else if(consolFun.equals("MIN")) {
			return getMin(dsName, rpnExpression);
		}
		else if(consolFun.equals("LAST")) {
			return getLast(dsName, rpnExpression);
		}
		else if(consolFun.equals("AVERAGE")) {
			return getAverage(dsName, rpnExpression);
		}
		else {
			throw new RrdException("Unsupported consolidation function [" + consolFun + "]");
		}
	}

	private double getMax(String dsName, String rpnExpression) throws RrdException {
		RpnCalculator rpnCalculator = null;
		if(rpnExpression != null) {
			rpnCalculator = new RpnCalculator(rpnExpression);
		}
		double vals[] = getValues(dsName), max = Double.NaN;
		for(int i = 0; i < vals.length - 1; i++) {
			double value = vals[i + 1];
			if(rpnCalculator != null) {
				rpnCalculator.setValue(value);
				value = rpnCalculator.calculate();
			}
			max = Util.max(max, value);
		}
		return max;
	}

	private double getMin(String dsName, String rpnExpression) throws RrdException {
		RpnCalculator rpnCalculator = null;
		if(rpnExpression != null) {
			rpnCalculator = new RpnCalculator(rpnExpression);
		}
		double vals[] = getValues(dsName), min = Double.NaN;
		for(int i = 0; i < vals.length - 1; i++) {
			double value = vals[i + 1];
			if(rpnCalculator != null) {
				rpnCalculator.setValue(value);
				value = rpnCalculator.calculate();
			}
			min = Util.min(min, value);
		}
		return min;
	}

	private double getLast(String dsName, String rpnExpression) throws RrdException {
		RpnCalculator rpnCalculator = null;
		if(rpnExpression != null) {
			rpnCalculator = new RpnCalculator(rpnExpression);
		}
		double vals[] = getValues(dsName);
		double value = vals[vals.length - 1];
		if(rpnCalculator != null) {
			rpnCalculator.setValue(value);
			value = rpnCalculator.calculate();
		}
		return value;
	}

	private double getAverage(String dsName, String rpnExpression) throws RrdException {
		RpnCalculator rpnCalculator = null;
		if(rpnExpression != null) {
			rpnCalculator = new RpnCalculator(rpnExpression);
		}
		double vals[] = getValues(dsName);
		double totalVal = 0;
		long totalSecs = 0;
		for(int i = 0; i < vals.length - 1; i++) {
			long t1 = Math.max(request.getFetchStart(), timestamps[i]);
			long t2 = Math.min(request.getFetchEnd(), timestamps[i + 1]);
			double value = vals[i + 1];
			if(rpnCalculator != null) {
				rpnCalculator.setValue(value);
				value = rpnCalculator.calculate();
			}
			if(!Double.isNaN(value)) {
                totalSecs += (t2 - t1);
				totalVal += (t2 - t1) * value;
			}
		}
		return totalSecs > 0? totalVal / totalSecs: Double.NaN;
	}

	/**
	 * Dumps fetch data to output stream in XML format.
	 * @param outputStream Output stream to dump fetch data to
	 * @throws IOException Thrown in case of I/O error
	 */
	public void exportXml(OutputStream outputStream) throws IOException {
		XmlWriter writer = new XmlWriter(outputStream);
		writer.startTag("fetch_data");
		writer.startTag("request");
		writer.writeTag("file", request.getParentDb().getPath());
		writer.writeComment(Util.getDate(request.getFetchStart()));
		writer.writeTag("start", request.getFetchStart());
		writer.writeComment(Util.getDate(request.getFetchEnd()));
		writer.writeTag("end", request.getFetchEnd());
		writer.writeTag("resolution", request.getResolution());
		writer.writeTag("cf", request.getConsolFun());
		writer.closeTag(); // request
		writer.startTag("datasources");
		for(int i = 0; i < dsNames.length; i++) {
			writer.writeTag("name", dsNames[i]);
		}
		writer.closeTag(); // datasources
		writer.startTag("data");
		for(int i = 0; i < timestamps.length; i++) {
			writer.startTag("row");
			writer.writeComment(Util.getDate(timestamps[i]));
            writer.writeTag("timestamp", timestamps[i]);
			writer.startTag("values");
			for(int j = 0; j < dsNames.length; j++) {
				writer.writeTag("v", values[j][i]);
			}
			writer.closeTag(); // values
			writer.closeTag(); // row
		}
		writer.closeTag(); // data
		writer.closeTag(); // fetch_data
		writer.flush();
	}

	/**
	 * Dumps fetch data to file in XML format.
	 * @param filepath Path to destination file
	 * @throws IOException Thrown in case of I/O error
	 */
	public void exportXml(String filepath) throws IOException {
		OutputStream outputStream = null;
		try {
			outputStream = new FileOutputStream(filepath);
			exportXml(outputStream);
		}
		finally {
			if(outputStream != null) {
				outputStream.close();
			}
		}
	}

	/**
	 * Dumps fetch data in XML format.
	 * @return String containing XML formatted fetch data
	 * @throws IOException Thrown in case of I/O error
	 */
	public String exportXml() throws IOException {
		ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
		exportXml(outputStream);
		return outputStream.toString();
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -