summaryrefslogtreecommitdiffstats
path: root/sub.sh
diff options
context:
space:
mode:
authorSadeep Madurange <sadeep@asciimx.com>2026-08-02 21:16:34 +0800
committerSadeep Madurange <sadeep@asciimx.com>2026-08-02 21:16:34 +0800
commite6bcc2276b8c06190229159ff990b1a0dd2b267d (patch)
tree53d9419a00c96b67356b106dfc3cf0a306fd4eb2 /sub.sh
parent1035560298d8e5ff0cd0ccde433aed624c546604 (diff)
downloadlex-e6bcc2276b8c06190229159ff990b1a0dd2b267d.tar.gz
Rename to pub/sub.
Diffstat (limited to 'sub.sh')
-rwxr-xr-xsub.sh70
1 files changed, 70 insertions, 0 deletions
diff --git a/sub.sh b/sub.sh
new file mode 100755
index 0000000..1fa4894
--- /dev/null
+++ b/sub.sh
@@ -0,0 +1,70 @@
+#!/bin/sh
+
+REMOTE_HOST="${FIFO_REMOTE_HOST:-lex-queue}"
+REMOTE_FIFO="${FIFO_REMOTE_FIFO:-/tmp/job_queue.txt}"
+TARGET_DIR="${FIFO_TARGET_DIR:-/home/sadeep/lex}"
+
+# Ensure the queue file exists
+ssh -n "$REMOTE_HOST" "touch \"$REMOTE_FIFO\"" || {
+ echo "[$(date '+%H:%M:%S')] ERROR: Failed to reach remote host or init queue" >&2
+ exit 1
+}
+
+echo "[$(date '+%H:%M:%S')] Listening to remote queue '$REMOTE_FIFO' on $REMOTE_HOST..."
+
+while true; do
+ msg=$(ssh -n "$REMOTE_HOST" "
+ if [ -s \"$REMOTE_FIFO\" ]; then
+ head -n 1 \"$REMOTE_FIFO\"
+ ed -s \"$REMOTE_FIFO\" <<'EOF' >/dev/null 2>&1
+1d
+w
+q
+EOF
+ fi
+ ")
+
+ if [ -z "$msg" ]; then
+ sleep 1
+ continue
+ fi
+
+ # Log formatted line capped at 72 chars
+ log_line="[$(date '+%H:%M:%S')] Processing message: ${msg}"
+ if [ ${#log_line} -gt 72 ]; then
+ printf "[%s] Processing message: %.38s...\n" "$(date '+%H:%M:%S')" "$msg"
+ else
+ echo "$log_line"
+ fi
+
+ # Execute ./lex locally into RAM
+ output=$(./lex "$msg" 2>/dev/null)
+
+ if [ -z "$output" ]; then
+ echo "[$(date '+%H:%M:%S')] ERROR: ./lex returned empty response"
+ continue
+ fi
+
+ # Extract first word in-memory and convert to lowercase
+ raw_word=$(printf '%s' "$output" | awk 'NR==1{print $1; exit}')
+ first_word=$(printf '%s' "$raw_word" | tr '[:upper:]' '[:lower:]')
+
+ if [ -z "$first_word" ]; then
+ echo "[$(date '+%H:%M:%S')] ERROR: Invalid response (no first word)."
+ continue
+ fi
+
+ target_file="${TARGET_DIR}/${first_word}.txt"
+ temp_target="${TARGET_DIR}/${first_word}.tmp"
+
+ # Stream RAM payload to remote temp file and atomically rename
+ if printf '%s\n' "$output" \
+ | fold -s -w 72 \
+ | ssh "$REMOTE_HOST" "cat > \"$temp_target\" && mv -f \"$temp_target\" \"$target_file\""; then
+ echo "[$(date '+%H:%M:%S')] OK: Saved to $target_file"
+ else
+ echo "[$(date '+%H:%M:%S')] ERROR: Failed processing '$first_word'"
+ fi
+
+done
+