#!/bin/bash -eu

n=0;
until [ $n -ge 20 ]; do
  IMPLY_BUNDLE_ID=$(ls /opt/grove/deploy | grep 'imply-.*') && break
  n=$((n+1));
  echo "Retrying fetch of IMPLY_BUNDLE_ID in 10 seconds...";
  sleep 10;
done;

if [ -z "$IMPLY_BUNDLE_ID" ]; then
  echo "Could not get IMPLY_BUNDLE_ID"
  exit 1
fi

n=0;
until [ $n -ge 10 ]; do
  curl -sSLf -o "/opt/grove/deploy/$IMPLY_BUNDLE_ID/bin/supervise-legacy-svlogd" --retry 10 -m 60 https://s3.amazonaws.com/imply-cloud/public/supervise-legacy-svlogd && break
  n=$((n+1));
  echo "Retrying fetch of supervise-legacy-svlogd in 10 seconds...";
  sleep 10;
done;

chmod 755 /opt/grove/deploy/$IMPLY_BUNDLE_ID/bin/supervise-legacy-svlogd;

# Workaround for https://github.com/druid-io/druid/issues/2345
if find /opt/grove/deploy/${IMPLY_BUNDLE_ID}/dist/druid/extensions/mysql-metadata-storage/ | grep "mariadb-java-client.*.jar" -q; then
  find "/opt/grove/deploy/${IMPLY_BUNDLE_ID}/dist/druid/extensions/mysql-metadata-storage/" \
  -name mariadb-java-client*.jar -exec cp {} "opt/grove/deploy/${IMPLY_BUNDLE_ID}/dist/druid/lib/" \;
else
  find "/opt/grove/deploy/${IMPLY_BUNDLE_ID}/dist/druid/extensions/mysql-metadata-storage/" \
  -name mysql-connector*.jar -exec cp {} "/opt/grove/deploy/${IMPLY_BUNDLE_ID}/dist/druid/lib/" \;
fi

(
  cd "/opt/grove/deploy/${IMPLY_BUNDLE_ID}/dist/druid/lib/"
  # Validate we are on log4j less than 2.15.0
  if find . | grep "log4j" | grep -v "iap" &>/dev/null && \
    [ "$(find . -name "log4j-*" | head -n 1 | sed -E "s/^.*-([^-]+)\.jar$/2.14.1\n\1/" | sort -rV | head -n 1)" == "2.14.1" ]; then
    echo "Patching log4j in place"
    # Remove existing log4j jars.
    find . -name "log4j-*" -delete
    # Pull new log4j jars.
    curl -sSLfO https://static.imply.io/manager/lib/log4j-api-2.8.2-iap.jar
    curl -sSLfO https://static.imply.io/manager/lib/log4j-jul-2.8.2-iap.jar
    curl -sSLfO https://static.imply.io/manager/lib/log4j-1.2-api-2.8.2-iap.jar
    curl -sSLfO https://static.imply.io/manager/lib/log4j-slf4j-impl-2.8.2-iap.jar
    curl -sSLfO https://static.imply.io/manager/lib/log4j-core-2.8.2-iap.jar
  else
    echo "Not modifying log4j"
  fi
)

# Handle possible ZK 3.4 -> 3.5 issue
if [ -d "/zk/data/version-2" ] && ! find /zk/data/version-2 -name "snapshot*" | grep .; then
  find /zk/data/version-2 -name "log*" -delete
fi

# Look for specially named executable script for user actions
if [ -x /opt/imply/user/user-init ]; then
  (cd /opt/imply/user && /opt/imply/user/user-init) || true
fi
