#!/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="start-producers"
PROCESS_COUNT=1
CON_COUNT=1
MSG_TYPE="bytes"
WARMUP_MSG_COUNT=1000
MSG_COUNT=10000
MSG_SIZE=1024
ADDRESS="queue;{create:always}"
UNIQUE_DEST="false"

EXTRA_JVM_ARGS=""
TEST_ID=`echo ${HOSTNAME} |  awk -F . '{print $1}'`

TEMP=$(getopt -n $PROGRAM_NAME -o C:P:uc:p:a:s:t:w:h\
 --long connection-count:,process-count:,create-unique-queues-topics,\
jvm-args:,queue:,topic:,address:,\
msg-count:,msg-size:msg-type:,warmup-msg-count,help -- "$@")                                                            

usage()
{
  printf "\n%s\n" "Usage: start-producers [option].."

  printf "\n%32s\n%51s\n"  "-C, --connection-count=count" "No of consumers participating in the test"

  printf "\n%29s\n%51s\n"  "-P, --process-count=count" "No of producers participating in the test"

  printf "\n%37s\n%105s\n"  "-u, --create-unique-queues-topics" "This will create unique queue names and topics based on what you specify for --queue or --topic"

  printf "\n%11s\n%55s\n"  "--queue" "The Queue you want to publish to. Ex my-queue"

  printf "\n%11s\n%84s\n"  "--topic" "The Topic you want to publish to in amq.topic exchange. Ex amq.topic/topic"

  printf "\n%13s\n%44s\n"  "--address" "The address you want to publish to"

  printf "\n%23s\n%37s\n"  "-s, --msg-size=size" "message size (default 1024)"

  printf "\n%25s\n%50s\n"  "-c, --msg-count=count" "message count per test (default 500,000)"

  printf "\n%18s\n%38s\n"  "-t, --msg-type" "{bytes|text} (default bytes)"

  printf "\n%26s\n%49s\n"  "-w, --warmup-msg-count" "warm up message count (default 100,000)"

  printf "\n%18s\n%49s\n"  "-a, --jvm-args" "Extra jvm arguments you want to specify"
}

eval set -- "$TEMP"
while true; do     
        case $1 in 
                -C|--connection-count)
                        CON_COUNT="$2"; shift; shift; continue
                ;;                                    
                -P|--process-count)                            
                        PROCESS_COUNT="$2"; shift; shift; continue  
                ;;
		-u|--create-unique-queues-topics)                            
                        UNIQUE_DEST="true"; shift; continue  
                ;;                                     
                --queue)                            
                        ADDRESS="$2;{create: always}"; shift; shift; continue  
                ;;                                    
                --topic)                            
                        ADDRESS="amq.topic/$2"; shift; shift; continue  
                ;;                                    
                --address)                            
                        ADDRESS="$2"; shift; shift; continue  
                ;;                                 
                -h|--help)                            
                        usage                         
                        exit 0                        
                ;;                                    
                -a|--jvm-args)               
                        EXTRA_JVM_ARGS="$2"; shift; shift; continue 
                ;;   
                -s|--msg-size)               
                        MSG_SIZE="$2"; shift; shift; continue 
                ;;                                                                  
                -c|--msg-count)               
                        MSG_COUNT="$2"; shift; shift; continue 
                ;;                                                                  
                -t|--msg_type)               
                        MSG_TYPE="$2"; shift; shift; continue 
                ;;                                                                  
                -w|--warmup-msg-count)               
                        WARMUP_MSG_COUNT="$2"; shift; shift; continue 
                ;;                              
                --)                                                                 
                        # no more arguments to parse                                
                        break                                                       
                ;;                                                                  
                *)       
                        # no more arguments to parse                                                                                            
                        break                                                      
                ;;                                                                  
        esac                                                                        
done     

PRODUCER_ARGS="-server -Durl=amqp://guest:guest@clientid/testpath?brokerlist='tcp://localhost:5672' -Dext_controller=true -Dprecision=mili -Dcon_count=$CON_COUNT"

start_producers()
{
  for ((i=0; i<$PROCESS_COUNT; i++))
  do
     if [ "$UNIQUE_DEST" = "true" ]; then
     	sh run-pub "$PRODUCER_ARGS $@" "${TEST_ID}_$i" > ${TEST_ID}_$i.pub.out 2>&1 &    
     else
        sh run-pub "$PRODUCER_ARGS $@" > ${TEST_ID}_$i.pub.out 2>&1 &    
     fi 
  done
}

start_producers "-Daddress=$ADDRESS -Duse_unique_dest=$UNIQUE_DEST -Dmsg_count=$MSG_COUNT -Dmsg_size=$MSG_SIZE -Dwarmup_count=$WARMUP_MSG_COUNT -Dmsg_type=$MSG_TYPE -Dcon_count=$CON_COUNT $EXTRA_JVM_ARGS"

