Resurrect signal msg age in seconds
[khatus.git] / bin / khatus_show
index e43b556..66024e1 100755 (executable)
@@ -7,7 +7,7 @@ STATUS_DIR=$HOME/var/run/status
 STATUS_FILE__WIFI=$STATUS_DIR/wifi
 STATUS_FILE__ENERGY_NOTIFIED_BELLOW_HALF=$STATUS_DIR/notified_energy_bellow_half
 
-#load=$(cat /proc/loadavg | awk '{printf "%4.2f %4.2f %4.2f", $1, $2, $3}')
+load=$(awk '{printf("%4.2f", $1)}' /proc/loadavg)
 
 fan=$(awk '/^speed:/ {printf "%4d", $2}' /proc/acpi/ibm/fan)
 
@@ -22,10 +22,10 @@ memory=$(
             total=$2;
             used=$3;
             cache=$6;
-            file = "/home/siraaj/var/run/status/memory_used_percentage";
+            prev_file = "/home/siraaj/var/run/status/memory_used_percentage";
             curr = round(used / total * 100);
-            getline prev < file;
-            print curr > file;
+            getline prev < prev_file;
+            print curr > prev_file;
             if (curr > prev) {
                 direction = ">";
             } else if (curr < prev) {
@@ -38,28 +38,130 @@ memory=$(
 
 temp=$(awk 'NR == 1 {print $1 / 1000}' /sys/class/thermal/thermal_zone0/temp)
 
+disk_io=$(
+    awk '
+        {
+            bytes_per_sector = 512
+            bytes_per_unit   = 1024 * 1024
+
+            curr_sectors_read  = $3
+            curr_sectors_write = $7
+
+            prev_file_prefix        = "/home/siraaj/var/run/status/disk_io"
+            prev_sectors_read_file  = prev_file_prefix "_sectors_read"
+            prev_sectors_write_file = prev_file_prefix "_sectors_write"
+
+            getline prev_sectors_read  < prev_sectors_read_file
+            getline prev_sectors_write < prev_sectors_write_file
+
+            diff_read_sectors  = (curr_sectors_read  - prev_sectors_read)
+            diff_write_sectors = (curr_sectors_write - prev_sectors_write)
+
+            diff_read_bytes  = diff_read_sectors  * bytes_per_sector
+            diff_write_bytes = diff_write_sectors * bytes_per_sector
+
+            diff_read  = diff_read_bytes  / bytes_per_unit
+            diff_write = diff_write_bytes / bytes_per_unit
+
+            print curr_sectors_read  > prev_sectors_read_file
+            print curr_sectors_write > prev_sectors_write_file
+
+            printf("%0.3f▲ %0.3f▼\n", diff_write, diff_read);
+
+        }
+        ' /sys/block/dm-1/stat
+)
+
 disk=$(
     df \
-    | awk '
+    | awk -v disk_io="$disk_io" '
         function round(n) {return int(n + 0.5)}
 
         $1 == "/dev/mapper/kubuntu--vg-root" {
-            total = $2;
-            used  = $3;
-            file = "/home/siraaj/var/run/status/disk_space_used_percentage";
-            curr = round(used / total * 100);
-            getline prev < file;
-            print curr > file;
-            if (curr > prev) {
+            curr_perc = $5; sub("%$", "", curr_perc);
+            prev_perc_file = "/home/siraaj/var/run/status/disk_space_used";
+            getline prev_perc   < prev_perc_file;
+            print curr_perc > prev_perc_file;
+            if (curr_perc > prev_perc) {
                 direction = ">";
-            } else if (curr < prev) {
+            } else if (curr_perc < prev_perc) {
                 direction = "<";
             } else {
                 direction = "=";
             }
-            printf("%s%d%%", direction, curr);
+            printf("%s[%d%% %s]", direction, curr_perc, disk_io);
         }')
 
+network=$(
+    awk -v wifi_conn=$(cat $STATUS_FILE__WIFI) '
+        BEGIN {
+            bytes_per_unit = 1024 * 1024
+        }
+
+        FILENAME == "/proc/net/dev" && NR > 2 {
+            device     = $1; sub(":$", "", device);
+            curr_read  = $2;
+            curr_write = $10;
+
+            prev_file_prefix  = "/home/siraaj/var/run/status/io_net_" device;
+            prev_read_file  = prev_file_prefix "_read";
+            prev_write_file = prev_file_prefix "_write";
+
+            getline prev_read < prev_read_file;
+            getline prev_write < prev_write_file;
+
+            diff_read  = (curr_read  - prev_read ) / bytes_per_unit;
+            diff_write = (curr_write - prev_write) / bytes_per_unit;
+
+            print curr_read  > prev_read_file;
+            print curr_write > prev_write_file;
+
+            io_rates[device] = sprintf("%0.3f▲ %0.3f▼", diff_write, diff_read);
+
+            next;
+        }
+
+        /^[a-zA-Z0-9]/ {
+            interface = $1
+            interfaces[interface_count++] = interface
+        }
+
+        /^ +inet addr:/ {
+            split($2, addr, ":")
+            ipaddr = addr[2]
+            ipaddrs[interface] = ipaddr
+        }
+
+        END {
+            canvas = ""
+            i_last = length(ipaddrs)
+            for (interface in ipaddrs) {
+                #ipaddr = ipaddrs[interface]
+
+                if (++i_curr == i_last) {
+                    sep = ""
+                } else {
+                    sep = " |"
+                }
+
+                if (interface == "wlp3s0") {
+                    curr = wifi_conn " " io_rates[interface]
+                } else if (interface == "lo") {
+                    curr = interface " " io_rates[interface]
+                } else {
+                    curr = "e" ++eth_count " " io_rates[interface]
+                }
+
+                canvas = canvas " " curr sep
+            }
+            canvas = "[" canvas "]"
+            printf("%s", canvas)
+        }
+    ' \
+    /proc/net/dev \
+    <(ifconfig)
+)
+
 energy=$(
     upower -e \
     | grep battery \
@@ -124,8 +226,6 @@ volume_pactl=$(
 
 volume="[$volume_pactl]"
 
-wifi=$(cat $STATUS_FILE__WIFI)
-
 screen_brightness=$(
     max=$(cat /sys/class/backlight/acpi_video0/max_brightness)
     cur=$(cat /sys/class/backlight/acpi_video0/brightness)
@@ -225,7 +325,7 @@ else
     rm -f "$STATUS_FILE__ENERGY_NOTIFIED_BELLOW_HALF"
 fi
 
-weather="$(cat ~/var/run/metar-KJFK-decoded-temp-fahrenheit)°F"
+weather=$(awk 'NR == 1 {printf("%d°F", $1)}' ~/var/run/metar-KJFK-decoded-temp-fahrenheit)
 
 signal_last_msg_age=$(
     ls -lt --time-style=+%s $HOME/var/lib/signal/latest_message.json \
@@ -240,7 +340,7 @@ signal_last_msg_age=$(
         months  = days / 30;
         #fmt = "%.1f";
         fmt = "%d";
-        #printf(fmt " s\n", seconds);
+        printf(fmt " s\n", seconds);
         printf(fmt " m\n", minutes);
         printf(fmt " h\n", hours);
         printf(fmt " d\n", days);
@@ -253,31 +353,106 @@ signal_last_msg_age=$(
     | tr -d ' '
 )
 
+mpd_state=$(
+    echo 'status' \
+    | nc 127.0.0.1 6600 \
+    | awk '
+        {
+            status[$1] = $2
+        }
+
+        END {
+            state = status["state:"]
+            symbol = "-"
+            if (state == "play") {
+                symbol = "▶"
+            } else if (state == "pause") {
+                symbol = "❚❚"
+            } else if (state == "stop") {
+                symbol = "⬛"
+            }
+            printf("%s", symbol)
+        }
+        '
+)
+
+mpd_current=$(
+    echo 'currentsong' \
+    | nc 127.0.0.1 6600 \
+    | awk -v max_chars=10 '
+        /^OK/ {
+            next
+        }
+
+        {
+            key = $1
+            val = $2
+            for (i=3; i<=NF; i++) {val = val " " $i}
+            data[key] = val
+        }
+
+        END {
+            if (data["Name:"]) {
+                out = data["Name:"]
+            } else {
+                file = data["file:"]
+                last = split(file, parts, "/")
+                out = parts[last]
+            }
+            printf("%s", substr(out, 1, max_chars))
+        }
+        '
+)
+
+graphics_card=$(
+    nvidia-smi \
+        --format=csv,noheader,nounits \
+        --query-gpu=memory.total,memory.used,temperature.gpu \
+    | awk -F ',' '
+        {
+            mem_total = $1;
+            mem_used  = $2;
+            temp      = $3;
+            mem_used_percent = (100 * mem_used) / mem_total;
+            printf("[%d%% %dC]", mem_used_percent, temp);
+        }
+        '
+)
+
 echo \
 "\
  E$energy\
  \
  \
M$memory\
G=$graphics_card\
  \
  \
D$disk\
M$memory\
  \
  \
  C=[$cpu  ${temp}°C ${fan}rpm]\
  \
  \
S=$screen_brightness\
L=$load\
  \
  \
- V=$volume\
+ D$disk\
+ \
+ \
+ N:$network\
  \
  \
  B:$bluetooth_power\
  \
  \
- W:$wifi\
+ S=$screen_brightness\
+ \
+ \
+ V=$volume\
+ \
+ [$mpd_state $mpd_current]\
  \
+ $signal_last_msg_age\
  \
  $weather\
  \
This page took 0.040057 seconds and 4 git commands to generate.