#!/bin/sh

set -e
exec 2>&1

PATH=/sbin:/usr/sbin:/bin:/usr/bin
LANG=en_US.UTF-8
DESC="direct-canvas"
USER=ppc
GROUP=ppc
CWD=/var/www/direct-canvas
NAME=direct-canvas
GC_LOG=/var/log/yandex/$NAME.gc.log
ERROR_LOG=/var/log/yandex/$NAME.error.log
OUTPUT_LOG=/var/log/yandex/$NAME.log
JAVA=/usr/local/yandex-direct-jdk11/bin/java
SECRET_SUFFIX=""
SECRETS_DIR="/etc/direct-tokens/"

ENV_TYPE=`cat /etc/yandex/environment.type || echo development`

PROFILE=devtest
MEM_OPTS="-Xmx4G -Xms1G"

PORT=10184

case "$ENV_TYPE" in
    "development")
        PROFILE="devtest"
        ENV_TYPE="devtest"
        MEM_OPTS="-Xmx4G -Xms1G"
        SECRET_SUFFIX="-test"
        MONGO_SECRET_SUFFIX="-devtest"
        ;;
    "production")
        PROFILE="production"
        MEM_OPTS="-Xmx20G -Xms20G"
        ;;
    "testing")
        PROFILE="test"
        SECRET_SUFFIX="-test"
        MONGO_SECRET_SUFFIX="-test"
        MEM_OPTS="-Xmx4G -Xms1G"
        ;;
esac

function get_secret() {
    cat "$SECRETS_DIR$1$SECRET_SUFFIX"
}

function get_mongo_secret() {
    cat "$SECRETS_DIR$1$MONGO_SECRET_SUFFIX"
}

export DIRECT_AUTH_TOKEN=`get_secret direct_auth_token_canvas`
export INTERNAL_API_TOKEN=`get_secret internal_api_token_canvas`
export FILE_API_INTERNAL_TOKEN=`get_secret file_api_internal_token_canvas`
export MDS_AUTH_TOKEN=`get_secret mds_canvas`
export MONITORING_TOKEN=`get_secret monitoring_canvas`
export SANDBOX_HOOK_SECRET=`get_secret sandbox_hook_secret_canvas`
export SANDBOX_OAUTH_TOKEN=`get_secret sandbox_oauth_token_canvas`
export MONGODB_CONNECTION_STRING=`get_mongo_secret mongo_canvas`

JAVA_OPTS="$MEM_OPTS \
    -Dfile.encoding=UTF-8 \
    -Djava.net.preferIPv4Stack=false -Djava.net.preferIPv6Addresses=true \
    -Dsun.net.inetaddr.ttl=60 -Dsun.net.inetaddr.negative.ttl=0 \
    -Djava.util.Arrays.useLegacyMergeSort=true \
    -XX:-UsePerfData
    -XX:+UseG1GC
    -XX:MaxGCPauseMillis=100
    -Xlog:gc*=info,safepoint=info,age*=trace:file=$GC_LOG:time,uptime,level,tags:filecount=8,filesize=100M \
    -XX:+CrashOnOutOfMemoryError \
    -XX:+HeapDumpOnOutOfMemoryError \
    -XX:-OmitStackTraceInFastThrow ${JAVA_ADDITIONAL_OPTIONS} \
    -XX:+UnlockExperimentalVMOptions \
    -Djava.security.egd=file:/dev/./urandom \
    -Dspring.profiles.active=${PROFILE} \
    -Dyandex.environment.type=${ENV_TYPE} \
    -Dport=$PORT \
    -XX:HeapDumpPath=/var/log/yandex/direct-canvas.hprof"

PROG_OPTS="--log-configs-directory /etc/direct/canvas/logging-config"

JAVA_ARGS="$JAVA_OPTS -cp /var/www/direct-canvas/direct-canvas/yandex-direct-canvas-backend/*: -Djava.library.path=/var/www/direct-canvas/direct-canvas/yandex-direct-canvas-backend ru.yandex.canvas.Application $PROG_OPTS"

chown ppc /var/log/yandex
# jvm can't append data to previous log, so copy logs to archive
for log in "$GC_LOG"*; do
    test -f "$log" && cat "$log" >>`dirname "$GC_LOG"`/arc.`basename "$GC_LOG"`.`date +%Y%m%d` && rm "$log"
done

if [ -f "$ERROR_LOG" ]; then
  TODAY_ERROR_LOG=$ERROR_LOG.$(date +%Y%m%d)
  if [ -f "$TODAY_ERROR_LOG" ]; then
      cat "$ERROR_LOG" >>"$TODAY_ERROR_LOG"
      rm "$ERROR_LOG"
  else
      mv "$ERROR_LOG" "$TODAY_ERROR_LOG"
  fi
fi

cd "$CWD"
exec chpst -u "$USER:$GROUP" "$JAVA" $JAVA_ARGS 2>> "$ERROR_LOG" >> "$OUTPUT_LOG"
