Skip to content

Instantly share code, notes, and snippets.

@AugustoCiuffoletti
Last active May 18, 2021 16:45
Show Gist options
  • Save AugustoCiuffoletti/d00380b6b930f915488de33f235a981b to your computer and use it in GitHub Desktop.
Save AugustoCiuffoletti/d00380b6b930f915488de33f235a981b to your computer and use it in GitHub Desktop.
Benchmark for the matilda annotation service
#!/bin/bash
TEMPPREFIX=`mktemp /tmp/XXXX`
OFFSET="1621100000"
# Valori di default
HOSTNAME="90.147.166.207"
PORT="80"
USERNAME=""
PASSWORD=""
SILENT="-s"
N=10
usage() {
echo "Usage: $0 -U USERNAME -P PASSWORD [ -d DOMAIN ] [ -p PORT ] [-s] [n]" 1>&2
}
abend() {
echo $1
usage
exit 1
}
timestamp() {
echo "scale=3; x=`date +\"%s.%N\"`; x/1-$OFFSET" | bc
}
test() {
t0=`timestamp`
curl -i -X POST -H "Content-Type: application/json" -d "$cred" -c "$TEMPPREFIX"_cookies_$1.txt $SILENT http://"$HOSTNAME":"$PORT"/login #> /dev/null # rimuovere la redirezione per vedere l'esito
t1=`timestamp`
curl -b "$TEMPPREFIX"_cookies_$1.txt $SILENT http://"$HOSTNAME":"$PORT"/collections_and_annotations_meta #> /dev/null
t2=`timestamp`
echo "$1,$t0,$t1,$t2"
}
# Acquisizione opzioni
while getopts ":h:p:U:P:v" opt; do
case "${opt}" in
h) HOSTNAME=${OPTARG}
;;
p) PORT=${OPTARG}
;;
U) USERNAME=${OPTARG}
;;
P) PASSWORD=${OPTARG}
;;
v) SILENT=""
;;
:)
abend "Errore: necessario argomento per -${OPTARG}"
;;
*)
abend "Errore: opzione inesistente"
;;
esac
done
# Acquisizione parametri posizionali
shift $((OPTIND-1))
# Acquisizione numero di request (opzionale)
! [ -z $1 ] && N=$1
# Controllo presenza username/password
[ -z $USERNAME ] && abend "Serve il nome utente"
[ -z $PASSWORD ] && abend "Serve la password"
# Costruzione credenziali
cred="{\"username\": \"$USERNAME\", \"password\": \"$PASSWORD\"}"
# Avvio test concorrenti
for i in `seq 1 $N`
do
test $i > "$TEMPPREFIX"_$i.log &
done
# Attesa terminazione
wait
# Calcolo del tempo medio di servizio
sum=0
for i in `seq 1 $N`
do
t0=`tail -n1 "$TEMPPREFIX"_$i.log | cut -f2 -d, `
t1=`tail -n1 "$TEMPPREFIX"_$i.log | cut -f3 -d, `
t2=`tail -n1 "$TEMPPREFIX"_$i.log | cut -f4 -d, `
sum=`echo "$sum+($t2-$t0)" | bc`
done
ave=`echo "scale=1;1000*$sum/$N" | bc`
echo "tempo medio di servizio = $ave msec"
# Preparazione del file di log
ts=`date +"%Y%m%d%H%M%S"`
logfile="$HOSTNAME"-"$ts".log
(
echo "Dominio = $HOSTNAME"
echo "Porta = $PORT"
echo "$N request concorrenti"
echo "tempo medio di servizio = $ave msec"
echo
echo "N,t0,t1,t2"
for i in `seq 1 $N`
do
cat "$TEMPPREFIX"_$i.log
done
) > $logfile
#! [ -z $SILENT ] && exit 0
echo "Output in $logfile"
echo "Visualizzo il log? (Return o CRTL-C)"
read
cat $logfile
echo "Output in $logfile"
echo "Rimuovo il log? (Return o CRTL-C)"
read
rm $logfile

Matilda benchmark

Nello script si possono configurare il dominio e la porta del target.

Si può passare come parametro (opzionale) il numero di sessioni di test concorrenti. Default: 10.

Ogni sessioni di test una operazione di login e una query.

Produce in output il tempo medio di servizio per ogni sessione

Viene prodotto un file matilda-.log contenente i parametri impostati e la sequenza dei tempidi servizio. La sequenza dei tempi di servizio è in formato CSV.

Sinossi: ./benchmark.sh -U USERNAME -P PASSWORD [ -h HOSTNAME] [ -p PORT ] [-s] [n] Username e password sono necessari HOSTNAME può essere URL o IP -s controlla il funzioamento silenzioso (da mettere a punto) n opzionale il numero di request (default 10)

Esempio: ./benchmark.sh -U mario -P rossi -h iu.dilunipi.it -p 5000 100

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment