summaryrefslogtreecommitdiff
path: root/java/tools/bin/mercury-controller
diff options
context:
space:
mode:
Diffstat (limited to 'java/tools/bin/mercury-controller')
-rw-r--r--java/tools/bin/mercury-controller132
1 files changed, 132 insertions, 0 deletions
diff --git a/java/tools/bin/mercury-controller b/java/tools/bin/mercury-controller
new file mode 100644
index 0000000000..fab8614039
--- /dev/null
+++ b/java/tools/bin/mercury-controller
@@ -0,0 +1,132 @@
+#!/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