Simplify IPC - no need to name the pipe
[khatus.git] / bin / khatus
CommitLineData
438d0d5f
SK
1#! /bin/bash
2
4d314e0f
SK
3set -e
4
9ab9a718 5run_producer() {
6ad7b381
SK
6 bin="$1"
7 cmd="$2"
8 msg_head="$3"
15a44039 9 "$bin"/$cmd \
688fb20e
SK
10 2> >(
11 while read line
15a44039 12 do
6ad7b381 13 echo "ERROR ${msg_head} $line"
15a44039 14 done \
688fb20e
SK
15 ) \
16 | while read line
17 do
6ad7b381 18 echo "OK ${msg_head} $line"
688fb20e 19 done
ab99b556
SK
20}
21
9ab9a718
SK
22fork_reactor() {
23 run_producer "$@" &
24}
25
26fork_poller() {
27 interval="$1"
28 shift
15a44039 29 while :
9ab9a718
SK
30 do
31 run_producer "$@"
2b221665 32 sleep "$interval"
438d0d5f
SK
33 done &
34}
35
36main() {
d77c7373
SK
37 declare -A opts=(
38 ["--debug"]=0
39 ["--dir_bin"]="$HOME/bin"
d77c7373
SK
40 ["--weather_station_id"]='KJFK'
41 ["--screen_brightness_device_name"]='acpi_video0'
42 ["--prefixes_of_net_interfaces_to_show"]='w' # comma-separated
43 ["--disk_space_device"]='/'
44 ["--disk_io_device"]='sda'
45 ["--thermal_zone"]=0
46 ["--fan_path"]='/proc/acpi/ibm/fan'
47 ["--interval_inp_datetime"]=1
48 ["--interval_inp_brightness"]=1
49 ["--interval_inp_weather"]=$(( 30 * 60)) # 30 minutes
50 ["--interval_inp_mpd_state"]=1
51 ["--interval_inp_mpd_song"]=1
52 ["--interval_inp_volume"]=1
53 ["--interval_inp_bluetooth"]=5
54 ["--interval_inp_net_wifi"]=5
55 ["--interval_inp_net_io"]=1
56 ["--interval_inp_disk_space"]=5
57 ["--interval_inp_disk_io"]=1
58 ["--interval_inp_loadavg"]=1
59 ["--interval_inp_temp"]=1
60 ["--interval_inp_fan"]=1
61 ["--interval_inp_mem"]=1
4d314e0f 62 )
d77c7373 63 while :
4d314e0f 64 do
d77c7373
SK
65 key="$1"
66 val="$2"
67 case "$key" in
68 '')
4d314e0f
SK
69 break
70 ;;
d77c7373
SK
71 * )
72 if [ -v opts["$key"] ]
73 then
74 if [ "$key" == "--debug" ]
75 then
76 opts["$key"]=1
77 shift
78 elif [ "$val" != "" ]
79 then
80 opts["$key"]="$val"
81 shift
82 shift
83 else
84 echo "Option $key requires an argument" >&2
85 exit 1
86 fi
87 else
88 echo "Unknown option: $key" >&2
89 exit 1
90 fi
4d314e0f
SK
91 esac
92 done
93
6a12cab1
SK
94 (
95 echo '=============================================='
96 echo "Khatus starting with the following parameters:"
97 echo '=============================================='
d77c7373 98 for param in ${!opts[@]}
6a12cab1 99 do
d77c7373 100 echo "$param := ${opts[$param]}"
6a12cab1 101 done \
d77c7373
SK
102 | column -ts: \
103 | sort
6a12cab1 104 echo '----------------------------------------------'
4d314e0f
SK
105 ) >&2
106
d77c7373
SK
107 screen_brightness_device_path='/sys/class/backlight'
108 screen_brightness_device_path+="/${opts['--screen_brightness_device_name']}"
109
110 # Just shorthand
d77c7373 111 bin="${opts['--dir_bin']}"
d77c7373 112
f37162a4
SK
113 cmd_sens_screen_brightness='khatus_sensor_screen_brightness'
114 cmd_sens_screen_brightness+=" $screen_brightness_device_path"
2b221665 115
d77c7373
SK
116 cmd_sens_weather="khatus_sensor_weather ${opts['--weather_station_id']}"
117 cmd_sens_disk_space="khatus_sensor_disk_space ${opts['--disk_space_device']}"
118 cmd_sens_disk_io="khatus_sensor_disk_io ${opts['--disk_io_device']}"
119 cmd_sens_temperature="khatus_sensor_temperature ${opts['--thermal_zone']}"
120 cmd_sens_fan="khatus_sensor_fan ${opts['--fan_path']}"
121 cmd_sens_bluetooth="khatus_sensor_bluetooth_power $bin"
122 cmd_sens_mpd_state="khatus_sensor_mpd_state $bin"
123 cmd_sens_net_addr_io="khatus_sensor_net_addr_io $bin"
124 cmd_sens_volume="khatus_sensor_volume $bin"
fd22859b 125
6ad7b381
SK
126 (
127 fork_reactor "$bin" "khatus_sensor_energy $bin" 'in:ENERGY'
128 fork_poller "${opts['--interval_inp_datetime']}" "$bin" khatus_sensor_datetime 'in:DATE_TIME'
129 fork_poller "${opts['--interval_inp_brightness']}" "$bin" "$cmd_sens_screen_brightness" 'in:SCREEN_BRIGHTNESS'
130 fork_poller "${opts['--interval_inp_weather']}" "$bin" "$cmd_sens_weather" 'in:WEATHER'
131 fork_poller "${opts['--interval_inp_mpd_state']}" "$bin" "$cmd_sens_mpd_state" 'in:MPD_STATE'
132 fork_poller "${opts['--interval_inp_mpd_song']}" "$bin" khatus_sensor_mpd_song 'in:MPD_SONG'
133 fork_poller "${opts['--interval_inp_volume']}" "$bin" "$cmd_sens_volume" 'in:VOLUME'
134 fork_poller "${opts['--interval_inp_bluetooth']}" "$bin" "$cmd_sens_bluetooth" 'in:BLUETOOTH_POWER'
135 fork_poller "${opts['--interval_inp_net_wifi']}" "$bin" khatus_sensor_net_wifi_status 'in:NET_WIFI_STATUS'
136 fork_poller "${opts['--interval_inp_net_io']}" "$bin" "$cmd_sens_net_addr_io" 'in:NET_ADDR_IO'
137 fork_poller "${opts['--interval_inp_disk_space']}" "$bin" "$cmd_sens_disk_space" 'in:DISK_SPACE'
138 fork_poller "${opts['--interval_inp_disk_io']}" "$bin" "$cmd_sens_disk_io" 'in:DISK_IO'
139 fork_poller "${opts['--interval_inp_loadavg']}" "$bin" khatus_sensor_loadavg 'in:LOAD_AVG'
140 fork_poller "${opts['--interval_inp_temp']}" "$bin" "$cmd_sens_temperature" 'in:TEMPERATURE'
141 fork_poller "${opts['--interval_inp_fan']}" "$bin" "$cmd_sens_fan" 'in:FAN'
142 fork_poller "${opts['--interval_inp_mem']}" "$bin" khatus_sensor_memory 'in:MEMORY'
143 ) \
144 | "$bin"/khatus_controller \
145 -v opt_debug="${opts['--debug']}" \
146 -v opt_mpd_song_max_chars=10 \
147 -v opt_prefixes_of_net_interfaces_to_show="${opts['--prefixes_of_net_interfaces_to_show']}"
438d0d5f
SK
148}
149
150main $@
This page took 0.041461 seconds and 4 git commands to generate.