Spaces:
Sleeping
Sleeping
| 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 "$@" | |