doc(bklog-plan):Add TODO task: correct drift of SECONDS
[EVA-2020-02.git] / exec / bklog
index a78b19f6a7b8a975aea81600562a1b051296d1e9..fbe28e0e651eac8dde57d76e84935fd3ddd4c86e 100644 (file)
@@ -11,7 +11,7 @@ dirTmpDefault="/dev/shm"; # Default parent of working directory
 
 # Script Metadata
 scriptName="bklog";             # Define basename of script file.
 
 # Script Metadata
 scriptName="bklog";             # Define basename of script file.
-scriptVersion="0.1.20";          # Define version of script.
+scriptVersion="0.1.24";          # Define version of script.
 scriptURL="https://gitlab.com/baltakatei/ninfacyzga-01"; # Define wesite hosting this script.
 scriptTimeStart="$(date +%Y%m%dT%H%M%S.%N)"; # YYYYmmddTHHMMSS.NNNNNNNNN
 scriptHostname=$(hostname);     # Save hostname of system running this script.
 scriptURL="https://gitlab.com/baltakatei/ninfacyzga-01"; # Define wesite hosting this script.
 scriptTimeStart="$(date +%Y%m%dT%H%M%S.%N)"; # YYYYmmddTHHMMSS.NNNNNNNNN
 scriptHostname=$(hostname);     # Save hostname of system running this script.
@@ -54,7 +54,7 @@ processArguments() {
            -t | --temp-dir) optionTmpDir="true" && argTempDirPriority="$2"; shift;; # Set time zone
            -b | --buffer-ttl) optionCustomBufferTTL="true" && argCustomBufferTTL="$2"; shift;; # Set custom buffer period (default: 300 seconds)
            -B | --script-ttl) optionCustomScriptTTL_TE="true" && argCustomScriptTTL_TE="$2"; shift;; # Set custom script TTL (default: "day")
            -t | --temp-dir) optionTmpDir="true" && argTempDirPriority="$2"; shift;; # Set time zone
            -b | --buffer-ttl) optionCustomBufferTTL="true" && argCustomBufferTTL="$2"; shift;; # Set custom buffer period (default: 300 seconds)
            -B | --script-ttl) optionCustomScriptTTL_TE="true" && argCustomScriptTTL_TE="$2"; shift;; # Set custom script TTL (default: "day")
-           -p | --process-string) optionProcString="true" && argProcStrings+=("$2") && argProcFileExts+=("$3") && vbm "STATUS:file extension \"$2\" for output of processing string added:\"$3\""; shift; shift;;
+           -p | --process-string) optionProcString="true" && argProcStrings+=("$2") && argProcFileExts+=("$3") && vbm "STATUS:file extension \"$3\" for output of processing string added:\"$2\""; shift; shift;;
            -l | --label) optionLabel="true" && argLabel="$2"; vbm "DEBUG :Custom label received:$argLabel"; shift;;
            -w | --store-raw) optionStoreRaw="true" && argRawFileExt="$2"; vbm "DEBUG :Raw stdin file extension received:$argRawFileExt"; shift;;
            -W | --no-store-raw) optionNoStoreRaw="true"; vbm "DEBUG :Option selected to not store raw stdin data."; shift;;
            -l | --label) optionLabel="true" && argLabel="$2"; vbm "DEBUG :Custom label received:$argLabel"; shift;;
            -w | --store-raw) optionStoreRaw="true" && argRawFileExt="$2"; vbm "DEBUG :Raw stdin file extension received:$argRawFileExt"; shift;;
            -W | --no-store-raw) optionNoStoreRaw="true"; vbm "DEBUG :Option selected to not store raw stdin data."; shift;;
@@ -66,7 +66,7 @@ processArguments() {
 vbm() {
     # Description: Prints verbose message ("vbm") to stderr if optionVerbose is set to "true".
     # Usage: vbm "DEBUG :verbose message here"
 vbm() {
     # Description: Prints verbose message ("vbm") to stderr if optionVerbose is set to "true".
     # Usage: vbm "DEBUG :verbose message here"
-    # Version 0.1.2
+    # Version 0.1.3
     # Input: arg1: string
     #        vars: optionVerbose
     # Output: stderr
     # Input: arg1: string
     #        vars: optionVerbose
     # Output: stderr
@@ -74,7 +74,7 @@ vbm() {
 
     if [ "$optionVerbose" = "true" ]; then
        functionTime=$(date --iso-8601=ns); # Save current time in nano seconds.
 
     if [ "$optionVerbose" = "true" ]; then
        functionTime=$(date --iso-8601=ns); # Save current time in nano seconds.
-       echo "[$functionTime] ""$*" 1>&2; # Display argument text.
+       echo "[$functionTime]:$0:""$*" 1>&2; # Display argument text.
     fi
 
     # End function
     fi
 
     # End function
@@ -357,17 +357,20 @@ checkMakeTar() {
     if tar --list --file="$pathTar" 1>/dev/null 2>&1; then
        ## T1: return success
        returnFlag0="tar valid";
     if tar --list --file="$pathTar" 1>/dev/null 2>&1; then
        ## T1: return success
        returnFlag0="tar valid";
+    elif { sleep 2; tar --list --file="$pathTar" 1>/dev/null 2>&1; }; then
+       ## F1: Check tar archive again after 2-second sleep
+       returnFlag0="tar valid";
     else
     else
-       ## F1: Check if file exists
+       ## F2-1: Check if file exists
        if [[ -f "$pathTar" ]]; then
            ### T: Rename file
        if [[ -f "$pathTar" ]]; then
            ### T: Rename file
-           try mv "$pathTar" "$pathTar""--broken--""$(date +%Y%m%dT%H%M%S)" && \
+           try mv "$pathTar" "$pathTar""--broken--""$(date +%Y%m%dT%H%M%S%z)" && \
                returnFlag1="tar moved";
        else
            ### F: -
            :
        fi;
                returnFlag1="tar moved";
        else
            ### F: -
            :
        fi;
-       ## F2: Create tar archive, return 0
+       ## F2-1: Create tar archive, return 0
        try tar --create --file="$pathTar" --files-from=/dev/null && \
            returnFlag2="tar created";
     fi;
        try tar --create --file="$pathTar" --files-from=/dev/null && \
            returnFlag2="tar created";
     fi;
@@ -884,7 +887,7 @@ magicParseCompressionArg() {
        cmd_compress_suffix="" && vbm "STATUS:$fn:cmd_compress_suffix:$cmd_compress_suffix";
        vbm "DEBUG :$fn:Compression not enabled.";
     fi;
        cmd_compress_suffix="" && vbm "STATUS:$fn:cmd_compress_suffix:$cmd_compress_suffix";
        vbm "DEBUG :$fn:Compression not enabled.";
     fi;
-    vbm "STATUS:$fn:Starting magicParseCompressionArg() function.";
+    vbm "STATUS:$fn:Finished magicParseCompressionArg() function.";
 } # Form compression cmd string and filename suffix
 magicParseCustomTTL() {
     # Desc: Set user-specified TTLs for buffer and script
 } # Form compression cmd string and filename suffix
 magicParseCustomTTL() {
     # Desc: Set user-specified TTLs for buffer and script
@@ -925,7 +928,7 @@ magicParseCustomTTL() {
        fi;
        ## F: do not change scriptTTL_TE
     fi;
        fi;
        ## F: do not change scriptTTL_TE
     fi;
-    vbm "STATUS:$fn:Starting magicParseCustomTTL() function.";
+    vbm "STATUS:$fn:Finished magicParseCustomTTL() function.";
 } # Sets custom script or buffer TTL if specified
 magicParseLabel() {
     # Desc: Parses -l option to set label
 } # Sets custom script or buffer TTL if specified
 magicParseLabel() {
     # Desc: Parses -l option to set label
@@ -1029,9 +1032,11 @@ magicParseProcessStrings() {
            exit 1; fi; done;
     vbm "STATUS:$fn:Quick check shows argProcStrings and argProcFileExts appear to have valid contents.";
     vbm "STATUS:$fn:argProcStrings:${argProcStrings[*]}"
            exit 1; fi; done;
     vbm "STATUS:$fn:Quick check shows argProcStrings and argProcFileExts appear to have valid contents.";
     vbm "STATUS:$fn:argProcStrings:${argProcStrings[*]}"
-    vbm "STATUS:$fn:argProcStrings:${argProcFileExts[*]}"
+    vbm "STATUS:$fn:argProcFileExts:${argProcFileExts[*]}"
     procStrings+=("${argProcStrings[@]}"); # Export process command strings
     procFileExts+=("${argProcFileExts[@]}"); # Export process command strings
     procStrings+=("${argProcStrings[@]}"); # Export process command strings
     procFileExts+=("${argProcFileExts[@]}"); # Export process command strings
+    vbm "STATUS:$fn:procStrings:${procStrings[*]}"
+    vbm "STATUS:$fn:procFileExts:${procFileExts[*]}"
     vbm "STATUS:$fn:Finished magicParseProcessStrings() function.";
 } # Validate and save process strings and file extensions to arrays procStrings, procFileExts
 magicParseRecipients() {
     vbm "STATUS:$fn:Finished magicParseProcessStrings() function.";
 } # Validate and save process strings and file extensions to arrays procStrings, procFileExts
 magicParseRecipients() {
@@ -1146,19 +1151,23 @@ magicSetScriptTTL() {
     vbm "STATUS:$fn:Starting magicSetScriptTTL() function.";
     argTimeElement="$1";
     if [[ "$argTimeElement" = "day" ]]; then
     vbm "STATUS:$fn:Starting magicSetScriptTTL() function.";
     argTimeElement="$1";
     if [[ "$argTimeElement" = "day" ]]; then
-           # Set script lifespan to end at start of next day
+       # Set script lifespan to end at start of next day
+       vbm "STATUS:$fn:Setting script lifespan to end at start of next day. argTimeElement:$argTimeElement";
        if ! scriptTTL="$(timeUntilNextDay)"; then # sets scriptTTL, then checks exit code
            if [[ "$scriptTTL" -eq 0 ]]; then
        if ! scriptTTL="$(timeUntilNextDay)"; then # sets scriptTTL, then checks exit code
            if [[ "$scriptTTL" -eq 0 ]]; then
-           ((scriptTTL++)); # Add 1 because 0 would cause 'timeout' to never timeout.
+               ((scriptTTL++)); # Add 1 because 0 would cause 'timeout' to never timeout.
+               vbm "STATUS:$fn:scriptTTL:$scriptTTL";
            else
            yell "ERROR:$fn:timeUntilNextDay exit code $?"; exit 1;
            fi;
        fi;
     elif [[ "$argTimeElement" = "hour" ]]; then
        # Set script lifespan to end at start of next hour
            else
            yell "ERROR:$fn:timeUntilNextDay exit code $?"; exit 1;
            fi;
        fi;
     elif [[ "$argTimeElement" = "hour" ]]; then
        # Set script lifespan to end at start of next hour
+       vbm "STATUS:$fn:Setting script lifespan to end at start of next hour. argTimeElement:$argTimeElement";
        if ! scriptTTL="$(timeUntilNextHour)"; then # sets scriptTTL, then checks exit code
            if [[ "$scriptTTL" -eq 0 ]]; then
                ((scriptTTL++)); # Add 1 because 0 would cause 'timeout' to never timeout.
        if ! scriptTTL="$(timeUntilNextHour)"; then # sets scriptTTL, then checks exit code
            if [[ "$scriptTTL" -eq 0 ]]; then
                ((scriptTTL++)); # Add 1 because 0 would cause 'timeout' to never timeout.
+               vbm "STATUS:$fn:scriptTTL:$scriptTTL";
            else
                yell "ERROR:$fn:timeUntilNextHour exit code $?"; exit 1;
            fi;
            else
                yell "ERROR:$fn:timeUntilNextHour exit code $?"; exit 1;
            fi;
@@ -1258,6 +1267,12 @@ magicProcessWriteBuffer() {
     writeCmd4="$cmd_encrypt";
     
     ## Process buffer and write to dir_tmp
     writeCmd4="$cmd_encrypt";
     
     ## Process buffer and write to dir_tmp
+    vbm "DEBUG :$fn:fileouts    element count:${#fileouts[@]}";
+    vbm "DEBUG :$fn:pathouts    element count:${#pathouts[@]}";
+    vbm "DEBUG :$fn:procStrings element count:${#pathouts[@]}";
+    vbm "DEBUG :$fn:fileouts    contents:${fileouts[*]}";
+    vbm "DEBUG :$fn:pathouts    contents:${pathouts[*]}";
+    vbm "DEBUG :$fn:procStrings contents:${pathouts[*]}";
     for index in "${!pathouts[@]}"; do
        writeCmd2="${procStrings[$index]}";
        writeCmdAll="$writeCmd1 | $writeCmd2 | $writeCmd3 | $writeCmd4" && vbm "STATUS:$fn:Assembled command:\"$writeCmdAll\"";
     for index in "${!pathouts[@]}"; do
        writeCmd2="${procStrings[$index]}";
        writeCmdAll="$writeCmd1 | $writeCmd2 | $writeCmd3 | $writeCmd4" && vbm "STATUS:$fn:Assembled command:\"$writeCmdAll\"";
@@ -1267,8 +1282,9 @@ magicProcessWriteBuffer() {
     # Append dir_tmp files to pathout_tar
     wait; # Wait to avoid collision with older magicProcessWriteBuffer() instances (see https://www.tldp.org/LDP/abs/html/x9644.html )
     for index in "${!pathouts[@]}"; do
     # Append dir_tmp files to pathout_tar
     wait; # Wait to avoid collision with older magicProcessWriteBuffer() instances (see https://www.tldp.org/LDP/abs/html/x9644.html )
     for index in "${!pathouts[@]}"; do
-       appendFileTar "${pathouts[$index]}" "${fileouts[$index]}" "$pathout_tar" "$dir_tmp" && \
+       tar --append --directory="$dir_tmp" --file="$pathout_tar" "${fileouts[$index]}" && \
            vbm "STATUS:$fn:Appended ${pathouts[$index]} to $pathout_tar";
            vbm "STATUS:$fn:Appended ${pathouts[$index]} to $pathout_tar";
+       #appendFileTar "${pathouts[$index]}" "${fileouts[$index]}" "$pathout_tar" "$dir_tmp" && \
     done;
     
     # Remove secured chunks from dir_tmp
     done;
     
     # Remove secured chunks from dir_tmp