Add percentage of max to tdu
[khome.git] / home / lib / login_functions.sh
index 2b985e6..8e25bc0 100644 (file)
@@ -140,17 +140,29 @@ top_commands() {
 # TODO: Consider using numfmt instead of awk
 tdu() {
     du "$1" \
-    | sort -n -k 1 \
-    | tail -50 \
     | awk '
         {
             size = $1
             path = $0
             sub("^" $1 "\t+", "", path)
-            gb = size / 1024 / 1024
-            printf("%f\t%s\n", gb, path)
-        }' \
-    | cut -c 1-115
+            paths[path] = size
+            if (size > max)
+                max = size
+        }
+
+        END {
+            for (path in paths) {
+                size = paths[path]
+                pct = 100 * (size / max)
+                gb = size / 1024 / 1024
+                printf("%6.2f %3d%% %s\n", gb, pct, path)
+            }
+        }
+    ' \
+    | sort -r -n -k 1 \
+    | head -50 \
+    | tac
+    # A slight optimization: head can exit before traversing the full input.
 }
 
 # Top Disk-Using Files
@@ -225,8 +237,9 @@ man() {
     command man "$@"
 }
 
-experiment() {
-    cd "$(~/bin/experiment $@)" || kill -INT $$
+# new experiment
+x() {
+    cd "$(~/bin/x $@)" || kill -INT $$
 }
 
 hump() {
@@ -234,7 +247,7 @@ 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() {
@@ -263,7 +276,10 @@ yt_video() {
 }
 
 gh_fetch_repos() {
-    curl "https://api.github.com/$1/$2/repos?page=1&per_page=10000"
+    local -r user_type="$1"
+    local -r user_name="$2"
+
+    curl "https://api.github.com/$user_type/$user_name/repos?page=1&per_page=10000"
 }
 
 gh_clone() {
@@ -428,6 +444,10 @@ flat_top_5() {
         '
 }
 
+internet_addr() {
+    curl --silent --show-error --max-time "${1:=1}" 'https://api.ipify.org' 2>&1
+}
+
 status_batt() {
     case "$(uname)" in
         'Linux')
@@ -536,7 +556,22 @@ status() {
 
     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 '
@@ -584,21 +619,36 @@ status() {
 
     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}<->"
 
This page took 0.022544 seconds and 4 git commands to generate.