sml-rubber 0.9.1
Sign up to get free protection for your applications and to get access to all the features.
- data/COPYING +339 -0
- data/README +6 -0
- data/TODO +9 -0
- data/VERSION +1 -0
- data/generators/vulcanize/USAGE +6 -0
- data/generators/vulcanize/templates/apache/config/rubber/deploy-apache.rb +45 -0
- data/generators/vulcanize/templates/apache/config/rubber/role/web/deflate.conf +10 -0
- data/generators/vulcanize/templates/apache/config/rubber/role/web/expires.conf +9 -0
- data/generators/vulcanize/templates/apache/config/rubber/role/web/headers.conf +6 -0
- data/generators/vulcanize/templates/apache/config/rubber/role/web/setenvif.conf +52 -0
- data/generators/vulcanize/templates/apache/config/rubber/role/web/vhost.conf +27 -0
- data/generators/vulcanize/templates/apache/config/rubber/rubber-apache.yml +15 -0
- data/generators/vulcanize/templates/apache/templates.yml +1 -0
- data/generators/vulcanize/templates/base/Capfile +17 -0
- data/generators/vulcanize/templates/base/config/deploy.rb +77 -0
- data/generators/vulcanize/templates/base/config/rubber/common/crontab +16 -0
- data/generators/vulcanize/templates/base/config/rubber/common/profile.rc +9 -0
- data/generators/vulcanize/templates/base/config/rubber/deploy-setup.rb +56 -0
- data/generators/vulcanize/templates/base/config/rubber/rubber.yml +221 -0
- data/generators/vulcanize/templates/base/lib/tasks/rubber.rake +18 -0
- data/generators/vulcanize/templates/base/script/cron-rake +18 -0
- data/generators/vulcanize/templates/base/script/cron-runner +18 -0
- data/generators/vulcanize/templates/base/script/cron-sh +67 -0
- data/generators/vulcanize/templates/base/templates.yml +1 -0
- data/generators/vulcanize/templates/complete_mysql/templates.yml +6 -0
- data/generators/vulcanize/templates/complete_passenger_mysql/templates.yml +8 -0
- data/generators/vulcanize/templates/cruise/config/rubber/deploy-cruise.rb +74 -0
- data/generators/vulcanize/templates/cruise/config/rubber/role/cruise/cruise +40 -0
- data/generators/vulcanize/templates/cruise/config/rubber/role/cruise/my.cnf +165 -0
- data/generators/vulcanize/templates/cruise/config/rubber/role/cruise/production.rb +8 -0
- data/generators/vulcanize/templates/cruise/config/rubber/role/cruise/site_config.rb +76 -0
- data/generators/vulcanize/templates/cruise/config/rubber/role/web_tools/cruise-nginx.conf +11 -0
- data/generators/vulcanize/templates/cruise/config/rubber/rubber-cruise.yml +18 -0
- data/generators/vulcanize/templates/cruise/templates.yml +1 -0
- data/generators/vulcanize/templates/haproxy/config/rubber/deploy-haproxy.rb +45 -0
- data/generators/vulcanize/templates/haproxy/config/rubber/role/haproxy/haproxy-default.conf +8 -0
- data/generators/vulcanize/templates/haproxy/config/rubber/role/haproxy/haproxy.conf +44 -0
- data/generators/vulcanize/templates/haproxy/config/rubber/role/haproxy/monit-haproxy.conf +9 -0
- data/generators/vulcanize/templates/haproxy/config/rubber/role/haproxy/syslog-haproxy.conf +6 -0
- data/generators/vulcanize/templates/haproxy/config/rubber/role/haproxy/syslogd-default.conf +17 -0
- data/generators/vulcanize/templates/haproxy/config/rubber/role/web_tools/haproxy-nginx.conf +10 -0
- data/generators/vulcanize/templates/haproxy/config/rubber/rubber-haproxy.yml +12 -0
- data/generators/vulcanize/templates/haproxy/templates.yml +1 -0
- data/generators/vulcanize/templates/memcached/config/memcached.yml +28 -0
- data/generators/vulcanize/templates/memcached/config/rubber/common/memcached.yml +14 -0
- data/generators/vulcanize/templates/memcached/config/rubber/role/memcached/memcached.conf +52 -0
- data/generators/vulcanize/templates/memcached/config/rubber/role/memcached/memcached_munin_plugin +249 -0
- data/generators/vulcanize/templates/memcached/config/rubber/rubber-memcached.yml +7 -0
- data/generators/vulcanize/templates/memcached/templates.yml +1 -0
- data/generators/vulcanize/templates/minimal_mysql/templates.yml +7 -0
- data/generators/vulcanize/templates/minimal_nodb/templates.yml +6 -0
- data/generators/vulcanize/templates/mongrel/config/rubber/deploy-mongrel.rb +75 -0
- data/generators/vulcanize/templates/mongrel/config/rubber/role/app/mongrel_cluster.yml +12 -0
- data/generators/vulcanize/templates/mongrel/config/rubber/role/app/monit-mongrel.conf +20 -0
- data/generators/vulcanize/templates/mongrel/config/rubber/rubber-mongrel.yml +9 -0
- data/generators/vulcanize/templates/mongrel/templates.yml +1 -0
- data/generators/vulcanize/templates/monit/config/rubber/common/monit-default.conf +15 -0
- data/generators/vulcanize/templates/monit/config/rubber/common/monit.conf +251 -0
- data/generators/vulcanize/templates/monit/config/rubber/deploy-monit.rb +32 -0
- data/generators/vulcanize/templates/monit/config/rubber/role/web_tools/monit-admin-nginx.conf +10 -0
- data/generators/vulcanize/templates/monit/config/rubber/rubber-monit.yml +6 -0
- data/generators/vulcanize/templates/monit/templates.yml +1 -0
- data/generators/vulcanize/templates/munin/config/rubber/common/monit-munin.conf +8 -0
- data/generators/vulcanize/templates/munin/config/rubber/common/munin-node.conf +48 -0
- data/generators/vulcanize/templates/munin/config/rubber/deploy-munin.rb +30 -0
- data/generators/vulcanize/templates/munin/config/rubber/role/web_tools/munin-nginx.conf +8 -0
- data/generators/vulcanize/templates/munin/config/rubber/role/web_tools/munin-plugins.conf +31 -0
- data/generators/vulcanize/templates/munin/config/rubber/role/web_tools/munin.conf +80 -0
- data/generators/vulcanize/templates/munin/config/rubber/rubber-munin.yml +8 -0
- data/generators/vulcanize/templates/munin/script/munin/example_mysql_query.rb +57 -0
- data/generators/vulcanize/templates/munin/script/munin/example_simple.rb +24 -0
- data/generators/vulcanize/templates/munin/templates.yml +1 -0
- data/generators/vulcanize/templates/mysql/config/rubber/common/database.yml +11 -0
- data/generators/vulcanize/templates/mysql/config/rubber/deploy-mysql.rb +178 -0
- data/generators/vulcanize/templates/mysql/config/rubber/role/db/crontab +14 -0
- data/generators/vulcanize/templates/mysql/config/rubber/role/db/monit-mysql.cnf +10 -0
- data/generators/vulcanize/templates/mysql/config/rubber/role/db/my.cnf +167 -0
- data/generators/vulcanize/templates/mysql/config/rubber/role/mysql_slave/mysql_slave_munin_plugin +51 -0
- data/generators/vulcanize/templates/mysql/config/rubber/rubber-mysql.yml +38 -0
- data/generators/vulcanize/templates/mysql/templates.yml +1 -0
- data/generators/vulcanize/templates/mysql_cluster/config/rubber/common/mysql_cluster_migrations.rb +13 -0
- data/generators/vulcanize/templates/mysql_cluster/config/rubber/deploy-mysql_cluster.rb +173 -0
- data/generators/vulcanize/templates/mysql_cluster/config/rubber/role/mysql_data/my.cnf +15 -0
- data/generators/vulcanize/templates/mysql_cluster/config/rubber/role/mysql_mgm/ndb_mgmd.cnf +39 -0
- data/generators/vulcanize/templates/mysql_cluster/config/rubber/role/mysql_sql/monit-mysql_cluster_sql.cnf +10 -0
- data/generators/vulcanize/templates/mysql_cluster/config/rubber/role/mysql_sql/my.cnf +23 -0
- data/generators/vulcanize/templates/mysql_cluster/config/rubber/rubber-mysql_cluster.yml +32 -0
- data/generators/vulcanize/templates/mysql_cluster/templates.yml +1 -0
- data/generators/vulcanize/templates/mysql_proxy/config/rubber/common/database.yml +16 -0
- data/generators/vulcanize/templates/mysql_proxy/config/rubber/common/monit-mysql_proxy.cnf +10 -0
- data/generators/vulcanize/templates/mysql_proxy/config/rubber/common/mysql-proxy +153 -0
- data/generators/vulcanize/templates/mysql_proxy/config/rubber/common/mysql-proxy.conf +10 -0
- data/generators/vulcanize/templates/mysql_proxy/config/rubber/common/mysql-proxy.lua +5 -0
- data/generators/vulcanize/templates/mysql_proxy/config/rubber/deploy-mysql_proxy.rb +52 -0
- data/generators/vulcanize/templates/mysql_proxy/config/rubber/rubber-mysql_proxy.yml +11 -0
- data/generators/vulcanize/templates/mysql_proxy/templates.yml +1 -0
- data/generators/vulcanize/templates/nginx/config/rubber/deploy-nginx.rb +45 -0
- data/generators/vulcanize/templates/nginx/config/rubber/role/web/crontab +9 -0
- data/generators/vulcanize/templates/nginx/config/rubber/role/web/monit-nginx.conf +9 -0
- data/generators/vulcanize/templates/nginx/config/rubber/role/web/nginx.conf +133 -0
- data/generators/vulcanize/templates/nginx/config/rubber/role/web_tools/index.html +23 -0
- data/generators/vulcanize/templates/nginx/config/rubber/role/web_tools/nginx-tools.conf +74 -0
- data/generators/vulcanize/templates/nginx/config/rubber/rubber-nginx.yml +33 -0
- data/generators/vulcanize/templates/nginx/templates.yml +1 -0
- data/generators/vulcanize/templates/passenger/config/rubber/deploy-passenger.rb +27 -0
- data/generators/vulcanize/templates/passenger/config/rubber/role/web/passenger.conf +8 -0
- data/generators/vulcanize/templates/passenger/config/rubber/rubber-passenger.yml +4 -0
- data/generators/vulcanize/templates/passenger/templates.yml +1 -0
- data/generators/vulcanize/templates/sphinx/config/rubber/common/sphinx.yml +46 -0
- data/generators/vulcanize/templates/sphinx/config/rubber/deploy-sphinx.rb +112 -0
- data/generators/vulcanize/templates/sphinx/config/rubber/role/sphinx/crontab +11 -0
- data/generators/vulcanize/templates/sphinx/config/rubber/role/sphinx/monit-sphinx.conf +10 -0
- data/generators/vulcanize/templates/sphinx/config/rubber/rubber-sphinx.yml +6 -0
- data/generators/vulcanize/templates/sphinx/templates.yml +1 -0
- data/generators/vulcanize/vulcanize_generator.rb +67 -0
- data/lib/capistrano/hostcmd.rb +12 -0
- data/lib/rubber.rb +37 -0
- data/lib/rubber/capistrano.rb +1 -0
- data/lib/rubber/cloud.rb +13 -0
- data/lib/rubber/cloud/aws.rb +261 -0
- data/lib/rubber/cloud/base.rb +16 -0
- data/lib/rubber/configuration.rb +47 -0
- data/lib/rubber/dns.rb +13 -0
- data/lib/rubber/dns/base.rb +69 -0
- data/lib/rubber/dns/dyndns.rb +63 -0
- data/lib/rubber/dns/nettica.rb +56 -0
- data/lib/rubber/dns/zerigo.rb +121 -0
- data/lib/rubber/environment.rb +161 -0
- data/lib/rubber/generator.rb +197 -0
- data/lib/rubber/instance.rb +113 -0
- data/lib/rubber/recipes/rubber.rb +88 -0
- data/lib/rubber/recipes/rubber/bundles.rb +28 -0
- data/lib/rubber/recipes/rubber/deploy.rb +66 -0
- data/lib/rubber/recipes/rubber/instances.rb +298 -0
- data/lib/rubber/recipes/rubber/security_groups.rb +149 -0
- data/lib/rubber/recipes/rubber/setup.rb +285 -0
- data/lib/rubber/recipes/rubber/static_ips.rb +107 -0
- data/lib/rubber/recipes/rubber/utils.rb +195 -0
- data/lib/rubber/recipes/rubber/volumes.rb +263 -0
- data/lib/rubber/tasks/rubber.rb +218 -0
- data/lib/rubber/util.rb +33 -0
- data/test/environment_test.rb +118 -0
- data/test/generator_test.rb +323 -0
- data/test/instance_test.rb +38 -0
- data/test/test_helper.rb +4 -0
- data/test/util_test.rb +16 -0
- metadata +246 -0
@@ -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,44 @@
|
|
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
|
+
listen mongrel_proxy 0.0.0.0:<%= rubber_env.haproxy_listen_port %>
|
20
|
+
<%
|
21
|
+
# Since we do "fair" load balancing to the mongrels, we don't want to share mongrels
|
22
|
+
# between haproxy instances otherwise we still end up with requests getting queued behind
|
23
|
+
# slow ones.
|
24
|
+
app_hosts = rubber_instances.for_role('app').collect { |i| i.name }
|
25
|
+
web_hosts = rubber_instances.for_role('web').collect { |i| i.name }
|
26
|
+
ports = (rubber_env.appserver_base_port.to_i ... rubber_env.appserver_base_port.to_i + rubber_env.appserver_count.to_i).to_a
|
27
|
+
host_count = web_hosts.size
|
28
|
+
host_mod = web_hosts.sort.index(rubber_env.host) rescue 0
|
29
|
+
ports = ports.find_all {|x| x % host_count == host_mod}
|
30
|
+
%>
|
31
|
+
<% app_hosts.each do |server| %>
|
32
|
+
<% ports.each do |port| %>
|
33
|
+
server <%= server %>_<%= port %> <%= server %>:<%= port %> maxconn 1 check
|
34
|
+
<% end %>
|
35
|
+
<% end %>
|
36
|
+
|
37
|
+
# Admin interface for proxy stats
|
38
|
+
listen admin 0.0.0.0:<%= rubber_env.haproxy_admin_port %>
|
39
|
+
stats uri /haproxy
|
40
|
+
|
41
|
+
# So monit can check on haproxy
|
42
|
+
# simple response : 'OK'
|
43
|
+
listen health_check 0.0.0.0:<%= rubber_env.haproxy_monitor_port %>
|
44
|
+
mode health
|
@@ -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,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 @@
|
|
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
|
data/generators/vulcanize/templates/memcached/config/rubber/role/memcached/memcached_munin_plugin
ADDED
@@ -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:
|