X-Git-Url: https://git.xandkar.net/?a=blobdiff_plain;f=home%2Flib%2Flogin_functions.sh;h=56e0c2b7a34457404fc23e26ea4e934bcaf783ec;hb=HEAD;hp=d585191429a29b9dcab4947dcc35bdd7fd83713d;hpb=a8c4d37067aaa05ecd492772675f5d0393960fd8;p=khome.git diff --git a/home/lib/login_functions.sh b/home/lib/login_functions.sh index d585191..56e0c2b 100644 --- a/home/lib/login_functions.sh +++ b/home/lib/login_functions.sh @@ -1,4 +1,4 @@ -# +#! /bin/bash ## open : string -> unit ## @@ -26,55 +26,31 @@ notify_done() { fi } -## p : string -> unit -p() { - awk \ - -v _s="$1" \ - ' - BEGIN {_s = tolower(_s)} - - # TODO fzf/dmenu select instead of searching: - /^[a-zA-Z]/ && tolower($1) ~ _s && NF >= 2 { - n++ - s = $1 - p = $NF - if (NF == 2) { - e = "" - u = "" - } else if (NF == 3) { - e = $2 - u = "" - } else { - e = $2 - u = $3 - } # TODO What would NF > 4 mean? - - printf("%d [O] s:\"%s\", e:\"%s\", u:\"%s\"\n", n, s, e, u) > "/dev/stderr" - if (match(u, "@")) { - tmp = e - e = u - u = tmp - printf("%d [C] s:\"%s\", e:\"%s\", u:\"%s\"\n", n, s, e, u) > "/dev/stderr" - } +_dl_script() { +cat << EOF +#! /bin/bash +wget -c \$(< ./url) +EOF +} - printf "%s", p # XXX Intentionally avoiding newline in the result. - } +dl() { + local -r name="$1" + local -r url="$2" - END { - if (n == 1) { - exit 0 - } else if (n == 0) { - printf "[ERROR] Found nothing.\n" > "/dev/stderr" - exit 1 - } else if (n > 1) { - # TODO fzf-select which of the records the user (ahem, me) wants. - printf "[WARNING] Found more than one record.\n" > "/dev/stderr" - exit 0 - } - } - ' \ - ~/._p/p \ - | xsel -i -b -t 30000 + local -r timestamp="$(date --iso-8601=ns)" + local -r dir="$HOME"/dl/adhoc/"$timestamp"--"$name" + local -r url_file_path="${dir}/url" + local -r dl_file_path="${dir}/dl" + + mkdir -p "$dir" + touch "$url_file_path" + if [ "$url" != '' ] + then + echo "$url" > "$url_file_path" + fi + _dl_script > "$dl_file_path" + chmod +x "$dl_file_path" + cd "$dir" } ## web search @@ -237,32 +213,12 @@ top_commands() { } ## Top Disk-Using directories -## TODO: Consider using numfmt instead of awk ## tdu : path-string -> (size:number * directory:path-string) list tdu() { local -r root_path="$1" - du "$root_path" \ - | awk ' - { - size = $1 - path = $0 - sub("^" $1 "\t+", "", path) - 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 \ + du -h "$root_path" \ + | sort -r -h -k 1 \ | head -50 \ | tac # A slight optimization: head can exit before traversing the full input. @@ -274,14 +230,8 @@ tduf() { find "$@" -type f -printf '%s\t%p\0' \ | sort -z -n -k 1 \ | tail -z -n 50 \ - | gawk -v RS='\0' ' - { - size = $1 - path = $0 - sub("^" $1 "\t+", "", path) - gb = size / 1024 / 1024 / 1024 - printf("%f\t%s\n", gb, path) - }' + | numfmt -z --to=iec \ + | tr '\0' '\n' } # Most-recently modified file system objects @@ -440,12 +390,12 @@ $(date '+%F %A') =============================================================================== ------------------------------------------------------------------------------- -TO FINISH TODAY +TODAY ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- -CURRENTLY IMPORTANT +CURRENT ------------------------------------------------------------------------------- @@ -655,11 +605,54 @@ status() { echo 'accounting' - printf '%stmux\n%ssessions %d, clients %d\n' \ - "$indent_unit" \ - "${indent_unit}${indent_unit}" \ - "$(tmux list-sessions 2> /dev/null | wc -l)" \ - "$(tmux list-clients 2> /dev/null | wc -l)" + # TODO Bring back seesion and client listing, but per server/socket. + printf '%stmux\n' "$indent_unit" + ps -eo comm,cmd \ + | awk ' + # Expecting lines like: + # "tmux: server tmux -L pistactl new-session -d -s pistactl" + # "tmux: client tmux -L foo" + # "tmux: client tmux -Lbar" + # "tmux: client tmux" + # "tmux: server tmux -L foo -S bar" <-- -S takes precedence + /^tmux:/ { + # XXX This of course assumes pervasive usage of -L + # TODO Handle -S + role=$2 + + split($0, sides_of_S, "-S") + split(sides_of_S[2], words_right_of_S, FS) + + split($0, sides_of_L, "-L") + split(sides_of_L[2], words_right_of_L, FS) + + if (words_right_of_S[1]) { + sock = "path." words_right_of_S[1] + } else if (words_right_of_L[1]) { + sock = "name." words_right_of_L[1] + } else { + sock = "default" + } + + roles[role]++ + socks[sock]++ + count[role, sock]++ + } + + END { + for (sock in socks) { + clients = count["client", sock] + printf "%s ", sock + if (clients) { + printf "<-> %d", clients + } + printf "\n" + } + printf "\n" + }' \ + | sort \ + | column -t \ + | indent "${indent_unit}${indent_unit}" echo @@ -790,6 +783,9 @@ status() { echo "${indent_unit}-->" + # TODO Populate pid->cmd dict from `ps -eo pid,comm` and lookup progs there + # since netstat -p output comes out truncated. + sudo -n netstat -tulnp \ | awk -v indent="${indent_unit}${indent_unit}" ' NR > 2 && ((/^tcp/ && proc = $7) || (/^udp/ && proc = $6)) {