#!/usr/bin/env bash
#
# Copyright 2021 Confluent Inc.
#
set -o errexit

# Source shared utilities for resolving ${file:path:key} references (DPIC support)
if [ -e "/mnt/config/resolve-file-refs.sh" ]; then
  source "/mnt/config/resolve-file-refs.sh"
fi

# Source JVM opts resolver for JMX/JVM property file references (DPIC support)
if [ -e "/mnt/config/resolve-jvm-opts.sh" ]; then
  source "/mnt/config/resolve-jvm-opts.sh"
fi

echo "===> Configure log4j config"
export KAFKAREST_LOG4J_OPTS="-Dlog4j.configuration=file:${CP_COMPONENT_SCRIPT_DIR}/log4j.properties"

cp_base="cp-base-new"

disk-agent() {
  if [ -e "${CP_COMPONENT_SCRIPT_DIR}/disk-usage-agent.properties" ]; then
      echo "===> Configure disk-usage agent"
      disk=("/usr/share/java/$cp_base/disk-usage-agent-"*.jar)
      len=${#disk[@]}
      if [ "${len}" -gt 1 ]; then
        echo "===> Multiple disk agents found, using the last one from ${disk[*]}"
      fi
      export DISK_JAR=${disk[len-1]}
      export KAFKAREST_OPTS="${KAFKAREST_OPTS} -javaagent:${DISK_JAR}=${CP_COMPONENT_SCRIPT_DIR}/disk-usage-agent.properties"
  fi
}

jolokia-agent() {
  echo "===> Configure jolokia agent"
  JOLOKIA_DIR="/usr/share/java/$cp_base"
  JOLOKIA_AGENT_PORT=${JOLOKIA_AGENT_PORT:-7777}
  JOLOKIA_AGENT_HOST=${JOLOKIA_AGENT_HOST:-"0.0.0.0"}
  if [ -e "${CP_COMPONENT_SCRIPT_DIR}/jolokia.config" ]; then
    JOLOKIA_CONFIG="$(cat < "${CP_COMPONENT_SCRIPT_DIR}/jolokia.config")"
    # Resolve ${file:...} references if resolver utility is available
    if declare -f resolve_file_password > /dev/null 2>&1; then
      JOLOKIA_CONFIG="$(resolve_file_password "$JOLOKIA_CONFIG")"
    fi
    JOLOKIA_EXTRA_ARGS=",${JOLOKIA_CONFIG}"
    export JOLOKIA_EXTRA_ARGS
  fi

  JOLOKIA=("${JOLOKIA_DIR}/jolokia-jvm-"*.jar)
  export KAFKAREST_OPTS="${KAFKAREST_OPTS} -javaagent:${JOLOKIA[0]}=port=${JOLOKIA_AGENT_PORT},host=${JOLOKIA_AGENT_HOST}${JOLOKIA_EXTRA_ARGS}"
}

jmx-prometheus-agent(){

   if [ -e "/mnt/config/shared/jmx-exporter.yaml" ]; then
      echo "===> Configure jmx prometheus agent"
      PROMETHEUS_DIR="/usr/share/java/$cp_base"

      JMX_EXPORTER_AGENT_PORT=${JMX_EXPORTER_AGENT_PORT:-7778}
      JMX_EXPORTER_AGENT_HOST=${JMX_EXPORTER_AGENT_HOST:-"0.0.0.0"}
      PROMETHEUS=("${PROMETHEUS_DIR}/jmx_prometheus_javaagent-"*.jar)

      export KAFKAREST_OPTS="${KAFKAREST_OPTS} -javaagent:${PROMETHEUS[0]}=${JMX_EXPORTER_AGENT_PORT}:/mnt/config/shared/jmx-exporter.yaml"
  fi
}

disk-agent
jolokia-agent
jmx-prometheus-agent

echo "===> Configure JVM config"
KAFKAREST_OPTS="$(cat < "${CP_COMPONENT_SCRIPT_DIR}/jvm.config" | tr '\n' ' ') ${KAFKAREST_OPTS}"
export KAFKAREST_OPTS

# Resolve ${file:path:key} references in JVM options (DPIC mode for JMX properties)
if declare -f resolve_jvm_file_refs > /dev/null; then
  KAFKAREST_OPTS="$(resolve_jvm_file_refs "$KAFKAREST_OPTS")"
  export KAFKAREST_OPTS
fi

# These ensure that the "if" sections for heap sizing, GC tuning, and JMX opts in KRP launch script do not trigger.
export KAFKAREST_HEAP_OPTS=' '
export KAFKAREST_JMX_OPTS=' '
export KAFKAREST_JVM_PERFORMANCE_OPTS=' '
export JMX_PORT=' '

echo "===> Launching ${CP_COMPONENT_NAME} ... "
exec kafka-rest-start "${CP_COMPONENT_SCRIPT_DIR}/${CP_COMPONENT_NAME}.properties"
