#!/bin/bash
set -o nounset
set -o errexit
set -o pipefail
# set -o xtrace

BASE=$(cd `dirname $0`; cd ../; pwd)
source $BASE/utils/logger
source $BASE/utils/env
XPU_EXPORTER_VER=v1.0
XPU_METRICS_VER=v1.2

imageDir=$BASE/down
XPU_MODE=
DB_CONN=${DB_CONN:-http://kubedb-srv:8086}
DB_TOKEN=${DB_TOKEN:-"7p3ogq9FlWxF3ygez29049KfJRotlezkcAQ1GnvWrADN3ZaqiZStPLKlJLVcUT631LoWCI9R9DgZvzWoQ4xX0A=="}
XPU_METRICS_SERVER_PORT=32761


function print_help(){
    echo "./kubemore activate-monitor --xpu-mode nvidia \\"
    echo "                            --db-influx-conn http://192.168.1.1:8086 \\"
    echo "                            --db-influx-token xxxxxxx=="
    echo " Options:"
    echo "   x|xpu-mode, required:       xpu mode, avaliable mode [nvidia|ascend910|hami|cpu|enflame|biren]"
    echo "   db-influx-conn, required:   influx db connection to store metrics data"
    echo "   db-influx-token, required:  influx db token to auth"
    echo "   p|server-port:              monitor service port, default 32761"
    echo "   h|help:                     print help usage"
}

TEMP=`getopt -o x:p:h -l xpu-mode:,db-influx-conn:,db-influx-token:,server-port:,help -- "$@"`
if [[ ${?} != 0 ]] ; then error "Bad command" >&2 ; print_help ; exit 1 ; fi

eval set -- "${TEMP}"

while true; do
  case "$1" in
  -x|--xpu-mode)
    XPU_MODE=$2
    check_empty "${XPU_MODE}" "xpu mode"
    shift 2
    ;;
  --db-influx-conn)
    DB_CONN=$2
    check_empty "${DB_CONN}" "influx db connection"
    shift 2
    ;;
  --db-influx-token)
    DB_TOKEN=$2
    check_empty "${DB_TOKEN}" "influx db token"
    shift 2
    ;;
  -p|--server-port)
    XPU_METRICS_SERVER_PORT=$2
    check_empty "${XPU_METRICS_SERVER_PORT}" "xpu monitor service port"
    shift 2
    ;;
  -h|--help)
    print_help
    shift
    exit 0
    ;;
  --)
    shift
    break
    ;;
  *)
    error "Bad command $1"
    print_help
    exit 1
    ;;
  esac
done

check_empty "${XPU_MODE}" "xpu mode"
check_empty "${DB_CONN}" "influx db connection"
check_empty "${DB_TOKEN}" "influx db token"
check_empty "${XPU_METRICS_SERVER_PORT}" "xpu monitor service port"

if [[ "${XPU_MODE}" != "hami" && "${XPU_MODE}" != "cpu" ]]; then
  # install xpu-exporter
  logger info "Install ${XPU_MODE} metrics monitor"
  if [[ ! -f "$imageDir/xpu_exporter_${XPU_MODE}.tar" ]];then
    logger error "XPU(${XPU_MODE}) exporter image not exist."
    exit 1
  fi
  docker load -i "$imageDir/xpu_exporter_${XPU_MODE}.tar"
  docker tag "kubemore/xpu-exporter-${XPU_MODE}:${XPU_EXPORTER_VER}" \
             "easzlab.io.local:5000/kubemore/xpu-exporter-${XPU_MODE}:${XPU_EXPORTER_VER}"
  docker push "easzlab.io.local:5000/kubemore/xpu-exporter-${XPU_MODE}:${XPU_EXPORTER_VER}"
  kubectl apply -f $BASE/monitor/xpu_exporter_${XPU_MODE}.yaml
fi

# install xpu-metrics
logger info "Install xpu metrics monitor"
if [[ ! -f "$imageDir/xpu_metrics.tar" ]];then
    logger error "XPU metrics image not exist."
    exit 1
fi

docker load -i "$imageDir/xpu_metrics.tar"
docker tag "kubemore/xpu-metrics:${XPU_METRICS_VER}" \
           "easzlab.io.local:5000/kubemore/xpu-metrics:${XPU_METRICS_VER}"
docker push "easzlab.io.local:5000/kubemore/xpu-metrics:${XPU_METRICS_VER}"

if [[ -f $BASE/monitor/xpu_metrics.yaml ]]; then
    rm -rf $BASE/monitor/xpu_metrics.yaml
fi
cp $BASE/monitor/xpu_metrics.yaml.tpl $BASE/monitor/xpu_metrics.yaml
sed -i "s#__XPU_METRICS_SERVER_PORT__#${XPU_METRICS_SERVER_PORT}#g" $BASE/monitor/xpu_metrics.yaml
sed -i "s#__XPU_METRICS_DB_CONN__#${DB_CONN}#g" $BASE/monitor/xpu_metrics.yaml
sed -i "s#__XPU_METRICS_DB_TOKEN__#${DB_TOKEN}#g" $BASE/monitor/xpu_metrics.yaml
kubectl apply -f $BASE/monitor/xpu_metrics.yaml

logger info "Install ephemeral storage monitor"
bash $BASE/monitor/ephemeral-storage/install.sh
