#!/bin/bash # Simple script to time running the examples in various languages. # Should be run in the build directory. # Use command line to run different combinations. # For example to run C broker, Go sender and C++ receiver pass arguments: C GO CPP MESSAGES=100000 BLD=$(pwd) C=$BLD/c/examples C_BROKER="$C/broker" C_SEND="$C/send localhost amqp x $MESSAGES" C_RECV="$C/receive localhost amqp x $MESSAGES" GO=$BLD/go/examples/electron GO_BROKER="$GO/broker" GO_SEND="$GO/send -count $MESSAGES /x" GO_RECV="$GO/receive -count $MESSAGES -prefetch 100 /x" CPP=$BLD/cpp/examples CPP_BROKER="$CPP/broker" CPP_SEND="$CPP/simple_send -a /x -m $MESSAGES" CPP_RECV="$CPP/simple_recv -a /x -m $MESSAGES" amqp_busy() { ss -tlp | grep $* amqp; } start_broker() { amqp_busy && { "amqp port busy"; exit 1; } "$@" & BROKER_PID=$! until amqp_busy -q; do sleep .1; done } stop_broker() { kill $BROKER_PID wait $BROKER_PID 2> /dev/null } run() { echo echo "run: $*" BROKER=${!1} SEND=${!2} RECV=${!3} start_broker $BROKER time { $RECV > /dev/null& RECV_PID=$! $SEND wait $RECV_PID } stop_broker } if test -z "$*"; then # By default run the broker/sender/receiver combo for each language run C_BROKER C_SEND C_RECV run GO_BROKER GO_SEND GO_RECV run CPP_BROKER CPP_SEND CPP_RECV else while test -n "$*"; do run ${1}_BROKER ${2}_SEND ${3}_RECV shift; shift; shift done fi