#!/bin/sh
# Script called on the primary server for stopping application services
set -x

# For logging into SafeKit log use:
# $SAFE/safekit printi | printe "message" 

#----------------------------------------------------------
#
# 2 stop modes:
#
# - graceful stop
#   call standard application stop
#
# - force stop ($1=force)
#   kill application's processes
#
#----------------------------------------------------------

K3SNODENAME=$(hostname)
export PATH=/usr/local/bin:$PATH
export K3SNODENAME
#---------- Clean MySQL residual processes
# Call this function on force stop 
# to clean eventual resual MySQL processes 
clean_mysql()
{
  retval=0

  $SAFE/safekit printw "Cleaning MySQL processes "

  # kill started MySQL 
  ps -e -o pid,comm | grep mysql | $AWK '{print "kill -9 " $1}'| sh >/dev/null 2>&1

  return $retval
}

name_process()
{	  
  for pi in $1; do
	   cat /proc/$pi/comm
  done
}

kill_accessors()
{
   signal=KILL
   plist=`ls -l /proc/[0-9]*/fd/* /proc/[0-9]*/cwd | grep -E -e "-> $1(\$|/)"  | cut -d / -f 3 | uniq` 
   if [ ! -z "$plist" ] ; then
     	pname=`name_process "$plist" | tr '\n' ' '`
	$SAFEBIN/logI18nMSG stop_prim WARNING RFS_STOP_PROC "$1" "$signal" "$pname"
        kill -"$signal" $plist 1>/dev/null 2>&1
   fi
}

#---------- MySQL databases
# Call this function for stopping MySQL databases
stop_MySQL()
{
  retval=0

  if [ "$1" = "force" ] ; then
    # MySQL databases force stop
    clean_mysql
    return $retval
  fi

  systemctl stop k3s
  # MySQL databases graceful stop
  $SAFE/safekit printw "Stopping MySQL server"  
  systemctl stop mariadb
  if [ $? -ne 0 ] ; then 
    $SAFE/safekit printw "MySQL server stop failed"
  else
    $SAFE/safekit printw "MySQL server stopped"  
  fi


  return $retval
}

# stdout goes into Application log
echo "Running stop_prim $*" 

res=0

[ -z "$OSNAME" ] && OSNAME=`uname -s`
case "$OSNAME" in
    Linux)
	AWK=/bin/awk
	;;
    *)
	AWK=/usr/bin/awk
	;;
esac

mode=
if [ "$1" = "force" ] ; then
  mode=force
  shift
fi

export PATH=$PATH:/usr/local/bin
# drain current node
k3s kubectl drain $K3SNODENAME --force --ignore-daemonsets --delete-emptydir-data

# stop k3s
systemctl stop k3s
/usr/local/bin/k3s-killall.sh

# umount replicated nfs storage
systemctl stop nfs-kernel-server

kill_accessors $NFSPROVDIR
umount -f $NFSPROVDIR

# Stop MySQL  server 
stop_MySQL $mode || res=$?

[ $res -ne 0 ] && $SAFE/safekit printi "stop_prim failed"

exit 0
