- -v opt_prefixes_of_net_interfaces_to_show="$prefixes_of_net_interfaces_to_show" \
- '
- /^in:ENERGY/\
- {
- split_msg_parts()
- db["energy_state"] = $1
- db["energy_percentage"] = $2
- }
-
- /^in:MEMORY/\
- {
- split_msg_parts()
- db["memory_total"] = $1
- db["memory_used"] = $2
- }
-
- /^in:FAN +status:/\
- {
- split_msg_parts()
- db["fan_status"] = $2
- }
-
- /^in:FAN +speed:/\
- {
- split_msg_parts()
- db["fan_speed"] = $2
- }
-
- /^in:FAN +level:/\
- {
- split_msg_parts()
- db["fan_level"] = $2
- }
-
- /^in:TEMPERATURE/\
- {
- split_msg_parts()
- db["temperature"] = $1
- }
-
- /^in:LOAD_AVG/\
- {
- split_msg_parts()
- set_load_avg()
- }
-
- /^in:DISK_IO/\
- {
- split_msg_parts()
- set_disk_io()
- }
-
- /^in:DISK_SPACE/\
- {
- split_msg_parts()
- db["disk_space_used"] = msg_body
- }
-
- /^in:NET_ADDR_IO/\
- {
- split_msg_parts()
- set_net_addr_io()
- }
-
- /^in:NET_WIFI_STATUS/\
- {
- split_msg_parts()
- db["net_wifi_status"] = msg_body
- }
-
- /^in:BLUETOOTH_POWER/\
- {
- split_msg_parts()
- db["bluetooth_power"] = msg_body
- }
-
- /^in:SCREEN_BRIGHTNESS/\
- {
- split_msg_parts()
- set_screen_brightness()
- }
-
- /^in:VOLUME/\
- {
- split_msg_parts()
- db["volume"] = msg_body
- }
-
- /^in:MPD_STATE/\
- {
- split_msg_parts()
- db["mpd_state"] = $1
- db["mpd_curr_song_time"] = $2
- db["mpd_curr_song_percent"] = $3
- }
-
- /^in:MPD_SONG/\
- {
- split_msg_parts()
- db["mpd_curr_song_name"] = msg_body
- }
-
- /^in:WEATHER/\
- {
- split_msg_parts()
- db["weather_temperature"] = msg_body
- }
-
- /^in:DATE_TIME/\
- {
- split_msg_parts()
- db["datetime"] = msg_body
- }
-
- /^out:BAR/\
- {
- split_msg_parts()
- print make_bar()
- }
-
- function set_load_avg( sched) {
- split($4, sched, "/")
- db["load_avg_1min"] = $1
- db["load_avg_5min"] = $2
- db["load_avg_15min"] = $3
- db["kern_sched_queue_runnable"] = sched[1]
- db["kern_sched_queue_total"] = sched[2]
- db["kern_sched_latest_pid"] = $5
- }
-
- function set_disk_io( curr_w, curr_r, prev_w, prev_r) {
- curr_w = $1
- curr_r = $2
- prev_w = db["disk_io_curr_w"]
- prev_r = db["disk_io_curr_r"]
- db["disk_io_curr_w"] = curr_w
- db["disk_io_curr_r"] = curr_r
- db["disk_io_diff_w"] = curr_w - prev_w
- db["disk_io_diff_r"] = curr_r - prev_r
- }
-
- function set_net_addr_io( \
- interface, address, io_curr_w, io_curr_r, io_prev_w, io_prev_r\
- ) {
- interface = $1
- address = $2
- io_curr_w = $3
- io_curr_r = $4
- if (interface) {
- if (address && io_curr_w && io_curr_r) {
- # recalculate
- io_prev_w = net_io_curr_w[interface]
- io_prev_r = net_io_curr_r[interface]
-
- net_addr[interface] = address
- net_io_curr_w[interface] = io_curr_w
- net_io_curr_r[interface] = io_curr_r
- net_io_diff_w[interface] = io_curr_w - io_prev_w
- net_io_diff_r[interface] = io_curr_r - io_prev_r
- } else {
- # clear
- net_addr[interface] = ""
- net_io_curr_w[interface] = 0
- net_io_curr_r[interface] = 0
- net_io_diff_w[interface] = 0
- net_io_diff_r[interface] = 0
- }
- }
- }
-
- function set_screen_brightness( max, cur) {
- max = $1
- cur = $2
- db["screen_brightness"] = (cur / max) * 100
- }
-
- function split_msg_parts() {
- msg_head = $1
- sub("^" msg_head " +", "")
- msg_body = $0
- debug(msg_head, msg_body)
- }
-
- function make_bar( position, bar, sep, i, j) {
- position[++i] = make_status_energy()
- position[++i] = make_status_mem()
- position[++i] = make_status_cpu()
- position[++i] = make_status_disk()
- position[++i] = make_status_net()
- position[++i] = sprintf("B=%s", db["bluetooth_power"])
- position[++i] = sprintf("*%d%%", db["screen_brightness"])
- position[++i] = sprintf("(%s)", db["volume"])
- position[++i] = make_status_mpd()
- position[++i] = db["weather_temperature"]
- position[++i] = db["datetime"]
- bar = ""
- sep = ""
- for (j = 1; j <= i; j++) {
- bar = bar sep position[j]
- sep = " "
- }
- return bar
- }
-
- function make_status_energy( state, direction_of_change) {
- state = db["energy_state"]
- if (state == "discharging") {
- direction_of_change = "<"
- } else if (state == "charging") {
- direction_of_change = ">"
- } else {
- direction_of_change = "="
- };
- printf("E%s%s", direction_of_change, db["energy_percentage"])
- }
-
- function make_status_mem( total, used, percent, status) {
- total = db["memory_total"]
- used = db["memory_used"]
- # To avoid division by zero when data is missing
- if (total && used) {
- percent = round((used / total) * 100)
- status = sprintf("%d%%", percent)
- } else {
- status = "__"
- }
- return sprintf("M=%s", status)
- }
-
- function make_status_cpu( load, temp, fan) {
- load = db["load_avg_1min"]
- temp = db["temperature"] / 1000
- fan = db["fan_speed"]
- return sprintf("C=[%4.2f %d°C %4drpm]", load, temp, fan)
- }
-
- function make_status_disk( bytes_per_sector, bytes_per_mb, w, r) {
- bytes_per_sector = 512
- bytes_per_mb = 1024 * 1024
- w = (db["disk_io_diff_w"] * bytes_per_sector) / bytes_per_mb
- r = (db["disk_io_diff_r"] * bytes_per_sector) / bytes_per_mb
- return \
- sprintf("D=[%s %0.3f▲ %0.3f▼]", db["disk_space_used"], w, r)
- }
-
- function make_status_net( \
- out,
- number_of_interfaces_to_show,
- n,
- array_of_prefixes_of_interfaces_to_show,
- prefix,
- interface,
- label,
- count_printed,
- sep,
- io_stat,
- dw, dr,
- bytes_per_unit\
- ) {
- out = ""
- number_of_interfaces_to_show = \
- split(\
- opt_prefixes_of_net_interfaces_to_show,\
- array_of_prefixes_of_interfaces_to_show,\
- ","\
- )
- for (n = 1; n <= number_of_interfaces_to_show; n++) {
- prefix = array_of_prefixes_of_interfaces_to_show[n]
- for (interface in net_addr) {
- if (interface ~ ("^" prefix)) {
- label = substr(interface, 1, 1)
- if (net_addr[interface]) {
- bytes_per_mb = 1024 * 1024 # TODO: option
- dw = net_io_diff_w[interface] / bytes_per_mb
- dr = net_io_diff_r[interface] / bytes_per_mb
- io_stat = sprintf("%0.3f▲ %0.3f▼", dw, dr)
- } else {
- io_stat = "--"
- }
- if (interface ~ "^w") {
- label = label ":" db["net_wifi_status"]
- }
- if (++count_printed > 1) {
- sep = " "
- } else {
- sep = ""
- }
- out = out sep label ":" io_stat
- }
- }
- }
- return sprintf("N[%s]", out)
- }
-
- function make_status_mpd( state, status) {
- state = db["mpd_state"]
-
- if (state == "play") {
- status = make_status_mpd_state_known("▶")
- } else if (state == "pause") {
- status = make_status_mpd_state_known("❚❚")
- } else if (state == "stop") {
- status = make_status_mpd_state_known("⬛")
- } else {
- status = make_status_mpd_state_unknown("--")
- }
-
- return sprintf("[%s]", status)
- }
-
- function make_status_mpd_state_known(symbol) {
- return sprintf(\
- "%s %s %s %s",
- symbol,
- db["mpd_curr_song_time"],
- db["mpd_curr_song_percent"],
- substr(db["mpd_curr_song_name"], 1, opt_mpd_song_max_chars)\
- )
- }
-
- function make_status_mpd_state_unknown(symbol) {
- return sprintf("%s", symbol)
- }
-
- function round(n) {
- return int(n + 0.5)
- }
-
- function debug(location, msg) {
- if (opt_debug) {
- print_error(location, msg)
- }
- }