mostly fixes, some improvements
[distro-setup] / system-status
index 3513c90863631bcc2bf20e93e6f9afaa30e7e646..cd603ca57e4f982e149107d2aef856ccffb46451 100755 (executable)
@@ -3,7 +3,8 @@
 # SPDX-License-Identifier: AGPL-3.0-or-later
 
 # usage: runs once every 15 seconds unless any args are passed, or we
-# then just runs once. On battery power, run once per minute.
+# then just runs once and have verbose output. On battery power, run
+# once per minute.
 
 if [ -z "$BASH_VERSION" ]; then echo "error: shell is not bash" >&2; exit 1; fi
 
@@ -122,6 +123,54 @@ write-status() {
     # /a gets remounted due to btrbk, ignore error code for file doesnt exist
     source /a/bin/bash_unpublished/source-state || [[ $? == 1 ]]
   fi
+
+
+  ## check if last snapshot was recent
+  old_snap_limit=$(( 3 * 60 * 60 ))
+  for vol in a o q; do
+    case $vol in
+      o) btrbk_root=/mnt/o/btrbk ;;
+      *) btrbk_root=/mnt/root/btrbk ;;
+    esac
+    # this section generally copied from btrbk scripts, but
+    # this part modified to speed things up by about half a second.
+    # I'm not sure if its quite as reliable, but it looks pretty safe.
+    # Profiled it using time and also adding to the top of the file:
+    # set -x
+    # PS4='+ $(date "+%2N") '
+    # allow failure in case there are no snapshots yet.
+    # shellcheck disable=SC2012
+    shopt -u nullglob
+    files=($btrbk_root/$vol.20*)
+    shopt -s nullglob
+    snaps=()
+    if (( ${#files[@]} )); then
+      snaps=($(ls -1avdr "${files[@]}" 2>/dev/null |head -n1 || : ))
+    fi
+    now=$EPOCHSECONDS
+    maxtime=0
+    for s in ${snaps[@]}; do
+      file=${s##*/}
+      t=$(date -d $(sed -r  's/(.{4})(..)(.{5})(..)(.*)/\1-\2-\3:\4:\5/' <<<${file#$vol.}) +%s)
+      if (( t > maxtime )); then
+        maxtime=$t
+      fi
+    done
+    snapshotmsg=
+    last_snap_age=$(( now - maxtime ))
+    last_snap_hours=$(( last_snap_age / 60 / 60 ))
+    if (( last_snap_age > old_snap_limit )); then
+      chars+=(OLD-SNAP-${last_snap_hours}h)
+      snapshotmsg="/$vol snapshot older than 4 hours"
+      if [[ $MAIL_HOST == "$HOSTNAME" ]]; then
+        p "$snapshotmsg" | lo -1 old-snapshot
+      fi
+      # not bothering to get info on all volumes if we find an old one.
+      break
+    fi
+  done
+
+
   if [[ $MAIL_HOST == "$HOSTNAME" ]]; then
 
     bouncemsg=
@@ -150,38 +199,6 @@ write-status() {
     fi
     p "$bbkmsg" | lo -480 btrbk.timer
 
-    ## check if last snapshot was within an hour
-    vol=o
-    # this section generally copied from btrbk scripts, but
-    # this part modified to speed things up by about half a second.
-    # I'm not sure if its quite as reliable, but it looks pretty safe.
-    # Profiled it using time and also adding to the top of the file:
-    # set -x
-    # PS4='+ $(date "+%2N") '
-    # allow failure in case there are no snapshots yet.
-    # shellcheck disable=SC2012
-    shopt -u nullglob
-    files=(/mnt/o/btrbk/$vol.20*)
-    shopt -s nullglob
-    snaps=()
-    if (( ${#files[@]} )); then
-      snaps=($(ls -1avdr "${files[@]}" 2>/dev/null |head -n1 || : ))
-    fi
-    now=$EPOCHSECONDS
-    maxtime=0
-    for s in ${snaps[@]}; do
-      file=${s##*/}
-      t=$(date -d $(sed -r  's/(.{4})(..)(.{5})(..)(.*)/\1-\2-\3:\4:\5/' <<<${file#$vol.}) +%s)
-      if (( t > maxtime )); then
-        maxtime=$t
-      fi
-    done
-    snapshotmsg=
-    if (( maxtime < now - 4*60*60 )); then
-      chars+=(OLD-SNAP)
-      snapshotmsg="/o snapshot older than 4 hours"
-    fi
-    p "$snapshotmsg" | lo -1 old-snapshot
 
 
     # commented out, only using timetrap retrospectively.
@@ -267,6 +284,7 @@ write-status() {
 
   begin=false
 
+  # todo: make this robust to the case of /a not being mounted
   if ! make -C /b/ds -q ~/.local/distro-begin 2>/dev/null || [[ $(<~/.local/distro-begin) != 0 ]]; then
     begin=true
   fi
@@ -284,6 +302,7 @@ write-status() {
   elif $end; then
     chars+=(DE)
   else
+    source /a/bin/ds/script-files
     f=~/.local/conflink
     # shellcheck disable=SC2043
     for _ in 1; do
@@ -307,7 +326,7 @@ write-status() {
         done
 
         # Just because i forget a lot, -mmin -NUM means files modified <= NUM minutes ago
-        if (( fmin < 0 )) && [[ $(find ${all_dirs[@]} -mmin $fmin -type f -print -quit 2>/dev/null) ]]; then
+        if (( fmin < 0 )) && [[ $(find ${all_my_scripts[@]} ${all_dirs[@]} -mmin $fmin -type f -print -quit 2>/dev/null) ]]; then
           v conflink newer filesystem files
           chars+=(CONFLINK)
           break