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

MIN_CPUs=4
MIN_RAM=8388608
MIN_DISKs=100


function check_os() {
    if [[ -f /etc/os-release ]]; then
        os_name=`cat /etc/os-release | (grep "^ID=" || true) | awk -F '=' '{print $2}' | sed 's/"//g' | tr A-Z a-z`
	os_ver=`cat /etc/os-release | (grep "^VERSION_ID=" || true) | awk -F '=' '{print $2}' | sed 's/"//g' | tr A-Z a-z`
	echo "${os_name}-${os_ver}"
    else
        echo ""
    fi
}


function logger() {
  TIMESTAMP=$(date +'%Y-%m-%d %H:%M:%S')
  case "$1" in
    debug)
      echo -e "$TIMESTAMP \033[36mDEBUG\033[0m $2"
      ;;
    info)
      echo -e "$TIMESTAMP \033[32mINFO\033[0m $2"
      ;;
    warn)
      echo -e "$TIMESTAMP \033[33mWARN\033[0m $2"
      ;;
    error)
      echo -e "$TIMESTAMP \033[31mERROR\033[0m $2"
      ;;
    *)
      ;;
  esac
}

function check_basic_rs() {
    cpus=`cat /proc/cpuinfo| (grep "processor" || true)| sort| uniq| wc -l`
    ram=`cat /proc/meminfo  | (grep -m 1 MemTotal) | awk '{print $2}'`
    root_disk=`df -BG / | (grep -m 1 "\/") | awk '{print $2}' | sed 's/G//g'`
    if [[ $cpus -lt $MIN_CPUs ]]; then
        logger error "Current CPUs: $cpus, must be large than $MIN_CPUs"
        exit 1
    fi
    logger info "Current CPUs: $cpus."
    if [[ $ram -lt $MIN_RAM ]]; then
        logger error "Current RAM: $ram,  must be large than $MIN_RAM KB"
        exit 1
    fi
    logger info "Current RAM: $ram KB"
    if [[ $root_disk -lt $MIN_DISKs ]]; then
        logger error "Current root disk(/): $root_disk,  must be large than $MIN_DISKs GB"
        exit 1
    fi
    logger info "Current root disk size(/): $root_disk GB."
}


function check_python3_env(){
    rs=`(which python3 || true)`
    if [[ "$rs" = ""  ]]; then
        logger error "python3 not installed, please make sure to install it."
        exit 1
    fi
    logger info "Python3 env: $rs"
}


logger info "Check cpu/ram/root disk resource for node"
check_basic_rs

logger info "Check OS for node"
os=`check_os`
logger info "Current OS: $os"
if [[ "$os" != "kylin-v10" && "$os" != "centos-7" && "$os" != "ubuntu-20.04" && "$os" != "ubuntu-22.04" && "$os" != "openeuler-22.03" && "$os" != "nfs-4.0" ]]; then
    logger error "OS only support 'centos-7|ubuntu-20.04|ubuntu-22.04|openeuler-22.03|nfs-4.0|kylin-v10'"
    exit 1
fi

logger info "Check python3 env for node"
check_python3_env
