fixes
[distro-setup] / system-status
index 9d9049ef93a30bd59a9d64bae545dcbb7e49b9f2..b31032ca1b8347a693767494c43f34eff197bbe2 100755 (executable)
@@ -127,48 +127,43 @@ write-status() {
 
   ## 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 -s nullglob
-    files=($btrbk_root/$vol.20*)
-    shopt -u nullglob
-    if (( ! ${#files[@]} )); then
-      continue
-    fi
-    snaps=($(ls -1avdr "${files[@]}" 2>/dev/null |head -n1 || : ))
-    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
+  vol=o
+  btrbk_root=/mnt/o/btrbk
+  # 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 -s nullglob
+  files=($btrbk_root/$vol.20*)
+  shopt -u nullglob
+  if (( ! ${#files[@]} )); then
+    continue
+  fi
+  snaps=($(ls -1avdr "${files[@]}" 2>/dev/null |head -n1 || : ))
+  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.
+  fi
 
 
   if [[ $MAIL_HOST == "$HOSTNAME" ]]; then
@@ -263,13 +258,35 @@ write-status() {
   fi
   p $var_mail_msg | loday -1 var_mail
 
-  # early in install process, we dont have permission yet for exiqgrep.
-  # 1100 helps allow for system restarts
-  qlen=$(/usr/sbin/exiqgrep -o 1100 -c -b | awk '{print $1}') ||:
+  # Note, early in install process, we dont have permission yet for exiqgrep.
+  #
+  # todo: don't do this every 15 seconds, more like once every 2 minutes to
+  # save cpu cycles.
+  #
+  # 2400 = 40 mins. This should allow for system restarts, and
+  # 30 minute message delay plus 10 minute queu runs.
+  qlen=$(/usr/sbin/exiqgrep -o 2400 -c -b | awk '{print $1}') ||:
   qmsg=
   if ((qlen)); then
-    qmsg="queue length $qlen"
-    chars+=("q $qlen")
+    # Do sending of long delayed messages, and dont count them in our queue warnings.
+    for mid in $(exiqgrep -o 2400 -zi); do
+      if exim -Mvh $mid | awk 'tolower($2) == "fdate:"' | grep -q .; then
+        qlen=$(( qlen - 1 ))
+        if (( $(date -d "$(exim -Mset $mid -be <<<'$h_date:' | sed -n 's/^> *//;/./p')" +%s) < EPOCHSECONDS )); then
+          if ip a show veth0-mail &>/dev/null; then
+            pid=$(pgrep -f "/usr/sbin/exim4 -bd -q30m -C /etc/exim4/my.conf"|head -n1);
+            nsenter -t $pid -n -m /usr/sbin/exim4 -C /etc/exim4/my.conf -M $mid
+          else
+            /usr/sbin/exim4 -M $mid
+          fi
+        fi
+      fi
+    done
+
+    if ((qlen)); then
+      qmsg="queue length $qlen"
+      chars+=("q $qlen")
+    fi
   fi
   case $HOSTNAME in
     # No point in emailing about the mailq on a host where we don't
@@ -388,7 +405,7 @@ mute() {
   local locked
   export DISPLAY=:0
   locked=false
-  if lock_info=$(xscreensaver-command -timer); then
+  if lock_info=$(xscreensaver-command -time); then
     if [[ $lock_info != *non-blanked* ]]; then
       locked=true
     fi
@@ -400,6 +417,8 @@ mute() {
   if $locked && (( mdiff < 6 || mdiff > 21 )); then
     case $(pactl get-sink-mute @DEFAULT_SINK@ | awk '{print $2}') in
       no)
+        # for log purposes
+        echo unmuted
         pactl set-sink-mute @DEFAULT_SINK@ true
         ;;
     esac
@@ -407,6 +426,8 @@ mute() {
   if ! $locked && ((  mdiff > 6 || mdiff < 12  )) && [[ ! -e /tmp/ianknap ]]; then
     case $(pactl get-sink-mute @DEFAULT_SINK@ | awk '{print $2}') in
       yes)
+        # for log purposes
+        echo muted
         pactl set-sink-mute @DEFAULT_SINK@ false
         ;;
     esac