Commit | Line | Data |
---|---|---|
438d0d5f SK |
1 | #! /bin/bash |
2 | ||
4d314e0f SK |
3 | set -e |
4 | ||
6339a4f8 | 5 | consume() { |
438d0d5f | 6 | pipe="$1" |
2b221665 | 7 | debug="$2" |
f37162a4 SK |
8 | dir_bin="$3" |
9 | prefixes_of_net_interfaces_to_show="$4" | |
438d0d5f | 10 | tail -f "$pipe" \ |
f37162a4 | 11 | | stdbuf -o L "$dir_bin"/khatus_controller \ |
2b221665 | 12 | -v opt_debug="$debug" \ |
365549a9 | 13 | -v opt_mpd_song_max_chars=10 \ |
f37162a4 | 14 | -v opt_prefixes_of_net_interfaces_to_show="$prefixes_of_net_interfaces_to_show" |
438d0d5f SK |
15 | } |
16 | ||
17 | spawn() { | |
f37162a4 SK |
18 | pipe="$1" |
19 | dir_bin="$2" | |
20 | cmd="$3" | |
21 | msg_head="$4" | |
22 | interval="$5" | |
438d0d5f | 23 | while true; do |
f37162a4 | 24 | "$dir_bin"/$cmd | while read line; do |
2b221665 SK |
25 | echo "${msg_head} $line" > "$pipe" |
26 | done | |
27 | sleep "$interval" | |
438d0d5f SK |
28 | done & |
29 | } | |
30 | ||
31 | main() { | |
4d314e0f | 32 | # Defaults |
2b221665 | 33 | debug=0 |
f37162a4 | 34 | dir_bin="$HOME/bin" |
b8e4c2fa | 35 | dir_data=$(mktemp -d) |
4d314e0f | 36 | weather_station_id='KJFK' |
bbb42518 | 37 | screen_brightness_device_name='acpi_video0' |
2b221665 | 38 | prefixes_of_net_interfaces_to_show='w' # comma-separated |
c0e8473e | 39 | disk_space_device='/' |
cf698ca8 | 40 | disk_io_device='sda' |
5dd1535a | 41 | thermal_zone=0 |
b9bdec44 | 42 | fan_path='/proc/acpi/ibm/fan' |
4d314e0f | 43 | |
3716523b SK |
44 | interval_inp_datetime=1 |
45 | interval_inp_brightness=1 | |
46 | interval_inp_weather=$(( 30 * 60)) # 30 minutes | |
47 | interval_inp_mpd_state=1 | |
48 | interval_inp_mpd_song=1 | |
49 | interval_inp_volume=1 | |
50 | interval_inp_bluetooth=5 | |
51 | interval_inp_net_wifi=5 | |
52 | interval_inp_net_io=1 | |
53 | interval_inp_disk_space=5 | |
54 | interval_inp_disk_io=1 | |
55 | interval_inp_loadavg=1 | |
56 | interval_inp_temp=1 | |
57 | interval_inp_fan=1 | |
58 | interval_inp_mem=1 | |
59 | interval_inp_energy=1 | |
60 | interval_outp_bar=1 | |
29b3b10d | 61 | |
4d314e0f | 62 | # User-overrides |
2b221665 SK |
63 | long_options='' |
64 | long_options+='debug' | |
f37162a4 | 65 | long_options+=',bin_dir:' |
1ad52d13 SK |
66 | long_options+=',data_dir:' |
67 | long_options+=',weather_station:' | |
68 | long_options+=',screen_device:' | |
2b221665 | 69 | long_options+=',prefixes_of_net_interfaces_to_show:' |
c0e8473e | 70 | long_options+=',disk_space_device:' |
8fe8971a | 71 | long_options+=',disk_io_device:' |
5dd1535a | 72 | long_options+=',thermal_zone:' |
b9bdec44 | 73 | long_options+=',fan_path:' |
3716523b SK |
74 | long_options+=',interval_inp_datetime:' |
75 | long_options+=',interval_inp_brightness:' | |
76 | long_options+=',interval_inp_weather:' | |
77 | long_options+=',interval_inp_mpd_state:' | |
78 | long_options+=',interval_inp_mpd_song:' | |
79 | long_options+=',interval_inp_volume:' | |
80 | long_options+=',interval_inp_bluetooth:' | |
81 | long_options+=',interval_inp_net_wifi:' | |
82 | long_options+=',interval_inp_net_io:' | |
83 | long_options+=',interval_inp_disk_space:' | |
84 | long_options+=',interval_inp_disk_io:' | |
85 | long_options+=',interval_inp_loadavg:' | |
86 | long_options+=',interval_inp_temp:' | |
87 | long_options+=',interval_inp_fan:' | |
88 | long_options+=',interval_inp_mem:' | |
89 | long_options+=',interval_inp_energy:' | |
90 | long_options+=',interval_outp_bar:' | |
4d314e0f SK |
91 | OPTS=$( |
92 | getopt \ | |
2b221665 SK |
93 | -o 'd' \ |
94 | -l $long_options \ | |
4d314e0f SK |
95 | -- "$@" |
96 | ) | |
97 | eval set -- "$OPTS" | |
98 | while true | |
99 | do | |
100 | case "$1" in | |
2b221665 SK |
101 | -d|--debug) |
102 | debug=1 | |
103 | shift | |
104 | ;; | |
f37162a4 SK |
105 | --bin_dir) |
106 | dir_bin="$2" | |
107 | shift 2 | |
108 | ;; | |
1ad52d13 | 109 | --data_dir) |
4d314e0f SK |
110 | dir_data="$2" |
111 | shift 2 | |
112 | ;; | |
1ad52d13 | 113 | --weather_station) |
4d314e0f SK |
114 | weather_station_id="$2" |
115 | shift 2 | |
116 | ;; | |
1ad52d13 | 117 | --screen_device) |
bbb42518 SK |
118 | screen_brightness_device_name="$2" |
119 | shift 2 | |
120 | ;; | |
2b221665 SK |
121 | --prefixes_of_net_interfaces_to_show) |
122 | prefixes_of_net_interfaces_to_show="$2" | |
123 | shift 2 | |
124 | ;; | |
c0e8473e SK |
125 | --disk_space_device) |
126 | disk_space_device="$2" | |
127 | shift 2 | |
128 | ;; | |
cf698ca8 SK |
129 | --disk_io_device) |
130 | disk_io_device="$2" | |
131 | shift 2 | |
132 | ;; | |
5dd1535a SK |
133 | --thermal_zone) |
134 | thermal_zone="$2" | |
135 | shift 2 | |
136 | ;; | |
b9bdec44 SK |
137 | --fan_path) |
138 | fan_path="$2" | |
139 | shift 2 | |
140 | ;; | |
3716523b SK |
141 | --interval_inp_datetime) |
142 | interval_inp_datetime="$2" | |
29b3b10d SK |
143 | shift 2 |
144 | ;; | |
3716523b SK |
145 | --interval_inp_brightness) |
146 | interval_inp_brightness="$2" | |
29b3b10d SK |
147 | shift 2 |
148 | ;; | |
3716523b SK |
149 | --interval_inp_weather) |
150 | interval_inp_weather="$2" | |
29b3b10d SK |
151 | shift 2 |
152 | ;; | |
3716523b SK |
153 | --interval_inp_mpd_state) |
154 | interval_inp_mpd_state="$2" | |
29b3b10d SK |
155 | shift 2 |
156 | ;; | |
3716523b SK |
157 | --interval_inp_mpd_song) |
158 | interval_inp_mpd_song="$2" | |
29b3b10d SK |
159 | shift 2 |
160 | ;; | |
3716523b SK |
161 | --interval_inp_volume) |
162 | interval_inp_volume="$2" | |
29b3b10d SK |
163 | shift 2 |
164 | ;; | |
3716523b SK |
165 | --interval_inp_bluetooth) |
166 | interval_inp_bluetooth="$2" | |
29b3b10d SK |
167 | shift 2 |
168 | ;; | |
3716523b SK |
169 | --interval_inp_net_wifi) |
170 | interval_inp_net_wifi="$2" | |
29b3b10d SK |
171 | shift 2 |
172 | ;; | |
3716523b SK |
173 | --interval_inp_net_io) |
174 | interval_inp_net_io="$2" | |
29b3b10d SK |
175 | shift 2 |
176 | ;; | |
3716523b SK |
177 | --interval_inp_disk_space) |
178 | interval_inp_disk_space="$2" | |
29b3b10d SK |
179 | shift 2 |
180 | ;; | |
3716523b SK |
181 | --interval_inp_disk_io) |
182 | interval_inp_disk_io="$2" | |
29b3b10d SK |
183 | shift 2 |
184 | ;; | |
3716523b SK |
185 | --interval_inp_loadavg) |
186 | interval_inp_loadavg="$2" | |
29b3b10d SK |
187 | shift 2 |
188 | ;; | |
3716523b SK |
189 | --interval_inp_temp) |
190 | interval_inp_temp="$2" | |
29b3b10d SK |
191 | shift 2 |
192 | ;; | |
3716523b SK |
193 | --interval_inp_fan) |
194 | interval_inp_fan="$2" | |
29b3b10d SK |
195 | shift 2 |
196 | ;; | |
3716523b SK |
197 | --interval_inp_mem) |
198 | interval_inp_mem="$2" | |
29b3b10d SK |
199 | shift 2 |
200 | ;; | |
3716523b SK |
201 | --interval_inp_energy) |
202 | interval_inp_energy="$2" | |
29b3b10d SK |
203 | shift 2 |
204 | ;; | |
3716523b SK |
205 | --interval_outp_bar) |
206 | interval_outp_bar="$2" | |
29b3b10d SK |
207 | shift 2 |
208 | ;; | |
4d314e0f SK |
209 | --) |
210 | shift | |
211 | break | |
212 | ;; | |
213 | esac | |
214 | done | |
215 | ||
0c0ebbe1 | 216 | pipe="$dir_data/khatus_data_pipe" |
bbb42518 SK |
217 | screen_brightness_device_path='/sys/class/backlight' |
218 | screen_brightness_device_path+="/$screen_brightness_device_name" | |
0c0ebbe1 | 219 | |
4d314e0f | 220 | ( echo "Khatus starting with the following parameters:" |
2b221665 | 221 | ( echo " debug|= $debug" |
f37162a4 | 222 | echo " dir_bin|= $dir_bin" |
2b221665 | 223 | echo " dir_data|= $dir_data" |
0c0ebbe1 | 224 | echo " pipe|= $pipe" |
2b221665 SK |
225 | echo " screen_brightness_device_name|= $screen_brightness_device_name" |
226 | echo " screen_brightness_device_path|= $screen_brightness_device_path" | |
4d314e0f | 227 | echo " weather_station_id|= $weather_station_id" |
c0e8473e SK |
228 | echo " prefixes_of_net_interfaces_to_show|= $prefixes_of_net_interfaces_to_show" |
229 | echo " disk_space_device|= $disk_space_device" | |
cf698ca8 | 230 | echo " disk_io_device|= $disk_io_device" |
5dd1535a | 231 | echo " thermal_zone|= $thermal_zone" |
b9bdec44 | 232 | echo " fan_path|= $fan_path" |
4d314e0f SK |
233 | ) | column -ts\| |
234 | echo '' | |
235 | ) >&2 | |
236 | ||
4d314e0f | 237 | mkdir -p "$dir_data" |
438d0d5f SK |
238 | rm -f "$pipe" |
239 | mkfifo "$pipe" | |
240 | ||
f37162a4 SK |
241 | cmd_sens_screen_brightness='khatus_sensor_screen_brightness' |
242 | cmd_sens_screen_brightness+=" $screen_brightness_device_path" | |
2b221665 | 243 | |
f37162a4 | 244 | cmd_sens_weather="khatus_sensor_weather $weather_station_id" |
0c0ebbe1 | 245 | |
f37162a4 | 246 | cmd_sens_disk_space="khatus_sensor_disk_space $disk_space_device" |
c0e8473e | 247 | |
f37162a4 | 248 | cmd_sens_disk_io="khatus_sensor_disk_io $disk_io_device" |
cf698ca8 | 249 | |
f37162a4 | 250 | cmd_sens_temperature="khatus_sensor_temperature $thermal_zone" |
5dd1535a | 251 | |
f37162a4 | 252 | cmd_sens_fan="khatus_sensor_fan $fan_path" |
b9bdec44 | 253 | |
4d314e0f | 254 | # TODO: Redirect each worker's stderr to a dedicated log file |
f37162a4 SK |
255 | spawn "$pipe" "$dir_bin" khatus_sensor_datetime 'in:DATE_TIME' $interval_inp_datetime |
256 | spawn "$pipe" "$dir_bin" "$cmd_sens_screen_brightness" 'in:SCREEN_BRIGHTNESS' $interval_inp_brightness | |
257 | spawn "$pipe" "$dir_bin" "$cmd_sens_weather" 'in:WEATHER' $interval_inp_weather | |
258 | spawn "$pipe" "$dir_bin" khatus_sensor_mpd_state 'in:MPD_STATE' $interval_inp_mpd_state | |
259 | spawn "$pipe" "$dir_bin" khatus_sensor_mpd_song 'in:MPD_SONG' $interval_inp_mpd_song | |
260 | spawn "$pipe" "$dir_bin" khatus_sensor_volume 'in:VOLUME' $interval_inp_volume | |
261 | spawn "$pipe" "$dir_bin" khatus_sensor_bluetooth_power 'in:BLUETOOTH_POWER' $interval_inp_bluetooth | |
262 | spawn "$pipe" "$dir_bin" khatus_sensor_net_wifi_status 'in:NET_WIFI_STATUS' $interval_inp_net_wifi | |
263 | spawn "$pipe" "$dir_bin" khatus_sensor_net_addr_io 'in:NET_ADDR_IO' $interval_inp_net_io | |
264 | spawn "$pipe" "$dir_bin" "$cmd_sens_disk_space" 'in:DISK_SPACE' $interval_inp_disk_space | |
265 | spawn "$pipe" "$dir_bin" "$cmd_sens_disk_io" 'in:DISK_IO' $interval_inp_disk_io | |
266 | spawn "$pipe" "$dir_bin" khatus_sensor_loadavg 'in:LOAD_AVG' $interval_inp_loadavg | |
267 | spawn "$pipe" "$dir_bin" "$cmd_sens_temperature" 'in:TEMPERATURE' $interval_inp_temp | |
268 | spawn "$pipe" "$dir_bin" "$cmd_sens_fan" 'in:FAN' $interval_inp_fan | |
269 | spawn "$pipe" "$dir_bin" khatus_sensor_memory 'in:MEMORY' $interval_inp_mem | |
270 | spawn "$pipe" "$dir_bin" khatus_sensor_energy 'in:ENERGY' $interval_inp_energy | |
271 | spawn "$pipe" "$dir_bin" khatus_sensor_bar_req 'out:BAR' $interval_outp_bar | |
2b221665 SK |
272 | |
273 | consume \ | |
274 | "$pipe" \ | |
275 | "$debug" \ | |
f37162a4 | 276 | "$dir_bin" \ |
2b221665 | 277 | "$prefixes_of_net_interfaces_to_show" |
438d0d5f SK |
278 | } |
279 | ||
280 | main $@ |