alfred: Add a lightweight framework for running facter scripts that feed data into...
[lede-routing/.git] / alfred / files / alfred.init
1 #!/bin/sh /etc/rc.common
2
3 #
4 # Copyright (C) 2013 OpenWrt.org
5 #
6 # This is free software, licensed under the GNU General Public License v2.
7 # See /LICENSE for more information.
8 #
9
10 START=99
11 STOP=99
12 alfred_args=""
13 vis_args=""
14 facters_dir="/etc/alfred"
15 pid_file_alfred="/var/run/alfred.pid"
16 pid_file_vis="/var/run/vis.pid"
17 enable=0
18 vis_enable=0
19 SERVICE_DAEMONIZE=1
20 SERVICE_WRITE_PID=1
21
22 alfred_start()
23 {
24         local args=""
25         local section="$1"
26         local disabled interface mode batmanif
27
28         # check if section is disabled
29         config_get_bool disabled "$section" disabled 0
30         [ $disabled = 0 ] || return 1
31
32         args=""
33
34         config_get interface "$section" interface
35         append args "-i $interface"
36
37         config_get mode "$section" mode
38         [ "$mode" = "master" ] && append args "-m"
39
40         config_get batmanif "$section" batmanif
41         append args "-b $batmanif"
42
43         append alfred_args "$args"
44         enable=1
45
46         config_get_bool start_vis "$section" start_vis 0
47         if [ "$start_vis" = 1 ] && [ -x /usr/sbin/vis ]; then
48                 vis_enable=1
49                 append vis_args "-i $batmanif -s"
50         fi
51
52         config_get_bool run_facters "$section" run_facters 0
53
54         return 0
55 }
56
57 start()
58 {
59         config_load "alfred"
60         config_foreach alfred_start alfred
61
62         if [ "$enable" = "0" ]; then
63                 exit 0
64         fi
65         echo "${initscript}: starting alfred"
66         SERVICE_PID_FILE="$pid_file_alfred"
67         service_start /usr/sbin/alfred ${alfred_args}
68
69         if [ "$vis_enable" = "1" ]; then
70                 echo "${initscript}: starting vis"
71                 SERVICE_PID_FILE="$pid_file_vis"
72                 service_start /usr/sbin/vis ${vis_args}
73         fi
74
75         if [ "$run_facters" = "1" ]; then
76                 ( for file in $facters_dir/* ; do [ -x $file ] && $file ; done )
77                 if ! ( grep -q "for file in $facters_dir/\* ; do " /etc/crontabs/root 2>/dev/null ) ; then
78                         echo "*/5 * * * * ( for file in $facters_dir/* ; do [ -x \$file ] && \$file ; done )" >> /etc/crontabs/root
79                         /etc/init.d/cron enable
80                         /etc/init.d/cron restart
81                 fi
82         fi
83 }
84
85 stop()
86 {
87         SERVICE_PID_FILE="$pid_file_alfred"
88         service_stop /usr/sbin/alfred
89         SERVICE_PID_FILE="$pid_file_vis"
90         [ -x /usr/sbin/vis ] && service_stop /usr/sbin/vis
91         sed "\|for file in $facters_dir/\* ; do |d" -i /etc/crontabs/root
92         /etc/init.d/cron restart
93 }