le1t0-deprec 2.1.6.001

Sign up to get free protection for your applications and to get access to all the features.
Files changed (230) hide show
  1. data/CHANGELOG +444 -0
  2. data/COPYING +19 -0
  3. data/LICENSE +339 -0
  4. data/README +154 -0
  5. data/THANKS +17 -0
  6. data/bin/depify +139 -0
  7. data/docs/EXAMPLE-installing_tracks.txt +41 -0
  8. data/docs/README.nagios +22 -0
  9. data/docs/README.rails +17 -0
  10. data/docs/config_gen_explained.txt +39 -0
  11. data/docs/deprec-1.x/deprec-1.x.quickstart +50 -0
  12. data/docs/deprec-1.x/notes.txt +12 -0
  13. data/docs/old/deprec_banner.gif +0 -0
  14. data/docs/windows_linux.txt +350 -0
  15. data/docs/xen/traffic_monitoring_with_vnstat.txt +95 -0
  16. data/docs/xen/xen-tools-notes.txt +31 -0
  17. data/docs/xen/xen_on_hardy.txt +39 -0
  18. data/lib/deprec.rb +42 -0
  19. data/lib/deprec/capistrano_extensions.rb +446 -0
  20. data/lib/deprec/recipes.rb +7 -0
  21. data/lib/deprec/recipes/aoe.rb +79 -0
  22. data/lib/deprec/recipes/app/mongrel.rb +213 -0
  23. data/lib/deprec/recipes/app/passenger.rb +190 -0
  24. data/lib/deprec/recipes/ar_sendmail.rb +67 -0
  25. data/lib/deprec/recipes/aspell.rb +22 -0
  26. data/lib/deprec/recipes/canonical.rb +68 -0
  27. data/lib/deprec/recipes/cap.rb +39 -0
  28. data/lib/deprec/recipes/chef.rb +68 -0
  29. data/lib/deprec/recipes/collectd.rb +112 -0
  30. data/lib/deprec/recipes/db/couchdb.rb +107 -0
  31. data/lib/deprec/recipes/db/mysql.rb +194 -0
  32. data/lib/deprec/recipes/db/postgresql.rb +104 -0
  33. data/lib/deprec/recipes/db/sqlite.rb +37 -0
  34. data/lib/deprec/recipes/ddclient.rb +51 -0
  35. data/lib/deprec/recipes/deprec.rb +167 -0
  36. data/lib/deprec/recipes/deprecated.rb +71 -0
  37. data/lib/deprec/recipes/drbd.rb +137 -0
  38. data/lib/deprec/recipes/dummy.rb +22 -0
  39. data/lib/deprec/recipes/example.rb +115 -0
  40. data/lib/deprec/recipes/git.rb +97 -0
  41. data/lib/deprec/recipes/gitosis.rb.disabled +55 -0
  42. data/lib/deprec/recipes/glusterfs.rb +176 -0
  43. data/lib/deprec/recipes/god.rb +70 -0
  44. data/lib/deprec/recipes/haproxy.rb +115 -0
  45. data/lib/deprec/recipes/heartbeat.rb +138 -0
  46. data/lib/deprec/recipes/imagemagick/imagemagick_bin.rb +24 -0
  47. data/lib/deprec/recipes/imagemagick/imagemagick_src.rb +39 -0
  48. data/lib/deprec/recipes/integrity.rb +108 -0
  49. data/lib/deprec/recipes/iptables.rb +94 -0
  50. data/lib/deprec/recipes/java.rb +23 -0
  51. data/lib/deprec/recipes/keepalived.rb +78 -0
  52. data/lib/deprec/recipes/ldap.rb +52 -0
  53. data/lib/deprec/recipes/logrotate.rb +56 -0
  54. data/lib/deprec/recipes/lvm.rb +20 -0
  55. data/lib/deprec/recipes/memcache.rb +49 -0
  56. data/lib/deprec/recipes/mongodb.rb +94 -0
  57. data/lib/deprec/recipes/monit.rb +135 -0
  58. data/lib/deprec/recipes/mysql_proxy.rb +67 -0
  59. data/lib/deprec/recipes/nagios.rb +361 -0
  60. data/lib/deprec/recipes/network.rb +116 -0
  61. data/lib/deprec/recipes/ntp.rb +103 -0
  62. data/lib/deprec/recipes/php.rb +58 -0
  63. data/lib/deprec/recipes/postfix.rb +115 -0
  64. data/lib/deprec/recipes/profiles.rb +125 -0
  65. data/lib/deprec/recipes/raid/amcc_3ware.rb +21 -0
  66. data/lib/deprec/recipes/rails.rb +330 -0
  67. data/lib/deprec/recipes/redhat_cluster.rb +228 -0
  68. data/lib/deprec/recipes/redis.rb +90 -0
  69. data/lib/deprec/recipes/ruby/mri.rb +55 -0
  70. data/lib/deprec/recipes/ruby/ree.rb +40 -0
  71. data/lib/deprec/recipes/rvm.rb +32 -0
  72. data/lib/deprec/recipes/s3utils.rb +63 -0
  73. data/lib/deprec/recipes/sphinx/thinking_sphinx.rb +105 -0
  74. data/lib/deprec/recipes/sphinx/ultrasphinx.rb +86 -0
  75. data/lib/deprec/recipes/ssh.rb +147 -0
  76. data/lib/deprec/recipes/ssl.rb +56 -0
  77. data/lib/deprec/recipes/starling.rb +119 -0
  78. data/lib/deprec/recipes/svn.rb +171 -0
  79. data/lib/deprec/recipes/syslog.rb +63 -0
  80. data/lib/deprec/recipes/trac.rb.disabled +277 -0
  81. data/lib/deprec/recipes/tsung.rb +74 -0
  82. data/lib/deprec/recipes/ubuntu.rb +90 -0
  83. data/lib/deprec/recipes/users.rb +90 -0
  84. data/lib/deprec/recipes/utils.rb +58 -0
  85. data/lib/deprec/recipes/vnstat.rb +85 -0
  86. data/lib/deprec/recipes/web/apache.rb +143 -0
  87. data/lib/deprec/recipes/web/nginx.rb +172 -0
  88. data/lib/deprec/recipes/wordpress.rb.notworking +96 -0
  89. data/lib/deprec/recipes/wpmu.rb +103 -0
  90. data/lib/deprec/recipes/xen.rb +364 -0
  91. data/lib/deprec/recipes/xentools.rb +101 -0
  92. data/lib/deprec/recipes_minus_rails.rb +125 -0
  93. data/lib/deprec/templates/aoe/aoe-init +55 -0
  94. data/lib/deprec/templates/aoe/fence_aoemask +351 -0
  95. data/lib/deprec/templates/apache/namevirtualhosts.conf +5 -0
  96. data/lib/deprec/templates/apache/ports.conf.erb +5 -0
  97. data/lib/deprec/templates/apache/status.conf.erb +17 -0
  98. data/lib/deprec/templates/ar_sendmail/logrotate.conf.erb +9 -0
  99. data/lib/deprec/templates/ar_sendmail/monit.conf.erb +5 -0
  100. data/lib/deprec/templates/chef/chef.json.erb +1 -0
  101. data/lib/deprec/templates/chef/solo.rb +2 -0
  102. data/lib/deprec/templates/collectd/collectd-init.d +153 -0
  103. data/lib/deprec/templates/collectd/collectd.conf.erb +686 -0
  104. data/lib/deprec/templates/ddclient/ddclient.conf.erb +11 -0
  105. data/lib/deprec/templates/ddclient/ddclient.erb +15 -0
  106. data/lib/deprec/templates/deprec/caprc.erb +14 -0
  107. data/lib/deprec/templates/drbd/drbd.conf.erb +531 -0
  108. data/lib/deprec/templates/glusterfs/glusterfsd-init.erb +95 -0
  109. data/lib/deprec/templates/gnbd_client/cluster.conf.erb +21 -0
  110. data/lib/deprec/templates/gnbd_client/clvm-default.erb +3 -0
  111. data/lib/deprec/templates/gnbd_client/cman-default.erb +6 -0
  112. data/lib/deprec/templates/gnbd_client/gnbdimports.conf.erb +1 -0
  113. data/lib/deprec/templates/gnbd_server/cluster.conf.erb +20 -0
  114. data/lib/deprec/templates/gnbd_server/clvm-default.erb +3 -0
  115. data/lib/deprec/templates/gnbd_server/cman-default.erb +6 -0
  116. data/lib/deprec/templates/gnbd_server/gnbd-server-default.erb +1 -0
  117. data/lib/deprec/templates/gnbd_server/gnbdexports.conf.erb +1 -0
  118. data/lib/deprec/templates/god/god-conf.erb +2 -0
  119. data/lib/deprec/templates/god/god-init.erb +47 -0
  120. data/lib/deprec/templates/haproxy/haproxy-init.d +120 -0
  121. data/lib/deprec/templates/haproxy/haproxy.cfg.erb +31 -0
  122. data/lib/deprec/templates/heartbeat/authkeys.erb +2 -0
  123. data/lib/deprec/templates/heartbeat/ha.cf.erb +15 -0
  124. data/lib/deprec/templates/heartbeat/haresources.erb +1 -0
  125. data/lib/deprec/templates/integrity/apache_vhost.erb +4 -0
  126. data/lib/deprec/templates/integrity/config.ru.erb +21 -0
  127. data/lib/deprec/templates/integrity/config.yml.erb +43 -0
  128. data/lib/deprec/templates/iptables/firewall-default.erb +13 -0
  129. data/lib/deprec/templates/iptables/firewall-init.erb +171 -0
  130. data/lib/deprec/templates/keepalived/keepalived.conf.erb +18 -0
  131. data/lib/deprec/templates/logrotate/logrotate.conf.erb +32 -0
  132. data/lib/deprec/templates/mongodb/mongodb-init.d +88 -0
  133. data/lib/deprec/templates/mongrel/apache_vhost.conf.erb +148 -0
  134. data/lib/deprec/templates/mongrel/logrotate.conf.erb +11 -0
  135. data/lib/deprec/templates/mongrel/mongrel_cluster-init-script +54 -0
  136. data/lib/deprec/templates/mongrel/mongrel_cluster.yml.erb +10 -0
  137. data/lib/deprec/templates/mongrel/monit.conf.erb +17 -0
  138. data/lib/deprec/templates/mongrel/nginx_vhost.conf.erb +41 -0
  139. data/lib/deprec/templates/monit/monit-init-script +104 -0
  140. data/lib/deprec/templates/monit/monitrc.erb +250 -0
  141. data/lib/deprec/templates/monit/nothing.monitrc +0 -0
  142. data/lib/deprec/templates/mysql/create_databases.sql +20 -0
  143. data/lib/deprec/templates/mysql/database.yml.prod +6 -0
  144. data/lib/deprec/templates/mysql/database.yml.stage +6 -0
  145. data/lib/deprec/templates/mysql/my.cnf.erb +140 -0
  146. data/lib/deprec/templates/mysql/sphinx.conf.prod +542 -0
  147. data/lib/deprec/templates/mysql/sphinx.conf.stage +542 -0
  148. data/lib/deprec/templates/mysql_proxy/mysql-proxy-default.erb +4 -0
  149. data/lib/deprec/templates/nagios/README +32 -0
  150. data/lib/deprec/templates/nagios/cgi.cfg.erb +357 -0
  151. data/lib/deprec/templates/nagios/check_linux_free_memory.pl +118 -0
  152. data/lib/deprec/templates/nagios/check_mongrel_cluster.rb +82 -0
  153. data/lib/deprec/templates/nagios/htpasswd.users +1 -0
  154. data/lib/deprec/templates/nagios/mrtg.cfg +180 -0
  155. data/lib/deprec/templates/nagios/nagios.cfg.erb +1325 -0
  156. data/lib/deprec/templates/nagios/nrpe.cfg.erb +222 -0
  157. data/lib/deprec/templates/nagios/nrpe.xinetd.erb +16 -0
  158. data/lib/deprec/templates/nagios/objects/commands.cfg.erb +265 -0
  159. data/lib/deprec/templates/nagios/objects/contacts.cfg.erb +89 -0
  160. data/lib/deprec/templates/nagios/objects/hosts.cfg.erb +114 -0
  161. data/lib/deprec/templates/nagios/objects/localhost.cfg.erb +116 -0
  162. data/lib/deprec/templates/nagios/objects/services.cfg.erb +165 -0
  163. data/lib/deprec/templates/nagios/objects/timeperiods.cfg.erb +94 -0
  164. data/lib/deprec/templates/nagios/resource.cfg.erb +34 -0
  165. data/lib/deprec/templates/network/hostname.erb +1 -0
  166. data/lib/deprec/templates/network/hosts.erb +2 -0
  167. data/lib/deprec/templates/network/interfaces.erb +18 -0
  168. data/lib/deprec/templates/network/resolv.conf.erb +6 -0
  169. data/lib/deprec/templates/nginx/logrotate.conf.erb +13 -0
  170. data/lib/deprec/templates/nginx/mime.types.erb +70 -0
  171. data/lib/deprec/templates/nginx/nginx-init-script +62 -0
  172. data/lib/deprec/templates/nginx/nginx.conf.erb +125 -0
  173. data/lib/deprec/templates/nginx/nginx.logrotate.d +12 -0
  174. data/lib/deprec/templates/nginx/nothing.conf +1 -0
  175. data/lib/deprec/templates/nginx/rails_nginx_vhost.conf.erb +41 -0
  176. data/lib/deprec/templates/ntp/ntp.conf.erb +42 -0
  177. data/lib/deprec/templates/passenger/apache_vhost.erb +29 -0
  178. data/lib/deprec/templates/passenger/logrotate.conf.erb +12 -0
  179. data/lib/deprec/templates/passenger/passenger.conf.erb +21 -0
  180. data/lib/deprec/templates/passenger/passenger.load.erb +3 -0
  181. data/lib/deprec/templates/postfix/aliases.erb +3 -0
  182. data/lib/deprec/templates/postfix/dynamicmaps.cf.erb +8 -0
  183. data/lib/deprec/templates/postfix/main.cf.erb +36 -0
  184. data/lib/deprec/templates/postfix/master.cf.erb +77 -0
  185. data/lib/deprec/templates/redis/redis-conf.erb +132 -0
  186. data/lib/deprec/templates/redis/redis-init.erb +50 -0
  187. data/lib/deprec/templates/s3utils/s3cfg +35 -0
  188. data/lib/deprec/templates/s3utils/s3config.yml +3 -0
  189. data/lib/deprec/templates/sphinx/monit.conf.erb +5 -0
  190. data/lib/deprec/templates/ssh/ssh_config.erb +50 -0
  191. data/lib/deprec/templates/ssh/sshd_config.erb +78 -0
  192. data/lib/deprec/templates/ssl/make-ssl-cert +138 -0
  193. data/lib/deprec/templates/ssl/ssl-cert-snakeoil.key +15 -0
  194. data/lib/deprec/templates/ssl/ssl-cert-snakeoil.pem +19 -0
  195. data/lib/deprec/templates/starling/monit.conf.erb +14 -0
  196. data/lib/deprec/templates/starling/starling-init-script.erb +71 -0
  197. data/lib/deprec/templates/subversion/svn.apache.vhost.erb +43 -0
  198. data/lib/deprec/templates/syslog/syslog.conf.erb +71 -0
  199. data/lib/deprec/templates/syslog/syslogd.erb +13 -0
  200. data/lib/deprec/templates/trac/apache_vhost.conf.erb +24 -0
  201. data/lib/deprec/templates/trac/nginx_vhost.conf.erb +26 -0
  202. data/lib/deprec/templates/trac/trac.ini.erb +169 -0
  203. data/lib/deprec/templates/trac/trac_deprec.png +0 -0
  204. data/lib/deprec/templates/trac/tracd-init.erb +43 -0
  205. data/lib/deprec/templates/trac/users.htdigest.erb +0 -0
  206. data/lib/deprec/templates/tsung/tsung.xml.erb +47 -0
  207. data/lib/deprec/templates/vnstat/config.php +57 -0
  208. data/lib/deprec/templates/wordpress/apache2_wordpress_vhost.conf.erb +31 -0
  209. data/lib/deprec/templates/wordpress/wp-config.php.erb +31 -0
  210. data/lib/deprec/templates/wpmu/apache_vhost.conf.erb +13 -0
  211. data/lib/deprec/templates/xen/network-bridge-wrapper +3 -0
  212. data/lib/deprec/templates/xen/xend-config.sxp.erb +195 -0
  213. data/lib/deprec/templates/xen/xend-init.erb +57 -0
  214. data/lib/deprec/templates/xen/xendomains.erb +137 -0
  215. data/lib/deprec/templates/xentools/100-ubuntu-setup +26 -0
  216. data/lib/deprec/templates/xentools/15-disable-hwclock +40 -0
  217. data/lib/deprec/templates/xentools/30-disable-gettys +57 -0
  218. data/lib/deprec/templates/xentools/31-ubuntu-setup +32 -0
  219. data/lib/deprec/templates/xentools/40-setup-networking +145 -0
  220. data/lib/deprec/templates/xentools/98-custom +17 -0
  221. data/lib/deprec/templates/xentools/xen-tools.conf.erb +278 -0
  222. data/lib/deprec/templates/xentools/xm.tmpl.erb +138 -0
  223. data/lib/deprec_cmd_completion.sh +26 -0
  224. data/lib/deprec_minus_rails.rb +12 -0
  225. data/lib/vmbuilder_plugins/all.rb +20 -0
  226. data/lib/vmbuilder_plugins/apt.rb +93 -0
  227. data/lib/vmbuilder_plugins/emerge.rb +76 -0
  228. data/lib/vmbuilder_plugins/gem.rb +100 -0
  229. data/lib/vmbuilder_plugins/std.rb +203 -0
  230. metadata +304 -0
@@ -0,0 +1,5 @@
1
+ NameVirtualHost *:80
2
+
3
+ <IfModule mod_ssl.c>
4
+ NameVirtualHost *:443
5
+ </IfModule>
@@ -0,0 +1,5 @@
1
+ Listen 80
2
+
3
+ <IfModule mod_ssl.c>
4
+ Listen 443
5
+ </IfModule>
@@ -0,0 +1,17 @@
1
+ <IfModule mod_status.c>
2
+ #
3
+ # Allow server status reports generated by mod_status,
4
+ # with the URL of http://servername/server-status
5
+ # Uncomment and change the ".example.com" to allow
6
+ # access from other hosts.
7
+ #
8
+ ExtendedStatus On
9
+ <Location /server-status>
10
+ SetHandler server-status
11
+ Order deny,allow
12
+ Deny from all
13
+ Allow from localhost ip6-localhost
14
+ # Allow from .example.com
15
+ </Location>
16
+
17
+ </IfModule>
@@ -0,0 +1,9 @@
1
+ <%= shared_path %>/log/ar_sendmail.log {
2
+ daily
3
+ rotate 14
4
+ dateext
5
+ missingok
6
+ compress
7
+ sharedscripts
8
+ copytruncate
9
+ }
@@ -0,0 +1,5 @@
1
+ check process ar_sendmail-<%= application %> with pidfile <%= current_path %>/tmp/pids/ar_sendmail.pid
2
+ start program = "/usr/local/sbin/daemonize -c <%= current_path %> -o <%= current_path %>/log/ar_sendmail.log -e <%= current_path %>/log/ar_sendmail.log -p <%= current_path %>/tmp/pids/ar_sendmail.pid -l <%= current_path %>/tmp/pids/ar_sendmail.pid /usr/local/bin/ar_sendmail --environment production --verbose"
3
+ stop program = "/usr/bin/xargs kill -9 < <%= current_path %>/tmp/pids/ar_sendmail.pid"
4
+
5
+ if 3 restarts within 5 cycles then timeout
@@ -0,0 +1 @@
1
+ { "chef": { "server_fqdn": "<%= server_fqdn %>" }, "recipes": "<%= recipes %>" }
@@ -0,0 +1,2 @@
1
+ file_cache_path "/etc/chef/solo"
2
+ cookbook_path "/etc/chef/solo/cookbooks"
@@ -0,0 +1,153 @@
1
+ #!/bin/bash
2
+ #
3
+ # collectd - start and stop the statistics collection daemon
4
+ # http://collectd.org/
5
+ #
6
+ # Copyright (C) 2005-2006 Florian Forster <octo@verplant.org>
7
+ # Copyright (C) 2006-2008 Sebastian Harl <sh@tokkee.org>
8
+ #
9
+
10
+ ### BEGIN INIT INFO
11
+ # Provides: collectd
12
+ # Required-Start: $local_fs $remote_fs
13
+ # Required-Stop: $local_fs $remote_fs
14
+ # Should-Start: $network $named $syslog $time
15
+ # Should-Stop: $network $named $syslog
16
+ # Default-Start: 2 3 4 5
17
+ # Default-Stop: 0 1 6
18
+ # Short-Description: start the statistics collection daemon
19
+ ### END INIT INFO
20
+
21
+ set -e
22
+
23
+ PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
24
+
25
+ DISABLE=0
26
+
27
+ DESC="statistics collection and monitoring daemon"
28
+ NAME=collectd
29
+ DAEMON=/usr/local/sbin/collectd
30
+
31
+ CONFIGFILE=/usr/local/etc/collectd.conf
32
+ PIDFILE=/usr/local/var/run/collectd.pid
33
+
34
+ USE_COLLECTDMON=1
35
+ COLLECTDMON_DAEMON=/usr/local/sbin/collectdmon
36
+ COLLECTDMON_PIDFILE=/usr/local/var/run/collectdmon.pid
37
+
38
+ MAXWAIT=30
39
+
40
+ # Gracefully exit if the package has been removed.
41
+ test -x $DAEMON || exit 0
42
+
43
+ if [ -r /etc/default/$NAME ]; then
44
+ . /etc/default/$NAME
45
+ fi
46
+
47
+ if test "$DISABLE" != 0; then
48
+ echo "$NAME has been disabled - see /etc/default/$NAME."
49
+ exit 0
50
+ fi
51
+
52
+ if test "$ENABLE_COREFILES" == 1; then
53
+ ulimit -c unlimited
54
+ fi
55
+
56
+ if test "$USE_COLLECTDMON" == 1; then
57
+ _PIDFILE="$COLLECTDMON_PIDFILE"
58
+ else
59
+ _PIDFILE="$PIDFILE"
60
+ fi
61
+
62
+ d_start() {
63
+ if ! $DAEMON -t -C "$CONFIGFILE" > /dev/null 2>&1; then
64
+ $DAEMON -t -C "$CONFIGFILE"
65
+ exit 1
66
+ fi
67
+
68
+ if test "$USE_COLLECTDMON" == 1; then
69
+ start-stop-daemon --start --quiet --pidfile "$_PIDFILE" \
70
+ --exec $COLLECTDMON_DAEMON -- -P "$_PIDFILE" -- -C "$CONFIGFILE"
71
+ else
72
+ start-stop-daemon --start --quiet --pidfile "$_PIDFILE" \
73
+ --exec $DAEMON -- -C "$CONFIGFILE" -P "$_PIDFILE"
74
+ fi
75
+ }
76
+
77
+ still_running_warning="
78
+ WARNING: $NAME might still be running.
79
+ In large setups it might take some time to write all pending data to
80
+ the disk. You can adjust the waiting time in /etc/default/collectd."
81
+
82
+ d_stop() {
83
+ PID=$( cat "$_PIDFILE" 2> /dev/null ) || true
84
+
85
+ start-stop-daemon --stop --quiet --oknodo --pidfile "$_PIDFILE"
86
+
87
+ sleep 1
88
+ if test -n "$PID" && kill -0 $PID 2> /dev/null; then
89
+ i=0
90
+ while kill -0 $PID 2> /dev/null; do
91
+ i=$(( $i + 2 ))
92
+ echo -n " ."
93
+
94
+ if test $i -gt $MAXWAIT; then
95
+ echo "$still_running_warning" >&2
96
+ return 1
97
+ fi
98
+
99
+ sleep 2
100
+ done
101
+ return 0
102
+ fi
103
+ }
104
+
105
+ d_status() {
106
+ PID=$( cat "$_PIDFILE" 2> /dev/null ) || true
107
+
108
+ if test -n "$PID" && kill -0 $PID 2> /dev/null; then
109
+ echo "collectd ($PID) is running."
110
+ exit 0
111
+ else
112
+ PID=$( pidof collectd ) || true
113
+
114
+ if test -n "$PID"; then
115
+ echo "collectd ($PID) is running."
116
+ exit 0
117
+ else
118
+ echo "collectd is stopped."
119
+ fi
120
+ fi
121
+ }
122
+
123
+ case "$1" in
124
+ start)
125
+ echo -n "Starting $DESC: $NAME"
126
+ d_start
127
+ echo "."
128
+ ;;
129
+ stop)
130
+ echo -n "Stopping $DESC: $NAME"
131
+ d_stop
132
+ echo "."
133
+ ;;
134
+ status)
135
+ d_status
136
+ ;;
137
+ restart|force-reload)
138
+ echo -n "Restarting $DESC: $NAME"
139
+ d_stop
140
+ sleep 1
141
+ d_start
142
+ echo "."
143
+ ;;
144
+ *)
145
+ echo "Usage: $0 {start|stop|restart|force-reload}" >&2
146
+ exit 1
147
+ ;;
148
+ esac
149
+
150
+ exit 0
151
+
152
+ # vim: syntax=sh noexpandtab sw=4 ts=4 :
153
+
@@ -0,0 +1,686 @@
1
+ #
2
+ # Config file for collectd(1).
3
+ # Please read collectd.conf(5) for a list of options.
4
+ # http://collectd.org/
5
+ #
6
+
7
+ ##############################################################################
8
+ # Global #
9
+ #----------------------------------------------------------------------------#
10
+ # Global settings for the daemon. #
11
+ ##############################################################################
12
+
13
+ #Hostname "localhost"
14
+ FQDNLookup true
15
+ #BaseDir "/usr/local/var/lib/collectd"
16
+ #PIDFile "/usr/local/var/run/collectd.pid"
17
+ #PluginDir "/usr/local/lib/collectd"
18
+ #TypesDB "/usr/local/share/collectd/types.db"
19
+ #Interval 10
20
+ #ReadThreads 5
21
+
22
+ ##############################################################################
23
+ # Logging #
24
+ #----------------------------------------------------------------------------#
25
+ # Plugins which provide logging functions should be loaded first, so log #
26
+ # messages generated when loading or configuring other plugins can be #
27
+ # accessed. #
28
+ ##############################################################################
29
+
30
+ LoadPlugin syslog
31
+ #LoadPlugin logfile
32
+
33
+ #<Plugin logfile>
34
+ # LogLevel info
35
+ # File STDOUT
36
+ # Timestamp true
37
+ #</Plugin>
38
+
39
+ #<Plugin syslog>
40
+ # LogLevel info
41
+ #</Plugin>
42
+
43
+ ##############################################################################
44
+ # LoadPlugin section #
45
+ #----------------------------------------------------------------------------#
46
+ # Lines beginning with a single `#' belong to plugins which have been built #
47
+ # but are disabled by default. #
48
+ # #
49
+ # Lines begnning with `##' belong to plugins which have not been built due #
50
+ # to missing dependencies or because they have been deactivated explicitly. #
51
+ ##############################################################################
52
+
53
+ LoadPlugin apache
54
+ #LoadPlugin apcups
55
+ ##LoadPlugin apple_sensors
56
+ #LoadPlugin ascent
57
+ #LoadPlugin battery
58
+ #LoadPlugin bind
59
+ #LoadPlugin conntrack
60
+ LoadPlugin cpu
61
+ #LoadPlugin cpufreq
62
+ #LoadPlugin csv
63
+ #LoadPlugin curl
64
+ #LoadPlugin dbi
65
+ #LoadPlugin df
66
+ #LoadPlugin disk
67
+ #LoadPlugin dns
68
+ #LoadPlugin email
69
+ #LoadPlugin entropy
70
+ #LoadPlugin exec
71
+ #LoadPlugin filecount
72
+ #LoadPlugin fscache
73
+ ##LoadPlugin gmond
74
+ #LoadPlugin hddtemp
75
+ LoadPlugin interface
76
+ #LoadPlugin iptables
77
+ ##LoadPlugin ipmi
78
+ ##LoadPlugin ipvs
79
+ #LoadPlugin irq
80
+ ##LoadPlugin java
81
+ ##LoadPlugin libvirt
82
+ LoadPlugin load
83
+ #LoadPlugin mbmon
84
+ ##LoadPlugin memcachec
85
+ #LoadPlugin memcached
86
+ LoadPlugin memory
87
+ #LoadPlugin multimeter
88
+ #LoadPlugin mysql
89
+ ##LoadPlugin netlink
90
+ LoadPlugin network
91
+ #LoadPlugin nfs
92
+ #LoadPlugin nginx
93
+ #LoadPlugin notify_desktop
94
+ #LoadPlugin notify_email
95
+ #LoadPlugin ntpd
96
+ #LoadPlugin nut
97
+ ##LoadPlugin onewire
98
+ #LoadPlugin openvpn
99
+ ##LoadPlugin oracle
100
+ #LoadPlugin perl
101
+ #LoadPlugin ping
102
+ #LoadPlugin postgresql
103
+ #LoadPlugin powerdns
104
+ #LoadPlugin processes
105
+ #LoadPlugin protocols
106
+ ##LoadPlugin rrdcached
107
+ LoadPlugin rrdtool
108
+ #LoadPlugin sensors
109
+ #LoadPlugin serial
110
+ ##LoadPlugin snmp
111
+ #LoadPlugin swap
112
+ #LoadPlugin table
113
+ #LoadPlugin tail
114
+ ##LoadPlugin tape
115
+ #LoadPlugin tcpconns
116
+ #LoadPlugin teamspeak2
117
+ #LoadPlugin ted
118
+ #LoadPlugin thermal
119
+ #LoadPlugin unixsock
120
+ #LoadPlugin uptime
121
+ #LoadPlugin users
122
+ #LoadPlugin uuid
123
+ #LoadPlugin vmem
124
+ #LoadPlugin vserver
125
+ #LoadPlugin wireless
126
+ ##LoadPlugin xmms
127
+
128
+ ##############################################################################
129
+ # Plugin configuration #
130
+ #----------------------------------------------------------------------------#
131
+ # In this section configuration stubs for each plugin are provided. A desc- #
132
+ # ription of those options is available in the collectd.conf(5) manual page. #
133
+ ##############################################################################
134
+
135
+ <Plugin apache>
136
+ URL "http://localhost/server-status?auto"
137
+ # User "www-user"
138
+ # Password "secret"
139
+ # CACert "/etc/ssl/ca.crt"
140
+ </Plugin>
141
+
142
+ #<Plugin apcups>
143
+ # Host "localhost"
144
+ # Port "3551"
145
+ #</Plugin>
146
+
147
+ #<Plugin ascent>
148
+ # URL "http://localhost/ascent/status/"
149
+ # User "www-user"
150
+ # Password "secret"
151
+ # CACert "/etc/ssl/ca.crt"
152
+ #</Plugin>
153
+
154
+ #<Plugin "bind">
155
+ # URL "http://localhost:8053/"
156
+ # OpCodes true
157
+ # QTypes true
158
+ #
159
+ # ServerStats true
160
+ # ZoneMaintStats true
161
+ # ResolverStats false
162
+ # MemoryStats true
163
+ #
164
+ # <View "_default">
165
+ # QTypes true
166
+ # ResolverStats true
167
+ # CacheRRSets true
168
+ #
169
+ # Zone "127.in-addr.arpa/IN"
170
+ # </View>
171
+ #</Plugin>
172
+
173
+ #<Plugin csv>
174
+ # DataDir "/usr/local/var/lib/collectd/csv"
175
+ # StoreRates false
176
+ #</Plugin>
177
+
178
+ #<Plugin curl>
179
+ # <Page "stock_quotes">
180
+ # URL "http://finance.google.com/finance?q=NYSE%3AAMD"
181
+ # User "foo"
182
+ # Password "bar"
183
+ # <Match>
184
+ # Regex "<span +class=\"pr\"[^>]*> *([0-9]*\\.[0-9]+) *</span>"
185
+ # DSType "GaugeAverage"
186
+ # Type "stock_value"
187
+ # Instance "AMD"
188
+ # </Match>
189
+ # </Page>
190
+ #</Plugin>
191
+
192
+ #<Plugin dbi>
193
+ # <Query "num_of_customers">
194
+ # Statement "SELECT 'customers' AS c_key, COUNT(*) AS c_value FROM customers_tbl"
195
+ # <Result>
196
+ # Type "gauge"
197
+ # InstancesFrom "c_key"
198
+ # ValuesFrom "c_value"
199
+ # </Result>
200
+ # </Query>
201
+ # <Database "customers_db">
202
+ # Driver "mysql"
203
+ # DriverOption "host" "localhost"
204
+ # DriverOption "username" "collectd"
205
+ # DriverOption "password" "AeXohy0O"
206
+ # DriverOption "dbname" "custdb0"
207
+ # #SelectDB "custdb0"
208
+ # Query "num_of_customers"
209
+ # #Query "..."
210
+ # </Database>
211
+ #</Plugin>
212
+
213
+ #<Plugin df>
214
+ # Device "/dev/hda1"
215
+ # Device "192.168.0.2:/mnt/nfs"
216
+ # MountPoint "/home"
217
+ # FSType "ext3"
218
+ # IgnoreSelected false
219
+ #</Plugin>
220
+
221
+ #<Plugin disk>
222
+ # Disk "/^[hs]d[a-f][0-9]?$/"
223
+ # IgnoreSelected false
224
+ #</Plugin>
225
+
226
+ #<Plugin dns>
227
+ # Interface "eth0"
228
+ # IgnoreSource "192.168.0.1"
229
+ #</Plugin>
230
+
231
+ #<Plugin email>
232
+ # SocketFile "/usr/local/var/run/collectd-email"
233
+ # SocketGroup "collectd"
234
+ # SocketPerms "0770"
235
+ # MaxConns 5
236
+ #</Plugin>
237
+
238
+ #<Plugin exec>
239
+ # Exec "user:group" "/path/to/exec"
240
+ # NotificationExec "user:group" "/path/to/exec"
241
+ #</Plugin>
242
+
243
+ #<Plugin filecount>
244
+ # <Directory "/path/to/dir">
245
+ # Instance "foodir"
246
+ # Name "*.conf"
247
+ # MTime "-5m"
248
+ # Size "+10k"
249
+ # Recursive true
250
+ # </Directory>
251
+ #</Plugin>
252
+
253
+ #<Plugin "gmond">
254
+ # MCReceiveFrom "239.2.11.71" "8649"
255
+ # <Metric "swap_total">
256
+ # Type "swap"
257
+ # TypeInstance "total"
258
+ # DataSource "value"
259
+ # </Metric>
260
+ # <Metric "swap_free">
261
+ # Type "swap"
262
+ # TypeInstance "free"
263
+ # DataSource "value"
264
+ # </Metric>
265
+ #</Plugin>
266
+
267
+ #<Plugin hddtemp>
268
+ # Host "127.0.0.1"
269
+ # Port "7634"
270
+ #
271
+ # #----------------------------------------------------------------#
272
+ # # `TranslateDevicename' enabled backwards compatibility behavior #
273
+ # # and is enabled by default. Setting this option to `false' is #
274
+ # # highly recommended. #
275
+ # #----------------------------------------------------------------#
276
+ # TranslateDevicename false
277
+ #</Plugin>
278
+
279
+ #<Plugin interface>
280
+ # Interface "eth0"
281
+ # IgnoreSelected false
282
+ #</Plugin>
283
+
284
+ #<Plugin ipmi>
285
+ # Sensor "some_sensor"
286
+ # Sensor "another_one"
287
+ # IgnoreSelected false
288
+ # NotifySensorAdd false
289
+ # NotifySensorRemove true
290
+ # NotifySensorNotPresent false
291
+ #</Plugin>
292
+
293
+ #<Plugin iptables>
294
+ # Chain table chain
295
+ #</Plugin>
296
+
297
+ #<Plugin irq>
298
+ # Irq 7
299
+ # Irq 8
300
+ # Irq 9
301
+ # IgnoreSelected true
302
+ #</Plugin>
303
+
304
+ #<Plugin "java">
305
+ # JVMArg "-verbose:jni"
306
+ # JVMArg "-Djava.class.path=/opt/collectd/lib/collectd/bindings/java"
307
+ #
308
+ # LoadPlugin "org.collectd.java.Foobar"
309
+ # <Plugin "org.collectd.java.Foobar">
310
+ # # To be parsed by the plugin
311
+ # </Plugin>
312
+ #</Plugin>
313
+
314
+ #<Plugin libvirt>
315
+ # Connection "xen:///"
316
+ # RefreshInterval 60
317
+ # Domain "name"
318
+ # BlockDevice "name:device"
319
+ # InterfaceDevice "name:device"
320
+ # IgnoreSelected false
321
+ # HostnameFormat name
322
+ #</Plugin>
323
+
324
+ #<Plugin mbmon>
325
+ # Host "127.0.0.1"
326
+ # Port "411"
327
+ #</Plugin>
328
+
329
+ #<Plugin memcachec>
330
+ # <Page "plugin_instance">
331
+ # Server "localhost"
332
+ # Key "page_key"
333
+ # <Match>
334
+ # Regex "(\\d+) bytes sent"
335
+ # DSType CounterAdd
336
+ # Type "ipt_octets"
337
+ # Instance "type_instance"
338
+ # </Match>
339
+ # </Page>
340
+ #</Plugin>
341
+
342
+ #<Plugin memcached>
343
+ # Host "127.0.0.1"
344
+ # Port "11211"
345
+ #</Plugin>
346
+
347
+ #<Plugin mysql>
348
+ # <Database db_name>
349
+ # Host "database.serv.er"
350
+ # User "db_user"
351
+ # Password "secret"
352
+ # Database "db_name"
353
+ # MasterStats true
354
+ # </Database>
355
+ #
356
+ # <Database db_name2>
357
+ # Host "localhost"
358
+ # Socket "/var/run/mysql/mysqld.sock"
359
+ # SlaveStats true
360
+ # SlaveNotifications true
361
+ # </Database>
362
+ #</Plugin>
363
+
364
+ #<Plugin netlink>
365
+ # Interface "All"
366
+ # VerboseInterface "All"
367
+ # QDisc "eth0" "pfifo_fast-1:0"
368
+ # Class "ppp0" "htb-1:10"
369
+ # Filter "ppp0" "u32-1:0"
370
+ # IgnoreSelected false
371
+ #</Plugin>
372
+
373
+ <Plugin network>
374
+ Server "<%= collectd_server %>" "25826"
375
+ # Server "239.192.74.66" "25826"
376
+ # Listen "ff18::efc0:4a42" "25826"
377
+ # Listen "239.192.74.66" "25826"
378
+ # TimeToLive "128"
379
+ # Forward false
380
+ # CacheFlush 1800
381
+ </Plugin>
382
+
383
+ #<Plugin nginx>
384
+ # URL "http://localhost/status?auto"
385
+ # User "www-user"
386
+ # Password "secret"
387
+ # CACert "/etc/ssl/ca.crt"
388
+ #</Plugin>
389
+
390
+ #<Plugin notify_desktop>
391
+ # OkayTimeout 1000
392
+ # WarningTimeout 5000
393
+ # FailureTimeout 0
394
+ #</Plugin>
395
+
396
+ #<Plugin notify_email>
397
+ # SMTPServer "localhost"
398
+ # SMTPPort 25
399
+ # SMTPUser "my-username"
400
+ # SMTPPassword "my-password"
401
+ # From "collectd@main0server.com"
402
+ # # <WARNING/FAILURE/OK> on <hostname>. beware! do not use not more than two %s in this string!!!
403
+ # Subject "Aaaaaa!! %s on %s!!!!!"
404
+ # Recipient "email1@domain1.net"
405
+ # Recipient "email2@domain2.com"
406
+ #</Plugin>
407
+
408
+ #<Plugin ntpd>
409
+ # Host "localhost"
410
+ # Port 123
411
+ # ReverseLookups false
412
+ #</Plugin>
413
+
414
+ #<Plugin nut>
415
+ # UPS "upsname@hostname:port"
416
+ #</Plugin>
417
+
418
+ #<Plugin onewire>
419
+ # Device "-s localhost:4304"
420
+ # Sensor "F10FCA000800"
421
+ # IgnoreSelected false
422
+ #</Plugin>
423
+
424
+ #<Plugin openvpn>
425
+ # StatusFile "/etc/openvpn/openvpn-status.log"
426
+ #</Plugin>
427
+
428
+ #<Plugin oracle>
429
+ # <Query "out_of_stock">
430
+ # Statement "SELECT category, COUNT(*) AS value FROM products WHERE in_stock = 0 GROUP BY category"
431
+ # <Result>
432
+ # Type "gauge"
433
+ # InstancesFrom "category"
434
+ # ValuesFrom "value"
435
+ # </Result>
436
+ # </Query>
437
+ # <Database "product_information">
438
+ # ConnectID "db01"
439
+ # Username "oracle"
440
+ # Password "secret"
441
+ # Query "out_of_stock"
442
+ # </Database>
443
+ #</Plugin>
444
+
445
+ #<Plugin perl>
446
+ # IncludeDir "/my/include/path"
447
+ # BaseName "Collectd::Plugin"
448
+ # EnableDebugger ""
449
+ # LoadPlugin foo
450
+ #
451
+ # <Plugin foo>
452
+ # Foo "Bar"
453
+ # Qux "Baz"
454
+ # </Plugin>
455
+ #</Plugin>
456
+
457
+ #<Plugin ping>
458
+ # Host "host.foo.bar"
459
+ # TTL 255
460
+ #</Plugin>
461
+
462
+ #<Plugin postgresql>
463
+ # <Query magic>
464
+ # Statement "SELECT magic FROM wizard WHERE host = $1;"
465
+ # Param hostname
466
+ # <Result>
467
+ # Type gauge
468
+ # InstancePrefix "magic"
469
+ # ValuesFrom magic
470
+ # </Result>
471
+ # </Query>
472
+ # <Query rt36_tickets>
473
+ # Statement "SELECT COUNT(type) AS count, type \
474
+ # FROM (SELECT CASE \
475
+ # WHEN resolved = 'epoch' THEN 'open' \
476
+ # ELSE 'resolved' END AS type \
477
+ # FROM tickets) type \
478
+ # GROUP BY type;"
479
+ # <Result>
480
+ # Type counter
481
+ # InstancePrefix "rt36_tickets"
482
+ # InstancesFrom "type"
483
+ # ValuesFrom "count"
484
+ # </Result>
485
+ # </Query>
486
+ # <Database foo>
487
+ # Host "hostname"
488
+ # Port "5432"
489
+ # User "username"
490
+ # Password "secret"
491
+ # SSLMode "prefer"
492
+ # KRBSrvName "kerberos_service_name"
493
+ # Query magic
494
+ # </Database>
495
+ # <Database bar>
496
+ # Service "service_name"
497
+ # Query backend # predefined
498
+ # Query rt36_tickets
499
+ # </Database>
500
+ #</Plugin>
501
+
502
+ #<Plugin powerdns>
503
+ # <Server "server_name">
504
+ # Collect "latency"
505
+ # Collect "udp-answers" "udp-queries"
506
+ # Socket "/var/run/pdns.controlsocket"
507
+ # </Server>
508
+ # <Recursor "recursor_name">
509
+ # Collect "questions"
510
+ # Collect "cache-hits" "cache-misses"
511
+ # Socket "/var/run/pdns_recursor.controlsocket"
512
+ # </Recursor>
513
+ # LocalSocket "/opt/collectd/var/run/collectd-powerdns"
514
+ #</Plugin>
515
+
516
+ #<Plugin processes>
517
+ # Process "name"
518
+ #</Plugin>
519
+
520
+ #<Plugin protocols>
521
+ # Value "/^Tcp:/"
522
+ # IgnoreSelected false
523
+ #</Plugin>
524
+
525
+ #<Plugin rrdcached>
526
+ # DaemonAddress "unix:/tmp/rrdcached.sock"
527
+ # DataDir "/usr/local/var/lib/collectd/rrd"
528
+ # CreateFiles true
529
+ # CollectStatistics true
530
+ #</Plugin>
531
+
532
+ #<Plugin rrdtool>
533
+ # DataDir "/usr/local/var/lib/collectd/rrd"
534
+ # CacheTimeout 120
535
+ # CacheFlush 900
536
+ #</Plugin>
537
+
538
+ #<Plugin sensors>
539
+ # Sensor "it8712-isa-0290/temperature-temp1"
540
+ # Sensor "it8712-isa-0290/fanspeed-fan3"
541
+ # Sensor "it8712-isa-0290/voltage-in8"
542
+ # IgnoreSelected false
543
+ #</Plugin>
544
+
545
+ #<Plugin snmp>
546
+ # <Data "powerplus_voltge_input">
547
+ # Type "voltage"
548
+ # Table false
549
+ # Instance "input_line1"
550
+ # Values "SNMPv2-SMI::enterprises.6050.5.4.1.1.2.1"
551
+ # </Data>
552
+ # <Data "hr_users">
553
+ # Type "users"
554
+ # Table false
555
+ # Instance ""
556
+ # Values "HOST-RESOURCES-MIB::hrSystemNumUsers.0"
557
+ # </Data>
558
+ # <Data "std_traffic">
559
+ # Type "if_octets"
560
+ # Table true
561
+ # Instance "IF-MIB::ifDescr"
562
+ # Values "IF-MIB::ifInOctets" "IF-MIB::ifOutOctets"
563
+ # </Data>
564
+ #
565
+ # <Host "some.switch.mydomain.org">
566
+ # Address "192.168.0.2"
567
+ # Version 1
568
+ # Community "community_string"
569
+ # Collect "std_traffic"
570
+ # Inverval 120
571
+ # </Host>
572
+ # <Host "some.server.mydomain.org">
573
+ # Address "192.168.0.42"
574
+ # Version 2
575
+ # Community "another_string"
576
+ # Collect "std_traffic" "hr_users"
577
+ # </Host>
578
+ # <Host "some.ups.mydomain.org">
579
+ # Address "192.168.0.3"
580
+ # Version 1
581
+ # Community "more_communities"
582
+ # Collect "powerplus_voltge_input"
583
+ # Interval 300
584
+ # </Host>
585
+ #</Plugin>
586
+
587
+ #<Plugin "table">
588
+ # <Table "/proc/slabinfo">
589
+ # Instance "slabinfo"
590
+ # Separator " "
591
+ # <Result>
592
+ # Type gauge
593
+ # InstancePrefix "active_objs"
594
+ # InstancesFrom 0
595
+ # ValuesFrom 1
596
+ # </Result>
597
+ # <Result>
598
+ # Type gauge
599
+ # InstancePrefix "objperslab"
600
+ # InstancesFrom 0
601
+ # ValuesFrom 4
602
+ # </Result>
603
+ # </Table>
604
+ #</Plugin>
605
+
606
+ #<Plugin "tail">
607
+ # <File "/var/log/exim4/mainlog">
608
+ # Instance "exim"
609
+ # <Match>
610
+ # Regex "S=([1-9][0-9]*)"
611
+ # DSType "CounterAdd"
612
+ # Type "ipt_bytes"
613
+ # Instance "total"
614
+ # </Match>
615
+ # <Match>
616
+ # Regex "\\<R=local_user\\>"
617
+ # DSType "CounterInc"
618
+ # Type "counter"
619
+ # Instance "local_user"
620
+ # </Match>
621
+ # </File>
622
+ #</Plugin>
623
+
624
+ #<Plugin tcpconns>
625
+ # ListeningPorts false
626
+ # LocalPort "25"
627
+ # RemotePort "25"
628
+ #</Plugin>
629
+
630
+ #<Plugin teamspeak2>
631
+ # Host "127.0.0.1"
632
+ # Port "51234"
633
+ # Server "8767"
634
+ #</Plugin>
635
+
636
+ #<Plugin ted>
637
+ # Device "/dev/ttyUSB0"
638
+ # Retries 0
639
+ #</Plugin>
640
+
641
+ #<Plugin thermal>
642
+ # ForceUseProcfs false
643
+ # Device "THRM"
644
+ # IgnoreSelected false
645
+ #</Plugin>
646
+
647
+ #<Plugin unixsock>
648
+ # SocketFile "/usr/local/var/run/collectd-unixsock"
649
+ # SocketGroup "collectd"
650
+ # SocketPerms "0660"
651
+ #</Plugin>
652
+
653
+ #<Plugin uuid>
654
+ # UUIDFile "/etc/uuid"
655
+ #</Plugin>
656
+
657
+ #<Plugin vmem>
658
+ # Verbose false
659
+ #</Plugin>
660
+
661
+ ##############################################################################
662
+ # Filter configuration #
663
+ #----------------------------------------------------------------------------#
664
+ # The following configures collectd's filtering mechanism. Before changing #
665
+ # anything in this section, please read the `FILTER CONFIGURATION' section #
666
+ # in the collectd.conf(5) manual page. #
667
+ ##############################################################################
668
+
669
+ # Load required matches:
670
+ #LoadPlugin match_regex
671
+ #LoadPlugin match_value
672
+ #LoadPlugin match_timediff
673
+
674
+ # Load required targets:
675
+ #LoadPlugin target_notification
676
+ #LoadPlugin target_replace
677
+ #LoadPlugin target_set
678
+
679
+ #----------------------------------------------------------------------------#
680
+ # The following block demonstrates the default behavior if no filtering is #
681
+ # configured at all: All values will be sent to all available write plugins. #
682
+ #----------------------------------------------------------------------------#
683
+
684
+ #<Chain "Main">
685
+ # Target "write"
686
+ #</Chain>