#!/bin/sh

# Universal vnishnet:
#   aml / BB / xil  -> legacy paths (/usr/bin, /mnt/data/vnmon, /var/log/miner)
#   cv* (CV1835)    -> legacy paths    (/nvdata/anthillos/vnmon, /tmp/log/miner)
#
#  /etc/fw-info.json.


FW_INFO="/etc/fw-info.json"
PLATFORM=""
if [ -r "$FW_INFO" ]; then
  PLATFORM="$(sed -n 's/.*"platform"[[:space:]]*:[[:space:]]*"\([^"]*\)".*/\1/p' "$FW_INFO" | head -n1)"
fi

case "$PLATFORM" in
  cv*|CV*)
    # CV1835
    UPDATER_DIR="/usr/bin"
    AGENT_DIR="/nvdata/anthillos/vnmon"
    UPDATER_LOG="/tmp/log/miner/updater.log"
    AGENT_LOG="/tmp/log/miner/agent.log"
    UPDATER_MONITOR="$UPDATER_DIR/agent-monitor.sh"
    INIT_SCRIPT="/etc/init.d/S99agent"
    ;;
  *)
    # aml / BB / xil
    UPDATER_DIR="/usr/bin"
    AGENT_DIR="/mnt/data/vnmon"
    UPDATER_LOG="/var/log/miner/updater.log"
    AGENT_LOG="/var/log/miner/agent.log"
    UPDATER_MONITOR="/usr/bin/agent-monitor.sh"
    INIT_SCRIPT="/etc/init.d/S99agent"
    ;;
esac

UPDATER="$UPDATER_DIR/updater"
AGENT_TOKEN_FILE="$AGENT_DIR/valid_api_token.json"
AGENT_APIKEYS_FILE="/config/apikeys.json"
AGENT_CONF_FILE="$AGENT_DIR/agent.conf"
AGENT_TASKS_FILE="$AGENT_DIR/tasks.json"
PIDFILE="/var/run/vnmon-updater.pid"

AGENT_NAME="agent"

ensure_config_dir() {
  for dir in \
    "$UPDATER_DIR" \
    "$AGENT_DIR" \
    "$(dirname "$UPDATER_LOG")" \
    "$(dirname "$AGENT_LOG")" \
    "$(dirname "$AGENT_TOKEN_FILE")" \
    "$(dirname "$PIDFILE")"; do
    [ ! -d "$dir" ] && mkdir -p "$dir"
  done
}

make_executable() {
  [ -f "$UPDATER" ] && chmod +x "$UPDATER"
  [ -f "$UPDATER_MONITOR" ] && chmod +x "$UPDATER_MONITOR"
}

do_start() {
  if [ -f "$PIDFILE" ]; then
    PID="$(cat "$PIDFILE" 2>/dev/null)"
    if [ -n "$PID" ] && kill -0 "$PID" 2>/dev/null; then
      exit 0
    else
      rm -f "$PIDFILE"
    fi
  fi

  ensure_config_dir
  make_executable

  "$UPDATER" \
    --updater-dir "$AGENT_DIR" \
    --updater-log "$UPDATER_LOG" \
    --log-file "$AGENT_LOG" \
    --token-file "$AGENT_TOKEN_FILE" \
    --apikeys-file "$AGENT_APIKEYS_FILE" \
    --updater-monitor "$UPDATER_MONITOR" \
    --agent-tasks-file "$AGENT_TASKS_FILE" \
    --agent-conf-file "$AGENT_CONF_FILE" \
    --init-script "$INIT_SCRIPT" </dev/null >/dev/null 2>&1 &

  echo "$!" > "$PIDFILE"
}

do_stop() {
  killall -9 "$AGENT_NAME" 2>/dev/null

  if [ -f "$PIDFILE" ]; then
    kill -9 "$(cat "$PIDFILE")" 2>/dev/null
    rm -f "$PIDFILE"
  fi

  killall -9 "$(basename "$UPDATER_MONITOR")" 2>/dev/null
}

do_restart() {
  do_stop
  sleep 1
  do_start
}

case "$1" in
  start) do_start ;;
  stop) do_stop ;;
  restart) do_restart ;;
  *)
    echo "Usage: $0 {start|stop|restart}"
    exit 1 ;;
esac

exit 0
