nginx-profile-setup/run.sh

64 lines
1.6 KiB
Bash
Raw Normal View History

#!/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