All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.googlecode.openbox.demo.performance.RunManager Maven / Gradle / Ivy

The newest version!
package com.googlecode.openbox.demo.performance;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.apache.http.NoHttpResponseException;
import org.apache.http.client.HttpRequestRetryHandler;
import org.apache.http.client.utils.HttpClientUtils;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.protocol.HttpContext;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

import com.googlecode.openbox.demo.performance.report.JFreeChartPerformanceReport;
import com.googlecode.openbox.demo.performance.report.TextPerformanceReport;

public class RunManager {
	private static final Logger logger = LogManager.getLogger();

	private String url;
	private String dcName;
	private int[] groups;

	private List reports;

	private RunManager(String url, String dcName, int[] groups) {
		this.url = url;
		this.dcName = dcName;
		this.groups = groups;
		this.reports = new ArrayList(3);

	}

	public void addReporter(PerformanceReport reporter) {
		this.reports.add(reporter);
	}

	public void unRegisterPerformanceReport(PerformanceReport reporter) {
		this.reports.remove(reporter);
	}

	public static RunManager create(String url, String dcName, int[] groups) {
		return new RunManager(url, dcName, groups);
	}

	public static int[] generateGroups(int from, int to, int step) {
		from = from - from % step;
		int num = (to - from) / step + 1;

		int[] groups = new int[num];
		int value = from;
		int i = 0;
		while (value <= to) {
			if (value <= 0) {
				groups[i] = 1;
			} else {
				groups[i] = value;
			}
			value = value + step;
			i++;

		}
		;
		if (logger.isInfoEnabled()) {
			logger.info("gernerated thread groups : {}", groups);
		}
		return groups;
	}

	private PerformanceDataGroup sendEachGroupRequest(int threadCount) {
		int routeNum = 1;
		int size = threadCount + 1;
		int perRouteSize = size / routeNum;
		CloseableHttpClient httpClient = HttpClients.custom()
				.setMaxConnTotal(perRouteSize * routeNum)
				.setMaxConnPerRoute(perRouteSize)
				.setRetryHandler(new HttpRequestRetryHandler() {
					@Override
					public boolean retryRequest(IOException exception,
							int executionCount, HttpContext context) {
						if (executionCount > 3) {
							logger.error("Maximum tries reached for client http pool ");
							return false;
						}
						if (exception instanceof NoHttpResponseException) {
							logger.error("No response from server on "
									+ executionCount + " call");
							return true;
						}
						return false;
					}
				}).build();
		try {
			// warmup
			new ClientModeRequestSender(httpClient, 1, url, dcName).send();
			RequestSender requestSender = new ClientModeRequestSender(
					httpClient, threadCount, url, dcName);
			requestSender.send();
			return requestSender.getPerformanceDataGroup();
		} finally {
			HttpClientUtils.closeQuietly(httpClient);
		}
	}

	public void start() {

		int groupsCount = groups.length;
		PerformanceDataGroup[] performanceDataGroups = new PerformanceDataGroup[groupsCount];
		for (int i = 0; i < groupsCount; i++) {
			performanceDataGroups[i] = sendEachGroupRequest(groups[i]);
		}

		for (PerformanceReport reporter : reports) {
			reporter.report(performanceDataGroups);
		}
	}

	public static void main(String... args) {
		String url = "http://111.11.11.11:8999";
		String dcName = "dc2";
		int[] groups = generateGroups(1, 500, 10);
		RunManager runManager = RunManager.create(url, dcName, groups);
		runManager.addReporter(TextPerformanceReport.create(null, null));
		runManager.addReporter(JFreeChartPerformanceReport.create(
				"Performance Report", null));

		runManager.start();
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy