#!/bin/bash
# TextLib szerver: /etc/init.d/textlib-szerver lenyege
#

#:::::: Adatbazis nevenek kitalalasa
. /usr/share/textlib/exe/tl_setpar

#::::::::::::::::::::::::::::::::
#::::::: Fix beallitasok ::::::::
USER=textlib
PATH="/sbin:/bin:/usr/sbin:/usr/bin"

#:::::::: functions :::::::::::

# -- inditas --
tl_start()
{
  echo -e "\n\n\n\n*** textlib-szerver$par $1 $2 $3 $4: `date`" >> $TLSRVLOG

  if [ ! -x $PRGPATH/tl_serv ]; then
     echo "tl_serv ?" >> $TLSRVLOG;  exit 5;
  fi
  if [ ! -x $PRGPATH/$SERVER ]; then
     echo "$SERVER ?" >> $TLSRVLOG;  exit 5;
  fi
  if [ ! -x $PRGPATH/$NAPLO ]; then
     echo "$NAPLO ?" >> $TLSRVLOG;  exit 5;
  fi

  echo -n "TextLib szerver$par: inditas ..."

  $PRGPATH/tl_serv $par $1 $2 $3 $4 2>> $TLSRVLOG &

  # nezzuk, elindult-e a program - ha naploz, akkor tovabb varunk!
  # Ennyi ideig varunk, ha nem megy a naplozas. Min 4 legyen!
  maxtime=8
  # Ennyi ideig varunk a naplozas lefutasara
  maxtime2=600
  cnt=0; cntmax=$maxtime;
  PidRun $TLSRVPID 
  while [ $cnt -le $cntmax -a ! -f $TLSRVPID ]; do
       # Ha egy ideje mar megy a naplozo, akkor sokaig varunk
       if [ $cnt -ge 3 ]; then
         PidRun $NAPLOPID g-naplo.exe
         if [ ! -f $NAPLOPID ]; then
              cntmax=$maxtime
         else
              cntmax=$maxtime2
         fi
         # 3 sec mulva kiirunk, aztan fel percenkent egy pont
         # mindezt akkor, ha fut a naplo program!
         if [ $cnt -eq 3 -a -f $NAPLOPID ]; then
             echo -n "naplozas";
         fi
         if [ $[$cnt%30] -eq 0 -a -f $NAPLOPID ]; then echo -n "."; fi
       fi
       # Varunk kicsit, aztan ujra megnezzuk
       sleep 1;
       cnt=$[$cnt+1];
       PidRun $TLSRVPID
  done

  # Ellenorzes, hogy megy-e
  PidRun $TLSRVPID 
  if [ ! -f $TLSRVPID ]; then
       echo " nem indult el"
       print_log
       exit 1
  else
       echo " OK"
       ## Vagy van hozza jog, vagy nincs...
       touch $TLSRVLOCK 2> /dev/null
       chgrp textlib $TLSRVLOCK 2> /dev/null
       chmod g+rw $TLSRVLOCK 2> /dev/null
  fi
}

# -- leallitas --
tl_stop()
{
   if [ ! -x $PRGPATH/g-tlkill.exe ]; then
       echo "Nincs futtathato $PRGPATH/g-tlkill.exe" >> $TLSRVLOG;
       exit 5;
   fi

   echo -n "TextLib szerver$par: leallitas ..."

   $PRGPATH/g-tlkill.exe `cat $TLSRVPID`

   # sikerult-e leallitani?
   cnt=0
   PidRun $TLSRVPID
   while [ $cnt -lt 15 -a -f $TLSRVPID ]; do
      cnt=$[$cnt+1];
      sleep 2;
      PidRun $TLSRVPID
   done

   # Ha nem allt le, probaljuk a sima kill: ABRT es KILL
   PidRun $TLSRVPID
   if [ -f $TLSRVPID ]; then
      echo -n " ABRT"
      kill -ABRT cat $TLSRVPID 2> /dev/null
      sleep 2
      PidRun $TLSRVPID
      if [ -f $TLSRVPID ]; then
        echo -n " KILL"
        kill -KILL cat $TLSRVPID 2> /dev/null
        sleep 2
      fi
   fi

   # Na most mar leallt?
   PidRun $TLSRVPID
   if [ -f $TLSRVPID ]; then
      echo " leallitasa sikertelen."
      exit 1;
   else
      echo " OK"
      rm -f $TLSRVLOCK 2> /dev/null
   fi
}

#--- ---
print_log()
{
   ## Mutassuk meg a TLSRVLOG veget - ha mar van
   if [ -s $TLSRVLOG ]; then
        tail -n 20 $TLSRVLOG
   elif [ -s $TLSRVLOG.0 ]; then
        tail -n 20 $TLSRVLOG.0
   elif [ -s $TLSRVLOG.1 ]; then
        tail -n 20 $TLSRVLOG.1
   else
       echo "Nincs $TLSRVLOG - A TLSRV$par meg nem futott"
   fi
}

#--- ---
print_naplo()
{
   ## Mutassuk meg a NAPLOLOG veget - ha mar van
   if [ -s $NAPLOLOG ]; then
        tail -n 20 $NAPLOLOG
   elif [ -s $NAPLOLOG.0 ]; then
        tail -n 20 $NAPLOLOG.0
   else
       echo "Nincs $NAPLOLOG"
   fi
}

#--- ---
print_backup()
{
   ## Mutassuk meg a BACKUPLOG veget - ha mar van
   if [ -s $BACKUPLOG ]; then
        tail -n 25 $BACKUPLOG
   elif [ -s $BACKUPLOG.1 ]; then
        tail -n 25 $BACKUPLOG.1
   else
       echo "Nincs $BACKUPLOG"
   fi
}

#--- ---
print_pid()
{
  unset X
  ls /var/run/textlib*/*.pid 2> /dev/null > /dev/null
  if [ $? == 0 ]; then
    xxx=$(ls /var/run/textlib*/*)
    xxx=${xxx//\/var\/run\/}
    xxx=${xxx//textlib\.}
    xxx=${xxx//textlib\/}
    xxx=${xxx//\.pid/}
    X="$X $xxx"
  fi
  ls /home/textlib/.textlib/szerver*.pid 2> /dev/null > /dev/null
  if [ $? == 0 ]; then
    xxx=$(ls /home/textlib/.textlib/szerver*.pid)
    xxx=${xxx//\/home\/textlib\/\.textlib\/}
    xxx=${xxx//\.pid/}
    X="$X $xxx"
  fi
  if [ "$X" != "" ]; then
    echo $X
  else
    echo "Nem fut egyetlen TLSRV sem"
  fi
}

#--- ---
print_ver()
{
   unset LOGFILE
   if [ -s $TLSRVLOG ]; then
        LOGFILE=$TLSRVLOG
   elif [ -s $TLSRVLOG.0 ]; then
        LOGFILE=$TLSRVLOG.0
   elif [ -s $TLSRVLOG.1 ]; then
        LOGFILE=$TLSRVLOG.1
   fi
   if [ "$LOGFILE" != "" ]; then
       grep 'szerver V' $LOGFILE | tail -n 1
   else
       echo "Log file-t nem talalok, verziot nem tudom."
   fi
}

#:::::::: Start :::::::::::::::

touch $TLSRVLOG 2> /dev/null
chgrp textlib $TLSRVLOG 2> /dev/null
chmod g+rw $TLSRVLOG 2> /dev/null

PidRun $TLSRVPID
case "$1" in
    start)
        if [ -f $TLSRVPID ]; then
            echo "TextLib szerver$par: fut"
            exit 0
        elif [ "$2" == "info" ]; then
            tl_start $3 $4 $5 $6
            sleep 1
            print_log
        elif [ "$2" == "nojrn" ]; then
            tl_start /nojournal $3 $4 $5
        else
            tl_start $2 $3 $4 $5 $6
        fi;;

     restart|force-reload)
        if [ ! -f $TLSRVPID ]; then
            echo "TextLib szerver$par: nem fut"
        else
          tl_stop
          sleep 1
        fi
        rm -f $TLSRVLOCK 2> /dev/null
        if [ "$2" == "info" ]; then
            tl_start $3 $4 $5 $6
            sleep 1
            print_log
        else
            tl_start $2 $3 $4 $5
        fi;;

    reload)
        ;;

    stop)
        if [ -f $TLSRVPID ]; then
           tl_stop
        else
           echo "TextLib szerver$par: nem fut."
        fi
        rm -f $TLSRVLOCK 2> /dev/null
        if [ "$2" == "info" ]; then
           sleep 1
           print_log
        fi
        ;;

    status|stat)
        if [ -f $TLSRVPID ]; then
           echo "TextLib szerver$par: fut."
        else
           echo "TextLib szerver$par: nem fut."
           rm -f $TLSRVLOCK 2> /dev/null
        fi
        ;;

    info)
        if [ -f $TLSRVPID ]; then
           echo "TextLib szerver$par: fut."
        else
           echo "TextLib szerver$par: nem fut."
           rm -f $TLSRVLOCK 2> /dev/null
        fi
        print_log
        ;;

    list)
        X=`ls -d /var/lib/textlib*`
        X=${X//\/var\/lib\//}
        echo $X
        ;;

    naplo)
        print_naplo
        ;;

    backup)
        print_backup
        ;;

    pid|run)
        print_pid
        ;;

    ver)
        print_ver
        ;;

    *)
        echo "tl_vezer [start] [stop] [restart] [info] [stat] params"
        echo "$1"
        exit 1
        ;;
esac

# exit 0
