#!/usr/bin/env bash
set -x

readonly BOT_ROOT=/b
readonly AUTH_FILE=$1
readonly BOT_ROOT_NAME=$(jq -r ".login" $AUTH_FILE)

systemctl daemon-reload
service buildslave stop
mkdir -p /b
rm -rf /b/*
service buildslave stop

pushd /tmp/

curl -sSO https://dl.google.com/cloudagents/install-monitoring-agent.sh
sudo bash install-monitoring-agent.sh
rm install-monitoring-agent.sh

curl -sSO https://dl.google.com/cloudagents/install-logging-agent.sh
sudo bash install-logging-agent.sh
rm install-logging-agent.sh

popd


systemctl set-property buildslave.service TasksMax=100000

function setup_numbered_bot() {
  local BOT_NAME=$1
  local BOT_DIR=$2
  mkdir -p $BOT_DIR

  buildslave stop $BOT_DIR
  chown buildbot $BOT_DIR
  rm -rf $BOT_DIR/*

  buildslave create-slave --allow-shutdown=signal "$BOT_DIR" "lab.llvm.org:9990" "$BOT_NAME" $(jq -r ".password" $AUTH_FILE)

  echo "Eric Fiselier <ericwf@google.com>" > $BOT_DIR/info/admin

  echo "Connecting as $1"
  {
    uname -a | head -n1
    cmake --version | head -n1
    g++ --version | head -n1
    clang++ --version | head -n1
    ld --version | head -n1
    date
    lscpu
  } > $BOT_DIR/info/host


#echo "SLAVE_RUNNER=/usr/bin/buildslave
#SLAVE_ENABLED[1]=\"1\"
#SLAVE_NAME[1]=\"$BOT_NAME\"
#SLAVE_USER[1]=\"buildbot\"
#SLAVE_BASEDIR[1]=\"$BOT_DIR\"
#SLAVE_OPTIONS[1]=\"\"
#SLAVE_PREFIXCMD[1]=\"\"" > $BOT_DIR/buildslave.cfg

  ls $BOT_DIR/
  cat $BOT_DIR/buildbot.tac
}

function try_start_builder {
  local N=$1
  local BOT_DIR="$BOT_ROOT/b$N"
  local BOT_NAME="$BOT_ROOT_NAME$N"

  systemctl daemon-reload
  service buildslave restart
  setup_numbered_bot "$BOT_NAME" "$BOT_DIR"

  systemctl daemon-reload
  service buildslave restart

  chown -R buildbot $BOT_DIR/
  sudo -u buildbot /usr/bin/buildslave start $BOT_DIR/

  sleep 30
  cat $BOT_DIR/twistd.log
  if grep --quiet "slave is ready" $BOT_DIR/twistd.log; then
    return 0
  fi
  if grep --quiet "configuration update complete" $BOT_DIR/twistd.log; then
    return 0
  fi
  if grep "rejecting duplicate slave" $BOT_DIR/twistd.log; then
    return 1
  fi
  echo "Unknown error"
  cat $BOT_DIR/twistd.log
  exit 1
}

for N in `shuf -i 1-5`
do
  if try_start_builder $N; then
    break
  fi
  echo "failed to start any buildbot"
  shutdown now
done

# GCE can restart instance after 24h in the middle of the build.
# Gracefully restart before that happen.
sleep 72000
while pkill -SIGHUP buildslave; do sleep 5; done;
shutdown now

