alfred: Add a lightweight framework for running facter scripts that feed data into...
[feed/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 }