Merge pull request #9595 from dengqf6/ev
[feed/packages.git] / utils / collectd / files / collectd.init
1 #!/bin/sh /etc/rc.common
2 # Copyright (C) 2006-2016 OpenWrt.org
3
4 START=80
5 STOP=10
6
7 USE_PROCD=1
8 COLLECTD_CONF="/tmp/collectd.conf"
9 LOG="logger -t collectd[$$] -p"
10 NICEPRIO=5
11
12 CONFIG_STRING=""
13
14 process_exec() {
15 printf "<Plugin exec>\n" >> "$COLLECTD_CONF"
16 config_foreach process_exec_sections exec_input "Exec"
17 config_foreach process_exec_sections exec_notify "NotificationExec"
18 printf "</Plugin>\n\n" >> "$COLLECTD_CONF"
19 }
20
21 process_exec_sections() {
22 local cfg="$1"
23 local section="$2"
24
25 local cmdline cmduser cmdgroup
26
27 config_get cmdline "$cfg" cmdline
28 [ -z "$cmdline" ] && {
29 $LOG notice "No cmdline option in config $cfg defined"
30 return 0
31 }
32
33 config_get cmduser "$cfg" cmduser
34 [ -z "$cmduser" ] && {
35 $LOG notice "No cmduser option in config $cfg defined"
36 return 0
37 }
38
39 config_get cmdgroup "$cfg" cmdgroup
40 if [ -z "$cmdgroup" ]; then
41 printf "\\t%s \"%s\" \"%s\"\n" "${section}" "${cmduser}" "${cmdline}" >> "$COLLECTD_CONF"
42 else
43 printf "\\t%s \"%s:%s\" \"%s\"\n" "${section}" "${cmduser}" "${cmdgroup}" "${cmdline}" >> "$COLLECTD_CONF"
44 fi
45 }
46
47 CONFIG_LIST=""
48 add_list_option() {
49 local value="$1"
50 local option="$2"
51 local indent="$3"
52
53 CONFIG_LIST="${CONFIG_LIST}${indent}${option} \"$value\"\n"
54 }
55
56 process_generic() {
57 local cfg="$1"
58 local indent="$2"
59 local json="$3"
60
61 local config=""
62
63 . /usr/share/libubox/jshn.sh
64 json_init
65 json_load_file "$json"
66
67 json_select string 1>/dev/null 2>&1
68 if [ $? -eq 0 ]; then
69 json_get_keys keys
70 for key in ${keys}; do
71 json_get_var option "$key"
72 config_get value "$cfg" "$option" ""
73 [ -z "$value" ] || {
74 config="${config}${indent}${option} \"${value}\"\n"
75 }
76 done
77 json_select ..
78 fi
79
80 json_select bool 1>/dev/null 2>&1
81 if [ $? -eq 0 ]; then
82 json_get_keys keys
83 for key in ${keys}; do
84 json_get_var option "$key"
85 config_get_bool value "$cfg" "$option"
86 if [ "$value" = "0" ]; then
87 config="${config}${indent}${option} false\n"
88 fi
89
90 if [ "$value" = "1" ]; then
91 config="${config}${indent}${option} true\n"
92 fi
93 done
94 json_select ..
95 fi
96
97 json_select list 1>/dev/null 2>&1
98 if [ $? -eq 0 ]; then
99 json_get_keys keys
100 for key in ${keys}; do
101 json_get_var option "$key"
102 CONFIG_LIST=""
103 config_list_foreach "$cfg" "$option" add_list_option "$option" "$indent"
104 config="${config}${CONFIG_LIST}"
105 done
106 json_select ..
107 fi
108
109 [ -z "$config" ] || {
110 printf "%s<Plugin %s>\n" "${CONFIG_STRING}" "$cfg" >> "$COLLECTD_CONF"
111 echo -e "${config}" >> "$COLLECTD_CONF"
112 printf "%s</Plugin>\n" "${CONFIG_STRING}" >> "$COLLECTD_CONF"
113 }
114
115 printf "\n" >> "$COLLECTD_CONF"
116 }
117
118 process_plugins() {
119 local cfg="$1"
120
121 local enable keys key option value
122
123 config_get enable "$cfg" enable 0
124 [ "$enable" = "1" ] || return 0
125
126 [ -f "/usr/lib/collectd/$cfg.so" ] || {
127 $LOG notice "Plugin collectd-mod-$cfg not installed"
128 return 0
129 }
130
131 [ -f "/usr/share/collectd/plugin/$cfg.json" ] || {
132 $LOG notice "Configuration definition file for $cfg not found"
133 return 0
134 }
135
136 printf "LoadPlugin %s\n" "$cfg" >> "$COLLECTD_CONF"
137 case "$cfg" in
138 exec)
139 CONFIG_STRING=""
140 process_exec
141 ;;
142 *)
143 CONFIG_STRING=""
144 process_generic "$cfg" "\\t" "/usr/share/collectd/plugin/$cfg.json"
145 ;;
146 esac
147 }
148
149 process_config() {
150 local alt_config_file BaseDir Include PIDFile PluginDir TypesDB
151 local Interval ReadThreads Hostname
152
153 rm -f "$COLLECTD_CONF"
154
155 [ -f /etc/config/collectd ] || {
156 $LOG notice "UCI config not found"
157 return 0
158 }
159 config_load collectd
160 config_get alt_config_file globals alt_config_file
161
162 # If "alt_config_file" specified, use that instead
163 [ -n "$alt_config_file" ] && [ -f "$alt_config_file" ] && {
164 rm -f "$COLLECTD_CONF"
165 ln -s "$alt_config_file" "$COLLECTD_CONF"
166 return 0
167 }
168
169 # GOBAL CONFIG
170 config_get BaseDir globals BaseDir "/var/run/collectd"
171 printf "BaseDir \"%s\"\n" "$BaseDir" >> "$COLLECTD_CONF"
172
173 config_get Include globals Include "/tmp/collectd.d"
174 printf "Include \"%s\"\n" "$Include" >> "$COLLECTD_CONF"
175 mkdir -p "$Include"
176
177 config_get PIDFile globals PIDFile "/var/run/collectd.pid"
178 printf "PIDFile \"%s\"\n" "$PIDFile" >> "$COLLECTD_CONF"
179
180 config_get PluginDir globals PluginDir "/usr/lib/collectd"
181 printf "PluginDir \"%s\"\n" "$PluginDir" >> "$COLLECTD_CONF"
182
183 config_get TypesDB globals TypesDB "/usr/share/collectd/types.db"
184 printf "TypesDB \"%s\"\n" "$TypesDB" >> "$COLLECTD_CONF"
185
186 config_get Interval globals Interval 30
187 printf "Interval \"%s\"\n" "$Interval" >> "$COLLECTD_CONF"
188
189 config_get ReadThreads globals ReadThreads 2
190 printf "ReadThreads \"%s\"\n" "$ReadThreads" >> "$COLLECTD_CONF"
191
192 config_get Hostname globals Hostname "$(uname -n)"
193 printf "Hostname \"%s\"\n" "$Hostname" >> "$COLLECTD_CONF"
194
195 printf "\n" >> "$COLLECTD_CONF"
196
197 # PLUGIN CONFIG
198 config_foreach process_plugins plugin
199 }
200
201 start_service() {
202 process_config
203
204 procd_open_instance
205 procd_set_param command /usr/sbin/collectd
206 procd_append_param command -C "$COLLECTD_CONF"
207 procd_append_param command -f # don't daemonize
208 procd_set_param nice "$NICEPRIO"
209 procd_set_param stderr 1
210 procd_set_param respawn
211 procd_close_instance
212 }