KevinStephenson
Adding in weaviate code
b110593
raw
history blame
4.6 kB
#!/bin/bash
PROJECT=semi-automated-benchmarking
ZONE=us-central1-a
INSTANCE=automated-loadtest
GOVERSION=https://go.dev/dl/go1.18.4.linux-amd64.tar.gz
FILE_PREFIX=${FILE_PREFIX:-""}
set -eou pipefail
# change to script directory
cd "${0%/*}" || exit
function main() {
while [[ "$#" -gt 0 ]]; do
case $1 in
--all) run_all; exit 0 ;;
--create_machine) create_machine; exit 0 ;;
--clone_repository) clone_repository; exit 0;;
--delete_machine) delete_machine; exit 0;;
--install_dependencies) install_dependencies; exit 0;;
--benchmark) benchmark; exit 0;;
--prepare) prepare; exit 0;;
--checkout) checkout "$2" ; exit 0;;
--ssh) interactive_ssh; exit 0;;
*) echo "Unknown parameter passed: $1"; exit 1 ;;
esac
shift
done
print_help
}
function print_help() {
echo "Valid arguments include:"
echo ""
echo " --all Run everything, including machine creation & destruction"
echo " --prepare Create Machine & run all the steps prior to benchmark execution"
echo " --create_machine Only create machine"
echo " --delete_machine Stop & Delete running machine"
echo " --clone_repository Clone and checkout Weaviate repo at specified commit"
echo " --checkout Checkout arbitrary branch or commit"
echo " --ssh Interactive SSH session"
}
function run_all() {
trap delete_machine EXIT
prepare
benchmark
}
function prepare() {
check
create_machine
install_dependencies
clone_repository
}
function check() {
echo_green "Checking required dependencies"
if ! command -v gcloud &> /dev/null
then
echo_red "Missing gcloud binary"
return 1
fi
if ! command -v terraform &> /dev/null
then
echo_red "Missing terraform binary"
return 1
fi
echo "Ready to go!"
}
function create_machine() {
(cd terraform && terraform init)
(cd terraform && terraform apply -auto-approve)
echo "Sleeping for 10s, so first ssh doesn't fail. This should be improved through polling"
sleep 10
}
function delete_machine() {
(cd terraform && terraform destroy -auto-approve)
}
function install_dependencies() {
ssh_command "sudo apt-get update && sudo apt-get install -y git git-lfs curl"
ssh_command "ssh-keyscan -t rsa github.com >> ~/.ssh/known_hosts"
install_go
install_docker
}
function install_go {
ssh_command "curl -Lo go.tar.gz $GOVERSION"
ssh_command "sudo rm -rf /usr/local/go && sudo tar -C /usr/local -xzf go.tar.gz"
ssh_command 'echo '"'"'PATH=$PATH:/usr/local/go/bin'"'"' >> ~/.profile'
ssh_command "go version"
}
function install_docker() {
ssh_command "if ! command -v docker &> /dev/null; then curl -fsSL https://get.docker.com -o get-docker.sh && sh ./get-docker.sh; fi"
ssh_command "sudo groupadd docker || true"
ssh_command "sudo usermod -aG docker $USER"
}
function clone_repository() {
ref=$(git rev-parse --abbrev-ref HEAD)
echo_green "Cloning weaviate repo to branch $ref"
ssh_command "cd; [ ! -d weaviate ] && git clone --depth 1 --branch $ref https://github.com/weaviate/weaviate.git weaviate || true"
ssh_command "cd weaviate; git-lfs install; git-lfs pull"
}
function checkout() {
ref="$1"
ssh_command "cd weaviate; git checkout $ref"
}
function benchmark() {
echo_green "Run benchmarks on remote machine"
ssh_command "echo "stop all running docker containers"; docker rm -f $(docker ps -q) || true"
ssh_command "cd ~/weaviate; rm test/benchmark/benchmark_results.json || true"
ssh_command "cd ~/weaviate; test/benchmark/run_performance_tracker.sh"
echo_green "Copy results file to local machine"
filename="${FILE_PREFIX}benchmark_results_$(date +%s).json"
scp_command "$INSTANCE:~/weaviate/test/benchmark/benchmark_results.json" "$filename"
echo "Results file succesfully copied to ${PWD}/$filename"
}
function echo_green() {
green='\033[0;32m'
nc='\033[0m'
echo -e "${green}${*}${nc}"
}
function echo_red() {
red='\033[0;31m'
nc='\033[0m'
echo -e "${red}${*}${nc}"
}
function ssh_command() {
gcloud beta compute ssh --project=$PROJECT --zone=$ZONE "$INSTANCE" --command="source ~/.profile; $1"
}
function scp_command() {
gcloud beta compute scp --project=$PROJECT --zone=$ZONE "$@"
}
function interactive_ssh() {
gcloud beta compute ssh --project=$PROJECT --zone=$ZONE "$INSTANCE"
}
main "$@"