React-to, rather than poll-for, energy events
[khatus.git] / bin / khatus
index f6f5e18..7205aa9 100755 (executable)
@@ -14,16 +14,31 @@ consume() {
         -v opt_prefixes_of_net_interfaces_to_show="$prefixes_of_net_interfaces_to_show"
 }
 
-spawn() {
+spawn_reactor() {
     pipe="$1"
     dir_bin="$2"
-    cmd="$3"
-    msg_head="$4"
-    interval="$5"
+    log="$3"
+    cmd="$4"
+    msg_head="$5"
+    "$dir_bin"/$cmd | while read line; do
+        echo "${msg_head} $line" > "$pipe"
+    done \
+    2> "$log" \
+    &
+}
+
+spawn_poller() {
+    pipe="$1"
+    dir_bin="$2"
+    log="$3"
+    cmd="$4"
+    msg_head="$5"
+    interval="$6"
     while true; do
         "$dir_bin"/$cmd | while read line; do
             echo "${msg_head} $line" > "$pipe"
-        done
+        done \
+        2> "$log"
         sleep "$interval"
     done &
 }
@@ -32,7 +47,8 @@ main() {
     # Defaults
     debug=0
     dir_bin="$HOME/bin"
-    dir_data=$(mktemp -d)
+    dir_logs=$(mktemp -d)
+    file_pipe=$(mktemp)
     weather_station_id='KJFK'
     screen_brightness_device_name='acpi_video0'
     prefixes_of_net_interfaces_to_show='w'  # comma-separated
@@ -56,7 +72,6 @@ main() {
     interval_inp_temp=1
     interval_inp_fan=1
     interval_inp_mem=1
-    interval_inp_energy=1
 
     # User-overrides
     # ---------------------------------------------------------------------
@@ -67,7 +82,8 @@ main() {
     long_options=''
     long_options+='debug'
     long_options+=',dir_bin:'
-    long_options+=',dir_data:'
+    long_options+=',dir_logs:'
+    long_options+=',file_pipe:'
     long_options+=',weather_station_id:'
     long_options+=',screen_brightness_device_name:'
     long_options+=',prefixes_of_net_interfaces_to_show:'
@@ -90,7 +106,6 @@ main() {
     long_options+=',interval_inp_temp:'
     long_options+=',interval_inp_fan:'
     long_options+=',interval_inp_mem:'
-    long_options+=',interval_inp_energy:'
     OPTS=$(
         getopt \
             -o 'd' \
@@ -109,8 +124,12 @@ main() {
                 dir_bin="$2"
                 shift 2
                 ;;
-            --dir_data)
-                dir_data="$2"
+            --dir_logs)
+                dir_logs="$2"
+                shift 2
+                ;;
+            --file_pipe)
+                file_pipe="$2"
                 shift 2
                 ;;
             --weather_station_id)
@@ -201,10 +220,6 @@ main() {
                 interval_inp_mem="$2"
                 shift 2
                 ;;
-            --interval_inp_energy)
-                interval_inp_energy="$2"
-                shift 2
-                ;;
             --)
                 shift
                 break
@@ -212,7 +227,6 @@ main() {
         esac
     done
 
-    pipe="$dir_data/khatus_data_pipe"
     screen_brightness_device_path='/sys/class/backlight'
     screen_brightness_device_path+="/$screen_brightness_device_name"
 
@@ -231,9 +245,8 @@ main() {
         echo '----------------------------------------------'
     ) >&2
 
-    mkdir -p "$dir_data"
-    rm -f "$pipe"
-    mkfifo "$pipe"
+    rm -f "$file_pipe"
+    mkfifo "$file_pipe"
 
     cmd_sens_screen_brightness='khatus_sensor_screen_brightness'
     cmd_sens_screen_brightness+=" $screen_brightness_device_path"
@@ -249,22 +262,26 @@ main() {
     cmd_sens_fan="khatus_sensor_fan $fan_path"
 
     # TODO: Redirect each worker's stderr to a dedicated log file
-    spawn "$pipe" "$dir_bin" khatus_sensor_datetime        'in:DATE_TIME'         $interval_inp_datetime
-    spawn "$pipe" "$dir_bin" "$cmd_sens_screen_brightness" 'in:SCREEN_BRIGHTNESS' $interval_inp_brightness
-    spawn "$pipe" "$dir_bin" "$cmd_sens_weather"           'in:WEATHER'           $interval_inp_weather
-    spawn "$pipe" "$dir_bin" khatus_sensor_mpd_state       'in:MPD_STATE'         $interval_inp_mpd_state
-    spawn "$pipe" "$dir_bin" khatus_sensor_mpd_song        'in:MPD_SONG'          $interval_inp_mpd_song
-    spawn "$pipe" "$dir_bin" khatus_sensor_volume          'in:VOLUME'            $interval_inp_volume
-    spawn "$pipe" "$dir_bin" khatus_sensor_bluetooth_power 'in:BLUETOOTH_POWER'   $interval_inp_bluetooth
-    spawn "$pipe" "$dir_bin" khatus_sensor_net_wifi_status 'in:NET_WIFI_STATUS'   $interval_inp_net_wifi
-    spawn "$pipe" "$dir_bin" khatus_sensor_net_addr_io     'in:NET_ADDR_IO'       $interval_inp_net_io
-    spawn "$pipe" "$dir_bin" "$cmd_sens_disk_space"        'in:DISK_SPACE'        $interval_inp_disk_space
-    spawn "$pipe" "$dir_bin" "$cmd_sens_disk_io"           'in:DISK_IO'           $interval_inp_disk_io
-    spawn "$pipe" "$dir_bin" khatus_sensor_loadavg         'in:LOAD_AVG'          $interval_inp_loadavg
-    spawn "$pipe" "$dir_bin" "$cmd_sens_temperature"       'in:TEMPERATURE'       $interval_inp_temp
-    spawn "$pipe" "$dir_bin" "$cmd_sens_fan"               'in:FAN'               $interval_inp_fan
-    spawn "$pipe" "$dir_bin" khatus_sensor_memory          'in:MEMORY'            $interval_inp_mem
-    spawn "$pipe" "$dir_bin" khatus_sensor_energy          'in:ENERGY'            $interval_inp_energy
+    pipe="$file_pipe"
+    log="$dir_logs"/khatus_sensors.log
+
+    spawn_reactor "$pipe" "$dir_bin" "$log" "khatus_sensor_energy $dir_bin" 'in:ENERGY'
+
+    spawn_poller "$pipe" "$dir_bin" "$log" khatus_sensor_datetime        'in:DATE_TIME'         $interval_inp_datetime
+    spawn_poller "$pipe" "$dir_bin" "$log" "$cmd_sens_screen_brightness" 'in:SCREEN_BRIGHTNESS' $interval_inp_brightness
+    spawn_poller "$pipe" "$dir_bin" "$log" "$cmd_sens_weather"           'in:WEATHER'           $interval_inp_weather
+    spawn_poller "$pipe" "$dir_bin" "$log" khatus_sensor_mpd_state       'in:MPD_STATE'         $interval_inp_mpd_state
+    spawn_poller "$pipe" "$dir_bin" "$log" khatus_sensor_mpd_song        'in:MPD_SONG'          $interval_inp_mpd_song
+    spawn_poller "$pipe" "$dir_bin" "$log" khatus_sensor_volume          'in:VOLUME'            $interval_inp_volume
+    spawn_poller "$pipe" "$dir_bin" "$log" khatus_sensor_bluetooth_power 'in:BLUETOOTH_POWER'   $interval_inp_bluetooth
+    spawn_poller "$pipe" "$dir_bin" "$log" khatus_sensor_net_wifi_status 'in:NET_WIFI_STATUS'   $interval_inp_net_wifi
+    spawn_poller "$pipe" "$dir_bin" "$log" khatus_sensor_net_addr_io     'in:NET_ADDR_IO'       $interval_inp_net_io
+    spawn_poller "$pipe" "$dir_bin" "$log" "$cmd_sens_disk_space"        'in:DISK_SPACE'        $interval_inp_disk_space
+    spawn_poller "$pipe" "$dir_bin" "$log" "$cmd_sens_disk_io"           'in:DISK_IO'           $interval_inp_disk_io
+    spawn_poller "$pipe" "$dir_bin" "$log" khatus_sensor_loadavg         'in:LOAD_AVG'          $interval_inp_loadavg
+    spawn_poller "$pipe" "$dir_bin" "$log" "$cmd_sens_temperature"       'in:TEMPERATURE'       $interval_inp_temp
+    spawn_poller "$pipe" "$dir_bin" "$log" "$cmd_sens_fan"               'in:FAN'               $interval_inp_fan
+    spawn_poller "$pipe" "$dir_bin" "$log" khatus_sensor_memory          'in:MEMORY'            $interval_inp_mem
 
     consume \
       "$pipe" \
This page took 0.036909 seconds and 4 git commands to generate.