diff --git a/inc_config.sh.dist b/inc_config.sh.dist index 6575ca2c618baafc0229b02de2c55d51c1fbb134..df10f4e2e4e02ae82aa75f74186f3dce792cf313 100644 --- a/inc_config.sh.dist +++ b/inc_config.sh.dist @@ -20,6 +20,9 @@ # sConncectionDir="${sBackupBasedir}/_active" sConncectionDir="${sSelfdir}/_active_connections" + # where to store last backup status + sStatusDir="${sSelfdir}/_last_backup" + # log sLogdir="${sSelfdir}/log" sLogfile="$sLogdir/connections.log" diff --git a/storage_helper.sh b/storage_helper.sh index 11a82b0a0cd138291090e1176585284feae48648..3c741fe6d3f69bd1325097f93053eda91765904d 100755 --- a/storage_helper.sh +++ b/storage_helper.sh @@ -24,6 +24,7 @@ # 2019-11-01 hahn write more clear log messages # 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 # ====================================================================== # ---------------------------------------------------------------------- @@ -119,16 +120,33 @@ # get timestamp of last backup start of a given server - see _getLoggedServers # param string servername as fqdn function _getLastBackupstart(){ - local _srv=$1 - _getAllLogs | sort | grep "\[$_srv\]" | grep ACCEPTED | tail -1 | cut -f -2 -d " " + test -r "${sStatusDir}/${sBackupClient}_start" && stat -c %Y "${sStatusDir}/${sBackupClient}_start" + #local _srv=$1 + #_getAllLogs | sort | grep "\[$_srv\]" | grep ACCEPTED | tail -1 | cut -f -2 -d " " } # get timestamp of last backup end of a given server - see _getLoggedServers # param string servername as fqdn function _getLastBackupend(){ - local _srv=$1 - _getAllLogs | sort | grep "\[$_srv\]" | grep REMOVED | tail -1 | cut -f -2 -d " " + 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 " " } + function _getLastBackupstatus(){ + if [ -f "${sStatusDir}/${sBackupClient}_end" ]; then + cat "${sStatusDir}/${sBackupClient}_end" + else + echo "-1" + fi + } + + function _isRunning(){ + sTouchfile=`getConnFilename $sBackupClient` + test -f "$sTouchfile" && echo 1 + test -f "$sTouchfile" || echo 0 + } + + # ------------------------------------------------------------ # slot handling # ------------------------------------------------------------ @@ -153,7 +171,6 @@ # allow a slot for a new connection # see PUBLIC_register function addConnection(){ - # sBackupClient=$1 sTouchfile=`getConnFilename $sBackupClient` if [ -f "$sTouchfile" ]; then echo INFO: server [$sBackupClient] has a slot already @@ -166,11 +183,12 @@ # remove slot of a connection # see PUBLIC_unregister + # param int backup status function freeConnection(){ - # sBackupClient=$1 sTouchfile=`getConnFilename $sBackupClient` if [ -f "$sTouchfile" ]; then - rm -f "$sTouchfile" + mv "$sTouchfile" "$sStatusDir/${sBackupClient}_start" + echo $1 > "$sStatusDir/${sBackupClient}_end" else echo INFO: server [$sBackupClient] had no reserved slot _addLog "IGNORE freeing the connection - [$sBackupClient] had no reserved slot" @@ -211,32 +229,43 @@ function PUBLIC_backupstatus(){ typeset -i local ierrors=0 - local tbl="%-45s | %-20s | %-20s | %-12s | %-10s \n" - printf "$tbl" "server" "start" "end" "duration [s]" "age [h]" + local tbl="%-45s | %-20s | %-20s | %8s | %3s | %5s \n" + + _showConnectionCount + 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 "-------------------------------------------------------------------------------------------------------------------" for myserver in $( _getLoggedServers ) do # get data - local tstart="$( _getLastBackupstart $myserver )" - local tend="$( _getLastBackupend $myserver )" - typeset -i local istart=$( date +%s -d "$tstart" ) - typeset -i local iend=$( date +%s -d "$tend" ) + setBackupclient $myserver + typeset -i local istart="$( _getLastBackupstart )" + typeset -i local iend="$( _getLastBackupend )" + + typeset -i local bIsRunning=$( _isRunning ) + typeset -i local iLastStatus=$( _getLastBackupstatus ) + 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 iagehours=$iage/60/60 # check values - local statusAge=$(color ok) if [ $iagehours -gt $iMaxbackupAge ]; then - statusAge=$(color error) ierrors=$ierrors+1 fi - + local sduration=$iduration test $iduration -lt 0 && sduration="RUNNING" + sStatusRun="." + test $iend -eq 0 && sStatusRun="?" + test $bIsRunning -eq 1 && sStatusRun="R" + # output - printf "$tbl" $myserver "$tstart" "${tend}" "${sduration}" "${statusAge}${iagehours}$(color reset)" + printf "$tbl" "$sStatusRun $myserver" "${tstart}" "${tend}" "${sduration}" "$iLastStatus" "${iagehours}" done echo echo "total : $( _getLoggedServers | wc -l ) servers" @@ -289,6 +318,7 @@ } # register a hostname to start backups + # param string FQDN function PUBLIC_register(){ setBackupclient $1 echo "REGISTER $1" @@ -317,11 +347,14 @@ } # unregister a backup slot + # param string FQDN + # param int optional: return code of the backup run function PUBLIC_unregister(){ + typeset -i local _status=$2 setBackupclient $1 echo "UNREGISTER $1" echo - freeConnection + freeConnection $_status _addLog "REMOVED slot for [$sBackupClient]" _showConnectionCount exit 0 @@ -409,6 +442,9 @@ if [ ! -d "$sConncectionDir" ]; then mkdir -p "$sConncectionDir" || exit 1 fi + if [ ! -d "$sStatusDir" ]; then + mkdir -p "$sStatusDir" || exit 1 + fi color head echo