alfred: Add a lightweight framework for running facter scripts that feed data into...
authorGui Iribarren <gui@altermundi.net>
Sun, 13 Oct 2013 22:01:28 +0000 (00:01 +0200)
committerSimon Wunderlich <sw@simonwunderlich.de>
Tue, 22 Oct 2013 23:37:47 +0000 (01:37 +0200)
Alfred expects to be fed data periodically, but there's currently no easy
way to do that from scripts, prompting people to write whole C programs
to accomplish tasks that could easily be scripted.
Provide a really simple framework to run scripts every 5 minutes, using a
cronjob, when alfred is started by the init.d script.

Signed-off-by: Gui Iribarren <gui@altermundi.net>
Signed-off-by: Simon Wunderlich <sw@simonwunderlich.de>
alfred/files/alfred.config
alfred/files/alfred.init

index b8fa9b2882d32161081c68a610679a9333fd7441..9d3fff6801ad1a0272d8af301e0129090010dcea 100644 (file)
@@ -3,5 +3,6 @@ config 'alfred' 'alfred'
        option mode 'master'
        option batmanif 'bat0'
        option start_vis '1'
+       option run_facters '1'
 # REMOVE THIS LINE TO ENABLE ALFRED
        option disabled '1'
index 56818d84ccb5c91815c934a857527b7ecec82f20..e52a7bd48b1eb3de7f1cd08bd5495979761a664a 100755 (executable)
@@ -11,6 +11,7 @@ START=99
 STOP=99
 alfred_args=""
 vis_args=""
+facters_dir="/etc/alfred"
 pid_file_alfred="/var/run/alfred.pid"
 pid_file_vis="/var/run/vis.pid"
 enable=0
@@ -48,6 +49,8 @@ alfred_start()
                 append vis_args "-i $batmanif -s"
         fi
 
+       config_get_bool run_facters "$section" run_facters 0
+
        return 0
 }
 
@@ -63,12 +66,20 @@ start()
        SERVICE_PID_FILE="$pid_file_alfred"
        service_start /usr/sbin/alfred ${alfred_args}
 
-        if [ "$vis_enable" = "0" ]; then
-                exit 0
-        fi
-        echo "${initscript}: starting vis"
-       SERVICE_PID_FILE="$pid_file_vis"
-        service_start /usr/sbin/vis ${vis_args}
+       if [ "$vis_enable" = "1" ]; then
+               echo "${initscript}: starting vis"
+               SERVICE_PID_FILE="$pid_file_vis"
+               service_start /usr/sbin/vis ${vis_args}
+       fi
+
+       if [ "$run_facters" = "1" ]; then
+               ( for file in $facters_dir/* ; do [ -x $file ] && $file ; done )
+               if ! ( grep -q "for file in $facters_dir/\* ; do " /etc/crontabs/root 2>/dev/null ) ; then
+                       echo "*/5 * * * * ( for file in $facters_dir/* ; do [ -x \$file ] && \$file ; done )" >> /etc/crontabs/root
+                       /etc/init.d/cron enable
+                       /etc/init.d/cron restart
+               fi
+       fi
 }
 
 stop()
@@ -77,5 +88,6 @@ stop()
        service_stop /usr/sbin/alfred
        SERVICE_PID_FILE="$pid_file_vis"
        [ -x /usr/sbin/vis ] && service_stop /usr/sbin/vis
-
+       sed "\|for file in $facters_dir/\* ; do |d" -i /etc/crontabs/root
+       /etc/init.d/cron restart
 }