#!/bin/sh # # Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. # # This starts the controller for coordinating perf tests/ . check-qpid-java-env PROGRAM_NAME=controller CONSUMER_COUNT=1 PRODUCER_COUNT=1 DURATION=-1 TEST_NAME="TEST_NAME" EXTRA_JVM_ARGS="" TEMP=$(getopt -n $PROGRAM_NAME -o c:p:d:n:a:h --long consumers:,producers:,jvm-args:help -- "$@") usage() { printf "\n%s\n" "Usage: controller [option].." printf "\n%31s\n%52s\n" "-c, --consumer-count=count" "No of consumers participating in the test" printf "\n%31s\n%52s\n" "-p, --producer-count=count" "No of producers participating in the test" printf "\n%24s\n%94s\n" "-d, --duration=mins" "The duration of the test in mins. If not specified, it will just run one iteration." printf "\n%27s\n%32s\n" "-n, --name=" "The name of the test." printf "\n%19s\n%50s\n" "-a, --jvm-args" "Extra jvm arguments you want to specify" } eval set -- "$TEMP" while true; do case $1 in -c|--consumer-count) CONSUMER_COUNT="$2"; shift; shift; continue ;; -p|--producer-count) PRODUCER_COUNT="$2"; shift; shift; continue ;; -d|--duration) DURATION="$2"; shift; shift; continue ;; -n|--name) TEST_NAME="$2"; shift; shift; continue ;; -h|--help) usage exit 0 ;; -a|--jvm-args) EXTRA_JVM_ARGS="$2"; shift; shift; continue ;; --) # no more arguments to parse break ;; *) # no more arguments to parse break ;; esac done CONTROLLER_ARGS="-server -Durl=amqp://guest:guest@clientid/testpath?brokerlist='tcp://localhost:5672' -Dprecision=mili -Dprod_count=$PRODUCER_COUNT -Dcons_count=$CONSUMER_COUNT -Dprint_std_dev=true -Dduration=${DURATION}" waitfor() { until grep -a -l "$2" $1 >/dev/null 2>&1 ; do sleep 1 ; done ; } cleanup() { pids=`ps aux | grep java | grep PerfTestController | awk '{print $2}'` if [ "$pids" != "" ]; then kill -3 $pids kill -9 $pids >/dev/null 2>&1 fi } run_controller() { TEST_ARGS="$LOG_CONFIG $JAVA_MEM $CONTROLLER_ARGS $EXTRA_JVM_ARGS" echo "Running controller with : $TEST_ARGS" > test.out $JAVA -cp $CLASSPATH $TEST_ARGS org.apache.qpid.tools.PerfTestController >> test.out & waitfor test.out "Controller: Completed the test" sleep 2 #give a grace period to shutdown print_result $TEST_NAME } print_result() { prod_rate=`cat test.out | grep "Avg Producer rate" | awk '{print $5}'` sys_rate=`cat test.out | grep "System Throughput" | awk '{print $4}'` cons_rate=`cat test.out | grep "Avg Consumer rate" | awk '{print $5}'` avg_latency=`cat test.out | grep "Avg System Latency" | awk '{print $5}'` min_latency=`cat test.out | grep "Min System Latency" | awk '{print $5}'` max_latency=`cat test.out | grep "Max System Latency" | awk '{print $5}'` std_dev=`cat test.out | grep "Avg System Std Dev" | awk '{print $6}'` printf "|%-15s|%15.2f|%13.2f|%13.2f|%11.2f|%11.2f|%11.2f|%7.2f|\n" $1 $sys_rate $prod_rate $cons_rate $avg_latency $min_latency $max_latency $std_dev echo "--------------------------------------------------------------------------------------------------------" } trap cleanup EXIT rm -rf *.out if [ "$DURATION" = -1 ]; then echo "Test report on " `date +%F` echo "========================================================================================================" echo "|Test |System throuput|Producer rate|Consumer Rate|Avg Latency|Min Latency|Max Latency|Std Dev|" echo "--------------------------------------------------------------------------------------------------------" else echo "Test in progress....Tail stats-csv.log to see results being printed for each iteration." fi run_controller