rubber 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (163) hide show
  1. data/CHANGELOG +39 -0
  2. data/COPYING +339 -0
  3. data/README +6 -0
  4. data/TODO +11 -0
  5. data/VERSION +1 -0
  6. data/bin/vulcanize +41 -0
  7. data/generators/vulcanize/USAGE +6 -0
  8. data/generators/vulcanize/templates/apache/config/rubber/deploy-apache.rb +51 -0
  9. data/generators/vulcanize/templates/apache/config/rubber/role/apache/deflate.conf +10 -0
  10. data/generators/vulcanize/templates/apache/config/rubber/role/apache/expires.conf +9 -0
  11. data/generators/vulcanize/templates/apache/config/rubber/role/apache/headers.conf +6 -0
  12. data/generators/vulcanize/templates/apache/config/rubber/role/apache/monit-apache.conf +8 -0
  13. data/generators/vulcanize/templates/apache/config/rubber/role/apache/ports.conf +5 -0
  14. data/generators/vulcanize/templates/apache/config/rubber/role/apache/setenvif.conf +52 -0
  15. data/generators/vulcanize/templates/apache/config/rubber/role/web_tools/tools-apache-vhost.conf +62 -0
  16. data/generators/vulcanize/templates/apache/config/rubber/role/web_tools/tools-apache.auth +7 -0
  17. data/generators/vulcanize/templates/apache/config/rubber/role/web_tools/tools-index.html +30 -0
  18. data/generators/vulcanize/templates/apache/config/rubber/rubber-apache.yml +7 -0
  19. data/generators/vulcanize/templates/apache/templates.yml +1 -0
  20. data/generators/vulcanize/templates/base/Capfile +14 -0
  21. data/generators/vulcanize/templates/base/config/deploy.rb +55 -0
  22. data/generators/vulcanize/templates/base/config/rubber/common/crontab +16 -0
  23. data/generators/vulcanize/templates/base/config/rubber/common/profile.rc +9 -0
  24. data/generators/vulcanize/templates/base/config/rubber/deploy-setup.rb +104 -0
  25. data/generators/vulcanize/templates/base/config/rubber/rubber.yml +241 -0
  26. data/generators/vulcanize/templates/base/lib/tasks/rubber.rake +15 -0
  27. data/generators/vulcanize/templates/base/script/cron-rake +18 -0
  28. data/generators/vulcanize/templates/base/script/cron-runner +18 -0
  29. data/generators/vulcanize/templates/base/script/cron-sh +67 -0
  30. data/generators/vulcanize/templates/base/templates.yml +1 -0
  31. data/generators/vulcanize/templates/complete_mongrel_mysql/config/rubber/role/haproxy/haproxy-mongrel.conf +23 -0
  32. data/generators/vulcanize/templates/complete_mongrel_mysql/config/rubber/role/nginx/nginx-mongrel.conf +113 -0
  33. data/generators/vulcanize/templates/complete_mongrel_mysql/config/rubber/rubber-complete.yml +41 -0
  34. data/generators/vulcanize/templates/complete_mongrel_mysql/templates.yml +6 -0
  35. data/generators/vulcanize/templates/complete_passenger_mysql/config/rubber/role/haproxy/haproxy-passenger.conf +19 -0
  36. data/generators/vulcanize/templates/complete_passenger_mysql/config/rubber/rubber-complete.yml +40 -0
  37. data/generators/vulcanize/templates/complete_passenger_mysql/templates.yml +10 -0
  38. data/generators/vulcanize/templates/cruise/config/rubber/deploy-cruise.rb +72 -0
  39. data/generators/vulcanize/templates/cruise/config/rubber/role/cruise/cruise +40 -0
  40. data/generators/vulcanize/templates/cruise/config/rubber/role/cruise/my.cnf +165 -0
  41. data/generators/vulcanize/templates/cruise/config/rubber/role/cruise/production.rb +8 -0
  42. data/generators/vulcanize/templates/cruise/config/rubber/role/cruise/site_config.rb +76 -0
  43. data/generators/vulcanize/templates/cruise/config/rubber/role/web_tools/cruise-nginx.conf +11 -0
  44. data/generators/vulcanize/templates/cruise/config/rubber/rubber-cruise.yml +18 -0
  45. data/generators/vulcanize/templates/cruise/templates.yml +1 -0
  46. data/generators/vulcanize/templates/haproxy/config/rubber/deploy-haproxy.rb +45 -0
  47. data/generators/vulcanize/templates/haproxy/config/rubber/role/haproxy/haproxy-base.conf +26 -0
  48. data/generators/vulcanize/templates/haproxy/config/rubber/role/haproxy/haproxy-default.conf +8 -0
  49. data/generators/vulcanize/templates/haproxy/config/rubber/role/haproxy/monit-haproxy.conf +9 -0
  50. data/generators/vulcanize/templates/haproxy/config/rubber/role/haproxy/syslog-haproxy.conf +6 -0
  51. data/generators/vulcanize/templates/haproxy/config/rubber/role/haproxy/syslogd-default.conf +17 -0
  52. data/generators/vulcanize/templates/haproxy/config/rubber/role/web_tools/haproxy-nginx.conf +10 -0
  53. data/generators/vulcanize/templates/haproxy/config/rubber/rubber-haproxy.yml +7 -0
  54. data/generators/vulcanize/templates/haproxy/templates.yml +1 -0
  55. data/generators/vulcanize/templates/memcached/config/memcached.yml +28 -0
  56. data/generators/vulcanize/templates/memcached/config/rubber/common/memcached.yml +14 -0
  57. data/generators/vulcanize/templates/memcached/config/rubber/role/memcached/memcached.conf +52 -0
  58. data/generators/vulcanize/templates/memcached/config/rubber/role/memcached/memcached_munin_plugin +249 -0
  59. data/generators/vulcanize/templates/memcached/config/rubber/rubber-memcached.yml +7 -0
  60. data/generators/vulcanize/templates/memcached/templates.yml +1 -0
  61. data/generators/vulcanize/templates/minimal_mysql/templates.yml +7 -0
  62. data/generators/vulcanize/templates/minimal_nodb/templates.yml +6 -0
  63. data/generators/vulcanize/templates/mongrel/config/rubber/deploy-mongrel.rb +75 -0
  64. data/generators/vulcanize/templates/mongrel/config/rubber/role/mongrel/mongrel_cluster.yml +12 -0
  65. data/generators/vulcanize/templates/mongrel/config/rubber/role/mongrel/monit-mongrel.conf +20 -0
  66. data/generators/vulcanize/templates/mongrel/config/rubber/rubber-mongrel.yml +9 -0
  67. data/generators/vulcanize/templates/mongrel/templates.yml +1 -0
  68. data/generators/vulcanize/templates/monit/config/rubber/common/monit-default.conf +15 -0
  69. data/generators/vulcanize/templates/monit/config/rubber/common/monit.conf +251 -0
  70. data/generators/vulcanize/templates/monit/config/rubber/deploy-monit.rb +32 -0
  71. data/generators/vulcanize/templates/monit/config/rubber/role/web_tools/monit-admin-nginx.conf +10 -0
  72. data/generators/vulcanize/templates/monit/config/rubber/rubber-monit.yml +6 -0
  73. data/generators/vulcanize/templates/monit/templates.yml +1 -0
  74. data/generators/vulcanize/templates/munin/config/rubber/common/monit-munin.conf +8 -0
  75. data/generators/vulcanize/templates/munin/config/rubber/common/munin-node.conf +48 -0
  76. data/generators/vulcanize/templates/munin/config/rubber/deploy-munin.rb +46 -0
  77. data/generators/vulcanize/templates/munin/config/rubber/role/web_tools/munin-nginx.conf +8 -0
  78. data/generators/vulcanize/templates/munin/config/rubber/role/web_tools/munin-plugins.conf +31 -0
  79. data/generators/vulcanize/templates/munin/config/rubber/role/web_tools/munin.conf +80 -0
  80. data/generators/vulcanize/templates/munin/config/rubber/rubber-munin.yml +8 -0
  81. data/generators/vulcanize/templates/munin/script/munin/example_mysql_query.rb +57 -0
  82. data/generators/vulcanize/templates/munin/script/munin/example_simple.rb +24 -0
  83. data/generators/vulcanize/templates/munin/templates.yml +1 -0
  84. data/generators/vulcanize/templates/mysql/config/rubber/common/database.yml +11 -0
  85. data/generators/vulcanize/templates/mysql/config/rubber/deploy-mysql.rb +156 -0
  86. data/generators/vulcanize/templates/mysql/config/rubber/role/db/crontab +14 -0
  87. data/generators/vulcanize/templates/mysql/config/rubber/role/db/monit-mysql.cnf +10 -0
  88. data/generators/vulcanize/templates/mysql/config/rubber/role/db/my.cnf +167 -0
  89. data/generators/vulcanize/templates/mysql/config/rubber/role/mysql_slave/mysql_slave_munin_plugin +51 -0
  90. data/generators/vulcanize/templates/mysql/config/rubber/rubber-mysql.yml +46 -0
  91. data/generators/vulcanize/templates/mysql/templates.yml +1 -0
  92. data/generators/vulcanize/templates/mysql_cluster/config/rubber/common/mysql_cluster_migrations.rb +13 -0
  93. data/generators/vulcanize/templates/mysql_cluster/config/rubber/deploy-mysql_cluster.rb +173 -0
  94. data/generators/vulcanize/templates/mysql_cluster/config/rubber/role/mysql_data/my.cnf +15 -0
  95. data/generators/vulcanize/templates/mysql_cluster/config/rubber/role/mysql_mgm/ndb_mgmd.cnf +39 -0
  96. data/generators/vulcanize/templates/mysql_cluster/config/rubber/role/mysql_sql/monit-mysql_cluster_sql.cnf +10 -0
  97. data/generators/vulcanize/templates/mysql_cluster/config/rubber/role/mysql_sql/my.cnf +23 -0
  98. data/generators/vulcanize/templates/mysql_cluster/config/rubber/rubber-mysql_cluster.yml +32 -0
  99. data/generators/vulcanize/templates/mysql_cluster/templates.yml +1 -0
  100. data/generators/vulcanize/templates/mysql_proxy/config/rubber/common/database.yml +16 -0
  101. data/generators/vulcanize/templates/mysql_proxy/config/rubber/common/monit-mysql_proxy.cnf +10 -0
  102. data/generators/vulcanize/templates/mysql_proxy/config/rubber/common/mysql-proxy +153 -0
  103. data/generators/vulcanize/templates/mysql_proxy/config/rubber/common/mysql-proxy.conf +10 -0
  104. data/generators/vulcanize/templates/mysql_proxy/config/rubber/common/mysql-proxy.lua +5 -0
  105. data/generators/vulcanize/templates/mysql_proxy/config/rubber/deploy-mysql_proxy.rb +52 -0
  106. data/generators/vulcanize/templates/mysql_proxy/config/rubber/rubber-mysql_proxy.yml +11 -0
  107. data/generators/vulcanize/templates/mysql_proxy/templates.yml +1 -0
  108. data/generators/vulcanize/templates/nginx/config/rubber/deploy-nginx.rb +45 -0
  109. data/generators/vulcanize/templates/nginx/config/rubber/role/nginx/crontab +9 -0
  110. data/generators/vulcanize/templates/nginx/config/rubber/role/nginx/monit-nginx.conf +8 -0
  111. data/generators/vulcanize/templates/nginx/config/rubber/role/nginx/nginx.conf +42 -0
  112. data/generators/vulcanize/templates/nginx/config/rubber/role/web_tools/nginx-tools.conf +55 -0
  113. data/generators/vulcanize/templates/nginx/config/rubber/role/web_tools/tools-index.html +30 -0
  114. data/generators/vulcanize/templates/nginx/config/rubber/role/web_tools/tools-nginx.auth +7 -0
  115. data/generators/vulcanize/templates/nginx/config/rubber/rubber-nginx.yml +10 -0
  116. data/generators/vulcanize/templates/nginx/templates.yml +1 -0
  117. data/generators/vulcanize/templates/passenger/config/rubber/deploy-passenger.rb +37 -0
  118. data/generators/vulcanize/templates/passenger/config/rubber/role/passenger/munin-passenger-sudoers.conf +6 -0
  119. data/generators/vulcanize/templates/passenger/config/rubber/role/passenger/munin-passenger.conf +47 -0
  120. data/generators/vulcanize/templates/passenger/config/rubber/role/passenger/passenger-apache-vhost.conf +46 -0
  121. data/generators/vulcanize/templates/passenger/config/rubber/role/passenger/passenger.conf +10 -0
  122. data/generators/vulcanize/templates/passenger/config/rubber/rubber-passenger.yml +12 -0
  123. data/generators/vulcanize/templates/passenger/templates.yml +1 -0
  124. data/generators/vulcanize/templates/sphinx/config/rubber/common/sphinx.yml +46 -0
  125. data/generators/vulcanize/templates/sphinx/config/rubber/deploy-sphinx.rb +112 -0
  126. data/generators/vulcanize/templates/sphinx/config/rubber/role/sphinx/crontab +11 -0
  127. data/generators/vulcanize/templates/sphinx/config/rubber/role/sphinx/monit-sphinx.conf +10 -0
  128. data/generators/vulcanize/templates/sphinx/config/rubber/rubber-sphinx.yml +6 -0
  129. data/generators/vulcanize/templates/sphinx/templates.yml +1 -0
  130. data/generators/vulcanize/vulcanize_generator.rb +67 -0
  131. data/lib/capistrano/hostcmd.rb +12 -0
  132. data/lib/rubber.rb +38 -0
  133. data/lib/rubber/capistrano.rb +1 -0
  134. data/lib/rubber/cloud.rb +13 -0
  135. data/lib/rubber/cloud/aws.rb +305 -0
  136. data/lib/rubber/cloud/base.rb +16 -0
  137. data/lib/rubber/configuration.rb +47 -0
  138. data/lib/rubber/dns.rb +13 -0
  139. data/lib/rubber/dns/base.rb +69 -0
  140. data/lib/rubber/dns/dyndns.rb +63 -0
  141. data/lib/rubber/dns/nettica.rb +73 -0
  142. data/lib/rubber/dns/zerigo.rb +131 -0
  143. data/lib/rubber/environment.rb +161 -0
  144. data/lib/rubber/generator.rb +197 -0
  145. data/lib/rubber/instance.rb +165 -0
  146. data/lib/rubber/recipes/rubber.rb +89 -0
  147. data/lib/rubber/recipes/rubber/bundles.rb +28 -0
  148. data/lib/rubber/recipes/rubber/deploy.rb +90 -0
  149. data/lib/rubber/recipes/rubber/instances.rb +348 -0
  150. data/lib/rubber/recipes/rubber/load_balancers.rb +44 -0
  151. data/lib/rubber/recipes/rubber/security_groups.rb +189 -0
  152. data/lib/rubber/recipes/rubber/setup.rb +357 -0
  153. data/lib/rubber/recipes/rubber/static_ips.rb +107 -0
  154. data/lib/rubber/recipes/rubber/utils.rb +203 -0
  155. data/lib/rubber/recipes/rubber/volumes.rb +264 -0
  156. data/lib/rubber/tasks/rubber.rb +221 -0
  157. data/lib/rubber/util.rb +37 -0
  158. data/test/environment_test.rb +118 -0
  159. data/test/generator_test.rb +323 -0
  160. data/test/instance_test.rb +93 -0
  161. data/test/test_helper.rb +4 -0
  162. data/test/util_test.rb +16 -0
  163. metadata +274 -0
@@ -0,0 +1,11 @@
1
+ <%
2
+ cruise_host = rubber_instances.for_role('cruise').first
3
+ @path = "/etc/nginx/rubber/tools/cruise.conf"
4
+ %>
5
+
6
+ <% if cruise_host %>
7
+ location /cruise
8
+ {
9
+ proxy_pass http://<%= cruise_host.full_name %>:<%= rubber_env.cruise_port %>;
10
+ }
11
+ <% end %>
@@ -0,0 +1,18 @@
1
+
2
+ # These will probably need to be used by the rubber module used for the internal http role
3
+
4
+ # REQUIRED: This determines where cruisecontrol gets installed
5
+ cruise_dir: /mnt/cruisecontrolrb
6
+ cruise_data_dir: /root/.cruise
7
+ cruise_project_dir: "#{cruise_data_dir}/projects/#{app_name}/work"
8
+
9
+ cruise_port: 3333
10
+
11
+ # REQUIRED: The git repo to fetch your project from
12
+ # cruise_repository: git@github.com:mylogin/myproject.git
13
+
14
+ roles:
15
+ cruise:
16
+ gems: [grit, mime-types, mongrel]
17
+ packages: [mysql-server]
18
+
@@ -0,0 +1 @@
1
+ description: The cruisecontrol.rb (CI server) module
@@ -0,0 +1,45 @@
1
+
2
+ namespace :rubber do
3
+
4
+ namespace :haproxy do
5
+
6
+ rubber.allow_optional_tasks(self)
7
+
8
+ # serial_task can only be called after roles defined - not normally a problem, but
9
+ # rubber auto-roles don't get defined till after all tasks are defined
10
+ on :load do
11
+ rubber.serial_task self, :serial_restart, :roles => :haproxy do
12
+ run "/etc/init.d/haproxy restart"
13
+ end
14
+ rubber.serial_task self, :serial_reload, :roles => :haproxy do
15
+ run "if ! ps ax | grep -v grep | grep -c haproxy &> /dev/null; then /etc/init.d/haproxy start; else /etc/init.d/haproxy reload; fi"
16
+ end
17
+ end
18
+
19
+ before "deploy:stop", "rubber:haproxy:stop"
20
+ after "deploy:start", "rubber:haproxy:start"
21
+ after "deploy:restart", "rubber:haproxy:reload"
22
+
23
+ desc "Stops the haproxy server"
24
+ task :stop, :roles => :haproxy, :on_error => :continue do
25
+ run "/etc/init.d/haproxy stop"
26
+ end
27
+
28
+ desc "Starts the haproxy server"
29
+ task :start, :roles => :haproxy do
30
+ run "/etc/init.d/haproxy start"
31
+ end
32
+
33
+ desc "Restarts the haproxy server"
34
+ task :restart, :roles => :haproxy do
35
+ serial_restart
36
+ end
37
+
38
+ desc "Reloads the haproxy web server"
39
+ task :reload, :roles => :haproxy do
40
+ serial_reload
41
+ end
42
+
43
+ end
44
+
45
+ end
@@ -0,0 +1,26 @@
1
+ <%
2
+ @path = "/etc/haproxy/haproxy.cfg"
3
+ %>
4
+ global
5
+ log 127.0.0.1 local0 warning
6
+ maxconn 1024
7
+
8
+ defaults
9
+ log global
10
+ mode http
11
+ retries 3
12
+ balance roundrobin
13
+ option abortonclose
14
+ option redispatch
15
+ contimeout 4000
16
+ clitimeout 150000
17
+ srvtimeout 30000
18
+
19
+ # Admin interface for proxy stats
20
+ listen admin 0.0.0.0:<%= rubber_env.haproxy_admin_port %>
21
+ stats uri /haproxy
22
+
23
+ # So monit can check on haproxy
24
+ # simple response : 'OK'
25
+ listen health_check 0.0.0.0:<%= rubber_env.haproxy_monitor_port %>
26
+ mode health
@@ -0,0 +1,8 @@
1
+ <%
2
+ @path = '/etc/default/haproxy'
3
+ %>
4
+
5
+ # Set ENABLED to 1 if you want the init script to start haproxy.
6
+ ENABLED=1
7
+ # Add extra flags here.
8
+ #EXTRAOPTS="-de -m 16"
@@ -0,0 +1,9 @@
1
+ <%
2
+ @path = '/etc/monit/monit.d/monit-haproxy.conf'
3
+ %>
4
+ <% PIDFILE = "/var/run/haproxy.pid" %>
5
+ check process haproxy with pidfile <%= PIDFILE %>
6
+ group haproxy-<%= RUBBER_ENV %>
7
+ start program = "/etc/init.d/haproxy start"
8
+ stop program = "/etc/init.d/haproxy stop"
9
+ if failed host <%= rubber_env.host %> port <%= rubber_env.haproxy_monitor_port %> with timeout 10 seconds for 10 cycles then restart
@@ -0,0 +1,6 @@
1
+ <%
2
+ @path = "/etc/syslog.conf"
3
+ @post = "/etc/init.d/sysklogd restart"
4
+ @additive = ["# rubber-haproxy-start", "# rubber-haproxy-end"]
5
+ %>
6
+ local0.* /var/log/haproxy.log
@@ -0,0 +1,17 @@
1
+ <%
2
+ @path = "/etc/default/syslogd"
3
+ @post = "/etc/init.d/sysklogd restart"
4
+ %>
5
+ #
6
+ # Top configuration file for syslogd
7
+ #
8
+
9
+ #
10
+ # Full documentation of possible arguments are found in the manpage
11
+ # syslogd(8).
12
+ #
13
+
14
+ #
15
+ # For remote UDP logging use SYSLOGD="-r"
16
+ #
17
+ SYSLOGD="-r"
@@ -0,0 +1,10 @@
1
+ <%
2
+ @path = "/etc/nginx/rubber/tools/haproxy.conf"
3
+ %>
4
+
5
+ <% rubber_instances.for_role('haproxy').each do |ic| %>
6
+ location /haproxy_<%= ic.name %>
7
+ {
8
+ proxy_pass http://<%= ic.full_name %>:<%= rubber_env.haproxy_admin_port %>;
9
+ }
10
+ <% end %>
@@ -0,0 +1,7 @@
1
+
2
+ haproxy_monitor_port: 60001
3
+ haproxy_admin_port: 9100
4
+
5
+ roles:
6
+ haproxy:
7
+ packages: [haproxy]
@@ -0,0 +1 @@
1
+ description: The haproxy module
@@ -0,0 +1,28 @@
1
+ defaults:
2
+ ttl: 1800
3
+ readonly: false
4
+ urlencode: false
5
+ c_threshold: 10000
6
+ compression: true
7
+ debug: false
8
+ namespace: app
9
+ sessions: false
10
+ session_servers: false
11
+ fragments: false
12
+ memory: 64
13
+ servers: localhost:11211
14
+ benchmarking: true
15
+ raise_errors: true
16
+ fast_hash: false
17
+ fastest_hash: false
18
+
19
+ development:
20
+ sessions: false
21
+ fragments: true
22
+ servers: localhost:11211
23
+
24
+ # turn off caching
25
+ test:
26
+ disabled: true
27
+ fragments: true
28
+
@@ -0,0 +1,14 @@
1
+ <%
2
+ @path = "#{RUBBER_ROOT}/config/memcached.yml"
3
+ @additive = ["# rubber-memcached-start", "# rubber-memcached-end"]
4
+ %>
5
+
6
+
7
+ <%= RUBBER_ENV %>:
8
+ memory: 256
9
+ fragments: true
10
+ benchmarking: false
11
+ servers:
12
+ <% rubber_instances.for_role('memcached').each do |ic| %>
13
+ - <%= ic.full_name %>:11211
14
+ <% end %>
@@ -0,0 +1,52 @@
1
+ <%
2
+ @path = "/etc/memcached.conf"
3
+ @post = "/etc/init.d/memcached restart"
4
+ %>
5
+
6
+ # memcached default config file edited for mobicious
7
+ # 2003 - Jay Bonci <jaybonci@debian.org>
8
+ # This configuration file is read by the start-memcached script provided as
9
+ # part of the Debian GNU/Linux distribution.
10
+
11
+ # Run memcached as a daemon. This command is implied, and is not needed for the
12
+ # daemon to run. See the README.Debian that comes with this package for more
13
+ # information.
14
+ -d
15
+
16
+ # Log memcached's output to /var/log/memcached
17
+ logfile /var/log/memcached.log
18
+
19
+ # Be verbose
20
+ -v
21
+
22
+ # Be even more verbose (print client commands as well)
23
+ # -vv
24
+
25
+ # Start with a cap of 64 megs of memory. It's reasonable, and the daemon default
26
+ # Note that the daemon will grow to this size, but does not start out holding this much
27
+ # memory
28
+ -m 64
29
+
30
+ # Default connection port is 11211
31
+ -p 11211
32
+
33
+ # Run the daemon as root. The start-memcached will default to running as root if no
34
+ # -u command is present in this config file
35
+ -u nobody
36
+
37
+ # Specify which IP address to listen on. The default is to listen on all IP addresses
38
+ # This parameter is one of the only security measures that memcached has, so make sure
39
+ # it's listening on a firewalled interface.
40
+ #-l 127.0.0.1
41
+
42
+ # Limit the number of simultaneous incoming connections. The daemon default is 1024
43
+ # -c 1024
44
+
45
+ # Lock down all paged memory. Consult with the README and homepage before you do this
46
+ # -k
47
+
48
+ # Return error when memory is exhausted (rather than removing items)
49
+ # -M
50
+
51
+ # Maximize core file limit
52
+ # -r
@@ -0,0 +1,249 @@
1
+ <%
2
+ @path = "/usr/share/munin/plugins/memcached"
3
+ @perms = 0755
4
+ @post = <<-POST
5
+ ln -sf #{@path} /etc/munin/plugins/memcached_rates
6
+ ln -sf #{@path} /etc/munin/plugins/memcached_bytes
7
+ ln -sf #{@path} /etc/munin/plugins/memcached_counters
8
+ /etc/init.d/munin-node restart
9
+ POST
10
+ %>#!/usr/bin/perl
11
+ #
12
+ # Plugin to monitor memcache statistics
13
+ #
14
+ # This module has 3 seperate graph datasets:
15
+ # rates
16
+ # bytes
17
+ # counters
18
+ #
19
+ # For each of them, symlink the memcached_ script to memcached_FOO where foo is
20
+ # the datset name.
21
+ #
22
+ # Parameters supported:
23
+ #
24
+ # config
25
+ # autoconf
26
+ #
27
+ # Configurable variables
28
+ #
29
+ # host Host of the memcache daemon
30
+ # port Port of the memcache daemon
31
+ #
32
+ # Author: Robin H. Johnson <robbat2@gentoo.org>
33
+ # Slightly based on the original version by Joshua Thijssen
34
+ # <jthijssen@noxlogic.nl>
35
+ #
36
+ # Magic markers:
37
+ #%# family=auto
38
+ #%# capabilities=autoconf
39
+ use strict;
40
+ my $ret = undef;
41
+ if (! eval "require Cache::Memcached;") {
42
+ $ret = "Cache::Memcached not found";
43
+ }
44
+ my $HOST = exists $ENV{'host'} ? $ENV{'host'} : "127.0.0.1";
45
+ my $PORT = exists $ENV{'port'} ? $ENV{'port'} : 11211;
46
+ if ( exists $ARGV[0] and $ARGV[0] eq "autoconf" ) {
47
+ if ($ret) {
48
+ print "no ($ret)\n";
49
+ exit 1;
50
+ }
51
+ # Todo: we can always connect to a memcache server without any errors so I cannot really
52
+ # find a way to detect the presence of a memcache instance. Maybe a forced write/read/delete
53
+ # but there should be a better way somewhere...
54
+ print "yes\n";
55
+ exit 0;
56
+ }
57
+
58
+ if($ret) {
59
+ print "no ($ret)\n";
60
+ exit 1;
61
+ }
62
+
63
+ # We do everything by this array
64
+ my %all_vars = (
65
+ rates => {
66
+ master => {
67
+ graph_title => 'Memcached - Commands',
68
+ graph_args => '--base 1000',
69
+ graph_vlabel => '/${graph_period}',
70
+ graph_category => 'memcache',
71
+ },
72
+ memcache_cache_hits => {
73
+ label => 'Cache hits',
74
+ type => 'DERIVE',
75
+ min => '0',
76
+ max => '5000',
77
+ draw => 'LINE2',
78
+ info => 'Number of cache hits',
79
+ stat_group => 'misc',
80
+ stat_name => 'get_hits'
81
+ },
82
+ memcache_cache_misses => {
83
+ label => 'Cache misses',
84
+ type => 'DERIVE',
85
+ min => '0',
86
+ max => '5000',
87
+ draw => 'LINE2',
88
+ info => 'Number of cache misses',
89
+ stat_group => 'misc',
90
+ stat_name => 'get_misses'
91
+ },
92
+ memcache_cmd_get => {
93
+ label => 'GET requests',
94
+ type => 'DERIVE',
95
+ min => '0',
96
+ max => '5000',
97
+ draw => 'LINE2',
98
+ info => 'Number of GET commands seen',
99
+ stat_group => 'misc',
100
+ stat_name => 'cmd_get'
101
+ },
102
+ memcache_cmd_set => {
103
+ label => 'SET requests',
104
+ type => 'DERIVE',
105
+ min => '0',
106
+ max => '5000',
107
+ draw => 'LINE2',
108
+ info => 'Number of SET commands seen',
109
+ stat_group => 'misc',
110
+ stat_name => 'cmd_set'
111
+ },
112
+ memcache_total_items => {
113
+ label => 'New items*5',
114
+ type => 'DERIVE',
115
+ min => '0',
116
+ max => '5000',
117
+ draw => 'LINE2',
118
+ info => 'New items*5',
119
+ cdef => 'memcache_total_items,5,*',
120
+ stat_group => 'misc',
121
+ stat_name => 'total_items'
122
+ },
123
+ memcache_total_connections => {
124
+ label => 'New connections*100',
125
+ type => 'DERIVE',
126
+ min => '0',
127
+ max => '5000',
128
+ cdef => 'memcache_total_connections,100,*',
129
+ draw => 'LINE2',
130
+ info => 'New connections*100',
131
+ stat_group => 'misc',
132
+ stat_name => 'total_connections'
133
+ },
134
+ },
135
+ bytes => {
136
+ master => {
137
+ graph_title => 'Memcached - Network traffic',
138
+ graph_args => '--base 1000',
139
+ graph_vlabel => 'bytes in(-)/out(+) per ${graph_period}',
140
+ graph_category => 'memcache',
141
+ },
142
+ memcache_bytes_read => {
143
+ label => 'Bytes read',
144
+ type => 'COUNTER',
145
+ draw => 'LINE2',
146
+ max => '1000000',
147
+ info => 'Bytes read from network',
148
+ graph => 'no',
149
+ stat_group => 'misc',
150
+ stat_name => 'bytes_read'
151
+ },
152
+ memcache_bytes_written => {
153
+ label => 'Bytes written',
154
+ negative => 'memcache_bytes_read',
155
+ type => 'COUNTER',
156
+ max => '1000000',
157
+ draw => 'LINE2',
158
+ info => 'Bytes written to network',
159
+ stat_group => 'misc',
160
+ stat_name => 'bytes_written'
161
+ },
162
+ },
163
+ counters => {
164
+ master => {
165
+ graph_title => 'Memcached - Current values',
166
+ graph_args => '--base 1000',
167
+ #graph_args => '--base 1000 --loga',
168
+ graph_vlabel => 'Totals',
169
+ graph_category => 'memcache',
170
+ graph_scale => 'no',
171
+ },
172
+ memcache_curr_items => {
173
+ label => 'Current items',
174
+ type => 'GAUGE',
175
+ min => '0',
176
+ draw => 'LINE2',
177
+ info => 'Number of items in cache',
178
+ stat_group => 'misc',
179
+ stat_name => 'curr_items'
180
+ },
181
+ memcache_curr_connections => {
182
+ label => 'Current connections*100',
183
+ type => 'GAUGE',
184
+ min => '0',
185
+ draw => 'LINE2',
186
+ cdef => 'memcache_curr_connections,100,*',
187
+ info => 'Number of connections*100',
188
+ stat_group => 'misc',
189
+ stat_name => 'curr_connections'
190
+ },
191
+ memcache_bytes_allocated => {
192
+ label => 'Bytes allocated (KiB)',
193
+ type => 'GAUGE',
194
+ min => '0',
195
+ draw => 'LINE2',
196
+ cdef => 'memcache_bytes_allocated,1024,/',
197
+ info => 'Bytes allocated (KiB)',
198
+ stat_group => 'misc',
199
+ stat_name => 'bytes'
200
+ },
201
+ }
202
+ );
203
+
204
+ $0 =~ /memcached_(.+)*$/;
205
+ my $func = $1;
206
+ exit 2 unless defined $func;
207
+ my %vars = %{$all_vars{$func}};
208
+
209
+ # STAT rusage_user 3941.052868
210
+ # STAT rusage_system 18436.366246
211
+ # STAT connection_structures 1112
212
+ # STAT bytes 382985002
213
+ # STAT limit_maxbytes 536870912
214
+
215
+ if ( exists $ARGV[0] and $ARGV[0] eq "config" ) {
216
+ my %v = %{$vars{'master'}};
217
+ foreach my $k ( keys %v ) {
218
+ print "$k ".$v{$k}."\n"
219
+ }
220
+ print 'graph_order ';
221
+ foreach my $k ( sort(keys %vars) ) {
222
+ if($k eq 'master') { next; }
223
+ print $k." ";
224
+ }
225
+ print "\n";
226
+ foreach my $k ( sort(keys %vars) ) {
227
+ if($k eq 'master') { next; }
228
+ my %v = %{$vars{$k}};
229
+ foreach my $k2 (keys %v) {
230
+ if($k2 eq 'stat_group' or $k2 eq 'stat_name') { next; }
231
+ print "$k.$k2 ".$v{"$k2"}."\n";
232
+ }
233
+ }
234
+ exit 0;
235
+ }
236
+ my $mc = new Cache::Memcached { 'servers' => [ "$HOST:$PORT" ] };
237
+ my $stats = $mc->stats ('misc');
238
+
239
+ foreach my $k ( sort(keys %vars) ) {
240
+ if($k eq 'master') { next; }
241
+ my %v = %{$vars{$k}};
242
+ if($v{type} eq 'COMPUTE') { next; }
243
+ my $sg = $v{stat_group};
244
+ my $sn = $v{stat_name};
245
+ my $value = $stats->{hosts}->{"$HOST:$PORT"}->{$sg}->{$sn};
246
+ defined($value) or $value = 'U';
247
+ print "$k.value ".$value."\n";
248
+ }
249
+ # vim:syntax=perl ts=4 sw=4: