| #!/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=<test-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 |