#! /usr/bin/awk -f BEGIN { cpufile = "/proc/stat"; memfile = "/proc/meminfo"; uptimefile = "/proc/uptime"; cpu_period = 2; uptime_period = 60; uptime_counter = 0; updates_downcounter = 0; updates_command = "aptitude search ~U -F %p --disable-columns | wc -l"; while (1) { # updates if (updates_downcounter == 0) { nexttime = mktime(strftime("%Y %m %d") " 09 00 00"); if (nexttime < systime()) nexttime += 24*3600; updates_downcounter = int((nexttime - systime()) / cpu_period); updates_command | getline updates; if (updates == 0) updates = "up-to-date" else updates = "\005{Y}" updates "\005{-} updates" close(updates_command); } updates_downcounter--; # cpu getline < cpufile; u=$2-up; n=$3-np; s=$4-sp; i=$5-ip; w=$6-wp; q=$7-qp; f=$8-fp; cpu = sprintf("%3.0f",(u+n+s)/(u+n+s+i+w+q+f)*100); up=$2;np=$3;sp=$4;ip=$5;wp=$6;qp=$7;fp=$8; close(cpufile); # memory avail = -1; cached = -1; buffers = 0; while (avail == -1 && cached == -1) { getline < memfile; if ($1 == "MemTotal:") total=$2; if ($1 == "MemFree:") free=$2; if ($1 == "MemAvailable:") avail=$2; if ($1 == "Buffers:") buffers=$2; if ($1 == "Cached:") cached=$2; } if (avail == -1) avail = free + buffers + cached; mem = sprintf("%.0f", (total - avail) / total * 100); close(memfile); # uptime if (uptime_counter * cpu_period == uptime_period) uptime_counter = 0; if (uptime_counter == 0) { getline < uptimefile if ($1 > 86400) uptime = sprintf("\005{Y}%d\005{-}d \005{Y}%d\005{-}h", $1/86400, $1%86400/3600); else if ($1 > 3600) uptime = sprintf("\005{Y}%d\005{-}h \005{Y}%d\005{-}m", $1/3600, $1%3600/60); else uptime = sprintf("\005{Y}%d\005{-}m", $1/60); close(uptimefile); } uptime_counter++; printf "%s \005{w}|\005{-} cpu\005{Y}%s\005{-}%% \005{w}|\005{-} mem \005{Y}%s\005{-}%% \005{w}|\005{-} up %s\n", updates, cpu, mem, uptime; if (system(sprintf("sleep %d", cpu_period)) != 0) break } exit }