Split workers into dedicated files
[khatus.git] / bin / khatus
CommitLineData
438d0d5f
SK
1#! /bin/bash
2
4d314e0f
SK
3set -e
4
6339a4f8 5consume() {
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
17spawn() {
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
31main() {
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
280main $@
This page took 0.053326 seconds and 4 git commands to generate.