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 | # ----------------------------------------------------------------------------- | |
81336934 SK |
13 | { |
14 | delete msg | |
15 | msg_parse(msg, $0) | |
16 | } | |
17 | ||
18 | msg["type"] == "data" { | |
8482fea6 | 19 | cache_update(msg["node"], msg["module"], msg["key"], msg["val"]) |
75b23ff8 SK |
20 | } |
21 | ||
81336934 SK |
22 | msg["node"] == Node && \ |
23 | msg["module"] == "khatus_sensor_datetime" && \ | |
24 | msg["type"] == "data" { | |
03c229bf | 25 | # Code for bar_make_status is expected to be passed as an |
ab9fe663 | 26 | # additional source file, using -f flag. |
8482fea6 | 27 | msg_out_status_bar(bar_make_status()) |
75b23ff8 SK |
28 | } |
29 | ||
75b23ff8 | 30 | # ----------------------------------------------------------------------------- |
e62110ca | 31 | # Energy |
75b23ff8 SK |
32 | # ----------------------------------------------------------------------------- |
33 | ||
65034298 SK |
34 | function bar_make_status_energy_percent() { |
35 | return cache_get_fmt_def("khatus_sensor_energy", "battery_percentage", 0, "%d") | |
e62110ca | 36 | } |
75b23ff8 | 37 | |
e62110ca SK |
38 | function bar_make_status_energy_direction( state, direction_of_change) { |
39 | cache_get(state, "khatus_sensor_energy", "battery_state", 0) | |
269df6fa | 40 | if (state["value"] == "discharging") { |
75b23ff8 | 41 | direction_of_change = "<" |
269df6fa | 42 | } else if (state["value"] == "charging") { |
75b23ff8 SK |
43 | direction_of_change = ">" |
44 | } else { | |
45 | direction_of_change = "=" | |
46 | } | |
e62110ca SK |
47 | return direction_of_change |
48 | } | |
75b23ff8 | 49 | |
e62110ca SK |
50 | # ----------------------------------------------------------------------------- |
51 | # Memory | |
52 | # ----------------------------------------------------------------------------- | |
53 | ||
e62110ca | 54 | function bar_make_status_mem_percent( total, used, percent, percent_str) { |
c4fd5e7d SK |
55 | cache_get(total, "khatus_sensor_memory", "total", 5) |
56 | cache_get(used , "khatus_sensor_memory", "used" , 5) | |
269df6fa SK |
57 | # Checking total["value"] to avoid division by zero when data is missing |
58 | if (!total["is_expired"] && \ | |
59 | !used["is_expired"] && \ | |
60 | total["value"] \ | |
61 | ) { | |
8482fea6 | 62 | percent = num_round((used["value"] / total["value"]) * 100) |
e62110ca | 63 | percent_str = sprintf("%d", percent) |
75b23ff8 | 64 | } else { |
e62110ca | 65 | percent_str = "__" |
75b23ff8 | 66 | } |
e62110ca | 67 | return percent_str |
75b23ff8 SK |
68 | } |
69 | ||
e62110ca SK |
70 | # ----------------------------------------------------------------------------- |
71 | # Processes | |
72 | # ----------------------------------------------------------------------------- | |
65034298 SK |
73 | # From man ps: |
74 | # D uninterruptible sleep (usually IO) | |
75 | # R running or runnable (on run queue) | |
76 | # S interruptible sleep (waiting for an event to complete) | |
77 | # T stopped by job control signal | |
78 | # t stopped by debugger during the tracing | |
79 | # W paging (not valid since the 2.6.xx kernel) | |
80 | # X dead (should never be seen) | |
81 | # Z defunct ("zombie") process, terminated but not reaped by its parent | |
82 | # | |
83 | # Additionally, not documented in ps man page: | |
84 | # I Idle | |
b9d5cfd4 | 85 | |
e62110ca SK |
86 | function bar_make_status_procs_count_all() { |
87 | return cache_get_fmt_def("khatus_sensor_procs", "total_procs", 15, "%d") | |
88 | } | |
89 | ||
90 | function bar_make_status_procs_count_r( src) { | |
91 | src = "khatus_sensor_procs" | |
92 | return cache_get_fmt_def(src, "total_per_state" Kfs "R", 15, "%d", "0") | |
93 | } | |
94 | ||
95 | function bar_make_status_procs_count_d( src) { | |
96 | src = "khatus_sensor_procs" | |
97 | return cache_get_fmt_def(src, "total_per_state" Kfs "D", 15, "%d", "0") | |
98 | } | |
99 | ||
100 | function bar_make_status_procs_count_t( src) { | |
101 | src = "khatus_sensor_procs" | |
102 | return cache_get_fmt_def(src, "total_per_state" Kfs "T", 15, "%d", "0") | |
103 | } | |
104 | ||
105 | function bar_make_status_procs_count_i( src) { | |
106 | src = "khatus_sensor_procs" | |
107 | return cache_get_fmt_def(src, "total_per_state" Kfs "I", 15, "%d", "0") | |
108 | } | |
109 | ||
110 | function bar_make_status_procs_count_z( src) { | |
111 | src = "khatus_sensor_procs" | |
112 | return cache_get_fmt_def(src, "total_per_state" Kfs "Z", 15, "%d", "0") | |
113 | } | |
114 | ||
115 | # ----------------------------------------------------------------------------- | |
116 | # CPU | |
117 | # ----------------------------------------------------------------------------- | |
118 | ||
e62110ca SK |
119 | function bar_make_status_cpu_loadavg( src) { |
120 | src = "khatus_sensor_loadavg" | |
121 | return cache_get_fmt_def(src, "load_avg_1min", 5, "%4.2f") | |
122 | } | |
123 | ||
124 | function bar_make_status_cpu_temperature() { | |
125 | return cache_get_fmt_def("khatus_sensor_temperature", "temp_c", 5, "%d") | |
126 | } | |
127 | ||
128 | function bar_make_status_cpu_fan_speed() { | |
129 | return cache_get_fmt_def("khatus_sensor_fan", "speed", 5, "%4d") | |
130 | } | |
131 | ||
132 | # ----------------------------------------------------------------------------- | |
133 | # Disk | |
134 | # ----------------------------------------------------------------------------- | |
135 | ||
e62110ca SK |
136 | function bar_make_status_disk_space( src) { |
137 | src = "khatus_sensor_disk_space" | |
138 | return cache_get_fmt_def(src, "disk_usage_percentage", 10, "%s") | |
139 | } | |
140 | ||
141 | function bar_make_status_disk_io_w( src) { | |
142 | src = "khatus_sensor_disk_io" | |
143 | return cache_get_fmt_def(src, "sectors_written", 5, "%0.3f") | |
144 | } | |
145 | ||
146 | function bar_make_status_disk_io_r( src) { | |
147 | src = "khatus_sensor_disk_io" | |
148 | return cache_get_fmt_def(src, "sectors_read", 5, "%0.3f") | |
149 | } | |
150 | ||
151 | # ----------------------------------------------------------------------------- | |
152 | # Network | |
153 | # ----------------------------------------------------------------------------- | |
154 | ||
e62110ca SK |
155 | function bar_make_status_net_addr(interface, src) { |
156 | src = "khatus_sensor_net_addr_io" | |
157 | return cache_get_fmt_def(src, "addr" Kfs interface, 5, "%s", "") | |
158 | } | |
159 | ||
160 | function bar_make_status_net_io_w(interface, src) { | |
161 | src = "khatus_sensor_net_addr_io" | |
162 | return cache_get_fmt_def(src, "bytes_written" Kfs interface, 5, "%0.3f") | |
163 | } | |
164 | ||
165 | function bar_make_status_net_io_r(interface, src) { | |
166 | src = "khatus_sensor_net_addr_io" | |
167 | return cache_get_fmt_def(src, "bytes_read" Kfs interface, 5, "%0.3f") | |
168 | } | |
169 | ||
170 | function bar_make_status_net_wifi(interface, src) { | |
171 | src = "khatus_sensor_net_wifi_status" | |
172 | return cache_get_fmt_def(src, "status" Kfs interface, 10, "%s") | |
173 | } | |
174 | ||
175 | # ----------------------------------------------------------------------------- | |
176 | # Bluetooth | |
177 | # ----------------------------------------------------------------------------- | |
178 | ||
e62110ca | 179 | function bar_make_status_bluetooth_power( src) { |
269df6fa | 180 | src = "khatus_sensor_bluetooth_power" |
e62110ca | 181 | return cache_get_fmt_def(src, "power_status", 10, "%s") |
75b23ff8 SK |
182 | } |
183 | ||
e62110ca | 184 | # ----------------------------------------------------------------------------- |
65034298 | 185 | # Backlight (screen brightness) |
e62110ca SK |
186 | # ----------------------------------------------------------------------------- |
187 | ||
e62110ca | 188 | function bar_make_status_backlight_percent( src) { |
269df6fa | 189 | src = "khatus_sensor_screen_brightness" |
e62110ca | 190 | return cache_get_fmt_def(src, "percentage", 5, "%d") |
75b23ff8 SK |
191 | } |
192 | ||
e62110ca SK |
193 | # ----------------------------------------------------------------------------- |
194 | # Volume | |
195 | # ----------------------------------------------------------------------------- | |
196 | ||
0c4f892e SK |
197 | function bar_make_status_volume_alsa_device(device, mu, vl, vr, show) { |
198 | cache_get(mu, "khatus_sensor_volume", "mute" Kfs device, 5) | |
199 | cache_get(vl, "khatus_sensor_volume", "vol_left" Kfs device, 5) | |
200 | cache_get(vr, "khatus_sensor_volume", "vol_right" Kfs device, 5) | |
767766df | 201 | show = "--" |
fd710ac0 SK |
202 | if (!mu["is_expired"] && !vl["is_expired"] && !vr["is_expired"]) { |
203 | if (mu["value"] == "yes") {show = "X"} | |
204 | else if (mu["value"] == "no") {show = vl["value"] " " vr["value"]} | |
75b23ff8 | 205 | else { |
8482fea6 | 206 | msg_out_log_error(\ |
0c4f892e | 207 | "bar_make_status_volume_alsa_device: " device ". ", \ |
fd710ac0 | 208 | "Unexpected value for 'mute' field: " mu["value"] \ |
75b23ff8 SK |
209 | ) |
210 | } | |
75b23ff8 | 211 | } |
e62110ca | 212 | return show |
75b23ff8 SK |
213 | } |
214 | ||
e62110ca SK |
215 | # ----------------------------------------------------------------------------- |
216 | # MPD | |
217 | # ----------------------------------------------------------------------------- | |
218 | ||
65034298 | 219 | function bar_make_status_mpd( state, status) { |
c4fd5e7d | 220 | cache_get(state, "khatus_sensor_mpd", "state", 5) |
269df6fa SK |
221 | if (!state["is_expired"] && state["value"]) { |
222 | if (state["value"] == "play") { | |
03c229bf | 223 | status = bar_make_status_mpd_state_known("▶") |
269df6fa | 224 | } else if (state["value"] == "pause") { |
03c229bf | 225 | status = bar_make_status_mpd_state_known("❚❚") |
269df6fa | 226 | } else if (state["value"] == "stop") { |
03c229bf | 227 | status = bar_make_status_mpd_state_known("⬛") |
75b23ff8 | 228 | } else { |
8482fea6 | 229 | msg_out_log_error(\ |
03c229bf | 230 | "bar_make_status_mpd", \ |
269df6fa | 231 | "Unexpected value for 'state' field: " state["value"] \ |
75b23ff8 SK |
232 | ) |
233 | status = "--" | |
234 | } | |
235 | } else { | |
236 | status = "--" | |
237 | } | |
e62110ca | 238 | return status |
75b23ff8 SK |
239 | } |
240 | ||
03c229bf | 241 | function bar_make_status_mpd_state_known(symbol, s, song, time, percentage) { |
75b23ff8 | 242 | s = "khatus_sensor_mpd" |
c4fd5e7d SK |
243 | song = cache_get_fmt_def(s, "song" , 5, "%s", "?") |
244 | time = cache_get_fmt_def(s, "play_time_minimal_units", 5, "%s", "?") | |
245 | percent = cache_get_fmt_def(s, "play_time_percentage" , 5, "%s", "?") | |
b1c097d6 | 246 | song = substr(song, 1, Opt_Mpd_Song_Max_Chars) |
75b23ff8 SK |
247 | return sprintf("%s %s %s %s", symbol, time, percent, song) |
248 | } | |
249 | ||
e62110ca SK |
250 | # ----------------------------------------------------------------------------- |
251 | # Weather | |
252 | # ----------------------------------------------------------------------------- | |
253 | ||
e62110ca | 254 | function bar_make_status_weather_temp_f( src, hour) { |
fd710ac0 | 255 | src = "khatus_sensor_weather" |
75b23ff8 | 256 | hour = 60 * 60 |
e62110ca | 257 | return cache_get_fmt_def(src, "temperature_f", 3 * hour, "%d") |
75b23ff8 SK |
258 | } |
259 | ||
e62110ca SK |
260 | # ----------------------------------------------------------------------------- |
261 | # Datetime | |
262 | # ----------------------------------------------------------------------------- | |
263 | ||
03c229bf | 264 | function bar_make_status_datetime( dt) { |
c4fd5e7d | 265 | return cache_get_fmt_def("khatus_sensor_datetime", "datetime", 5, "%s") |
75b23ff8 | 266 | } |