#!/bin/zsh if [[ ! $1 ]]; then echo "Error: expected one argument (nginx code directory)" exit fi if [[ ! -d $1 ]]; then echo "Error: provided nginx code directory is invalid" exit fi PROFILE_OUTPUT=PROFILE.LOG if [ -f $PROFILE_OUTPUT ]; then mv $PROFILE_OUTPUT $PROFILE_OUTPUT.old fi KACLIENT=nginx-profile-setup-kaclient-1 KAPROXY=nginx-profile-setup-kaproxy-1 echo "[+] building and deploying containers" go build keepalive-svc.go mv keepalive-svc kasvc/ rsync -avz $1 kaproxy/ sudo docker-compose up --build -d sudo docker exec -it $KAPROXY callgrind_control -i off sudo docker wait $KACLIENT echo "[+] client finished, triggering reload" sudo docker exec -it $KAPROXY callgrind_control -i on sudo docker kill -s CONT $KAPROXY echo "[+] wait five seconds for reload complete" sleep 5 sudo docker exec -it $KAPROXY callgrind_control -i off echo " > restarting client" sudo docker-compose restart kaclient sudo docker wait $KACLIENT echo "[+] client finished again. Killing NGINX and fetching profile data" sudo docker kill -s INT $KAPROXY sudo docker exec -it $KAPROXY callgrind_control -d echo "[+] building profiling report" sudo docker exec $KAPROXY bash -c "find /tmp -iname \"callgrind.out*\"" | while read file do echo " > processing: " $file F=$(basename $file) sudo docker cp $KAPROXY:$file $F; sudo chmod 777 $F echo "Output file: $F" >> $PROFILE_OUTPUT callgrind_annotate \ --include=kaproxy \ --auto=yes \ $F >> $PROFILE_OUTPUT echo "End of profile: $F\n\n\n" >> $PROFILE_OUTPUT rm -f $F done echo "[+] cleaning up" sudo docker-compose down less $PROFILE_OUTPUT