From 63c64c5d5e5d11b11e66c22b8a70ae4688e9c9b2 Mon Sep 17 00:00:00 2001 From: deajan Date: Mon, 14 Nov 2016 19:17:30 +0100 Subject: [PATCH] Added --summary and --no-prefix arguments --- dev/n_osync.sh | 157 ++++++++++++++++++++++++++++++---------------- dev/ofunctions.sh | 8 +-- 2 files changed, 106 insertions(+), 59 deletions(-) diff --git a/dev/n_osync.sh b/dev/n_osync.sh index bcda7cb..83f526c 100755 --- a/dev/n_osync.sh +++ b/dev/n_osync.sh @@ -4,7 +4,7 @@ PROGRAM="osync" # Rsync based two way sync engine with fault tolerance AUTHOR="(C) 2013-2016 by Orsiris de Jong" CONTACT="http://www.netpower.fr/osync - ozy@netpower.fr" PROGRAM_VERSION=1.2-beta2 -PROGRAM_BUILD=2016111401 +PROGRAM_BUILD=2016111403 IS_STABLE=no # Execution order #__WITH_PARANOIA_DEBUG @@ -1003,6 +1003,7 @@ function _deleteLocal { Logger "Moving deleted file [$replicaDir$files] to [$replicaDir$deletionDir]." "VERBOSE" mv -f "$replicaDir$files" "$replicaDir$deletionDir" fi + echo "$replicaDir$files" >> "$RUN_DIR/$PROGRAM.delete.$replicaType.$SCRIPT_PID" if [ $? != 0 ]; then Logger "Cannot move [$replicaDir$files] to deletion directory." "ERROR" echo "$files" >> "${INITIATOR[$__replicaDir]}${INITIATOR[$__stateDir]}/$replicaType${INITIATOR[$__failedDeletedListFile]}" @@ -1680,6 +1681,43 @@ function SoftDelete { fi } +function _SummaryFromFile { + local summaryFile="${1}" + local direction="${2}" + + __CheckArguments 0 $# "${FUNCNAME[0]}" "$@" #__WITH_PARANOIA_DEBUG + + if [ -f "$summaryFile" ]; then + while read -r file; do + Logger "$direction $(echo $file | awk '{for (i=2; i> TARGET" "ALWAYS" + + _SummaryFromFile "$RUN_DIR/$PROGRAM.attr-update.target.$SCRIPT_PID" ">>" + _SummaryFromFile "$RUN_DIR/$PROGRAM.attr-update.initiator.$SCRIPT_PID" "<<" + + Logger "File transfers: INITIATOR << >> TARGET" "ALWAYS" + _SummaryFromFile "$RUN_DIR/$PROGRAM.update.target.$SCRIPT_PID" ">>" + _SummaryFromFile "$RUN_DIR/$PROGRAM.update.initiator.$SCRIPT_PID" "<<" + + Logger "File deletions: INITIATOR << >> TARGET" "ALWAYS" + _SummaryFromFile "$RUN_DIR/$PROGRAM.attr-update.target.$SCRIPT_PID" ">>" + _SummaryFromFile "$RUN_DIR/$PROGRAM.attr-update.initiator.$SCRIPT_PID" "<<" + + _LOGGER_PREFIX="$prefix" +} + function Init { __CheckArguments 0 $# "${FUNCNAME[0]}" "$@" #__WITH_PARANOIA_DEBUG @@ -1815,7 +1853,7 @@ function Init { ## Set sync only function arguments for rsync SYNC_OPTS="-u" - if [ $_VERBOSE == true ]; then + if [ $_VERBOSE == true ] || [ $_SUMMARY == true ]; then SYNC_OPTS=$SYNC_OPTS" -i" fi @@ -1876,8 +1914,10 @@ function Usage { echo "" echo "[OPTIONS]" echo "--dry Will run osync without actually doing anything; just testing" + echo "--no-prefix Will suppress time / date suffix from output" echo "--silent Will run osync without any output to stdout, used for cron jobs" echo "--errors-only Output only errors (can be combined with silent or verbose)" + echo "--summary Outputs a list of transferred / deleted files at the end of the run" echo "--verbose Increases output" echo "--stats Adds rsync transfer statistics to verbose output" echo "--partial Allows rsync to keep partial downloads that can be resumed later (experimental)" @@ -1951,7 +1991,6 @@ fi INITIATOR_LOCK_FILE_EXISTS=false TARGET_LOCK_FILE_EXISTS=false - FORCE_UNLOCK=false no_maxtime=false opts="" @@ -1964,6 +2003,7 @@ _QUICK_SYNC=0 sync_on_changes=false _NOLOCKS=false osync_cmd=$0 +_SUMMARY=false if [ $# -eq 0 ] then @@ -2043,8 +2083,15 @@ for i in "$@"; do _NOLOCKS=true ;; --errors-only) - _LOGGER_STDERR=True - _LOGGER_ERR_ONLY=True + #TODO: let err_only only output to stderr + #_LOGGER_STDERR=true + _LOGGER_ERR_ONLY=true + ;; + --summary) + _SUMMARY=true + ;; + --no-prefix) + _LOGGER_PREFIX="" ;; *) if [ $first == "0" ]; then @@ -2098,59 +2145,59 @@ opts="${opts# *}" LoadConfigFile "$ConfigFile" fi - if [ "$LOGFILE" == "" ]; then - if [ -w /var/log ]; then - LOG_FILE="/var/log/$PROGRAM.$INSTANCE_ID.log" - elif ([ "$HOME" != "" ] && [ -w "$HOME" ]); then - LOG_FILE="$HOME/$PROGRAM.$INSTANCE_ID.log" - else - LOG_FILE="./$PROGRAM.$INSTANCE_ID.log" - fi +if [ "$LOGFILE" == "" ]; then + if [ -w /var/log ]; then + LOG_FILE="/var/log/$PROGRAM.$INSTANCE_ID.log" + elif ([ "$HOME" != "" ] && [ -w "$HOME" ]); then + LOG_FILE="$HOME/$PROGRAM.$INSTANCE_ID.log" else - LOG_FILE="$LOGFILE" + LOG_FILE="./$PROGRAM.$INSTANCE_ID.log" fi - if [ ! -w "$(dirname $LOG_FILE)" ]; then - echo "Cannot write to log [$(dirname $LOG_FILE)]." - else - Logger "Script begin, logging to [$LOG_FILE]." "DEBUG" +else + LOG_FILE="$LOGFILE" +fi +if [ ! -w "$(dirname $LOG_FILE)" ]; then + echo "Cannot write to log [$(dirname $LOG_FILE)]." +else + Logger "Script begin, logging to [$LOG_FILE]." "DEBUG" +fi + +if [ "$IS_STABLE" != "yes" ]; then + Logger "This is an unstable dev build [$PROGRAM_BUILD]. Please use with caution." "WARN" fi - if [ "$IS_STABLE" != "yes" ]; then - Logger "This is an unstable dev build [$PROGRAM_BUILD]. Please use with caution." "WARN" - fi - - GetLocalOS - InitLocalOSSettings - PreInit - Init - CheckEnvironment - PostInit - if [ $_QUICK_SYNC -lt 2 ]; then - CheckCurrentConfig +GetLocalOS +InitLocalOSSettings +PreInit +Init +CheckEnvironment +PostInit +if [ $_QUICK_SYNC -lt 2 ]; then + CheckCurrentConfig +fi +CheckCurrentConfigAll +DATE=$(date) +Logger "-------------------------------------------------------------" "NOTICE" +Logger "$DRY_WARNING $DATE - $PROGRAM $PROGRAM_VERSION script begin." "ALWAYS" +Logger "-------------------------------------------------------------" "NOTICE" +Logger "Sync task [$INSTANCE_ID] launched as $LOCAL_USER@$LOCAL_HOST (PID $SCRIPT_PID)" "NOTICE" +if [ $sync_on_changes == true ]; then + SyncOnChanges +else + GetRemoteOS + InitRemoteOSSettings + if [ $no_maxtime == true ]; then + SOFT_MAX_EXEC_TIME=0 + HARD_MAX_EXEC_TIME=0 fi - CheckCurrentConfigAll - - DATE=$(date) - Logger "-------------------------------------------------------------" "NOTICE" - Logger "$DRY_WARNING $DATE - $PROGRAM $PROGRAM_VERSION script begin." "NOTICE" - Logger "-------------------------------------------------------------" "NOTICE" - Logger "Sync task [$INSTANCE_ID] launched as $LOCAL_USER@$LOCAL_HOST (PID $SCRIPT_PID)" "NOTICE" - - if [ $sync_on_changes == true ]; then - SyncOnChanges - else - GetRemoteOS - InitRemoteOSSettings - - if [ $no_maxtime == true ]; then - SOFT_MAX_EXEC_TIME=0 - HARD_MAX_EXEC_TIME=0 - fi - CheckReplicaPaths - CheckDiskSpace - RunBeforeHook - Main - if [ $? == 0 ]; then - SoftDelete - fi + CheckReplicaPaths + CheckDiskSpace + RunBeforeHook + Main + if [ $? == 0 ]; then + SoftDelete fi + if [ $_SUMMARY == true ]; then + Summary + fi +fi diff --git a/dev/ofunctions.sh b/dev/ofunctions.sh index 4ab72d7..a50f9dc 100644 --- a/dev/ofunctions.sh +++ b/dev/ofunctions.sh @@ -7,8 +7,8 @@ ## PROGRAM=program-name ## INSTANCE_ID=program-instance-name ## _DEBUG=yes/no -## _LOGGER_STDERR=true/False -## _LOGGER_ERR_ONLY=true/False +## _LOGGER_STDERR=true/false +## _LOGGER_ERR_ONLY=true/false ## _LOGGER_PREFIX="date"/"time"/"" #TODO: Windows checks, check sendmail & mailsend @@ -282,7 +282,7 @@ function SendAlert { eval "cat \"$LOG_FILE\" $COMPRESSION_PROGRAM > $ALERT_LOG_FILE" if [ $? != 0 ]; then Logger "Cannot create [$ALERT_LOG_FILE]" "WARN" - attachment=False + attachment=false else attachment=true fi @@ -501,7 +501,7 @@ function LoadConfigFile { } function Spinner { - if [ $_SILENT == true ]; then + if [ $_SILENT == true ] || [ $_LOGGER_ERR_ONLY == true ]; then return 0 fi