fix(bkgpslog):Increase buffer period 60s to 5m to reduce write freq
[EVA-2020-02.git] / exec / bkgpslog
index 97231f80a702e3b304e3f244cd52234f2d2c07c2..720f59e45fa7cb1e61ac1df4126d1066aca1aec8 100755 (executable)
@@ -6,7 +6,7 @@
 
 #==BEGIN Define script parameters==
 ## Logging Behavior parameters
-BUFFER_TTL="60"; # time between file writes
+BUFFER_TTL="300"; # time between file writes
 SCRIPT_TTL="day"; # (day|hour)
 #### TZ="UTC"; export TZ; # Default time zone; overridden by '--time-zone=[str]' option
 DIR_TMP_DEFAULT="/dev/shm"; # Default parent of working directory
@@ -14,7 +14,7 @@ DIR_TMP_DEFAULT="/dev/shm"; # Default parent of working directory
 SCRIPT_TIME_START=$(date +%Y%m%dT%H%M%S.%N);
 PATH="$HOME/.local/bin:$PATH";   # Add "$(systemd-path user-binaries)" path in case apps saved there
 SCRIPT_HOSTNAME=$(hostname);     # Save hostname of system running this script.
-SCRIPT_VERSION="0.2.2";          # Define version of script.
+SCRIPT_VERSION="0.3.2";          # Define version of script.
 SCRIPT_NAME="bkgpslog";          # Define basename of script file.
 SCRIPT_URL="https://gitlab.com/baltakatei/ninfacyzga-01"; # Define wesite hosting this script.
 AGE_VERSION="1.0.0-beta2";       # Define version of age (encryption program)
@@ -351,59 +351,61 @@ dateShort(){
     echo "$DATE_CURRENT_SHORT";
 } # Get YYYYmmdd
 timeDuration(){
-    # Desc: Output approximate time duration string before given time (default:current date)
+    # Desc: Given seconds, output ISO-8601 duration string
     # Ref/Attrib: ISO-8601:2004(E), §4.4.4.2 Representations of time intervals by duration and context information
     # Note: "1 month" ("P1M") is assumed to be "30 days" (see ISO-8601:2004(E), §2.2.1.2)
-    # Usage: timeDuration [arg1] ([arg2])
-    # Version: 1.0.1
+    # Usage: timeDuration [1:seconds] ([2:precision])
+    # Version: 1.0.3
     # Input: arg1: seconds as base 10 integer >= 0  (ex: 3601)
     #        arg2: precision level (optional; default=2)
     # Output: stdout: ISO-8601 duration string (ex: "P1H1S", "P2Y10M15DT10H30M20S")
+    #         exit code 0: success
+    #         exit code 1: error_input
+    #         exit code 2: error_unknown
     # Example: 'timeDuration 111111 3' yields 'P1DT6H51M'
     # Depends: date 8 (gnucoreutils), yell, 
-    local returnState ARG1 ARG2 remainder precision witherPrecision
+    local returnState argSeconds argPrecision remainder precision witherPrecision
     local fullYears fullMonths fullDays fullHours fullMinutes fullSeconds
     local displayYears displayMonths displayDays displayHours displayMinutes displaySeconds
     local hasYears hasMonths hasDays hasHours hasMinutes hasSeconds
     
-    ARG1="$1";
-    ARG2="$2";
+    argSeconds="$1"; # read arg1 (seconds)
+    argPrecision="$2"; # read arg2 (precision)
     precision=2; # set default precision
-    returnState="true"; # set default return state
 
     # Check that between one and two arguments is supplied
     if ! { [[ $# -ge 1 ]] && [[ $# -le 2 ]]; }; then
        yell "ERROR:Invalid number of arguments:$# . Exiting.";
-       returnState="ERROR_INPUT"; fi
+       returnState="error_input"; fi
 
-    # Check that arg1 provided
+    # Check that argSeconds provided
     if [[ $# -ge 1 ]]; then
-       ## Check that arg1 is a positive integer
-       if [[ "$ARG1" =~ ^[[:digit:]]+$ ]]; then
+       ## Check that argSeconds is a positive integer
+       if [[ "$argSeconds" =~ ^[[:digit:]]+$ ]]; then
            :
        else
-           yell "ERROR:ARG1 not a digit.";
-           returnState="ERROR_INPUT";
+           yell "ERROR:argSeconds not a digit.";
+           returnState="error_input";
        fi
     else
        yell "ERROR:No argument provided. Exiting.";
        exit 1;
     fi
 
-    # Consider whether arg2 was provided
+    # Consider whether argPrecision was provided
     if  [[ $# -eq 2 ]]; then
-       # Check that the second arg is a positive integer
-       if [[ "$ARG2" =~ ^[[:digit:]]+$ ]] && [[ "$ARG2" -gt 0 ]]; then
-       precision="$ARG2";
+       # Check that argPrecision is a positive integer
+       if [[ "$argPrecision" =~ ^[[:digit:]]+$ ]] && [[ "$argPrecision" -gt 0 ]]; then
+       precision="$argPrecision";
        else
-           yell "ERROR:ARG2 not a positive integer. (is $ARG2 ). Leaving early.";
-           returnState="ERROR_INPUT";
+           yell "ERROR:argPrecision not a positive integer. (is $argPrecision ). Leaving early.";
+           returnState="error_input";
        fi;
     else
        :
     fi;
     
-    remainder="$ARG1" ; # seconds
+    remainder="$argSeconds" ; # seconds
     ## Calculate full years Y, update remainder
     fullYears=$(( remainder / (365*24*60*60) ));
     remainder=$(( remainder - (fullYears*365*24*60*60) ));
@@ -503,8 +505,6 @@ timeDuration(){
     fi;
     if $witherPrecision; then ((precision--)); fi;
 
-
-
     ## Determine whether or not the "T" separator is needed to separate date and time elements
     if ( $displayHours || $displayMinutes || $displaySeconds); then
        displayDateTime="true"; else displayDateTime="false"; fi
@@ -527,14 +527,17 @@ timeDuration(){
        OUTPUT=$OUTPUT$fullSeconds"S"; fi
 
     ## Output duration string to stdout
-    if [[ "$returnState" = "true" ]]; then echo "$OUTPUT"; fi
+    echo "$OUTPUT" && returnState="true";
 
     #===Determine function return code===
     if [ "$returnState" = "true" ]; then
        return 0;
-    else
-       echo "$returnState" 1>&2;
+    elif [ "$returnState" = "error_input" ]; then
+       yell "ERROR:input";
        return 1;
+    else
+       yell "ERROR:Unknown";
+       return 2;
     fi
 
 } # Get duration (ex: PT10M4S )
@@ -667,6 +670,7 @@ checkMakeTar() {
 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]...)
+    # Version: 1.0.0
     # Input: arg1: data to be written
     #        arg2: file name of file to be inserted into tar
     #        arg3: tar archive path (must exist first)
@@ -680,8 +684,8 @@ appendArgTar(){
     # Depends: bash 5
 
     # Save function name
-    local FN="${FUNCNAME[0]}"
-    yell "DEBUG:STATUS:$FN:Finished appendArgTar()."
+    local FN="${FUNCNAME[0]}";
+    #yell "DEBUG:STATUS:$FN:Finished appendArgTar()."
     
     # Set file name
     if ! [ -z "$2" ]; then FILENAME="$2"; else yell "ERROR:$FN:Not enough arguments."; exit 1; fi
@@ -698,20 +702,21 @@ appendArgTar(){
     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 "STATUS:$FN:CMD1:$CMD1"
-    yell "STATUS:$FN:CMD2:$CMD2"
-    yell "STATUS:$FN:CMD3:$CMD3"
-    yell "STATUS:$FN:CMD4:$CMD4"
-    yell "STATUS:$FN:FILENAME:$FILENAME"
-    yell "STATUS:$FN:TAR_PATH:$TAR_PATH"
-    yell "STATUS:$FN:TMP_DIR:$TMP_DIR"
+    # # Debug
+    # yell "DEBUG:STATUS:$FN:CMD1:$CMD1"
+    # yell "DEBUG:STATUS:$FN:CMD2:$CMD2"
+    # yell "DEBUG:STATUS:$FN:CMD3:$CMD3"
+    # yell "DEBUG:STATUS:$FN:CMD4:$CMD4"
+    # yell "DEBUG:STATUS:$FN:FILENAME:$FILENAME"
+    # yell "DEBUG:STATUS:$FN:TAR_PATH:$TAR_PATH"
+    # yell "DEBUG:STATUS:$FN:TMP_DIR:$TMP_DIR"
+    
     # 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";
-    yell "DEBUG:STATUS:$FN:Finished appendArgTar()."
+    #yell "DEBUG:STATUS:$FN:Finished appendArgTar()."
 } # Append Bash var to file appended to Tar archive
 magicWriteVersion() {
     # Desc: Appends time-stamped VERSION to PATHOUT_TAR
@@ -728,17 +733,17 @@ magicWriteVersion() {
 
     # Gather VERSION data in CONTENT_VERSION
     CONTENT_VERSION="SCRIPT_VERSION=$SCRIPT_VERSION";
-    #CONTENT_VERSION="$CONTENT_VERSION""\n";
-    CONTENT_VERSION="$CONTENT_VERSION""\n""SCRIPT_NAME=$SCRIPT_NAME";
-    CONTENT_VERSION="$CONTENT_VERSION""\n""SCRIPT_URL=$SCRIPT_URL";
-    CONTENT_VERSION="$CONTENT_VERSION""\n""AGE_VERSION=$AGE_VERSION";
-    CONTENT_VERSION="$CONTENT_VERSION""\n""AGE_URL=$AGE_URL";
-    CONTENT_VERSION="$CONTENT_VERSION""\n""DATE=$(date --iso-8601=seconds)";
-    CONTENT_VERSION="$CONTENT_VERSION""\n""HOSTNAME=$SCRIPT_HOSTNAME";
+    #CONTENT_VERSION="$CONTENT_VERSION""\\n";
+    CONTENT_VERSION="$CONTENT_VERSION""\\n""SCRIPT_NAME=$SCRIPT_NAME";
+    CONTENT_VERSION="$CONTENT_VERSION""\\n""SCRIPT_URL=$SCRIPT_URL";
+    CONTENT_VERSION="$CONTENT_VERSION""\\n""AGE_VERSION=$AGE_VERSION";
+    CONTENT_VERSION="$CONTENT_VERSION""\\n""AGE_URL=$AGE_URL";
+    CONTENT_VERSION="$CONTENT_VERSION""\\n""DATE=$(date --iso-8601=seconds)";
+    CONTENT_VERSION="$CONTENT_VERSION""\\n""HOSTNAME=$SCRIPT_HOSTNAME";
     ## Add list of recipient pubkeys
     for pubkey in "${recPubKeysValid[@]}"; do
        ((pubKeyIndex++))
-       CONTENT_VERSION="$CONTENT_VERSION""\n""PUBKEY_$pubKeyIndex=$pubkey";
+       CONTENT_VERSION="$CONTENT_VERSION""\\n""PUBKEY_$pubKeyIndex=$pubkey";
     done
     ## Process newline escapes
     CONTENT_VERSION="$(echo -e "$CONTENT_VERSION")"
@@ -766,7 +771,7 @@ magicWriteBuffer() {
     appendArgTar "$bufferBash" "$FILEOUT_KML" "$PATHOUT_TAR" "$DIR_TMP" "$CMD_CONV_KML" "$CMD_COMPRESS" "$CMD_ENCRYPT"; # Write KML file
     # Remove secured chunks from DIR_TMP
     try rm "$PATHOUT_NMEA" "$PATHOUT_GPX" "$PATHOUT_KML";
-    yell "DEBUG:STATUS:$FN:Finished magicWriteBuffer().";
+    yell "DEBUG:STATUS:$FN:Finished magicWriteBuffer().";
 } # bkgpslog write function
 
 main() {