Merge branch 'develop' into feature/bash-logging-filter/BK-2020-02
authorSteven Baltakatei Sandoval <baltakatei@gmail.com>
Fri, 10 Jul 2020 05:42:25 +0000 (05:42 +0000)
committerSteven Baltakatei Sandoval <baltakatei@gmail.com>
Fri, 10 Jul 2020 05:42:25 +0000 (05:42 +0000)
exec/bklog [new file with mode: 0644]

diff --git a/exec/bklog b/exec/bklog
new file mode 100644 (file)
index 0000000..b908ad9
--- /dev/null
@@ -0,0 +1,66 @@
+#!/bin/bash
+# Desc: Compresses, encrypts, and writes stdin every 5 seconds
+
+#==BEGIN Define script parameters==
+#===BEGIN Initialize variables===
+
+# Logging Behavior parameters
+scriptTTL_TE="day"; # Time element at the end of which script terminates
+scriptTTL="15"; # (temp) Time (seconds) until script terminates
+bufferTTL="5"; # Time-to-live (seconds) for each buffer round
+dirTempDefault="/dev/shm"; # Default parent of working directory
+
+# Script Metadata
+scriptVersion="0.1.1";          # Define version of script.
+scriptName="bklog";             # Define basename of script file.
+PATH="$HOME/.local/bin:$PATH"; # Add "$(systemd-path user-binaries)" path in case user apps saved there
+
+# Arrays
+declare -a buffer # Initialize buffer array
+
+# Variables
+
+#===END Initialize variables===
+
+#===BEGIN Declare local script functions===
+yell() { echo "$0: $*" >&2; }      #o Yell, Die, Try Three-Fingered Claw technique
+die() { yell "$*"; exit 111; }     #o Ref/Attrib: https://stackoverflow.com/a/25515370
+try() { "$@" || die "cannot $*"; } #o
+magicProcessWriteBuffer() {
+    printf "%s\\n" "${buffer[@]}" | cat | cat | cat >> "/dev/shm/$(date +%s)..bkFreqWrite-output1.txt";
+    printf "%s\\n" "${buffer[@]}" | cat | cat | cat >> "/dev/shm/$(date +%s)..bkFreqWrite-output2.txt";
+    printf "%s\\n" "${buffer[@]}" | cat | cat | cat >> "/dev/shm/$(date +%s)..bkFreqWrite-output3.txt";
+} # Process and Write buffer
+main() {
+    bufferRound=0;
+    # Run until script TTL seconds pass
+    while [[ $SECONDS -lt "scriptTTL" ]]; do
+       bufferTOD="$((SECONDS + bufferTTL))";
+       lineCount=0;
+       # Consume stdin to fill buffer until buffer time-of-death (TOD) arrives
+       while read -r -t "$bufferTTL" line && [[ $SECONDS -lt "$bufferTOD" ]]; do
+           # Append line to buffer array
+           buffer+=("$line");
+           echo "DEBUG:Processing line:$lineCount";
+           echo "DEBUG:Current line   :$line";
+           echo "DEBUG:buf elem count :${#buffer[@]}";
+           ((lineCount++));
+       done;
+       # Export buffer to asynchronous processing.
+       magicProcessWriteBuffer &
+       unset buffer; # Clear buffer array for next bufferRound
+       # Increment buffer round
+       ((bufferRound++));
+    done;
+}
+
+#===END Declare local script functions===
+#==END Define script parameters==
+
+#==BEGIN Perform work and exit==
+main "$@" # Run main function.
+exit 0;
+#==END Perform work and exit==
+
+# Author: Steven Baltakatei Sandoval;
+# License: GPLv3+