diff --git a/storage_helper.sh b/storage_helper.sh index 3c741fe6d3f69bd1325097f93053eda91765904d..be90081765a47b4d3755496430058a039fbfae5f 100755 --- a/storage_helper.sh +++ b/storage_helper.sh @@ -6,13 +6,17 @@ # ---------------------------------------------------------------------- # # SYNTAX: +# storage_helper.sh PARAMETERS +# +# PARAMETERS: +# # register [hostname] # init backup for hostname; backup client must interrupt/ repeat # return code is <> 0 # -# unregister [hostname] +# unregister [hostname] [statuscode] # send info that a backup was done to delete the connection flag -# for the given host +# for the given host. # # status # show current connections @@ -25,6 +29,7 @@ # 2021-06-xx hahn added setactive + setinactive # 2021-06-16 hahn added backupstatus # 2021-06-18 hahn store backup status in status files ... do not grep frpom logs +# 2021-06-21 hahn use single status file; added backup size # ====================================================================== # ---------------------------------------------------------------------- @@ -43,6 +48,7 @@ # max age of last backup in h iMaxbackupAge=36 + # ---------------------------------------------------------------------- # FUNCTIONS # ---------------------------------------------------------------------- @@ -117,29 +123,48 @@ _getAllLogs | cut -f 2 -d '[' | cut -f 1 -d ']' | sort -u } - # get timestamp of last backup start of a given server - see _getLoggedServers - # param string servername as fqdn + # get timestamp of last backup start of a given server + # global string sBackupClient FQDN of current server function _getLastBackupstart(){ - test -r "${sStatusDir}/${sBackupClient}_start" && stat -c %Y "${sStatusDir}/${sBackupClient}_start" + #test -r "${sStatusDir}/${sBackupClient}_start" && stat -c %Y "${sStatusDir}/${sBackupClient}_start" + #echo $tsBackupStart #local _srv=$1 #_getAllLogs | sort | grep "\[$_srv\]" | grep ACCEPTED | tail -1 | cut -f -2 -d " " + + test -r "$sStatusDir/${sBackupClient}" && . "$sStatusDir/${sBackupClient}" + echo $tsBackupStart } - # get timestamp of last backup end of a given server - see _getLoggedServers - # param string servername as fqdn + # get timestamp of last backup end of a given server + # global string sBackupClient FQDN of current server function _getLastBackupend(){ - test -r "${sStatusDir}/${sBackupClient}_end" && stat -c %Y "${sStatusDir}/${sBackupClient}_end" + # test -r "${sStatusDir}/${sBackupClient}_end" && stat -c %Y "${sStatusDir}/${sBackupClient}_end" # local _srv=$1 # _getAllLogs | sort | grep "\[$_srv\]" | grep REMOVED | tail -1 | cut -f -2 -d " " + test -r "$sStatusDir/${sBackupClient}" && . "$sStatusDir/${sBackupClient}" + echo $tsBackupEnd } + + # get status code of last backup from status file + # global string sBackupClient FQDN of current server function _getLastBackupstatus(){ - if [ -f "${sStatusDir}/${sBackupClient}_end" ]; then - cat "${sStatusDir}/${sBackupClient}_end" + if [ -r "${sStatusDir}/${sBackupClient}" ]; then + . "${sStatusDir}/${sBackupClient}" + echo $backupRc else - echo "-1" + echo "-2" fi } + # get size of backup data from status file + # global string sBackupClient FQDN of current server + function _getBackupsize(){ + test -r "$sStatusDir/${sBackupClient}" && . "$sStatusDir/${sBackupClient}" + echo $size + } + # check if a backup for current server is running + # it returns 0 for no and 1 for yes + # global string sBackupClient FQDN of current server function _isRunning(){ sTouchfile=`getConnFilename $sBackupClient` test -f "$sTouchfile" && echo 1 @@ -177,6 +202,9 @@ _addLog "IGNORE request for a slot - [$sBackupClient] has a slot already" else touch "$sTouchfile" + echo "client='$sBackupClient'" > "$sTouchfile" + echo "# $( date """+%Y-%m-%d %H:%M:%S""" )" >> "$sTouchfile" + echo "tsBackupStart=$( date +%s )" >> "$sTouchfile" _addLog "REQUEST a slot for server [$sBackupClient]" fi } @@ -185,10 +213,15 @@ # see PUBLIC_unregister # param int backup status function freeConnection(){ + local _status=$1 + test -z "$1" && _status=-1 sTouchfile=`getConnFilename $sBackupClient` if [ -f "$sTouchfile" ]; then - mv "$sTouchfile" "$sStatusDir/${sBackupClient}_start" - echo $1 > "$sStatusDir/${sBackupClient}_end" + echo "# $( date """+%Y-%m-%d %H:%M:%S""" )" >> "$sTouchfile" + echo "tsBackupEnd=$( date +%s )" >> "$sTouchfile" + echo "backupRc=$_status" >> "$sTouchfile" + echo "size=$( du -hs ${sBackupBasedir}/*/$sBackupClient 2>/dev/null )" >> "$sTouchfile" + mv "$sTouchfile" "$sStatusDir/${sBackupClient}" else echo INFO: server [$sBackupClient] had no reserved slot _addLog "IGNORE freeing the connection - [$sBackupClient] had no reserved slot" @@ -209,6 +242,11 @@ echo ERROR: no backup client was given exit 1 fi + # read last backup status + typeset -i tsBackupStart=0 + typeset -i tsBackupEnd=0 + typeset -i backupRc=-2 + # test -r "$sStatusDir/${sBackupClient}" && . "$sStatusDir/${sBackupClient}" } function _listRepodirs(){ @@ -229,27 +267,28 @@ function PUBLIC_backupstatus(){ typeset -i local ierrors=0 - local tbl="%-45s | %-20s | %-20s | %8s | %3s | %5s \n" + local tbl="%-45s | %-20s | %-20s | %8s | %3s | %7s | %s \n" _showConnectionCount + echo echo "This table shows the time and duration [s] of the last backup for each server." echo - printf "$tbl" " server" "start" "end" "duration" "rc" "age [h]" - echo "-------------------------------------------------------------------------------------------------------------------" + printf "$tbl" " server" "start" "end" "duration" "rc" "age [h]" "size" + echo "-----------------------------------------------------------------------------------------------------------------------------" for myserver in $( _getLoggedServers ) do # get data setBackupclient $myserver typeset -i local istart="$( _getLastBackupstart )" typeset -i local iend="$( _getLastBackupend )" - typeset -i local bIsRunning=$( _isRunning ) typeset -i local iLastStatus=$( _getLastBackupstatus ) + size=$( _getBackupsize ) + local tstart=$( date +"%Y-%m-%d %H:%M:%S" -d @${istart} ) local tend=$( date +"%Y-%m-%d %H:%M:%S" -d @${iend} ) - - typeset -i local iduration=$iend-$istart - typeset -i local iage=$( date +%s )-$iend + typeset -i local iduration=${iend}-${istart} + typeset -i local iage=$( date +%s )-${iend} typeset -i local iagehours=$iage/60/60 # check values @@ -261,11 +300,11 @@ test $iduration -lt 0 && sduration="RUNNING" sStatusRun="." - test $iend -eq 0 && sStatusRun="?" - test $bIsRunning -eq 1 && sStatusRun="R" + test $iend -eq 0 && sStatusRun="?" + test $bIsRunning -eq 1 && sStatusRun="R" # output - printf "$tbl" "$sStatusRun $myserver" "${tstart}" "${tend}" "${sduration}" "$iLastStatus" "${iagehours}" + printf "$tbl" "$sStatusRun $myserver" "${tstart}" "${tend}" "${sduration}" "$iLastStatus" "${iagehours}" "$size" done echo echo "total : $( _getLoggedServers | wc -l ) servers" @@ -300,9 +339,9 @@ echo -n "Repo to deactivate >" read inputdir if [ -d "$inputdir" -a ! -f "$inputdir/inactive.txt" ]; then - echo -n "Short message >" + echo -n "Optional short message >" read mymessage - echo "$( date ) | $mymessage" >"$inputdir/inactive.txt" + echo "$( date ) | $mymessage" > "$inputdir/inactive.txt" ls -l "$inputdir/inactive.txt" else echo SKIP [$inputdir] @@ -463,8 +502,12 @@ echo " backupstatus" echo " show all servers and their backup times" echo - echo " register | unregister [hostname]" - echo " add/ remove slot for a backup client" + echo " register [hostname]" + echo " add a slot for a backup client" + echo + echo " unregister [hostname] [statuscode]" + echo " remove slot for a backup client." + echo " The statuscode is an integer of the return code." echo echo " setactive" echo " Reactivate an inctave backup repo." @@ -477,7 +520,7 @@ echo " status" echo " show current reserved slots" echo - echo " usage [full|[filter to hostname]]" + echo " usage [full|[filter to hostname]] - DEPRECATED" echo " show used diskspace" echo " you can set a string to show additionally details if these hosts" echo " if you add \"full\" then details of all hosts will be shown"