#!/bin/sh

export AWS_LAMBDA_INIT_TIME=$(($(date +%s%N)/1000000))

set -euo pipefail

# Uncomment the next line to log the executed commands
# set -x

ensure_catchpoint_env_vars_are_uppercase () {
  for var in $(compgen -e); do
    env_var_name=$(echo "$var" | awk '{print toupper($0)}')
    # If env var is a Catchpoint env var and it is not fully uppercase (original and updated versions are not the same)
    if [[ $env_var_name == CATCHPOINT* ]] && [[ $env_var_name != $var ]] ;
    then
      env_var_value=${!var}
      # Define Catchpoint env var as fully uppercase
      export $env_var_name="$env_var_value"
    fi
  done
}

# Ensure that Catchpoint env vars are fully uppercase
ensure_catchpoint_env_vars_are_uppercase

CLASS_PATH="/var/task:/var/task/*:/var/task/lib/*:/opt:/opt/*:/opt/java/lib/*"

JVM_ARGS=${CATCHPOINT_AGENT_LAMBDA_JVM_VMARGS:-}
DISABLE_DEFAULT_JVM_ARGS=${CATCHPOINT_AGENT_LAMBDA_JVM_DISABLE_DEFAULT_VMARGS:-}
OPTIMIZE_JVM_FOR_FAST_STARTUP=${CATCHPOINT_AGENT_LAMBDA_JVM_OPTIMIZEFORFASTSTARTUP:-}
ENABLE_DEBUG=${CATCHPOINT_AGENT_LAMBDA_DEBUGGER_ENABLE:-}
DEBUG_AUTH_TOKEN=${CATCHPOINT_AGENT_LAMBDA_DEBUGGER_AUTH_TOKEN:-}
DEBUG_PORT=${CATCHPOINT_AGENT_LAMBDA_DEBUGGER_PORT:-1111}

if [ ! -z "$DEBUG_AUTH_TOKEN" ]; then
    if [ -z "$ENABLE_DEBUG" ]; then
        ENABLE_DEBUG="true"
    fi
fi

MEMORY_SIZE_IN_MB=${AWS_LAMBDA_FUNCTION_MEMORY_SIZE:-}
if [ "${ENABLE_DEBUG}" == "true" ]; then
    # Debugger proxy process uses 64MB heap
	MEMORY_SIZE_IN_MB=$((MEMORY_SIZE_IN_MB - 64))
fi

MEMORY_SIZE_IN_KB=$((MEMORY_SIZE_IN_MB * 1024))
MAX_HEAP_SIZE_IN_KB=$((MEMORY_SIZE_IN_KB * 85 / 100))
MAX_METASPACE_SIZE_IN_KB=$((MEMORY_SIZE_IN_KB * 10 / 100))
RESERVED_CODE_CACHE_SIZE_IN_KB=$((MEMORY_SIZE_IN_KB * 5 / 100))

if [ "${DISABLE_DEFAULT_JVM_ARGS}" != "true" ]; then
	JVM_ARGS="$JVM_ARGS -XX:+UseSerialGC -Xshare:on -XX:MaxHeapSize=${MAX_HEAP_SIZE_IN_KB}k -XX:MaxMetaspaceSize=${MAX_METASPACE_SIZE_IN_KB}k -XX:ReservedCodeCacheSize=${RESERVED_CODE_CACHE_SIZE_IN_KB}k "
fi

if [ "${OPTIMIZE_JVM_FOR_FAST_STARTUP}" == "true" ]; then
	JVM_ARGS="$JVM_ARGS -Xverify:none -XX:TieredStopAtLevel=1 "
else
    JVM_ARGS="$JVM_ARGS -XX:-TieredCompilation "
fi

if [ "${ENABLE_DEBUG}" == "true" ]; then
	JVM_ARGS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=127.0.0.1:${DEBUG_PORT} -XX:+UseSerialGC -XX:MaxHeapSize=${MAX_HEAP_SIZE_IN_KB}k -XX:MaxMetaspaceSize=${MAX_METASPACE_SIZE_IN_KB}k -XX:ReservedCodeCacheSize=${RESERVED_CODE_CACHE_SIZE_IN_KB}k "
fi

echo "[CATCHPOINT] Starting Catchpoint custom runtime handler, ready to flight ..."

java $JVM_ARGS -cp $CLASS_PATH com.catchpoint.trace.lambda.cr.CustomRuntimeHandler
