Shorten experiment to x
[khome.git] / home / lib / login_functions.sh
index c34263f..15f6e3c 100644 (file)
@@ -149,8 +149,7 @@ tdu() {
             sub("^" $1 "\t+", "", path)
             gb = size / 1024 / 1024
             printf("%f\t%s\n", gb, path)
-        }' \
-    | cut -c 1-115
+        }'
 }
 
 # Top Disk-Using Files
@@ -225,8 +224,9 @@ man() {
     command man "$@"
 }
 
-experiment() {
-    cd "$(~/bin/experiment $@)" || kill -INT $$
+# new experiment
+x() {
+    cd "$(~/bin/x $@)" || kill -INT $$
 }
 
 hump() {
@@ -234,13 +234,13 @@ hump() {
 }
 
 howto() {
-    cat "$(find  ~/Archives/Documents/HOWTOs -mindepth 1 -maxdepth 1 | sort | fzf)"
+    cat "$(find  ~/arc/doc/HOWTOs -mindepth 1 -maxdepth 1 | sort | fzf)"
 }
 
 _yt() {
     local -r base_dir="$1"
-    local -r opts="$2"
-    local -r uri="$3"
+    local -r uri="$2"
+    local -r opts="$3"
 
     local -r id=$(youtube-dlc --get-id "$uri")
     local -r title=$(youtube-dlc --get-title "$uri" | sed 's/[^A-Za-z0-9._-]/_/g')
@@ -254,7 +254,7 @@ _yt() {
 
 yt_audio() {
     local -r uri="$1"
-    _yt "${DIR_YOUTUBE_AUDIO}/individual" '-f 140' "$uri"
+    _yt "${DIR_YOUTUBE_AUDIO}/individual" "$uri" '-f 140'
 }
 
 yt_video() {
@@ -428,33 +428,40 @@ flat_top_5() {
         '
 }
 
-motd_batt() {
+internet_addr() {
+    curl --silent --show-error --max-time "${1:=1}" 'https://api.ipify.org' 2>&1
+}
+
+status_batt() {
     case "$(uname)" in
         'Linux')
-            upower --dump \
-            | awk '
-                /^Device:[ \t]+/ {
-                    device["path"] = $2
-                    next
-                }
-
-                /  battery/ && device["path"] {
-                    device["is_battery"] = 1
-                    next
-                }
-
-                /    percentage:/ && device["is_battery"] {
-                    device["battery_percentage"] = $2
-                    sub("%$", "", device["battery_percentage"])
-                    next
-                }
-
-                /^$/ {
-                    if (device["is_battery"] && device["path"] == "/org/freedesktop/UPower/devices/DisplayDevice")
-                        print device["battery_percentage"], 100, "batt"
-                    delete device
-                }
-            '
+            if which upower > /dev/null
+            then
+                upower --dump \
+                | awk '
+                    /^Device:[ \t]+/ {
+                        device["path"] = $2
+                        next
+                    }
+
+                    /  battery/ && device["path"] {
+                        device["is_battery"] = 1
+                        next
+                    }
+
+                    /    percentage:/ && device["is_battery"] {
+                        device["battery_percentage"] = $2
+                        sub("%$", "", device["battery_percentage"])
+                        next
+                    }
+
+                    /^$/ {
+                        if (device["is_battery"] && device["path"] == "/org/freedesktop/UPower/devices/DisplayDevice")
+                            print device["battery_percentage"], 100, "batt"
+                        delete device
+                    }
+                '
+            fi
         ;;
     esac
 }
@@ -463,7 +470,7 @@ indent() {
     awk -v unit="$1" '{printf "%s%s\n", unit, $0}'
 }
 
-motd() {
+status() {
     local -r indent_unit='    '
 
     uname -srvmo
@@ -504,7 +511,7 @@ motd() {
     (
         free | awk '$1 == "Mem:" {print $3, $2, "mem"}'
         df ~ | awk 'NR == 2 {print $3, $3 + $4, "disk"}'
-        motd_batt
+        status_batt
     ) \
     | bar_gauge -v width=60 -v pct=1 \
     | column -t \
@@ -514,14 +521,13 @@ motd() {
 
     printf '%smem by proc\n' "$indent_unit"
     ps -eo rss,cmd \
-    | awk '
+    | awk -v total="$(free | awk '$1 == "Mem:" {print $2; exit}')" '
         NR > 1 {
             rss = $1
             cmd = $2
             n = split(cmd, path, "/")  # _may_ be a path
             proc = path[n]
-            total += rss
-            by_proc[proc] = rss
+            by_proc[proc] += rss
         }
 
         END {
@@ -534,7 +540,22 @@ motd() {
 
     echo
 
+    printf '%sthermal\n' "$indent_unit"
+    for _dir in /sys/class/thermal/thermal_zone*
+    do
+        printf '%s %.2f C\n' \
+            $(cat "$_dir"/type) \
+            $(( $(cat "$_dir"/temp) / 1000 ))
+    done \
+    | column -t \
+    | indent "${indent_unit}${indent_unit}"
+
     echo 'net'
+    local -r internet_addr=$(internet_addr 0.5)
+    local -r internet_ptr=$(host -W 1 "$internet_addr" | awk 'NR == 1 {print $NF}' )
+
+    echo "${indent_unit}internet"
+    echo "${indent_unit}${indent_unit}$internet_addr  $internet_ptr"
     echo "${indent_unit}if"
     (ifconfig; iwconfig) 2> /dev/null \
     | awk '
@@ -582,21 +603,36 @@ motd() {
 
     echo "${indent_unit}-->"
 
-    printf '%sUDP: ' "${indent_unit}${indent_unit}"
-    sudo -n netstat -ulnp \
-    | awk 'NR > 2 {print $6}' \
-    | awk -F/ '{print $2}' \
-    | sort -u \
-    | xargs \
-    | column -t
-
-    printf '%sTCP: ' "${indent_unit}${indent_unit}"
-    sudo -n netstat -tlnp \
-    | awk 'NR > 2 {print $7}' \
-    | awk -F/ '{print $2}' \
-    | sort -u \
-    | xargs \
-    | column -t
+    sudo -n netstat -tulnp \
+    | awk -v indent="${indent_unit}${indent_unit}" '
+        NR > 2 && ((/^tcp/ && proc = $7) || (/^udp/ && proc = $6)) {
+           protocol = $1
+           addr = $4
+           port = a[split(addr, a, ":")]
+           name = p[split(proc, p, "/")]
+           names[name] = 1
+           protocols[protocol] = 1
+           if (!seen[protocol, name, port]++)
+               ports[protocol, name, ++seen[protocol, name]] = port
+       }
+
+       END {
+           for (protocol in protocols) {
+               printf "%s%s\t", indent, toupper(protocol)
+               for (name in names) {
+                   if (n = seen[protocol, name]) {
+                       sep = ""
+                       printf "%s:", name
+                       for (i = 1; i <= n; i++) {
+                           printf "%s%d", sep, ports[protocol, name, i]
+                           sep = ","
+                       }
+                       printf "  "
+                   }
+               }
+               printf "\n"
+           }
+       }'
 
     echo "${indent_unit}<->"
 
@@ -607,6 +643,8 @@ motd() {
     | sort -u \
     | xargs \
     | column -t
+
+    # TODO: iptables summary
 }
 
 ssh_invalid_attempts_from() {
@@ -637,7 +675,7 @@ loggers() {
             split($5, prog, "[")
             sub(":$", "", prog[1]) # if there were no [], than : will is left behind
             print prog[1]
-        }' /var/log/syslog \
+        }' /var/log/syslog /var/log/syslog.1 \
     | awk '
         {
             n = split($1, path, "/")  # prog may be in path form
@@ -650,6 +688,7 @@ loggers() {
             for (prog in count)
                 print count[prog], total, prog
         }' \
+    | sort -n -k 1 \
     | bar_gauge -v num=1 -v ch_right=' ' -v ch_left=' ' -v ch_blank=' ' \
     | column -t
 }
This page took 0.029603 seconds and 4 git commands to generate.