Commit | Line | Data |
---|---|---|
c4fd5e7d SK |
1 | # Naming convention: |
2 | # Variables: | |
3 | # - global, builtin : ALLCAPS | |
b1c097d6 | 4 | # - global, public : Camel_Snake_Man_Bear_Pig |
c4fd5e7d SK |
5 | # - global, private : _snake_case_prefixed_underscore |
6 | # - local : snake_case | |
7 | # Functions: | |
8 | # - global, public : snake_case | |
9 | ||
75b23ff8 SK |
10 | # ----------------------------------------------------------------------------- |
11 | # Input | |
12 | # ----------------------------------------------------------------------------- | |
13 | $1 == "OK" { | |
c4fd5e7d | 14 | cache_update() |
75b23ff8 SK |
15 | } |
16 | ||
17 | $1 == "OK" && \ | |
18 | $2 == "khatus_sensor_datetime" { | |
03c229bf | 19 | # Code for bar_make_status is expected to be passed as an |
ab9fe663 | 20 | # additional source file, using -f flag. |
03c229bf | 21 | msg_out_ok("status_bar", bar_make_status()) |
75b23ff8 SK |
22 | } |
23 | ||
2d07b264 | 24 | |
75b23ff8 SK |
25 | # ----------------------------------------------------------------------------- |
26 | # Status bar | |
27 | # ----------------------------------------------------------------------------- | |
28 | ||
03c229bf | 29 | function bar_make_status_energy( state, charge, direction_of_change) { |
c4fd5e7d SK |
30 | cache_get(state , "khatus_sensor_energy", "battery_state" , 0) |
31 | cache_get(charge, "khatus_sensor_energy", "battery_percentage", 0) | |
75b23ff8 | 32 | |
269df6fa | 33 | if (state["value"] == "discharging") { |
75b23ff8 | 34 | direction_of_change = "<" |
269df6fa | 35 | } else if (state["value"] == "charging") { |
75b23ff8 SK |
36 | direction_of_change = ">" |
37 | } else { | |
38 | direction_of_change = "=" | |
39 | } | |
40 | ||
269df6fa | 41 | return sprintf("E%s%d%%", direction_of_change, charge["value"]) |
75b23ff8 SK |
42 | } |
43 | ||
03c229bf | 44 | function bar_make_status_mem( total, used, percent, status) { |
c4fd5e7d SK |
45 | cache_get(total, "khatus_sensor_memory", "total", 5) |
46 | cache_get(used , "khatus_sensor_memory", "used" , 5) | |
269df6fa SK |
47 | # Checking total["value"] to avoid division by zero when data is missing |
48 | if (!total["is_expired"] && \ | |
49 | !used["is_expired"] && \ | |
50 | total["value"] \ | |
51 | ) { | |
03c229bf | 52 | percent = util_round((used["value"] / total["value"]) * 100) |
75b23ff8 SK |
53 | status = sprintf("%d%%", percent) |
54 | } else { | |
55 | status = "__" | |
56 | } | |
57 | return sprintf("M=%s", status) | |
58 | } | |
59 | ||
03c229bf | 60 | function bar_make_status_procs() { |
2e820ad5 SK |
61 | # From man ps: |
62 | # D uninterruptible sleep (usually IO) | |
63 | # R running or runnable (on run queue) | |
64 | # S interruptible sleep (waiting for an event to complete) | |
65 | # T stopped by job control signal | |
66 | # t stopped by debugger during the tracing | |
67 | # W paging (not valid since the 2.6.xx kernel) | |
68 | # X dead (should never be seen) | |
69 | # Z defunct ("zombie") process, terminated but not reaped by its parent | |
70 | # | |
71 | # Additionally, not documented in ps man page: | |
72 | # I Idle | |
73 | # | |
b9d5cfd4 SK |
74 | src = "khatus_sensor_procs" |
75 | all = cache_get_fmt_def(src, "total_procs" , 15, "%d") | |
76 | r = cache_get_fmt_def(src, "total_per_state" Kfs "R", 15, "%d", "0") | |
77 | d = cache_get_fmt_def(src, "total_per_state" Kfs "D", 15, "%d", "0") | |
78 | t = cache_get_fmt_def(src, "total_per_state" Kfs "T", 15, "%d", "0") | |
79 | i = cache_get_fmt_def(src, "total_per_state" Kfs "I", 15, "%d", "0") | |
80 | z = cache_get_fmt_def(src, "total_per_state" Kfs "Z", 15, "%d", "0") | |
81 | return sprintf("P=[%s %sr %sd %st %si %sz]", all, r, d, t, i, z) | |
82 | } | |
83 | ||
03c229bf | 84 | function bar_make_status_cpu( l, t, f) { |
fd710ac0 SK |
85 | l_src = "khatus_sensor_loadavg" |
86 | t_src = "khatus_sensor_temperature" | |
87 | f_src = "khatus_sensor_fan" | |
88 | l = cache_get_fmt_def(l_src, "load_avg_1min", 5, "%4.2f") | |
89 | t = cache_get_fmt_def(t_src, "temp_c" , 5, "%d" ) | |
90 | f = cache_get_fmt_def(f_src, "speed" , 5, "%4d" ) | |
269df6fa | 91 | return sprintf("C=[%s %s°C %srpm]", l, t, f) |
75b23ff8 SK |
92 | } |
93 | ||
03c229bf | 94 | function bar_make_status_disk( u, w, r, src_u, src_io) { |
fd710ac0 SK |
95 | src_u = "khatus_sensor_disk_space" |
96 | src_io = "khatus_sensor_disk_io" | |
224be98a SK |
97 | u = cache_get_fmt_def(src_u , "disk_usage_percentage", 10, "%s") |
98 | w = cache_get_fmt_def(src_io, "sectors_written" , 5, "%0.3f") | |
99 | r = cache_get_fmt_def(src_io, "sectors_read" , 5, "%0.3f") | |
2d07b264 | 100 | return sprintf("D=[%s%% %s▲ %s▼]", u, w, r) |
75b23ff8 SK |
101 | } |
102 | ||
03c229bf | 103 | function bar_make_status_net( \ |
75b23ff8 SK |
104 | number_of_net_interfaces_to_show, \ |
105 | net_interfaces_to_show, \ | |
fd710ac0 SK |
106 | io, \ |
107 | wi, \ | |
75b23ff8 SK |
108 | i, \ |
109 | interface, \ | |
110 | label, \ | |
2d07b264 | 111 | wifi, \ |
75b23ff8 SK |
112 | addr, \ |
113 | w, \ | |
114 | r, \ | |
75b23ff8 | 115 | io_stat, \ |
2d07b264 SK |
116 | out, \ |
117 | sep \ | |
75b23ff8 SK |
118 | ) { |
119 | number_of_net_interfaces_to_show = \ | |
b1c097d6 | 120 | split(Opt_Net_Interfaces_To_Show, net_interfaces_to_show, ",") |
fd710ac0 SK |
121 | io = "khatus_sensor_net_addr_io" |
122 | wi = "khatus_sensor_net_wifi_status" | |
75b23ff8 SK |
123 | out = "" |
124 | sep = "" | |
125 | for (i = number_of_net_interfaces_to_show; i > 0; i--) { | |
126 | interface = net_interfaces_to_show[i] | |
127 | label = substr(interface, 1, 1) | |
75b23ff8 | 128 | if (interface ~ "^w") { |
fd710ac0 | 129 | wifi = cache_get_fmt_def(wi, "status" Kfs interface, 10, "%s") |
269df6fa | 130 | label = label ":" wifi |
75b23ff8 | 131 | } |
fd710ac0 SK |
132 | addr = cache_get_fmt_def(io, "addr" Kfs interface, 5, "%s", "") |
133 | w = cache_get_fmt_def(io, "bytes_written" Kfs interface, 5, "%0.3f") | |
134 | r = cache_get_fmt_def(io, "bytes_read" Kfs interface, 5, "%0.3f") | |
2d07b264 | 135 | io_stat = addr ? sprintf("%s▲ %s▼", w, r) : "--" |
75b23ff8 SK |
136 | out = out sep label ":" io_stat |
137 | sep = " " | |
138 | } | |
75b23ff8 SK |
139 | return sprintf("N[%s]", out) |
140 | } | |
141 | ||
03c229bf | 142 | function bar_make_status_bluetooth( src, key) { |
269df6fa SK |
143 | src = "khatus_sensor_bluetooth_power" |
144 | key = "power_status" | |
c4fd5e7d | 145 | return sprintf("B=%s", cache_get_fmt_def(src, key, 10, "%s")) |
75b23ff8 SK |
146 | } |
147 | ||
03c229bf | 148 | function bar_make_status_screen_brightness( src, key) { |
269df6fa SK |
149 | src = "khatus_sensor_screen_brightness" |
150 | key = "percentage" | |
c4fd5e7d | 151 | return sprintf("*%s%%", cache_get_fmt_def(src, key, 5, "%d")) |
75b23ff8 SK |
152 | } |
153 | ||
03c229bf | 154 | function bar_make_status_volume( sink, mu, vl, vr, show) { |
b1c097d6 | 155 | sink = Opt_Pulseaudio_Sink |
fd710ac0 SK |
156 | cache_get(mu, "khatus_sensor_volume", "mute" Kfs sink, 5) |
157 | cache_get(vl, "khatus_sensor_volume", "vol_left" Kfs sink, 5) | |
158 | cache_get(vr, "khatus_sensor_volume", "vol_right" Kfs sink, 5) | |
767766df | 159 | show = "--" |
fd710ac0 SK |
160 | if (!mu["is_expired"] && !vl["is_expired"] && !vr["is_expired"]) { |
161 | if (mu["value"] == "yes") {show = "X"} | |
162 | else if (mu["value"] == "no") {show = vl["value"] " " vr["value"]} | |
75b23ff8 | 163 | else { |
03c229bf SK |
164 | msg_out_error(\ |
165 | "bar_make_status_volume", \ | |
fd710ac0 | 166 | "Unexpected value for 'mute' field: " mu["value"] \ |
75b23ff8 SK |
167 | ) |
168 | } | |
75b23ff8 | 169 | } |
269df6fa | 170 | return sprintf("(%s)", show) |
75b23ff8 SK |
171 | } |
172 | ||
03c229bf | 173 | function bar_make_status_mpd( state, status) { |
c4fd5e7d | 174 | cache_get(state, "khatus_sensor_mpd", "state", 5) |
269df6fa SK |
175 | if (!state["is_expired"] && state["value"]) { |
176 | if (state["value"] == "play") { | |
03c229bf | 177 | status = bar_make_status_mpd_state_known("▶") |
269df6fa | 178 | } else if (state["value"] == "pause") { |
03c229bf | 179 | status = bar_make_status_mpd_state_known("❚❚") |
269df6fa | 180 | } else if (state["value"] == "stop") { |
03c229bf | 181 | status = bar_make_status_mpd_state_known("⬛") |
75b23ff8 | 182 | } else { |
03c229bf SK |
183 | msg_out_error(\ |
184 | "bar_make_status_mpd", \ | |
269df6fa | 185 | "Unexpected value for 'state' field: " state["value"] \ |
75b23ff8 SK |
186 | ) |
187 | status = "--" | |
188 | } | |
189 | } else { | |
190 | status = "--" | |
191 | } | |
192 | ||
193 | return sprintf("[%s]", status) | |
194 | } | |
195 | ||
03c229bf | 196 | function bar_make_status_mpd_state_known(symbol, s, song, time, percentage) { |
75b23ff8 | 197 | s = "khatus_sensor_mpd" |
c4fd5e7d SK |
198 | song = cache_get_fmt_def(s, "song" , 5, "%s", "?") |
199 | time = cache_get_fmt_def(s, "play_time_minimal_units", 5, "%s", "?") | |
200 | percent = cache_get_fmt_def(s, "play_time_percentage" , 5, "%s", "?") | |
b1c097d6 | 201 | song = substr(song, 1, Opt_Mpd_Song_Max_Chars) |
75b23ff8 SK |
202 | return sprintf("%s %s %s %s", symbol, time, percent, song) |
203 | } | |
204 | ||
03c229bf | 205 | function bar_make_status_weather( src, hour, t_f) { |
fd710ac0 | 206 | src = "khatus_sensor_weather" |
75b23ff8 | 207 | hour = 60 * 60 |
fd710ac0 | 208 | t_f = cache_get_fmt_def(src, "temperature_f", 3 * hour, "%d") |
75b23ff8 SK |
209 | return sprintf("%s°F", t_f) |
210 | } | |
211 | ||
03c229bf | 212 | function bar_make_status_datetime( dt) { |
c4fd5e7d | 213 | return cache_get_fmt_def("khatus_sensor_datetime", "datetime", 5, "%s") |
75b23ff8 | 214 | } |