mostly start using prometheus
[distro-setup] / brc2
diff --git a/brc2 b/brc2
index 6f0d016b935c58b2dd6a4605097317ca893fd6dc..9fa1010920e6767057a1699531c519423e973d4b 100644 (file)
--- a/brc2
+++ b/brc2
@@ -282,6 +282,26 @@ aclear() {
   system-status _
 }
 
+alerts() {
+  find /var/local/cron-errors /home/iank/cron-errors /sysd-mail-once-state -type f
+}
+ralerts() { # remote alerts
+  local ret shell
+  # this list is duplicated in check-remote-mailqs
+  for h in bk je li frodo kwwg x3wg x2wg kdwg sywg; do
+    echo $h:
+    shell="ssh $h"
+    if [[ $HOSTNAME == "${h%wg}" ]]; then
+      shell=
+    fi
+    ret=0
+    $shell find /var/local/cron-errors /home/iank/cron-errors /sysd-mail-once-state -type f || ret=$?
+    if (( ret )); then
+      echo ret:$ret
+    fi
+  done
+}
+
 ap() {
   # pushd in case current directory has an ansible.cfg file
   pushd /a/xans >/dev/null
@@ -630,6 +650,9 @@ digme() {
   digdiff @ns{1,2}.iankelling.org "$@"
 }
 
+tsr() { # ts run
+  "$@" |& ts || return $?
+}
 
 dup() {
   local ran_d
@@ -638,20 +661,20 @@ dup() {
   case $PS1 in
     *[\ \]]D\ *)
       pushd /
-      /b/ds/distro-begin || return $?
-      /b/ds/distro-end || return $?
+      /b/ds/distro-begin |& ts || return $?
+      /b/ds/distro-end |& ts || return $?
       popd
       ran_d=true
       ;;&
     *[\ \]]DB\ *)
       pushd /
-      /b/ds/distro-begin || return $?
+      /b/ds/distro-begin |& ts || return $?
       popd
       ran_d=true
       ;;
     *[\ \]]DE\ *)
       pushd /
-      /b/ds/distro-end || return $?
+      /b/ds/distro-end |& ts || return $?
       popd
       ran_d=true
       ;;&
@@ -1056,26 +1079,40 @@ lom() {
   local l base
   if [[ $1 == /* ]]; then
     base=${1##*/}
-    if mountpoint /mnt/$base; then
+    if mountpoint -q /mnt/$base; then
       return 0
     fi
-    l=$(sudo losetup -f)
-    sudo losetup $l $1
-    if ! sudo cryptsetup luksOpen $l $base; then
-      sudo losetup -d $l
-      return 1
+    l=$(losetup -j $1 | sed -rn 's/^([^ ]+): .*/\1/p' | head -n1 ||:)
+    if [[ ! $l ]]; then
+      l=$(sudo losetup -f)
+      m sudo losetup $l $1
+    fi
+    if ! sudo cryptsetup status /dev/mapper/$base &>/dev/null; then
+      if ! sudo cryptsetup luksOpen $l $base; then
+        m sudo losetup -d $l
+        return 1
+      fi
     fi
-    sudo mkdir -p /mnt/$base
-    sudo mount /dev/mapper/$base /mnt/$base
-    sudo chown $USER:$USER /mnt/$base
+    sudo mkdir -p /mnt/$base
+    sudo mount /dev/mapper/$base /mnt/$base
+    sudo chown $USER:$USER /mnt/$base
   else
     base=$1
     if mountpoint /mnt/$base &>/dev/null; then
-      sudo umount /mnt/$base
+      m sudo umount /mnt/$base
+    fi
+    if sudo cryptsetup status /dev/mapper/$base &>/dev/null; then
+      if ! m sudo cryptsetup luksClose /dev/mapper/$base; then
+        echo lom: failed cryptsetup luksClose /dev/mapper/$base
+        return 1
+      fi
+    fi
+    l=$(losetup -l --noheadings | awk '$6 ~ /\/'$1'$/ {print $1}')
+    if [[ $l ]]; then
+      m sudo losetup -d $l
+    else
+      echo lom: warning: no loopback device found
     fi
-    l=$(sudo cryptsetup status /dev/mapper/$base|sed -rn 's/^\s*device:\s*(.*)/\1/p')
-    sudo cryptsetup luksClose /dev/mapper/$base || return 1
-    sudo losetup -d $l
   fi
 }
 
@@ -1229,6 +1266,9 @@ ngo() {
 otp() {
   oathtool --totp -b "$*" | xclip -selection clipboard
 }
+j() {
+  "$@" |& pee "xclip -r -selection clipboard"
+}
 
 
 pakaraoke() {
@@ -1288,7 +1328,7 @@ pumpa() {
   # other tiling window managers in giving up on setting it at all
   #
   xprop -root -remove _NET_WORKAREA
-  command pumpa &r
+  command pumpa & r
 }
 
 # reviewboard, used at my old job
@@ -1491,7 +1531,7 @@ tm() {
   (sleep $(calc "$* * 60") && mpv --no-config --volume 50 /a/bin/data/alarm.mp3) > /dev/null 2>&1 &
 }
 
-trg() { transmission-remote-gtk&r; }
+trg() { transmission-remote-gtk & r; }
 trc() {
   # example, set global upload limit to 100 kilobytes:
   # trc -u 100
@@ -1535,11 +1575,11 @@ enn() {
 
 sdnbash() { # systemd namespace bash
   local unit=$1
-  m sudo nsenter -t $(systemctl status $unit | sed -n '/^ *Main PID:/s/[^0-9]//gp') -n -m sudo -u $USER -i bash
+  m sudo nsenter -t $(systemctl show --property MainPID --value $unit') -n -m sudo -u $USER -i bash
 }
 
 mailnnbash() {
-  m sudo nsenter -t $(systemctl status mailnn| sed -n '/^ *Main PID:/s/[^0-9]//gp') -n -m sudo -u $USER -i bash
+  m sudo nsenter -t $(systemctl show --property MainPID --value mailnn') -n -m sudo -u $USER -i bash
 }
 
 mailvpnbash() {
@@ -1550,7 +1590,7 @@ eximbash() {
 }
 spamnn() {
   local spamdpid
-  spamdpid=$(systemctl status spamassassin| sed -n '/^ *Main PID:/s/[^0-9]//gp')
+  spamdpid=$(systemctl show --property MainPID --value spamassassin)
   m sudo nsenter -t $spamdpid -n -m sudo -u Debian-exim spamassassin "$@"
 }
 unboundbash() {
@@ -1558,9 +1598,18 @@ unboundbash() {
 }
 
 mailnncheck() {
-  local pid ns mailnn
-  for p in mailnn mailvpn unbound dovecot spamassassin exim4 radicale; do
-    pid=$(s systemctl status $p| sed -n '/^ *Main PID:/s/[^0-9]//gp')
+  local p pid ns mailnn
+  # mailvpn would belong on the list if using openvpn
+  for p in mailnn unbound dovecot spamassassin exim4 radicale; do
+    case $p in
+      exim4|radicale)
+        pid=$(ps -eo pid,cgroup | grep /system.slice/$p.service | awk '{print $1}')
+        ;;
+      *)
+        pid=$(s systemctl show --property MainPID --value $p)
+        ;;
+    esac
+    echo p=$p pid=$pid
     if [[ ! $pid ]]; then
       echo failed to find pid for $p
       continue
@@ -1585,10 +1634,10 @@ vpncmd() {
   m sudo -E env "PATH=$PATH" nsenter -t $(pgrep -f "/usr/sbin/openvpn .* --config /etc/openvpn/.*client.conf") -n -m "$@"
 }
 vpnf() {
-  vpncmd sudo -E -u iank env "PATH=$PATH" abrowser -no-remote -P vpn &r
+  vpncmd sudo -E -u iank env "PATH=$PATH" abrowser -no-remote -P vpn & r
 }
 vpn2f() {
-  vpncmd sudo -u iank env "PATH=$PATH" abrowser -no-remote -P vpn2 &r
+  vpncmd sudo -u iank env "PATH=$PATH" abrowser -no-remote -P vpn2 & r
 }
 
 vpni() {