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