feat(bkgpslog):Consolidate write ops into one function
authorSteven Baltakatei Sandoval <baltakatei@gmail.com>
Thu, 2 Jul 2020 00:55:23 +0000 (00:55 +0000)
committerSteven Baltakatei Sandoval <baltakatei@gmail.com>
Thu, 2 Jul 2020 00:55:23 +0000 (00:55 +0000)
Create metafunction 'magicWriteBuffer' to be triggered for
asynchronous appending of location files into tar file via
appendArgTar function (new) once buffer filled in main logging loop.

Create appendArgTar function to append a bash variable as a file to a
tar file.

exec/bkgpslog

index 022195e1fd8d3d864106732298b08293c941f0e1..bc716d8b5e7b10fce5c112adf1171202d1b56dee 100755 (executable)
@@ -612,6 +612,57 @@ setScriptTTL() {
        yell "ERROR:Invalid argument for setScriptTTL function."; exit 1;
     fi
 } # Seconds until next (day|hour).
+appendArgTar(){
+    # Desc: Writes first argument to temporary file with arguments as options, then appends file to tar
+    # Usage: writeArg "$(echo "Data to be written.")" [name of file to be inserted] [tar path] [temp dir] ([cmd1] [cmd2] [cmd3] [cmd4]...)
+    # Input: arg1: data to be written
+    #        arg2: file name of file to be inserted into tar
+    #        arg3: tar archive path (must exist first)
+    #        arg4: temporary working dir
+    #        arg5+: command strings (ex: "gpsbabel -i nmea -f - -o kml -F - ")
+    # Output: file written to disk
+    # Example: decrypt multiple large files in parallel
+    #          appendArgTar "$(cat /tmp/largefile1.gpg)" "largefile1" $HOME/archive.tar /tmp "gpg --decrypt" &
+    #          appendArgTar "$(cat /tmp/largefile2.gpg)" "largefile2" $HOME/archive.tar /tmp "gpg --decrypt" &
+    #          appendArgTar "$(cat /tmp/largefile3.gpg)" "largefile3" $HOME/archive.tar /tmp "gpg --decrypt" &
+
+    # Depends: bash 5
+
+    # Set file name
+    if ! [ -z "$2" ]; then FILENAME="$2"; else yell "ERROR:Not enough arguments."; exit 1; fi
+    
+    # Check tar path is a file
+    if [ -f "$3" ]; then TAR_PATH="$3"; else yell "ERROR:Tar archive arg not a file."; exit 1; fi
+       
+    # Check temp dir arg
+    if ! [ -z "$4" ]; then TMP_DIR="$3"; else yell "ERROR:No temporary working dir set."; exit 1; fi
+    
+    # Set command strings
+    if ! [ -z "$5" ]; then CMD1="$5"; else CMD1="tee /dev/null "; fi # command string 1
+    if ! [ -z "$6" ]; then CMD2="$6"; else CMD2="tee /dev/null "; fi # command string 2
+    if ! [ -z "$7" ]; then CMD3="$7"; else CMD3="tee /dev/null "; fi # command string 3
+    if ! [ -z "$8" ]; then CMD4="$8"; else CMD4="tee /dev/null "; fi # command string 4
+
+    # Debug
+    yell "CMD1:$CMD1"
+    yell "CMD2:$CMD2"
+    yell "CMD3:$CMD3"
+    yell "CMD4:$CMD4"
+    # Write to temporary working dir
+    echo "$1" | $CMD1 | $CMD2 | $CMD3 | $CMD4 > "$TMP_DIR"/"$FILENAME";
+
+    # Append to tar
+    try tar --append --directory="$TMP_DIR" --file="$TAR_PATH" "$FILENAME";
+
+} # Append Bash var to file appended to Tar archive
+magicWriteBuffer() {
+    # Desc: bkgpslog-specific meta function for writing data to DIR_TMP then appending each file to PATHOUT_TAR
+    appendArgTar "$bufferBash" "$FILEOUT_NMEA" "$PATHOUT_TAR" "$DIR_TMP" "$CMD_CONV_NMEA" "$CMD_COMPRESS" "$CMD_ENCRYPT"; # Write NMEA data
+    appendArgTar "$bufferBash" "$FILEOUT_GPX" "$PATHOUT_TAR" "$DIR_TMP" "$CMD_CONV_NMEA" "$CMD_COMPRESS" "$CMD_ENCRYPT"; # Write GPX file
+    appendArgTar "$bufferBash" "$FILEOUT_KML" "$PATHOUT_TAR" "$DIR_TMP" "$CMD_CONV_NMEA" "$CMD_COMPRESS" "$CMD_ENCRYPT"; # Write KML file
+} # bkgpslog write function
+
+
 main() {
     processArguments "$@" # Process arguments.
     
@@ -621,7 +672,7 @@ main() {
            if [[ -d "$TMP_DIR_PRIORITY" ]]; then
            DIR_TMP_PARENT="$OPTION_TMPDIR"; 
        else
-           yell "WARNING:Specified temporary working directory not valid:$OPTION_TMP_DIR";
+           yell "WARNING:Specified temporary working directory not valid:$OPTION_TMPDIR";
            exit 1;
        fi
     fi
@@ -732,30 +783,34 @@ main() {
        # Determine file paths (time is start of buffer period)
        FILEOUT_BASENAME="$timeBufferStart""--""$bufferTTL_STR""..""$SCRIPT_HOSTNAME""_location" && vbm "STATUS:Set FILEOUT_BASENAME to:$FILEOUT_BASENAME";
        ## Files saved to DIR_TMP
-       PATHOUT_NMEA="$DIR_TMP"/"$FILEOUT_BASENAME".nmea"$CMD_COMPRESS_SUFFIX""$CMD_ENCRYPT_SUFFIX" && vbm "STATUS:Set PATHOUT_NMEA to:$PATHOUT_NMEA";
-       PATHOUT_GPX="$DIR_TMP"/"$FILEOUT_BASENAME".gpx"$CMD_COMPRESS_SUFFIX""$CMD_ENCRYPT_SUFFIX" && vbm "STATUS:Set PATHOUT_GPX to:$PATHOUT_GPX";
-       PATHOUT_KML="$DIR_TMP"/"$FILEOUT_BASENAME".kml"$CMD_COMPRESS_SUFFIX""$CMD_ENCRYPT_SUFFIX" && vbm "STATUS:Set PATHOUT_KML to:$PATHOUT_KML";
+       FILEOUT_NMEA="$FILEOUT_BASENAME".nmea"$CMD_COMPRESS_SUFFIX""$CMD_ENCRYPT_SUFFIX" && vbm "STATUS:Set FILEOUT_NMEA to:$FILEOUT_NMEA"
+       FILEOUT_GPX="$FILEOUT_BASENAME".gpx"$CMD_COMPRESS_SUFFIX""$CMD_ENCRYPT_SUFFIX" && vbm "STATUS:Set FILEOUT_GPX to:$FILEOUT_GPX"
+       FILEOUT_KML="$FILEOUT_BASENAME".kml"$CMD_COMPRESS_SUFFIX""$CMD_ENCRYPT_SUFFIX" && vbm "STATUS:Set FILEOUT_KML to:$FILEOUT_KML"
+       PATHOUT_NMEA="$DIR_TMP"/"$FILEOUT_NMEA" && vbm "STATUS:Set PATHOUT_NMEA to:$PATHOUT_NMEA";
+       PATHOUT_GPX="$DIR_TMP"/"$FILEOUT_GPX" && vbm "STATUS:Set PATHOUT_GPX to:$PATHOUT_GPX";
+       PATHOUT_KML="$DIR_TMP"/"$FILEOUT_KML" && vbm "STATUS:Set PATHOUT_KML to:$PATHOUT_KML";
        ## Files saved to disk (DIR_OUT)
        ### one file per day (Ex: "20200731..hostname_location.[.gpx.gz].tar")
        PATHOUT_TAR="$DIR_OUT"/"$(dateShort)".."$SCRIPT_HOSTNAME""_location""$CMD_COMPRESS_SUFFIX""$CMD_ENCRYPT_SUFFIX".tar && \
            vbm "STATUS:Set PATHOUT_TAR to:$PATHOUT_TAR"
        # Define GPS conversion commands
        CMD_CONV_NMEA="tee /dev/null " && vbm "STATUS:Set CMD_CONV_NMEA to:$CMD_CONV_NMEA"; # tee as passthrough
-       CMD_CONV_GPX="gpsbabel -i nmea -f - -o gpx -F -" && vbm "STATUS:Set CMD_CONV_GPX to:$CMD_CONV_GPX"; # convert NMEA to GPX
-       CMD_CONV_KML="gpsbabel -i nmea -f - -o kml -F -" && vbm "STATUS:Set CMD_CONV_KML to:$CMD_CONV_KML"; # convert NMEA to KML
+       CMD_CONV_GPX="gpsbabel -i nmea -f - -o gpx -F - " && vbm "STATUS:Set CMD_CONV_GPX to:$CMD_CONV_GPX"; # convert NMEA to GPX
+       CMD_CONV_KML="gpsbabel -i nmea -f - -o kml -F - " && vbm "STATUS:Set CMD_CONV_KML to:$CMD_CONV_KML"; # convert NMEA to KML
        # Fill Bash variable buffer
        bufferBash="$(timeout "$BUFFER_TTL""s" gpspipe -r)" && vbm "STATUS:Successfully filled bufferBash variable with gpspipe data."; # Record gpspipe nmea data to buffer for bufferTTL seconds
        # Process bufferBash, save secured chunk set to DIR_TMP
        vbm "STATUS:Beginning to save data to $DIR_TMP";
-       echo "$bufferBash" | $CMD_CONV_NMEA | $CMD_COMPRESS | $CMD_ENCRYPT > "$PATHOUT_NMEA" & # Create NMEA file (secured if requested)
-       echo "$bufferBash" | $CMD_CONV_GPX | $CMD_COMPRESS | $CMD_ENCRYPT > "$PATHOUT_GPX" & # Create GPX file (secured if requested)
-       echo "$bufferBash" | $CMD_CONV_KML | $CMD_COMPRESS | $CMD_ENCRYPT > "$PATHOUT_KML" & # Create KML file (secured if requested)
+       magicWriteBuffer &
+       #echo "$bufferBash" | $CMD_CONV_NMEA | $CMD_COMPRESS | $CMD_ENCRYPT > "$PATHOUT_NMEA" & # Create NMEA file (secured if requested)
+       #echo "$bufferBash" | $CMD_CONV_GPX  | $CMD_COMPRESS | $CMD_ENCRYPT > "$PATHOUT_GPX" & # Create GPX file (secured if requested)
+       #echo "$bufferBash" | $CMD_CONV_KML  | $CMD_COMPRESS | $CMD_ENCRYPT > "$PATHOUT_KML" & # Create KML file (secured if requested)
        # Append each secured chunk in memory dir (DIR_TMP) to file on disk (PATHOUT_TAR in DIR_OUT)
        vbm "STATUS:DIR_TMP     :$DIR_TMP";
        vbm "STATUS:PATHOUT_TAR :$PATHOUT_TAR";
        vbm "STATUS:PATHOUT_NMEA:$PATHOUT_NMEA";
-       vbm "STATUS:PATHOUT_NMEA:$PATHOUT_GPX";
-       vbm "STATUS:PATHOUT_NMEA:$PATHOUT_KML";
+       vbm "STATUS:PATHOUT_GPX:$PATHOUT_GPX";
+       vbm "STATUS:PATHOUT_KML:$PATHOUT_KML";
        try tar --append --directory="$DIR_TMP" --file="$PATHOUT_TAR" "$(basename "$PATHOUT_NMEA")" && \
            vbm "DEBUG:Appended NMEA location data $PATHOUT_NMEA to $PATHOUT_TAR";
        try tar --append --directory="$DIR_TMP" --file="$PATHOUT_TAR" "$(basename "$PATHOUT_GPX")" && \