X-Git-Url: https://git.xandkar.net/?a=blobdiff_plain;f=home%2Flib%2Flogin_functions.sh;h=25775314d1c6b8d2ce71a0f43b26fd26c46adc55;hb=02f10c8b6438555ddc637e5f6bda840e0b6f06ae;hp=6b01d493c434ae6007432a38a332dd2f0c9c06c4;hpb=1c02c71424263761147345e5cb220879d76adc28;p=khome.git diff --git a/home/lib/login_functions.sh b/home/lib/login_functions.sh index 6b01d49..2577531 100644 --- a/home/lib/login_functions.sh +++ b/home/lib/login_functions.sh @@ -411,6 +411,23 @@ bar_gauge() { ' } +flat_top_5() { + sort -n -k 1 -r \ + | head -5 \ + | awk ' + { + cur = $1 + max = $2 + name = $3 + pct = cur / max * 100 + printf "%s%s %.2f%%", sep, name, pct + sep = ", " + } + + END {printf "\n"} + ' +} + motd_batt() { case "$(uname)" in 'Linux') @@ -455,13 +472,35 @@ motd() { echo - printf 'tmux: sessions %d, clients %d\n' \ + 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)" echo - echo 'Resources' + printf '%sprocs by user\n' "${indent_unit}" + ps -eo user \ + | awk ' + NR > 1 { + count_by_user[$1]++ + total++ + } + + END { + for (user in count_by_user) + print count_by_user[user], total, user + } + ' \ + | flat_top_5 \ + | indent "${indent_unit}${indent_unit}" + + echo + + echo 'resources' ( free | awk '$1 == "Mem:" {print $3, $2, "mem"}' df ~ | awk 'NR == 2 {print $3, $3 + $4, "disk"}' @@ -473,7 +512,29 @@ motd() { echo - echo 'Network' + printf '%smem by proc\n' "$indent_unit" + ps -eo rss,cmd \ + | awk ' + NR > 1 { + rss = $1 + cmd = $2 + n = split(cmd, path, "/") # _may_ be a path + proc = path[n] + total += rss + by_proc[proc] += rss + } + + END { + for (proc in by_proc) + print by_proc[proc], total, proc + } + ' \ + | flat_top_5 \ + | indent "${indent_unit}${indent_unit}" + + echo + + echo 'net' echo "${indent_unit}if" (ifconfig; iwconfig) 2> /dev/null \ | awk ' @@ -546,30 +607,31 @@ motd() { | sort -u \ | xargs \ | column -t +} - echo - - echo 'Process owners' - ps -eo user \ - | awk ' - NR > 1 { - count_by_user[$1]++ - total++ +ssh_invalid_attempts_from() { + awk ' + /: Invalid user/ && $5 ~ /^sshd/ { + u=$8 + addr=$10 == "port" ? $9 : $10 + max++ + curr[addr]++ } END { - for (user in count_by_user) - print count_by_user[user], total, user + for (addr in curr) + if ((c = curr[addr]) > 1) + print c, max, addr } ' \ - | sort -n -k 1 -r \ - | bar_gauge -v num=1 -v ch_left=' ' -v ch_right=' ' -v ch_blank=' ' \ - | column -t \ - | indent "${indent_unit}" - - echo + /var/log/auth.log \ + /var/log/auth.log.1 \ + | sort -n -k 1 \ + | bar_gauge -v width="$(stty size | awk '{print $2}')" -v num=1 -v ch_right=' ' -v ch_left=' ' -v ch_blank=' ' \ + | column -t +} - echo 'Loggers' +loggers() { awk ' { split($5, prog, "[") @@ -588,30 +650,6 @@ motd() { for (prog in count) print count[prog], total, prog }' \ - | sort -n -k 1 -r \ - | bar_gauge -v width=30 -v num=1 -v ch_left=' ' -v ch_right=' ' -v ch_blank=' ' \ - | column -t \ - | indent "${indent_unit}" -} - -ssh_invalid_attempts_from() { - awk ' - /: Invalid user/ && $5 ~ /^sshd/ { - u=$8 - addr=$10 == "port" ? $9 : $10 - max++ - curr[addr]++ - } - - END { - for (addr in curr) - if ((c = curr[addr]) > 1) - print c, max, addr - } - ' \ - /var/log/auth.log \ - /var/log/auth.log.1 \ - | sort -n -k 1 \ - | bar_gauge -v width="$(stty size | awk '{print $2}')" -v num=1 -v ch_right=' ' -v ch_left=' ' -v ch_blank=' ' \ + | bar_gauge -v num=1 -v ch_right=' ' -v ch_left=' ' -v ch_blank=' ' \ | column -t }