001 /* 002 * Licensed to the Apache Software Foundation (ASF) under one or more 003 * contributor license agreements. See the NOTICE file distributed with 004 * this work for additional information regarding copyright ownership. 005 * The ASF licenses this file to You under the Apache License, Version 2.0 006 * (the "License"); you may not use this file except in compliance with 007 * the License. You may obtain a copy of the License at 008 * 009 * http://www.apache.org/licenses/LICENSE-2.0 010 * 011 * Unless required by applicable law or agreed to in writing, software 012 * distributed under the License is distributed on an "AS IS" BASIS, 013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 014 * See the License for the specific language governing permissions and 015 * limitations under the License. 016 */ 017 018 package org.apache.commons.performance.http; 019 020 import java.util.logging.Logger; 021 022 import org.apache.commons.performance.ClientThread; 023 import org.apache.commons.performance.LoadGenerator; 024 import org.apache.commons.performance.Statistics; 025 026 /** 027 * Simple http load / performance tester, providing another LoadGenerator 028 * example. 029 * 030 * Uses Commons Digester to parse and load configuration and spawns 031 * HTTPClientThread instances to generate load and gather statistics. 032 * 033 */ 034 035 public class HttpSoak extends LoadGenerator { 036 037 private String url; 038 private String method; 039 private int socketTimeout; 040 private String successKey; 041 042 /** Nothing to do here yet */ 043 protected void init() throws Exception {} 044 045 protected ClientThread makeClientThread( 046 long iterations, long minDelay, long maxDelay, double sigma, 047 String delayType, long rampPeriod, long peakPeriod, 048 long troughPeriod, String cycleType, String rampType, 049 Logger logger, Statistics stats) { 050 051 return new HttpClientThread(iterations, minDelay, maxDelay, 052 sigma, delayType, rampPeriod, peakPeriod, 053 troughPeriod, cycleType, rampType, logger, 054 stats, url, method, socketTimeout, successKey); 055 } 056 057 /** 058 * Add http client configuration to parameters loaded by super. 059 * Also set config file name. 060 */ 061 protected void configure() throws Exception { 062 063 super.configure(); // loads run configuration 064 065 digester.addCallMethod("configuration/http", 066 "configureHttp", 4); 067 digester.addCallParam("configuration/http/url", 0); 068 digester.addCallParam("configuration/http/method", 1); 069 digester.addCallParam("configuration/http/socket-timeout", 2); 070 digester.addCallParam("configuration/http/success-key", 3); 071 072 this.configFile = "config-http.xml"; 073 } 074 075 // ------------------------------------------------------------------------ 076 // Configuration methods specific to this LoadGenerator invoked by Digester 077 // when superclass execute calls digester.parse. 078 // ------------------------------------------------------------------------ 079 public void configureHttp(String url, 080 String method, String socketTimeout, String successKey) { 081 this.url = url; 082 this.method = method; 083 this.socketTimeout = Integer.parseInt(socketTimeout); 084 this.successKey = successKey; 085 } 086 }