]> git.openstreetmap.org Git - chef.git/commitdiff
Remove munin
authorGrant Slater <github@firefishy.com>
Tue, 12 Mar 2024 20:45:46 +0000 (20:45 +0000)
committerGrant <github@firefishy.com>
Wed, 13 Mar 2024 12:08:46 +0000 (12:08 +0000)
Fixed: https://github.com/openstreetmap/operations/issues/501
Signed-off-by: Grant Slater <github@firefishy.com>
95 files changed:
cookbooks/apache/recipes/default.rb
cookbooks/chef/recipes/server.rb
cookbooks/db/recipes/base.rb
cookbooks/db/recipes/master.rb
cookbooks/dev/recipes/default.rb
cookbooks/exim/recipes/default.rb
cookbooks/fail2ban/recipes/default.rb
cookbooks/hardware/recipes/default.rb
cookbooks/hardware/templates/default/munin.hddtemp.erb [deleted file]
cookbooks/hardware/templates/default/munin.smart.erb [deleted file]
cookbooks/memcached/recipes/default.rb
cookbooks/memcached/templates/default/munin.erb [deleted file]
cookbooks/munin/files/default/plugin-conf.d/api [deleted file]
cookbooks/munin/files/default/plugin-conf.d/chef [deleted file]
cookbooks/munin/files/default/plugin-conf.d/hpasmcli2 [deleted file]
cookbooks/munin/files/default/plugins/api_calls_ [deleted file]
cookbooks/munin/files/default/plugins/api_calls_num [deleted file]
cookbooks/munin/files/default/plugins/api_calls_status [deleted file]
cookbooks/munin/files/default/plugins/api_waits_ [deleted file]
cookbooks/munin/files/default/plugins/chef_status [deleted file]
cookbooks/munin/files/default/plugins/chrony [deleted file]
cookbooks/munin/files/default/plugins/fw_conntrack [deleted file]
cookbooks/munin/files/default/plugins/fw_forwarded_local [deleted file]
cookbooks/munin/files/default/plugins/hpasmcli2_ [deleted file]
cookbooks/munin/files/default/plugins/memcached_ [deleted file]
cookbooks/munin/files/default/plugins/memcached_multi_ [deleted file]
cookbooks/munin/files/default/plugins/munin_rrdcached [deleted file]
cookbooks/munin/files/default/plugins/mysql_ [deleted file]
cookbooks/munin/files/default/plugins/passenger_memory [deleted file]
cookbooks/munin/files/default/plugins/passenger_processes [deleted file]
cookbooks/munin/files/default/plugins/passenger_queues [deleted file]
cookbooks/munin/files/default/plugins/passenger_requests [deleted file]
cookbooks/munin/files/default/plugins/planet_age [deleted file]
cookbooks/munin/files/default/plugins/postgres_replication [deleted file]
cookbooks/munin/files/default/plugins/replication_delay [deleted file]
cookbooks/munin/files/default/plugins/rrdcached [deleted file]
cookbooks/munin/files/default/plugins/snmp__apcpdu_current [deleted file]
cookbooks/munin/files/default/plugins/snmp__apcpdu_humidity [deleted file]
cookbooks/munin/files/default/plugins/snmp__apcpdu_power [deleted file]
cookbooks/munin/files/default/plugins/snmp__apcpdu_temperature [deleted file]
cookbooks/munin/files/default/plugins/snmp__apcpdu_voltage [deleted file]
cookbooks/munin/files/default/www/favicon.ico [deleted file]
cookbooks/munin/files/default/www/robots.txt [deleted file]
cookbooks/munin/recipes/default.rb
cookbooks/munin/recipes/plugins.rb
cookbooks/munin/recipes/server.rb
cookbooks/munin/resources/plugin.rb [deleted file]
cookbooks/munin/resources/plugin_conf.rb [deleted file]
cookbooks/munin/templates/default/apache.erb [deleted file]
cookbooks/munin/templates/default/backup.cron.erb [deleted file]
cookbooks/munin/templates/default/df.erb [deleted file]
cookbooks/munin/templates/default/diskstats.erb [deleted file]
cookbooks/munin/templates/default/if.erb [deleted file]
cookbooks/munin/templates/default/ipmi.erb [deleted file]
cookbooks/munin/templates/default/munin-node.conf.erb [deleted file]
cookbooks/munin/templates/default/munin.conf.erb [deleted file]
cookbooks/munin/templates/default/rrdcached.erb [deleted file]
cookbooks/munin/templates/default/sensors_volt.erb [deleted file]
cookbooks/mysql/recipes/default.rb
cookbooks/nginx/recipes/default.rb
cookbooks/nginx/templates/default/munin.erb [deleted file]
cookbooks/nginx/templates/default/nginx.conf.erb
cookbooks/nominatim/recipes/default.rb
cookbooks/nominatim/templates/default/munin.erb [deleted file]
cookbooks/ntp/recipes/default.rb
cookbooks/overpass/recipes/default.rb
cookbooks/overpass/templates/default/munin.erb [deleted file]
cookbooks/overpass/templates/default/munin_db_lag.erb [deleted file]
cookbooks/overpass/templates/default/munin_request_count.erb [deleted file]
cookbooks/passenger/recipes/default.rb
cookbooks/passenger/templates/default/munin.erb [deleted file]
cookbooks/planet/recipes/default.rb
cookbooks/postgresql/README.md
cookbooks/postgresql/recipes/default.rb
cookbooks/postgresql/resources/munin.rb [deleted file]
cookbooks/postgresql/templates/default/munin.erb [deleted file]
cookbooks/tile/recipes/default.rb
cookbooks/web/recipes/rails.rb
roles/base.rb
roles/chef-server.rb
roles/db.rb
roles/gp-dl360e-g8.rb
roles/hp-dl180-g6.rb
roles/hp-dl360-g6.rb
roles/hp-g9.rb
roles/kessie.rb
roles/mail.rb
roles/paulla.rb
roles/rhaegal.rb
roles/stormfly-03.rb
roles/tile.rb
test/integration/munin-server/inspec/apache_spec.rb [deleted file]
test/integration/munin-server/inspec/munin_spec.rb
test/integration/munin-server/inspec/rrdcached_spec.rb
test/integration/munin/inspec/munin_node_spec.rb

index 6fdafa02ef2a9a83f8c127d87d61234ba7145ba0..a689fad9562097581e02cebd92cd2e4434c336f6 100644 (file)
@@ -126,10 +126,6 @@ fail2ban_jail "apache-evasive" do
   maxretry 3
 end
 
-munin_plugin "apache_accesses"
-munin_plugin "apache_processes"
-munin_plugin "apache_volume"
-
 template "/var/lib/prometheus/node-exporter/apache.prom" do
   source "apache.prom.erb"
   owner "root"
index 48fbfd7479ac091636b1e8ea632b20b1488f1ae0..31b6b196abb49e23e5a484709fefad373fbe561e 100644 (file)
@@ -101,5 +101,3 @@ template "/etc/cron.daily/chef-server-backup" do
   group "root"
   mode "755"
 end
-
-munin_plugin "chef_status"
index 6efbde32891ea66498777fa445606768d1fc85e8..d989d0bc91dd5f3bd16eb19b4a768a2c0aad16fd 100644 (file)
@@ -26,11 +26,6 @@ include_recipe "ruby"
 passwords = data_bag_item("db", "passwords")
 wal_secrets = data_bag_item("db", "wal-secrets")
 
-postgresql_munin "openstreetmap" do
-  cluster node[:db][:cluster]
-  database "openstreetmap"
-end
-
 directory "/srv/www.openstreetmap.org" do
   group "rails"
   mode "2775"
index 323466f009d145ed96e83f2047303b671dcf12ec..7d6643dd1c9f8244a5eca65c33e8f347a3064dc1 100644 (file)
@@ -64,7 +64,7 @@ end
 
 postgresql_user "munin" do
   cluster node[:db][:cluster]
-  password passwords["munin"]
+  action :drop
 end
 
 postgresql_user "replication" do
index d33534491aee6a9b075e043db0c24ce14c40c243..ebb90accfe858ca6cf6d94bdda700c623d242880 100644 (file)
@@ -571,13 +571,6 @@ if node[:postgresql][:clusters][:"15/main"]
   apache_site "apis.dev.openstreetmap.org" do
     template "apache.apis.erb"
   end
-
-  node[:postgresql][:clusters].each_key do |name|
-    postgresql_munin name do
-      cluster name
-      database "ALL"
-    end
-  end
 end
 
 directory "/srv/ooc.openstreetmap.org" do
index ced5a91965c8721b00e281c4d8efb5b5f1322081..00c3be082c78446c153503a5b4f6e92de6b634dc 100644 (file)
@@ -225,9 +225,6 @@ template "/etc/mail.rc" do
   mode "644"
 end
 
-munin_plugin "exim_mailqueue"
-munin_plugin "exim_mailstats"
-
 prometheus_exporter "exim" do
   port 9636
   user "Debian-exim"
index 060251680b6d9201ba6e1434e618253eb5d52c12..ca0a419c37d29338304951a44c32dcbbb34c7547 100644 (file)
@@ -52,8 +52,6 @@ service "fail2ban" do
   action [:enable, :start]
 end
 
-munin_plugin "fail2ban"
-
 prometheus_exporter "fail2ban" do
   port 9635
   user "root"
index 4e676f3879712720e3ac7211c2e47ae6dd187b59..fa6cb6cc80b3d7afe2b44e0029ace99eba6462b3 100644 (file)
@@ -445,38 +445,21 @@ disks = disks.map do |disk|
     if controller && controller[:device]
       device = controller[:device].sub("/dev/", "")
       smart = disk[:smart_device]
-
-      if device.start_with?("cciss/") && smart =~ /^cciss,(\d+)$/
-        array = node[:hardware][:disk][:arrays][disk[:arrays].first]
-        munin = "cciss-3#{array[:wwn]}-#{Regexp.last_match(1)}"
-      elsif smart =~ /^.*,(\d+)$/
-        munin = "#{device}-#{Regexp.last_match(1)}"
-      elsif smart =~ %r{^.*,(\d+)/(\d+)$}
-        munin = "#{device}-#{Regexp.last_match(1)}:#{Regexp.last_match(2)}"
-      end
     elsif disk[:device]
       device = disk[:device].sub("/dev/", "")
       smart = disk[:smart_device]
-
-      if smart =~ /^.*,(\d+),(\d+),(\d+)$/
-        munin = "#{device}-#{Regexp.last_match(1)}:#{Regexp.last_match(2)}:#{Regexp.last_match(3)}"
-      end
     end
   elsif disk[:device] =~ %r{^/dev/(nvme\d+)n\d+$}
     device = Regexp.last_match(1)
-    munin = device
   elsif disk[:device]
     device = disk[:device].sub("/dev/", "")
-    munin = device
   end
 
-  next if device.nil? || munin.nil?
+  next if device.nil?
 
   Hash[
     :device => device,
-    :smart => smart,
-    :munin => munin,
-    :hddtemp => munin.tr("-:", "_")
+    :smart => smart
   ]
 end
 
@@ -536,48 +519,12 @@ if disks.count.positive?
     private_users false
     protect_clock false
   end
-
-  # Don't try and do munin monitoring of disks behind
-  # an Areca controller as they only allow one thing to
-  # talk to the controller at a time and smartd will
-  # throw errors if it clashes with munin
-  disks = disks.reject { |disk| disk[:smart]&.start_with?("areca,") }
-
-  disks.each do |disk|
-    munin_plugin "smart_#{disk[:munin]}" do
-      target "smart_"
-      conf "munin.smart.erb"
-      conf_variables :disk => disk
-    end
-  end
 else
   service "smartd" do
     action [:stop, :disable]
   end
 end
 
-if disks.count.positive?
-  munin_plugin "hddtemp_smartctl" do
-    conf "munin.hddtemp.erb"
-    conf_variables :disks => disks
-  end
-else
-  munin_plugin "hddtemp_smartctl" do
-    action :delete
-    conf "munin.hddtemp.erb"
-  end
-end
-
-plugins = Dir.glob("/etc/munin/plugins/smart_*").map { |p| File.basename(p) } -
-          disks.map { |d| "smart_#{d[:munin]}" }
-
-plugins.each do |plugin|
-  munin_plugin plugin do
-    action :delete
-    conf "munin.smart.erb"
-  end
-end
-
 if File.exist?("/etc/mdadm/mdadm.conf")
   mdadm_conf = edit_file "/etc/mdadm/mdadm.conf" do |line|
     line.gsub!(/^MAILADDR .*$/, "MAILADDR admins@openstreetmap.org")
diff --git a/cookbooks/hardware/templates/default/munin.hddtemp.erb b/cookbooks/hardware/templates/default/munin.hddtemp.erb
deleted file mode 100644 (file)
index 9d5e495..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-# DO NOT EDIT - This file is being maintained by Chef
-
-[hddtemp_smartctl]
-env.drives <%= @disks.map { |d| d[:hddtemp] }.sort.join(" ") %>
-<% @disks.sort_by { |d| d[:hddtemp] }.each do |disk| -%>
-<% if disk[:smart] -%>
-env.type_<%= disk[:hddtemp] %> <%= disk[:smart] %>
-<% end -%>
-env.dev_<%= disk[:hddtemp] %> <%= disk[:device] %>
-<% end -%>
diff --git a/cookbooks/hardware/templates/default/munin.smart.erb b/cookbooks/hardware/templates/default/munin.smart.erb
deleted file mode 100644 (file)
index 1908f8e..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-# DO NOT EDIT - This file is being maintained by Chef
-
-[smart_<%= @disk[:munin] %>]
-<% if @disk[:smart] -%>
-env.smartargs -H -d <%= @disk[:smart] %>
-<% else -%>
-env.smartargs -H
-<% end -%>
-env.ignoreexit 4
index 56916ec9ea253723cb35a633908ba249367ee42f..b178016ad1eab0636ed0c2b2343bb1c3da85a455 100644 (file)
@@ -35,16 +35,6 @@ template "/etc/memcached.conf" do
   notifies :restart, "service[memcached]"
 end
 
-munin_plugin_conf "memcached_multi" do
-  template "munin.erb"
-end
-
-%w[bytes commands conns evictions items memory].each do |stat|
-  munin_plugin "memcached_multi_#{stat}" do
-    target "memcached_multi_"
-  end
-end
-
 prometheus_exporter "memcached" do
   port 9150
   options "--memcached.address=#{node[:memcached][:ip_address]}:#{node[:memcached][:tcp_port]} --memcached.pid-file=/run/memcached/memcached.pid"
diff --git a/cookbooks/memcached/templates/default/munin.erb b/cookbooks/memcached/templates/default/munin.erb
deleted file mode 100644 (file)
index 40d4348..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-# DO NOT EDIT - This file is being maintained by Chef
-
-[memcached_multi_*]
-user nobody
-env.host <%= node[:memcached][:ip_address] %>
-env.port <%= node[:memcached][:tcp_port] %>
diff --git a/cookbooks/munin/files/default/plugin-conf.d/api b/cookbooks/munin/files/default/plugin-conf.d/api
deleted file mode 100644 (file)
index 614696e..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-[api_calls_num]
-user root
diff --git a/cookbooks/munin/files/default/plugin-conf.d/chef b/cookbooks/munin/files/default/plugin-conf.d/chef
deleted file mode 100644 (file)
index 33beecc..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-[chef_*]
-user chefrepo
diff --git a/cookbooks/munin/files/default/plugin-conf.d/hpasmcli2 b/cookbooks/munin/files/default/plugin-conf.d/hpasmcli2
deleted file mode 100644 (file)
index d7673cd..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-[hpasmcli2_*]
-user root
diff --git a/cookbooks/munin/files/default/plugins/api_calls_ b/cookbooks/munin/files/default/plugins/api_calls_
deleted file mode 100755 (executable)
index 4eae910..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-#!/usr/bin/ruby
-
-require "rubygems"
-require "date"
-require "hpricot"
-require "open-uri"
-
-def uris_from_status(server)
-  file = open("http://#{server}/server-status").read
-  doc = Hpricot.parse(file)
-  tables = doc / "table"
-  rows = (tables[1] / "tr")[1..-1]
-  data = rows.collect { |r| (r / "td").collect(&:inner_html) }
-  # filter where the PID is numeric, status is 'W' and host matches the server
-  matching_data = data.select { |r| r[1].to_i.positive? && r[3].match(/W/) && r[12].match(server) }
-  # return only the URI part
-  matching_data.collect { |r| r[13] }
-end
-
-CALL_TYPES = {
-  :map => "Map API calls",
-  :upload => "Changeset diff uploads",
-  :amf => "AMF API calls",
-  :history => "Element history fetches",
-  :full => "Full element fetches",
-  :trkpts => "GPX trackpoints calls",
-  :web => "Web site traffic",
-  :other => "Other API calls"
-}.freeze
-
-def categorise_uri(line)
-  uri = line.split(" ")[1]
-
-  case uri
-  when %r{api/0\.6/map} then :map
-  when %r{api/0\.6/changeset/[0-9]*/upload} then :upload
-  when %r{api/0\.6/amf} then :amf
-  when %r{api/0\.6/(node|way|relation)/[0-9]*/history} then :history
-  when %r{api/0\.6/(node|way|relation)/[0-9]*/full} then :full
-  when %r{api/0\.6/trackpoints} then :trkpts
-  when %r{api/0\.6/} then :other
-  else :web
-  end
-end
-
-server = $PROGRAM_NAME.match("api_calls_(.*)")[1]
-
-if ARGV[0] == "config"
-  puts "graph_title Active requests"
-  puts "graph_vlabel Number of requests"
-  puts "graph_category api"
-  CALL_TYPES.each { |k, v| puts "#{k}.label #{v}" }
-
-else
-  counts = uris_from_status(server)
-           .collect { |x| categorise_uri(x) }
-           .each_with_object({}) do |e, h|
-    if h.key? e
-      h[e] += 1
-    else
-      h[e] = 1
-    end
-  end
-
-  CALL_TYPES.each_key do |type|
-    count = counts[type] || 0
-    puts "#{type}.value #{count}"
-  end
-end
diff --git a/cookbooks/munin/files/default/plugins/api_calls_num b/cookbooks/munin/files/default/plugins/api_calls_num
deleted file mode 100755 (executable)
index e776505..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-#!/usr/bin/ruby
-
-require "json"
-
-CALL_TYPES = {
-  :map => "Map API calls",
-  :upload => "Changeset diff uploads",
-  :amf => "AMF API calls",
-  :history => "Element history fetches",
-  :full => "Full element fetches",
-  :trkpts => "GPX trackpoints calls",
-  :web => "Web site traffic",
-  :other => "Other API calls"
-}.freeze
-
-if ARGV[0] == "config"
-  puts "graph_title Requests processed"
-  puts "graph_args --base 1000"
-  puts "graph_vlabel Number of requests per ${graph_period}"
-  puts "graph_category api"
-
-  CALL_TYPES.each do |type, label|
-    puts "#{type}.label #{label}"
-    puts "#{type}.type DERIVE"
-    puts "#{type}.min 0"
-  end
-else
-  statistics = JSON.parse(File.read("/srv/www.openstreetmap.org/rails/tmp/statistics.json"))
-
-  CALL_TYPES.each_key do |type|
-    count = statistics["uri"][type.to_s] || 0
-    puts "#{type}.value #{count}"
-  end
-end
diff --git a/cookbooks/munin/files/default/plugins/api_calls_status b/cookbooks/munin/files/default/plugins/api_calls_status
deleted file mode 100755 (executable)
index 4a9623f..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-#!/usr/bin/ruby
-
-require "json"
-
-HTTP_STATUSES = {
-  "200" => "OK",
-  "206" => "Partial Content",
-  "301" => "Moved Permanently",
-  "302" => "Found",
-  "303" => "See Other",
-  "304" => "Not Modified",
-  "400" => "Bad Request",
-  "401" => "Unauthorized",
-  "403" => "Forbidden",
-  "404" => "Not Found",
-  "405" => "Method Not Allowed",
-  "408" => "Request Timeout",
-  "409" => "Conflict",
-  "410" => "Gone",
-  "412" => "Precondition Failed",
-  "416" => "Requested Range Not Satisfiable",
-  "422" => "Unprocessable Entity",
-  "500" => "Internal Server Error",
-  "502" => "Bad Gateway",
-  "503" => "Service Unavailable",
-  "509" => "Bandwidth Limit Exceeded"
-}.freeze
-
-if ARGV[0] == "config"
-  puts "graph_title HTTP response codes"
-  puts "graph_args --base 1000"
-  puts "graph_vlabel Number of requests per ${graph_period}"
-  puts "graph_category api"
-
-  HTTP_STATUSES.each do |code, label|
-    puts "http#{code}.label #{code} #{label}"
-    puts "http#{code}.type DERIVE"
-    puts "http#{code}.min 0"
-  end
-else
-  statistics = JSON.parse(File.read("/srv/www.openstreetmap.org/rails/tmp/statistics.json"))
-
-  HTTP_STATUSES.each_key do |code|
-    count = statistics["status"][code] || 0
-    puts "http#{code}.value #{count}"
-  end
-end
diff --git a/cookbooks/munin/files/default/plugins/api_waits_ b/cookbooks/munin/files/default/plugins/api_waits_
deleted file mode 100755 (executable)
index 3d511ec..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-#!/usr/bin/ruby
-
-require "rubygems"
-require "date"
-require "hpricot"
-require "open-uri"
-
-def uri_and_times_from_status(server)
-  file = open("http://#{server}/server-status").read
-  doc = Hpricot.parse(file)
-  tables = doc / "table"
-  rows = (tables[1] / "tr")[1..-1]
-  data = rows.collect { |r| (r / "td").collect(&:inner_html) }
-  # filter where the PID is numeric, status is 'W' and host matches the server
-  matching_data = data.select { |r| r[1].to_i.positive? && r[3].match(/W/) && r[12].match(server) }
-  # return URI and number of seconds processing for each request
-  matching_data.collect { |r| [r[13], r[5].to_i] }
-end
-
-CALL_TYPES = {
-  :map => "Map API calls",
-  :upload => "Changeset diff uploads",
-  :amf => "AMF API calls",
-  :history => "Element history fetches",
-  :full => "Full element fetches",
-  :trkpts => "GPX trackpoints calls",
-  :web => "Web site traffic",
-  :other => "Other API calls"
-}.freeze
-
-def categorise_uri(line)
-  uri = line.split(" ")[1]
-
-  case uri
-  when %r{api/0\.6/map} then :map
-  when %r{api/0\.6/changeset/[0-9]*/upload/} then :upload
-  when %r{api/0\.6/amf} then :amf
-  when %r{api/0\.6/(node|way|relation)/[0-9]*/history} then :history
-  when %r{api/0\.6/(node|way|relation)/[0-9]*/full} then :full
-  when %r{api/0\.6/trackpoints} then :trkpts
-  when %r{api/0\.6/} then :other
-  else :web
-  end
-end
-
-server = $PROGRAM_NAME.match("api_waits_(.*)")[1]
-
-if ARGV[0] == "config"
-  puts "graph_title Wait times for active requests"
-  puts "graph_vlabel Average time of requests"
-  puts "graph_category api"
-  CALL_TYPES.each { |k, v| puts "#{k}.label #{v}" }
-
-else
-  counts = uri_and_times_from_status(server)
-           .collect { |x, y| [categorise_uri(x), y] }
-           .each_with_object({}) do |e, h|
-    category, time = e
-    if h.key? category
-      h[category] += [time]
-    else
-      h[category] = [time]
-    end
-  end
-
-  CALL_TYPES.each_key do |type|
-    count = counts[type] || [0]
-    avg = count.inject(0) { |acc, elem| acc + elem } / (1.0 * count.length)
-    puts "#{type}.value #{avg}"
-  end
-end
diff --git a/cookbooks/munin/files/default/plugins/chef_status b/cookbooks/munin/files/default/plugins/chef_status
deleted file mode 100755 (executable)
index 6680c4a..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-#!/usr/bin/ruby
-
-require "json"
-
-nodes = JSON.parse(IO.popen(["/opt/chef/embedded/bin/knife", "status", "-c", "/var/lib/chef/.chef/knife.rb", "-F", "json"]).read).sort_by { |node| node["name"] }
-
-if ARGV[0] == "config"
-  puts "graph_title Chef node status"
-  puts "graph_args --base 1000 --logarithmic"
-  puts "graph_vlabel Time since last checkin"
-  puts "graph_category chef"
-
-  nodes.each do |node|
-    name = node["name"].split(".").first
-
-    puts "#{name}.label #{name}"
-    puts "#{name}.type GAUGE"
-    puts "#{name}.min 0"
-    puts "#{name}.warning 14400"
-    puts "#{name}.critical 43200"
-  end
-else
-  nodes.each do |node|
-    name = node["name"].split(".").first
-    time = Time.now.to_f - node["ohai_time"]
-
-    puts "#{name}.value #{time}"
-  end
-end
diff --git a/cookbooks/munin/files/default/plugins/chrony b/cookbooks/munin/files/default/plugins/chrony
deleted file mode 100755 (executable)
index 314860f..0000000
+++ /dev/null
@@ -1,119 +0,0 @@
-#!/bin/sh
-
-: <<=cut
-
-=head1 NAME
-
-parse Chrony Tracking output for timeserver status information
-
-=head1 APPLICABLE SYSTEMS
-
-Any system with a local chronyd service.
-
-=head1 CONFIGURATION
-
-No configuration.
-
-=head1 MAGIC MARKERS
-
-  #%# family=auto
-  #%# capabilities=autoconf
-
-=head1 VERSION
-
-Revision 0.1 2008/08/23 13:06:00 joti
-
-  First version only chronyc tracking, autodetection included.
-
-Revision 0.2 2008/10/11 16:09:00 joti
-
-  Added scaling of other values to match with frequency, added more description to fields
-
-Revision 0.3 2014/02/16 zjttoefs
-
-  reduce forking by using awk
-  do not limit output precision
-  add stratum monitoring
-  detect slow/fast time or freqency and adjust sign of value accordingly
-  remove commented out code
-
-Revision 0.4 2016/11/10 Lars Kruse
-
-  rewrite field handling
-  use "which" for "chronyc" location
-  switch from "bash" to "sh"
-  fix exit code of failing "autoconf"
-
-=head1 AUTHOR
-
-  joti
-  zjttoefs
-  Lars Kruse <devel@sumpfralle.de>
-
-=cut
-
-CHRONYC="$(which chronyc | head -1)"
-
-# Frequency has extremely higher values than other. Therefore they are fitted by scaling via suitable factors.
-# field definitions:
-#   - munin fieldname
-#   - factor for graph visualization (all values are supposed to reach a similar dimension)
-#   - regular expression of the chrony output line (may not contain whitespace, case insensitive)
-#   - label (may include "%d" for including the factor; may contain whitespace)
-fields="stratum                1       ^Stratum                Stratum
-       systime         1000    ^System.time            System Time (x%d)
-       frequency       1       ^Frequency              Frequency (ppm)
-       residualfreq    100     ^Residual.freq          Residual Freq (ppm, x%d)
-       skew            100     ^Skew                   Skew (ppm, x%d)
-       rootdelay       1000    ^Root.delay             Root delay (seconds, x%d)
-       rootdispersion  1000    ^Root.dispersion        Root dispersion (seconds, x%d)"
-
-# chrony example output (v2.4.1):
-#   Reference ID    : 131.188.3.221 (ntp1.rrze.uni-erlangen.de)
-#   Stratum         : 2
-#   Ref time (UTC)  : Thu Nov 10 22:39:50 2016
-#   System time     : 0.000503798 seconds slow of NTP time
-#   Last offset     : +0.000254355 seconds
-#   RMS offset      : 0.002186779 seconds
-#   Frequency       : 17.716 ppm slow
-#   Residual freq   : +0.066 ppm
-#   Skew            : 4.035 ppm
-#   Root delay      : 0.042980 seconds
-#   Root dispersion : 0.005391 seconds
-#   Update interval : 258.4 seconds
-#   Leap status     : Normal
-
-
-if [ "$1" = "autoconf" ]; then
-       if [ -n "$CHRONYC" ] && [ -x "$CHRONYC" ]; then
-               echo yes
-       else
-               echo "no (missing 'chronyc' executable)"
-       fi
-       exit 0
-fi
-
-if [ "$1" = "config" ]; then
-       echo 'graph_title Chrony Tracking Stats'
-       echo 'graph_args --base 1000 -l 0'
-       echo 'graph_vlabel (seconds,ppm)'
-       echo 'graph_category time'
-       echo "$fields" | while read fieldname factor regex label; do
-               # insert the factor, if "%d" is part of the label
-               printf "${fieldname}.label $label\n" "$factor"
-               echo "${fieldname}.type GAUGE"
-       done
-       exit 0
-fi
-
-chrony_status="$("$CHRONYC" tracking)"
-echo "$fields" | while read fieldname factor regex label; do
-       status_line="$(echo "$chrony_status" | grep -i -- "$regex " | cut -d ":" -f 2-)"
-       if [ -z "$status_line" ]; then
-               value="U"
-       else
-               # the keyword "slow" indicates negative values
-               value="$(echo "$status_line" | awk '{ /slow/ ? SIGN=-1 : SIGN=1; print $1 * SIGN * '"$factor"' }')"
-       fi
-       echo "${fieldname}.value $value"
-done
diff --git a/cookbooks/munin/files/default/plugins/fw_conntrack b/cookbooks/munin/files/default/plugins/fw_conntrack
deleted file mode 100755 (executable)
index c575dd8..0000000
+++ /dev/null
@@ -1,168 +0,0 @@
-#!/usr/bin/perl -w
-
-=head1 NAME
-
-fw_conntrack - Plugin to monitor the number of tracked connections
-through a Linux 2.4/2.6 firewall
-
-=head1 CONFIGURATION
-
-This plugin must run with root privileges
-
-=head2 CONFIGURATION EXAMPLE
-
-/etc/munin/plugin-conf.d/global or other file in that dir must contain:
-
- [fw_*]
-  user root
-
-=head1 NOTES
-
-ESTABLISHED+FIN_WAIT+TIME_WAIT+SYN_SENT+UDP are the most interesting
-connections.
-
-The total list also includes SYN_RECV, CLOSE, CLOSE_WAIT, LAST_ACK and
-LISTEN, but these were not (often) observed on my firewall.
-
-TOTAL is the total number of tracked connections.
-
-ASSURED and UNREPLIED connections are complimentary subsets of
-ESTABLISHED.
-
-ASSURED is after ACK is seen after SYN_RECV.  Therefore ASSURED is
-plotted but not UNREPLIED.
-
-Note that the plugin depends on the netfilter "conntrack" userspace tool.
-It comes from http://conntrack-tools.netfilter.org/
-
-=head1 AUTHORS
-
-=over
-
-=item 2004.05.05: Initial version by Nicolai Langfeldt, Linpro AS, Oslo, Norway
-
-=item 2004.05.06: Enhanced to count NATed connections after input from Xavier on munin-users list
-
-=item 2011.09.23: Perl version by Alex Tomlins
-
-=back
-
-=head1 LICENSE
-
-GPL
-
-=head1 MAGIC MARKERS
-
- #%# family=auto
- #%# capabilities=autoconf
-
-=cut
-
-use strict;
-use Munin::Plugin;
-
-my $conntrack = '/usr/sbin/conntrack';
-my $nf_conntrack_file = '/proc/net/nf_conntrack';
-my $ip_conntrack_file = '/proc/net/ip_conntrack';
-my @conntrack_max_files = qw(
-        /proc/sys/net/nf_conntrack_max
-        /proc/sys/net/netfilter/nf_conntrack_max
-        /proc/sys/net/ipv4/ip_conntrack_max
-        /proc/sys/net/ipv4/netfilter/ip_conntrack_max
-);
-
-if ( defined($ARGV[0]) and $ARGV[0] eq "autoconf" ) {
-    if ( -x $conntrack or -r $nf_conntrack_file or -r $ip_conntrack_file) {
-        print "yes\n";
-    } else {
-        print "no\n";
-    }
-    exit 0;
-}
-
-if ( defined($ARGV[0]) and $ARGV[0] eq "config" ) {
-    print <<EOF;
-graph_title Connections through firewall
-graph_vlabel Connections
-graph_category network
-graph_args -l 0
-established.label Established
-established.type GAUGE
-established.draw AREA
-fin_wait.label FIN_WAIT
-fin_wait.type GAUGE
-fin_wait.draw STACK
-time_wait.label TIME_WAIT
-time_wait.type GAUGE
-time_wait.draw STACK
-syn_sent.label SYN_SENT
-syn_sent.type GAUGE
-syn_sent.draw STACK
-udp.label UDP connections
-udp.type GAUGE
-udp.draw STACK
-assured.label Assured
-assured.type GAUGE
-assured.draw LINE2
-nated.label NATed
-nated.type GAUGE
-nated.draw LINE1
-total.label Total
-total.type GAUGE
-total.graph no
-EOF
-    my $max;
-    foreach (@conntrack_max_files) {
-        if ( -r $_) {
-            chomp($max = `cat $_`);
-            last;
-        }
-    }
-    if ($max) {
-        print "total.warning ", $max * 8 / 10, "\n";
-        print "total.critical ", $max * 9 / 10, "\n";
-    }
-    exit 0;
-}
-
-my $command;
-if ( -x $conntrack) {
-    $command = "$conntrack -L -o extended -f ipv4 2>/dev/null; $conntrack -L -o extended -f ipv6 2>/dev/null";
-} elsif ( -r $nf_conntrack_file ) {
-    $command = "cat $nf_conntrack_file";
-} else {
-    $command = "cat $ip_conntrack_file";
-}
-
-my %state = (
-    'ESTABLISHED' => 0,
-    'FIN_WAIT' => 0,
-    'TIME_WAIT' => 0,
-    'SYN_SENT' => 0,
-    'UDP' => 0,
-    'ASSURED' => 0,
-    'NATTED' => 0,
-    'TOTAL' => 0
-);
-open CMD, "$command|";
-while (<CMD>) {
-    $state{'TOTAL'} ++;
-    $state{'UDP'} ++ if /udp /;
-    $state{'ASSURED'} ++ if /ASSURED/;
-    if (/tcp \s*\d+\s+\d+\s+(\S+)/) {
-         $state{$1} ++;
-    }
-    if (/src=(\S+)\s+dst=(\S+)\s+sport.*src=(\S+)\s+dst=(\S+)/) {
-        $state{'NATTED'} ++ if $1 ne $4 or $2 ne $3;
-    }
-}
-close CMD;
-
-print "established.value $state{'ESTABLISHED'}\n";
-print "fin_wait.value $state{'FIN_WAIT'}\n";
-print "time_wait.value $state{'TIME_WAIT'}\n";
-print "syn_sent.value $state{'SYN_SENT'}\n";
-print "udp.value $state{'UDP'}\n";
-print "assured.value $state{'ASSURED'}\n";
-print "nated.value $state{'NATTED'}\n";
-print "total.value $state{'TOTAL'}\n";
diff --git a/cookbooks/munin/files/default/plugins/fw_forwarded_local b/cookbooks/munin/files/default/plugins/fw_forwarded_local
deleted file mode 100755 (executable)
index f081d36..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-#!/usr/bin/perl -w
-
-=head1 NAME
-
-fw_forwarded_local - Plugin to monitor network connections.
-
-=head1 CONFIGURATION
-
-This plugin must run with root privileges
-
-=head2 CONFIGURATION EXAMPLE
-
-/etc/munin/plugin-conf.d/global or other file in that dir must contain:
-
- [fw_*]
-  user root
-
-=head1 NOTES
-
-=over
-
-=item * forward: number of connections forwarded
-
-=item * local: number of connections for the host itself
-
-=back
-
-=head1 AUTHORS
-
-2011.09.23: Perl version by Alex Tomlins
-
-=head1 MAGIC MARKERS
-
- #%# family=auto
- #%# capabilities=autoconf
-
-=cut
-
-use strict;
-use Munin::Plugin;
-
-my $conntrack = '/usr/sbin/conntrack';
-my $nf_conntrack_file = '/proc/net/nf_conntrack';
-my $ip_conntrack_file = '/proc/net/ip_conntrack';
-
-if ( defined($ARGV[0]) and $ARGV[0] eq "autoconf" ) {
-    if ( -x $conntrack or -r $nf_conntrack_file or -r $ip_conntrack_file) {
-        print "yes\n";
-    } else {
-        print "no\n";
-    }
-    exit 0;
-}
-
-if ( defined($ARGV[0]) and $ARGV[0] eq "config" ) {
-    print "graph_title ipconntrack\n";
-    print "graph_args -l 0 --base 1000\n";
-    print "graph_vlabel established connections\n";
-    print "graph_category network\n";
-    print "forward.label forward\n";
-    print "forward.type GAUGE\n";
-    print "local.label local\n";
-    print "local.type GAUGE\n";
-    exit 0;
-}
-
-my $command;
-if ( -x $conntrack) {
-    $command = "$conntrack -L -o extended 2>/dev/null";
-} elsif ( -r $nf_conntrack_file ) {
-    $command = "cat $nf_conntrack_file";
-} elsif (-r $ip_conntrack_file ) {
-    $command = "cat $ip_conntrack_file";
-} else {
-    die "Can't find conntrack information\n";
-}
-
-my $local = 0;
-my $forward = 0;
-open CMD, "$command|";
-while (<CMD>) {
-    if (/ESTABLISHED\s+src=(\S+)\s+dst=(\S+)\s+sport.*src=(\S+)\s+dst=(\S+)/) {
-        if ($1 eq $4) {
-            $local++;
-        } else {
-            $forward++;
-        }
-    }
-}
-close CMD;
-
-print "forward.value $forward\n";
-print "local.value $local\n"
diff --git a/cookbooks/munin/files/default/plugins/hpasmcli2_ b/cookbooks/munin/files/default/plugins/hpasmcli2_
deleted file mode 100755 (executable)
index 2169998..0000000
+++ /dev/null
@@ -1,165 +0,0 @@
-#!/usr/bin/env perl
-#
-# Plugin to monitor Proliant server health status using hpasmcli.
-#
-# Config variables:
-#   user root       -- requrired by hpasmcli
-#   env.hpasmcli    -- path to hpasmcli executable (optional)
-#   env.degree      -- Unit of temperatures (C or F / default value is C)
-#
-#
-# Author: Tsuyoshi Wada <mail@tuyo.jp>
-#
-# v1.0  2007/12/08 - First version
-#
-# Copyright (c) 2007 Tsuyoshi Wada
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-# 1. Redistributions of source code must retain the above copyright
-#    notice, this list of conditions and the following disclaimer.
-# 2. Redistributions in binary form must reproduce the above copyright
-#    notice, this list of conditions and the following disclaimer in the
-#    documentation and/or other materials provided with the distribution.
-#
-# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
-# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
-# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
-# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-#
-# Magic markers
-#%# family=contrib
-#%# capabilities=autoconf suggest
-
-use strict;
-
-my $hpasmcli = exists $ENV{hpasmcli} ? $ENV{hpasmcli} : undef;
-$hpasmcli = `which hpasmcli` unless $hpasmcli;
-chomp $hpasmcli;
-$hpasmcli = undef unless -x $hpasmcli;
-my @dirs = qw(/usr/bin /usr/sbin /usr/local/bin /usr/local/sbin);
-until ($hpasmcli or @dirs == 0) {
-    my $dir = shift @dirs;
-    my $path = $dir.'/hpasmcli';
-    $hpasmcli = $path if -x $path;
-}
-my $degree = exists $ENV{degree} ? $ENV{degree} : 'C';
-my $deg_name = $degree eq 'C' ? "Celsius": "Fahrenheit";
-
-if (defined($ARGV[0])) {
-    if ($ARGV[0] eq 'autoconf') {
-        if ($hpasmcli and -x $hpasmcli) {
-            my @chk_result = `$hpasmcli -s \"help\"`;
-            if ($? eq "0") {
-                print "yes\n";
-                exit 0;
-            } else {
-                my $reason = 'Unknown error';
-                foreach my $line (@chk_result) {
-                    if ($line =~ /^ERROR/i) {
-                        chomp($line);
-                        $reason = $line;
-                        last;
-                    }
-                }
-                print "no ($reason)\n";
-                exit 1;
-            }
-        } else {
-            print "no (hpasmcli not found)\n";
-            exit 1;
-        }
-    } elsif ($ARGV[0] eq 'suggest') {
-        print "temp\nfans\n";
-        exit 0;
-    }
-}
-
-$0 =~ /hpasmcli2_(.+)*$/;
-my $show_target = $1;
-my @show_result = `$hpasmcli -s \"show $show_target\"`;
-my %output;
-
-if (defined($show_target) and $show_target eq 'temp') {
-    foreach my $line (@show_result) {
-        if ($line =~ /^#/) {
-            $line =~ s/\s+/ /g;
-            $line =~ s/^\s//g;
-            my ($sensor, $loc, $temp, $threshold) = split(/\s/, $line);
-            next if ($temp eq "-");
-            $loc =~ s/\/|#//g;
-            $temp = $degree eq 'C' ? (split(/\//, $temp))[0] : (split(/\//, $temp))[1];
-            $temp =~ s/C|F//g;
-            $threshold = $degree eq 'C' ? (split(/\//, $threshold))[0] : (split(/\//, $threshold))[1];
-            $threshold =~ s/C|F//g;
-            $sensor =~s/#//g;
-            $output{$sensor} = {
-                'location'  => lc($loc),
-                'temp'      => $temp,
-                'threshold' => $threshold
-            };
-        }
-    }
-    if (defined($ARGV[0]) and $ARGV[0] eq 'config') {
-        print "graph_title hpasm: Temperature\n";
-        print "graph_args --base 1000 -l 0\n";
-        print "graph_vlabel Degrees in $deg_name\n";
-        print "graph_category sensors\n";
-        print "graph_info This graph shows the temperatures as reported by hpasmcli.\n";
-        foreach my $key (sort keys %output) {
-            print "temp$key.label $output{$key}->{'location'}\n";
-            print "temp$key.warning " . ($output{$key}->{'threshold'} * 0.85) . "\n";
-            print "temp$key.critical $output{$key}->{'threshold'}\n";
-        }
-    } else {
-        foreach my $key (sort keys %output) {
-            print "temp$key.value $output{$key}->{'temp'}\n";
-        }
-    }
-} elsif (defined($show_target) and $show_target eq 'fans') {
-    foreach my $line (@show_result) {
-        if ($line =~ /^#/) {
-            $line =~ s/\s+/ /g;
-            $line =~ s/^\s//g;
-            my ($fan, $loc, $present, $speed, $rate, $redundant, $partner, $pluggable) = split(/\s/, $line);
-            next if ($present ne "Yes");
-            $loc =~ s/\/|#//g;
-            $rate =~ s/\%//g;
-            my $threshold = '100';
-            $fan =~s/#//g;
-            $output{$fan} = {
-                'location'  => lc($loc),
-                'rate'      => $rate,
-                'threshold' => $threshold
-            };
-        }
-    }
-    if (defined($ARGV[0]) and $ARGV[0] eq 'config') {
-        print "graph_title hpasm: Fans\n";
-        print "graph_args --base 1000 -l 0\n";
-        print "graph_vlabel of max (%)\n";
-        print "graph_category sensors\n";
-        print "graph_info This graph shows the info of fans as reported by hpasmcli.\n";
-        foreach my $key (sort keys %output) {
-            print "fan$key.label FAN$key $output{$key}->{'location'}\n";
-            print "fan$key.warning " . ($output{$key}->{'threshold'} * 0.75) . "\n";
-            print "fan$key.critical $output{$key}->{'threshold'}\n";
-        }
-    } else {
-        foreach my $key (sort keys %output) {
-            print "fan$key.value $output{$key}->{'rate'}\n";
-        }
-    }
-} else {
-    die "Unknown target specified ($show_target)\n";
-}
-
-exit 0;
diff --git a/cookbooks/munin/files/default/plugins/memcached_ b/cookbooks/munin/files/default/plugins/memcached_
deleted file mode 100755 (executable)
index 5838cda..0000000
+++ /dev/null
@@ -1,486 +0,0 @@
-#!/usr/bin/perl
-#
-
-=head1 MEMCACHED
-
-Memcached - A Plugin to monitor Memcached Servers
-
-=head1 MUNIN CONFIGURATION
-
-[memcached_*]
- env.host 127.0.0.1     *default*
- env.port 11211         *default*
-
-=head2 MUNIN ENVIRONMENT CONFIGURATION EXPLANATION
-
- host = host we are going to monitor
- port = port we are connecting to, in order to gather stats
-
-=head1 NODE CONFIGURATION
-
-Please make sure you can telnet to your memcache servers and issue the
- following commands: stats
-
-Available Graphs contained in this Plugin
-
-bytes => This graphs the current network traffic in and out
-
-commands => This graphs the current commands being issued to the memcache machine.
-
-conns => This graphs the current, max connections as well as avg conns per sec avg conns per sec is derived from total_conns / uptime.
-
-evictions => This graphs the current evictions on the node.
-
-items => This graphs the current items and total items in the memcached node.
-
-memory => This graphs the current and max memory allocation.
-
-The following example holds true for all graphing options in this plugin.
- Example: ln -s /usr/share/munin/plugins/memcached_ /etc/munin/plugins/memcached_bytes
-
-=head1 ACKNOWLEDGEMENTS
-
-Thanks to dormando for putting up with me ;)
-
-=head1 AUTHOR
-
-Matt West < https://github.com/mhwest13/Memcached-Munin-Plugin >
-
-=head1 LICENSE
-
-GPLv2
-
-=head1 MAGIC MARKERS
-
-#%# family=auto
-#%# capabilities=autoconf suggest
-
-=cut
-
-use strict;
-use IO::Socket;
-
-my $host = $ENV{host} || "127.0.0.1";
-my $port = $ENV{port} || 11211;
-my $connection;
-
-my %stats;
-
-# This hash contains the information contained in two memcache commands
-# stats and stats settings.
-
-# So I was trying to figure out how to build this up, and looking at some good examples
-# I decided to use the format, or for the most part, the format from the mysql_ munin plugin
-# for Innodb by Kjell-Magne Ãierud, it just spoke ease of flexibility especially with multigraphs
-# thanks btw ;)
-#
-# %graphs   is a container for all of the graph definition information. In here is where you'll
-#           find the configuration information for munin's graphing procedure.
-#   Format:
-#
-#   $graph{graph_name} => {
-#       config => {
-#           # You'll find keys and values stored here for graph manipulation
-#       },
-#       datasrc => [
-#           # Name: name given to data value
-#           # Attr: Attribute for given value
-#           { name => 'Name', (Attr) },
-#           { ... },
-#       ],
-#   }
-my %graphs;
-
-$graphs{items} = {
-    config => {
-        args     => '--base 1000 --lower-limit 0',
-        vlabel   => 'Items in Memcached',
-        category => 'memcached',
-        title    => 'Items',
-        info     => 'This graph shows the number of items in use by memcached',
-    },
-    datasrc => [
-        { name => 'curr_items', label => 'Current Items', min => '0' },
-        {
-            name  => 'total_items',
-            label => 'New Items',
-            min   => '0',
-            type  => 'DERIVE'
-        },
-    ],
-};
-
-$graphs{memory} = {
-    config => {
-        args     => '--base 1024 --lower-limit 0',
-        vlabel   => 'Bytes Used',
-        category => 'memcached',
-        title    => 'Memory Usage',
-        info     => 'This graph shows the memory consumption of memcached',
-    },
-    datasrc => [
-        {
-            name  => 'limit_maxbytes',
-            draw  => 'AREA',
-            label => 'Maximum Bytes Allocated',
-            min   => '0'
-        },
-        {
-            name  => 'bytes',
-            draw  => 'AREA',
-            label => 'Current Bytes Used',
-            min   => '0'
-        },
-    ],
-};
-
-$graphs{bytes} = {
-    config => {
-        args     => '--base 1000',
-        vlabel   => 'bits in (-) / out (+)',
-        title    => 'Network Traffic',
-        category => 'memcached',
-        info =>
-'This graph shows the network traffic in (-) / out (+) of the machine',
-        order => 'bytes_read bytes_written',
-    },
-    datasrc => [
-        {
-            name  => 'bytes_read',
-            type  => 'DERIVE',
-            label => 'Network Traffic coming in (-)',
-            graph => 'no',
-            cdef  => 'bytes_read,8,*',
-            min   => '0'
-        },
-        {
-            name     => 'bytes_written',
-            type     => 'DERIVE',
-            label    => 'Traffic in (-) / out (+)',
-            negative => 'bytes_read',
-            cdef     => 'bytes_written,8,*',
-            min      => '0'
-        },
-    ],
-};
-
-$graphs{conns} = {
-    config => {
-        args     => '--base 1000 --lower-limit 0',
-        vlabel   => 'Connections per ${graph_period}',
-        category => 'memcached',
-        title    => 'Connections',
-        info =>
-'This graph shows the number of connections being handled by memcached',
-        order => 'curr_conns avg_conns',
-    },
-    datasrc => [
-        { name => 'curr_conns', label => 'Current Connections', min => '0' },
-        { name => 'avg_conns',  label => 'Avg Connections',     min => '0' },
-    ],
-};
-
-$graphs{commands} = {
-    config => {
-        args     => '--base 1000 --lower-limit 0',
-        vlabel   => 'Commands per ${graph_period}',
-        category => 'memcached',
-        title    => 'Commands',
-        info =>
-          'This graph shows the number of commands being handled by memcached',
-    },
-    datasrc => [
-        {
-            name  => 'cmd_get',
-            type  => 'DERIVE',
-            label => 'Gets',
-            info  => 'Cumulative number of retrieval reqs',
-            min   => '0'
-        },
-        {
-            name  => 'cmd_set',
-            type  => 'DERIVE',
-            label => 'Sets',
-            info  => 'Cumulative number of storage reqs',
-            min   => '0'
-        },
-        {
-            name  => 'get_hits',
-            type  => 'DERIVE',
-            label => 'Get Hits',
-            info  => 'Number of keys that were requested and found',
-            min   => '0'
-        },
-        {
-            name  => 'get_misses',
-            type  => 'DERIVE',
-            label => 'Get Misses',
-            info  => 'Number of keys there were requested and not found',
-            min   => '0'
-        },
-    ],
-};
-
-$graphs{evictions} = {
-    config => {
-        args     => '--base 1000 --lower-limit 0',
-        vlabel   => 'Evictions per ${graph_period}',
-        category => 'memcached',
-        title    => 'Evictions',
-        info     => 'This graph shows the number of evictions per second',
-    },
-    datasrc => [
-        {
-            name  => 'evictions',
-            label => 'Evictions',
-            info  => 'Cumulative Evictions Across All Slabs',
-            type  => 'DERIVE',
-            min   => '0'
-        },
-    ],
-};
-
-##
-#### Config Check ####
-##
-
-if ( defined $ARGV[0] && $ARGV[0] eq 'config' ) {
-
-    $0 =~ /(?:([^\/]+)_)?memcached_(.+)$/;
-    my $prefix = $1 ? $1 : '';
-    my $plugin = $2;
-
-    die 'Unknown Plugin Specified: ' . ( $plugin ? $plugin : '' )
-      unless $graphs{$plugin};
-
-# We need to fetch the stats before we do any config, cause its needed for multigraph
-    fetch_stats();
-
-    # Now lets go ahead and print out our config.
-    do_config( $prefix, $plugin );
-    exit 0;
-}
-
-##
-#### Autoconf Check ####
-##
-
-if ( defined $ARGV[0] && $ARGV[0] eq 'autoconf' ) {
-
-    # Lets attempt to connect to memcached
-    my $s = get_conn();
-
-    # Lets check that we did connect to memcached
-    if ( defined($s) ) {
-        print "yes\n";
-        exit 0;
-    }
-    else {
-        print "no (unable to connect to $connection)\n";
-        exit 0;
-    }
-}
-
-##
-#### Suggest Check ####
-##
-
-if ( defined $ARGV[0] && $ARGV[0] eq 'suggest' ) {
-
-    # Lets attempt to connect to memcached
-    my $s = get_conn();
-
-    # Lets check that we did connect to memcached
-    if ( defined($s) ) {
-        my @rootplugins =
-          ( 'bytes', 'conns', 'commands', 'evictions', 'items', 'memory' );
-        foreach my $plugin (@rootplugins) {
-            print "$plugin\n";
-        }
-        exit 0;
-    }
-    else {
-        print "no (unable to connect to $connection)\n";
-        exit 0;
-    }
-}
-
-##
-#### Well We aren't running (auto)config/suggest so lets print some stats ####
-##
-
-fetch_output();
-
-##
-#### Subroutines for printing info gathered from memcached ####
-##
-
-##
-#### This subroutine performs the bulk processing for printing statistics.
-##
-
-sub fetch_output {
-
-    $0 =~ /(?:([^\/]+)_)?memcached_(.+)$/;
-    my $prefix = $1 ? $1 : '';
-    my $plugin = $2;
-
-    die 'Unknown Plugin Specified: ' . ( $plugin ? $plugin : '' )
-      unless $graphs{$plugin};
-
-    # Well we need to actually fetch the stats before we do anything to them.
-    fetch_stats();
-
-    # Now lets go ahead and print out our output.
-    print_root_output($plugin);
-
-    return;
-}
-
-##
-#### This subroutine is for the root non-multigraph graphs which render on the main node page ####
-##
-
-sub print_root_output {
-    my ($plugin) = (@_);
-
-    my $graph = $graphs{$plugin};
-
-    #print "graph memcached_$plugin\n";
-
-    if ( $plugin ne 'conns' ) {
-        foreach my $dsrc ( @{ $graph->{datasrc} } ) {
-            my %datasrc = %$dsrc;
-            while ( my ( $key, $value ) = each(%datasrc) ) {
-                next if ( $key ne 'name' );
-                my $output = $stats{$value};
-                print "$dsrc->{name}.value $output\n";
-            }
-        }
-    }
-    else {
-        my $output;
-        foreach my $dsrc ( @{ $graph->{datasrc} } ) {
-            my %datasrc = %$dsrc;
-            while ( my ( $key, $value ) = each(%datasrc) ) {
-                if ( $value eq 'curr_conns' ) {
-                    $output = $stats{curr_connections};
-                }
-                elsif ( $value eq 'avg_conns' ) {
-                    $output = sprintf( "%02d",
-                        $stats{total_connections} / $stats{uptime} );
-                }
-                else {
-                    next;
-                }
-                print "$dsrc->{name}.value $output\n";
-            }
-        }
-    }
-
-    return;
-}
-
-##
-#### Subroutines for printing out config information for graphs ####
-##
-
-##
-#### This subroutine does the bulk printing the config info per graph ####
-##
-
-sub do_config {
-    my ( $prefix, $plugin ) = (@_);
-    print_root_config( $prefix, $plugin );
-
-    return;
-}
-
-##
-#### This subroutine is for the config info for non multigraph graphs which render on the main node page ####
-##
-
-sub print_root_config {
-    my ( $prefix, $plugin ) = (@_);
-
-    die 'Unknown Plugin Specified: ' . ( $plugin ? $plugin : '' )
-      unless $graphs{$plugin};
-
-    my $graph = $graphs{$plugin};
-
-    my %graphconf = %{ $graph->{config} };
-
-    #print "graph memcached_$plugin\n";
-
-    while ( my ( $key, $value ) = each(%graphconf) ) {
-        if ( $key eq 'title' ) {
-            if ($prefix) {
-                print "graph_$key " . ucfirst($prefix) . " $value\n";
-            }
-            else {
-                print "graph_$key $value\n";
-            }
-        }
-        else {
-            print "graph_$key $value\n";
-        }
-    }
-
-    foreach my $dsrc ( @{ $graph->{datasrc} } ) {
-        my %datasrc = %$dsrc;
-        while ( my ( $key, $value ) = each(%datasrc) ) {
-            next if ( $key eq 'name' );
-            print "$dsrc->{name}.$key $value\n";
-        }
-    }
-
-    return;
-}
-
-##
-#### This subroutine returns a socket connection ####
-##
-
-sub get_conn {
-    my $s = undef;
-
-    # check if we want to use sockets instead of tcp
-    my ($sock) = ( $host =~ /unix:\/\/(.+)$/ );
-
-    if ($sock) {
-        $connection = "unix:\/\/$sock";
-        $s = IO::Socket::UNIX->new( Peer => $sock );
-    }
-    else {
-        $connection = "$host:$port";
-        $s          = IO::Socket::INET->new(
-            Proto    => "tcp",
-            PeerAddr => $host,
-            PeerPort => $port,
-            Timeout  => 10,
-        );
-    }
-
-    return $s;
-}
-
-##
-#### This subroutine actually performs the data fetch for us ####
-#### These commands do not lock up Memcache at all ####
-##
-
-sub fetch_stats {
-    my $s = get_conn();
-
-    die "Error: Unable to Connect to $connection\n" unless $s;
-
-    print $s "stats\r\n";
-
-    while ( my $line = <$s> ) {
-        if ( $line =~ /STAT\s(.+?)\s(\d+)/ ) {
-            my ( $skey, $svalue ) = ( $1, $2 );
-            $stats{$skey} = $svalue;
-        }
-        last if $line =~ /^END/;
-    }
-}
diff --git a/cookbooks/munin/files/default/plugins/memcached_multi_ b/cookbooks/munin/files/default/plugins/memcached_multi_
deleted file mode 100755 (executable)
index 1202726..0000000
+++ /dev/null
@@ -1,1631 +0,0 @@
-#!/usr/bin/perl
-#
-
-=head1 MEMCACHED MULTI
-
-Memcached Multi - A Plugin to monitor Memcached Servers (Multigraph)
-
- The common difference between this memcached Munin plugin and others that exists, is that
- others don't expose slab information from memcached, so you can better tune your memcached
- interaction / stability / etc. With this plugin we leverage multigraph capabilities in
- Munin to "hide" the slab information underneath of their parent graphs.
-
-=head1 MUNIN NODE CONFIGURATION
-
-The following configuration information can be overridden by placing environment definitions
- like shown here, in a file located in /etc/munin/plugin-conf.d
-
-[memcached_multi_*]
- env.host 127.0.0.1                             *default*
- env.port 11211                                 *default*
- env.timescale 3                                *default*
- env.cmds get set delete incr decr touch        *default*
- env.leitime -1                                 *default*
-
-=head2 MUNIN NODE ENVIRONMENT CONFIGURATION EXPLANATION
-
- host = host we are going to monitor, this can be used to specify a unix socket.
- port = port we are connecting to, in order to gather stats
- timescale = what time frame do we want to format our graphs too
- cmds = cmd types to display on cmd graph, remove cmds you don't want displayed from list.
- leitime = setting this to 1 will re-enable slab eviction time graphs, see note below.
-
-=head2 BASIC TROUBLESHOOTING
-
-Please make sure you can telnet to your memcache servers and issue the
- following commands: stats, stats settings, stats items and stats slabs.
-
-=head2 PLUGIN INFORMATION
-
-Available Graphs contained in this Plugin
-
-bytes => This graphs the current network traffic in and out
-
-commands => I<MULTIGRAPH> This graphs the current commands being issued to the memcache machine.
-                                B<Multigraph breaks this down to per slab.>
-
-conns => This graphs the current, max connections as well as avg conns per sec avg conns per sec
-            and is derived from total_conns / uptime.
-
-evictions => I<MULTIGRAPH> This graphs the current evictions on the node.
-                                B<Multigraph breaks this down to per slab.>
-
-items => I<MULTIGRAPH> This graphs the current items and total items in the memcached node.
-                                B<Multigraph breaks this down to per slab.>
-
-memory => I<MULTIGRAPH> This graphs the current and max memory allocation.
-                                B<Multigraph breaks this down to per slab.>
-
-unfetched => I<MULTIGRAPH> This graphs the number of items that were never touched by a
-                get/incr/append/etc before being evicted or expiring from the cache.
-                                B<Multigraph breaks this down to per slab.>
-
-=head1 ADDITIONAL INFORMATION
-
-B<NOTE:> The slab plugin for LEI has been disabled since I believe the counters to be inaccurate,
-    or perhaps not being updated as often I thought they would be. They can be re-enabled by
-    setting an environment variable, see munin configuration section at the top.
-
-You will find that some of the graphs have LEI on them. This was done in order to save room
-on space for text and stands for B<Last Evicted Item>.
-
-The B<Timescale> variable formats certain graphs based on the following guidelines.
- 1 => Seconds
- 2 => Minutes
- 3 => Hours  B<*Default*>
- 4 => Days
-
-=head1 ACKNOWLEDGEMENTS
-
-Thanks to dormando for putting up with me ;)
-
-=head1 AUTHOR
-
-Matt West < https://github.com/mhwest13/Memcached-Munin-Plugin >
-
-=head1 LICENSE
-
-GPLv2
-
-=head1 MAGIC MARKERS
-
-#%# family=auto
-#%# capabilities=autoconf suggest
-
-=cut
-
-use strict;
-use warnings;
-use IO::Socket;
-use Munin::Plugin;
-use File::Basename;
-
-if ( basename($0) !~ /(?:([^\/]+)_)?memcached_multi_/ ) {
-    print
-"This script needs to be named (prefix_)?memcached_multi_ to run properly.\n";
-    exit 1;
-}
-
-# tell munin about our multigraph capabilities
-need_multigraph();
-
-=head1 Variable Declarations
-
-    This section of code is to declare the variables used throughout the plugin
-    Some of them are imported as environment variables from munin plugin conf.d
-    file, others are hashes used for storing information that comes from the
-    stats commands issued to memcached.
-
-=cut
-
-# lets import environment variables for the plugin or use the default
-my $host = $ENV{host} || "127.0.0.1";
-my $port = $ENV{port} || 11211;
-my $connection;
-
-# This gives us the ability to control the timescale our graphs are displaying.
-# The default it set to divide by hours, if you want to get seconds set it to 1.
-# Options: 1 = seconds, 2 = minutes, 3 = hours, 4 = days
-my $timescale = $ENV{timescale} || 3;
-
-# This gives us the ability to turn the Last Evicted Item time slab graph on.
-# It was removed because I believe the counter / response to be broken but
-# perhaps this was useful to someone.
-my $leitime = $ENV{leitime} || -1;
-
-# This gives us the ability to specify which commands we want to display on the
-# command graph. Allowing finer control since some environments don't leverage
-# every command possible in memcached.
-# Options: get set delete incr decr cas touch flush
-my $commands = $ENV{cmds} || "get set delete incr decr touch";
-
-# This hash contains the information contained in two memcache commands
-# stats and stats settings.
-my %stats;
-
-# This gives us eviction rates and other hit stats per slab
-# We track this so we can see if something was evicted earlier than necessary
-my %items;
-
-# This gives us the memory size and usage per slab
-# We track this so we can see what slab is being used the most and has no free chunks
-# so we can re-tune memcached to allocate more pages for the specified chunk size
-my %chnks;
-
-# Variable for setting up a quick access map for plugin configurations / version adherence
-my $globalmap;
-
-=head2 Graph Declarations
-
-    This block of code builds up all of the graph info for all root / subgraphs.
-
-    %graphs: is a container for all of the graph definition information. In here is where you'll
-             find the configuration information for munin's graphing procedure.
-    Format:
-
-    $graph{graph_name} => {
-        config => {
-            You'll find the main graph config stored here
-            { key => value },
-            { ... },
-        },
-        datasrc => [
-            Name: name given to data value
-            Attr: Attribute and value, attribute must be valid plugin argument
-            { name => 'Name', info => 'info about graph', ... },
-            { ... },
-        ],
-    }
-
-=cut
-
-my %graphs;
-
-# main graph for memcached item count
-$graphs{items} = {
-    config => {
-        args     => '--base 1000 --lower-limit 0',
-        vlabel   => 'Items in Memcached',
-        category => 'memcached global items',
-        title    => 'Items',
-        info     => 'Number of items in use by memcached',
-    },
-    datasrc => [
-        { name => 'curr_items', label => 'Current Items', min => '0' },
-        {
-            name  => 'total_items',
-            label => 'New Items',
-            min   => '0',
-            type  => 'DERIVE'
-        },
-    ],
-};
-
-# main graph for memcached memory usage
-$graphs{memory} = {
-    config => {
-        args     => '--base 1024 --lower-limit 0',
-        vlabel   => 'Bytes Used',
-        category => 'memcached global memory',
-        title    => 'Memory Usage',
-        info     => 'Memory consumption of memcached',
-    },
-    datasrc => [
-        {
-            name  => 'limit_maxbytes',
-            draw  => 'AREA',
-            label => 'Maximum Bytes Allocated',
-            min   => '0'
-        },
-        {
-            name  => 'bytes',
-            draw  => 'AREA',
-            label => 'Current Bytes Used',
-            min   => '0'
-        },
-    ],
-};
-
-# main graph for memcached network usage
-$graphs{bytes} = {
-    config => {
-        args     => '--base 1000',
-        vlabel   => 'bits in (-) / out (+)',
-        title    => 'Network Traffic',
-        category => 'memcached',
-        info     => 'Network traffic in (-) / out (+) of the machine',
-        order    => 'bytes_read bytes_written',
-    },
-    datasrc => [
-        {
-            name  => 'bytes_read',
-            type  => 'DERIVE',
-            label => 'Network Traffic coming in (-)',
-            graph => 'no',
-            cdef  => 'bytes_read,8,*',
-            min   => '0'
-        },
-        {
-            name     => 'bytes_written',
-            type     => 'DERIVE',
-            label    => 'Traffic in (-) / out (+)',
-            negative => 'bytes_read',
-            cdef     => 'bytes_written,8,*',
-            min      => '0'
-        },
-    ],
-};
-
-# graph for memcached connections
-$graphs{conns} = {
-    config => {
-        args     => '--base 1000 --lower-limit 0',
-        vlabel   => 'Connections per ${graph_period}',
-        category => 'memcached',
-        title    => 'Connections',
-        info     => 'Number of connections being handled by memcached',
-        order    => 'max_conns curr_conns avg_conns',
-    },
-    datasrc => [
-        { name => 'curr_conns', label => 'Current Connections', min => '0' },
-        { name => 'max_conns',  label => 'Max Connections',     min => '0' },
-        { name => 'avg_conns',  label => 'Avg Connections',     min => '0' },
-    ],
-};
-
-# main graph for memcached commands issued
-$graphs{commands} = {
-    config => {
-        args     => '--base 1000 --lower-limit 0',
-        vlabel   => 'Commands per ${graph_period}',
-        category => 'memcached global commands',
-        title    => 'Commands',
-        info     => 'Number of commands being handled by memcached',
-    },
-    datasrc => [
-        {
-            name  => 'cmd_get',
-            type  => 'DERIVE',
-            label => 'Gets',
-            info  => 'Cumulative number of retrieval reqs',
-            min   => '0'
-        },
-        {
-            name  => 'cmd_set',
-            type  => 'DERIVE',
-            label => 'Sets',
-            info  => 'Cumulative number of storage reqs',
-            min   => '0'
-        },
-        {
-            name  => 'cmd_flush',
-            type  => 'DERIVE',
-            label => 'Flushes',
-            info  => 'Cumulative number of flush reqs',
-            min   => '0'
-        },
-        {
-            name  => 'cmd_touch',
-            type  => 'DERIVE',
-            label => 'Touches',
-            info  => 'Cumulative number of touch reqs',
-            min   => '0'
-        },
-        {
-            name  => 'get_hits',
-            type  => 'DERIVE',
-            label => 'Get Hits',
-            info  => 'Number of keys that were requested and found',
-            min   => '0'
-        },
-        {
-            name  => 'get_misses',
-            type  => 'DERIVE',
-            label => 'Get Misses',
-            info  => 'Number of keys there were requested and not found',
-            min   => '0'
-        },
-        {
-            name  => 'delete_hits',
-            type  => 'DERIVE',
-            label => 'Delete Hits',
-            info =>
-              'Number of delete requests that resulted in a deletion of a key',
-            min => '0'
-        },
-        {
-            name  => 'delete_misses',
-            type  => 'DERIVE',
-            label => 'Delete Misses',
-            info  => 'Number of delete requests for missing key',
-            min   => '0'
-        },
-        {
-            name  => 'incr_hits',
-            type  => 'DERIVE',
-            label => 'Increment Hits',
-            info  => 'Number of successful increment requests',
-            min   => '0'
-        },
-        {
-            name  => 'incr_misses',
-            type  => 'DERIVE',
-            label => 'Increment Misses',
-            info  => 'Number of unsuccessful increment requests',
-            min   => '0'
-        },
-        {
-            name  => 'decr_hits',
-            type  => 'DERIVE',
-            label => 'Decrement Hits',
-            info  => 'Number of successful decrement requests',
-            min   => '0'
-        },
-        {
-            name  => 'decr_misses',
-            type  => 'DERIVE',
-            label => 'Decrement Misses',
-            info  => 'Number of unsuccessful decrement requests',
-            min   => '0'
-        },
-        {
-            name  => 'cas_misses',
-            type  => 'DERIVE',
-            label => 'CAS Misses',
-            info  => 'Number of Compare and Swap requests against missing keys',
-            min   => '0'
-        },
-        {
-            name  => 'cas_hits',
-            type  => 'DERIVE',
-            label => 'CAS Hits',
-            info  => 'Number of successful Compare and Swap requests',
-            min   => '0'
-        },
-        {
-            name  => 'cas_badval',
-            type  => 'DERIVE',
-            label => 'CAS Badval',
-            info  => 'Number of unsuccessful Compare and Swap requests',
-            min   => '0'
-        },
-        {
-            name  => 'touch_hits',
-            type  => 'DERIVE',
-            label => 'Touch Hits',
-            info  => 'Number of successfully touched keys',
-            min   => '0'
-        },
-        {
-            name  => 'touch_misses',
-            type  => 'DERIVE',
-            label => 'Touch Misses',
-            info  => 'Number of unsuccessful touch keys',
-            min   => '0'
-        },
-    ],
-};
-
-# main graph for memcached eviction rates
-$graphs{evictions} = {
-    config => {
-        args     => '--base 1000 --lower-limit 0',
-        vlabel   => 'Evictions per ${graph_period}',
-        category => 'memcached global evictions',
-        title    => 'Evictions',
-        info     => 'Number of evictions per second',
-    },
-    datasrc => [
-        {
-            name  => 'evictions',
-            type  => 'DERIVE',
-            label => 'Evictions',
-            info  => 'Cumulative Evictions Across All Slabs',
-            min   => '0'
-        },
-        {
-            name  => 'evicted_nonzero',
-            type  => 'DERIVE',
-            label => 'Evictions prior to Expire',
-            info => 'Cumulative Evictions forced to expire prior to expiration',
-            min  => '0'
-        },
-        {
-            name  => 'reclaimed',
-            type  => 'DERIVE',
-            label => 'Reclaimed Items',
-            info  => 'Cumulative Reclaimed Item Entries Across All Slabs',
-            min   => '0'
-        },
-    ],
-};
-
-# main graph for memcached eviction rates
-$graphs{unfetched} = {
-    config => {
-        args     => '--base 1000 --lower-limit 0',
-        vlabel   => 'Unfetched Items per ${graph_period}',
-        category => 'memcached global unfetched',
-        title    => 'Unfetched Items',
-        info =>
-'Number of items that were never touched get/incr/append/etc before X occured',
-    },
-    datasrc => [
-        {
-            name  => 'expired_unfetched',
-            type  => 'DERIVE',
-            label => 'Expired Unfetched',
-            min   => '0',
-            info =>
-'Number of items that expired and never had get/incr/append/etc performed'
-        },
-        {
-            name  => 'evicted_unfetched',
-            type  => 'DERIVE',
-            label => 'Evictioned Unfetched',
-            min   => '0',
-            info =>
-'Number of items that evicted and never had get/incr/append/etc performed'
-        },
-    ],
-};
-
-# subgraph for breaking memory info down by slab ( subgraph of memory )
-$graphs{slabchnks} = {
-    config => {
-        args     => '--base 1000 --lower-limit 0',
-        vlabel   => 'Available Chunks for this Slab',
-        category => 'memcached slab chunk usage',
-        title    => 'Chunk Usage for Slab: ',
-        info => 'This graph shows you the chunk usage for this memory slab.',
-    },
-    datasrc => [
-        {
-            name  => 'total_chunks',
-            label => 'Total Chunks Available',
-            min   => '0'
-        },
-        { name => 'used_chunks', label => 'Total Chunks in Use', min => '0' },
-        {
-            name  => 'free_chunks',
-            label => 'Total Chunks Not in Use (Free)',
-            min   => '0'
-        },
-    ],
-};
-
-# subgraph for breaking commands down by slab ( subgraph of commands )
-$graphs{slabhits} = {
-    config => {
-        args     => '--base 1000 --lower-limit 0',
-        vlabel   => 'Hits per Slab per ${graph_period}',
-        category => 'memcached slab commands',
-        title    => 'Hits for Slab: ',
-        info =>
-          'This graph shows you the successful hit rate for this memory slab.',
-    },
-    datasrc => [
-        {
-            name  => 'get_hits',
-            label => 'Get Requests',
-            type  => 'DERIVE',
-            min   => '0'
-        },
-        {
-            name  => 'cmd_set',
-            label => 'Set Requests',
-            type  => 'DERIVE',
-            min   => '0'
-        },
-        {
-            name  => 'delete_hits',
-            label => 'Delete Requests',
-            type  => 'DERIVE',
-            min   => '0'
-        },
-        {
-            name  => 'incr_hits',
-            label => 'Increment Requests',
-            type  => 'DERIVE',
-            min   => '0'
-        },
-        {
-            name  => 'decr_hits',
-            label => 'Decrement Requests',
-            type  => 'DERIVE',
-            min   => '0'
-        },
-        {
-            name  => 'cas_hits',
-            label => 'Sucessful CAS Requests',
-            type  => 'DERIVE',
-            min   => '0'
-        },
-        {
-            name  => 'cas_badval',
-            label => 'UnSucessful CAS Requests',
-            type  => 'DERIVE',
-            min   => '0'
-        },
-        {
-            name  => 'touch_hits',
-            label => 'Touch Requests',
-            type  => 'DERIVE',
-            min   => '0'
-        },
-    ],
-};
-
-# subgraph for breaking evictions down by slab ( subgraph of evictions )
-$graphs{slabevics} = {
-    config => {
-        args     => '--base 1000 --lower-limit 0',
-        vlabel   => 'Evictions per Slab per ${graph_period}',
-        category => 'memcached slab evictions',
-        title    => 'Evictions for Slab: ',
-        info => 'This graph shows you the eviction rate for this memory slab.',
-    },
-    datasrc => [
-        {
-            name  => 'evicted',
-            label => 'Total Evictions',
-            type  => 'DERIVE',
-            min   => '0',
-            info  => 'Items evicted from memory slab'
-        },
-        {
-            name  => 'evicted_nonzero',
-            type  => 'DERIVE',
-            label => 'Evictions from LRU Prior to Expire',
-            info  => 'Items evicted from memory slab before ttl expiration',
-            min   => '0'
-        },
-        {
-            name  => 'reclaimed',
-            type  => 'DERIVE',
-            label => 'Reclaimed Expired Items',
-            info =>
-              'Number of times an item was stored in expired memory slab space',
-            min => '0'
-        },
-    ],
-};
-
-# subgraph for showing the time between an item was last evicted and requested ( subgraph of evictions )
-$graphs{slabevictime} = {
-    config => {
-        args     => '--base 1000 --lower-limit 0',
-        vlabel   => ' since Request for LEI',
-        category => 'memcached slab eviction time',
-        title    => 'Eviction Request Time for Slab: ',
-        info =>
-'This graph shows you the time since we requested the last evicted item',
-    },
-    datasrc => [
-        {
-            name  => 'evicted_time',
-            label => 'Eviction Time (LEI)',
-            info  => 'Time Since Request for Last Evicted Item',
-            min   => '0'
-        },
-    ],
-};
-
-# subgraph for breaking items down by slab ( subgraph of items )
-$graphs{slabitems} = {
-    config => {
-        args     => '--base 1000 --lower-limit 0',
-        vlabel   => 'Items per Slab',
-        category => 'memcached slab item count',
-        title    => 'Items in Slab: ',
-        info =>
-'This graph shows you the number of items and reclaimed items per slab.',
-    },
-    datasrc => [
-        {
-            name  => 'number',
-            label => 'Items',
-            draw  => 'AREA',
-            info  => 'This is the amount of items stored in this slab',
-            min   => '0'
-        },
-    ],
-};
-
-# subgraph for showing the age of the eldest item stored in a slab ( subgraph of items )
-$graphs{slabitemtime} = {
-    config => {
-        args     => '--base 1000 --lower-limit 0',
-        vlabel   => ' since item was stored',
-        category => 'memcached slab item age',
-        title    => 'Age of Eldest Item in Slab: ',
-        info => 'This graph shows you the time of the eldest item in this slab',
-    },
-    datasrc =>
-      [ { name => 'age', label => 'Eldest Item\'s Age', min => '0' }, ],
-};
-
-# main graph for memcached eviction rates
-$graphs{slabunfetched} = {
-    config => {
-        args     => '--base 1000 --lower-limit 0',
-        vlabel   => 'Unfetched Items per ${graph_period}',
-        category => 'memcached slab unfetched',
-        title    => 'Unfetched Items in Slab: ',
-        info =>
-'Number of items that were never touched get/incr/append/etc before X occured',
-    },
-    datasrc => [
-        {
-            name  => 'expired_unfetched',
-            type  => 'DERIVE',
-            label => 'Expired Unfetched',
-            min   => '0',
-            info =>
-'Number of items that expired and never had get/incr/append/etc performed'
-        },
-        {
-            name  => 'evicted_unfetched',
-            type  => 'DERIVE',
-            label => 'Evictioned Unfetched',
-            min   => '0',
-            info =>
-'Number of items that evicted and never had get/incr/append/etc performed'
-        },
-    ],
-};
-
-=head1 Munin Checks
-
-    These checks look for config / autoconf / suggest params
-
-=head2 Config Check
-
-    This block of code looks at the argument that is possibly supplied,
-    should it be config, it then checks to make sure the plugin 
-    specified exists, assuming it does, it will run the do_config 
-    subroutine for the plugin specified, otherwise it dies complaining
-    about an unknown plugin.
-
-=cut
-
-if ( defined $ARGV[0] && $ARGV[0] eq 'config' ) {
-
-# Lets get our plugin from the symlink being called up, we'll also verify its a valid
-# plugin that we have graph information for
-    $0 =~ /(?:([^\/]+)_)?memcached_multi_(.+)$/;
-    my $prefix = $1 ? $1 : '';
-    my $plugin = $2;
-    die 'Unknown Plugin Specified: ' . ( $plugin ? $plugin : '' )
-      unless $graphs{$plugin};
-
-# We need to fetch the stats before we do any config, cause its needed for multigraph
-# subgraphs which use slab information for title / info per slab
-    fetch_stats();
-    $globalmap = buildglobalmap();
-
-    # Now lets go ahead and print out our config.
-    do_config( $prefix, $plugin );
-    exit 0;
-}
-
-=head2 Autoconf Check
-
-    This block of code looks at the argument that is possibly supplied,
-    should it be autoconf, we will attempt to connect to the memcached
-    service specified on the host:port, upon successful connection it
-    prints yes, otherwise it prints no.
-
-=cut
-
-if ( defined $ARGV[0] && $ARGV[0] eq 'autoconf' ) {
-
-    # Lets attempt to connect to memcached
-    my $s = get_conn();
-
-    # Lets verify that we did connect to memcached
-    if ( defined($s) ) {
-        print "yes\n";
-        exit 0;
-    }
-    else {
-        print "no (unable to connect to $connection)\n";
-        exit 0;
-    }
-}
-
-=head2 Suggest Check
-
-    This block of code looks at the argument that is possibly supplied,
-    should it be suggest, we are going to print the possible plugins
-    which can be specified. Note we only specify the root graphs for the
-    multigraphs, since the rest of the subgraphs will appear "behind" the
-    root graphs. It also attempts to connect to the memcached service to
-    verify it is infact running.
-
-=cut
-
-if ( defined $ARGV[0] && $ARGV[0] eq 'suggest' ) {
-
-    # Lets attempt to connect to memcached
-    my $s = get_conn();
-
-    # Lets check that we did connect to memcached
-    if ( defined($s) ) {
-        fetch_stats();
-        my @rootplugins =
-          ( 'bytes', 'conns', 'commands', 'evictions', 'items', 'memory' );
-        if ( $stats{version} !~ /^1\.4\.[0-7]$/ ) {
-            push( @rootplugins, 'unfetched' );
-        }
-        foreach my $plugin (@rootplugins) {
-            print "$plugin\n";
-        }
-        exit 0;
-    }
-    else {
-        print "no (unable to connect to $connection)\n";
-        exit 0;
-    }
-}
-
-=head1 Output Subroutines
-
-    Output Subroutine calls to output data values
-
-=head2 fetch_output
-
-    This subroutine is the main call for printing data for the plugin.
-    No parameters are taken as this is the default call if no arguments
-    are supplied from the command line.
-
-=cut
-
-# Well, no arguments were supplied that we know about, so lets print some data
-$0 =~ /(?:([^\/]+)_)?memcached_multi_(.+)$/;
-my $prefix = $1 ? $1 : '';
-my $plugin = $2;
-die 'Unknown Plugin Specified: ' . ( $plugin ? $plugin : '' )
-  unless $graphs{$plugin};
-fetch_stats();
-$globalmap = buildglobalmap();
-fetch_output( $prefix, $plugin );
-
-sub fetch_output {
-    my ( $prefix, $plugin ) = (@_);
-
-    # Now lets go ahead and print out our output.
-    my @subgraphs;
-    if ( $plugin eq 'memory' ) {
-        @subgraphs = ('slabchnks');
-        foreach my $slabid ( sort { $a <=> $b } keys %chnks ) {
-            print_submulti_output( $prefix, $slabid, $plugin, @subgraphs );
-        }
-        print_subrootmulti_output( $prefix, $plugin );
-        print_rootmulti_output( $prefix, $plugin );
-    }
-    elsif ( $plugin eq 'commands' ) {
-        @subgraphs = ('slabhits');
-        foreach my $slabid ( sort { $a <=> $b } keys %chnks ) {
-            print_submulti_output( $prefix, $slabid, $plugin, @subgraphs );
-        }
-        print_subrootmulti_output( $prefix, $plugin );
-        print_rootmulti_output( $prefix, $plugin );
-    }
-    elsif ( $plugin eq 'evictions' ) {
-        @subgraphs = ('slabevics');
-        if ( $leitime == 1 ) { push( @subgraphs, 'slabevictime' ); }
-        foreach my $slabid ( sort { $a <=> $b } keys %items ) {
-            print_submulti_output( $prefix, $slabid, $plugin, @subgraphs );
-        }
-        print_subrootmulti_output( $prefix, $plugin );
-        print_rootmulti_output( $prefix, $plugin );
-    }
-    elsif ( $plugin eq 'items' ) {
-        @subgraphs = ( 'slabitems', 'slabitemtime' );
-        foreach my $slabid ( sort { $a <=> $b } keys %items ) {
-            print_submulti_output( $prefix, $slabid, $plugin, @subgraphs );
-        }
-        print_subrootmulti_output( $prefix, $plugin );
-        print_rootmulti_output( $prefix, $plugin );
-    }
-    elsif ( $plugin eq 'unfetched' ) {
-        @subgraphs = ('slabunfetched');
-        foreach my $slabid ( sort { $a <=> $b } keys %items ) {
-            print_submulti_output( $prefix, $slabid, $plugin, @subgraphs );
-        }
-        print_subrootmulti_output( $prefix, $plugin );
-        print_rootmulti_output( $prefix, $plugin );
-    }
-    else {
-        print_root_output($plugin);
-    }
-
-    return;
-}
-
-=head2 print_root_output
-
-    This subroutine prints out the return values for our non-multigraph root graphs.
-    It takes one parameter $plugin and returns when completed.
-
-        $plugin;    graph we are calling up to print data values for 
-
-    Example: print_root_output($plugin);
-
-=cut
-
-sub print_root_output {
-
-    # Lets get our plugin, set our graph reference and print out info for Munin
-    my ($plugin) = (@_);
-    my $graph = $graphs{$plugin};
-
-    # The conns plugin has some specific needs, looking for plugin type
-    if ( $plugin ne 'conns' ) {
-        foreach my $dsrc ( @{ $graph->{datasrc} } ) {
-            my %datasrc = %$dsrc;
-            while ( my ( $key, $value ) = each(%datasrc) ) {
-                next if ( $key ne 'name' );
-                my $output = $stats{$value};
-                print "$dsrc->{name}.value $output\n";
-            }
-        }
-    }
-    else {
-        my $output;
-        foreach my $dsrc ( @{ $graph->{datasrc} } ) {
-            my %datasrc = %$dsrc;
-            while ( my ( $key, $value ) = each(%datasrc) ) {
-                if ( $value eq 'max_conns' ) {
-                    $output = $stats{maxconns};
-                }
-                elsif ( $value eq 'curr_conns' ) {
-                    $output = $stats{curr_connections};
-                }
-                elsif ( $value eq 'avg_conns' ) {
-                    $output = sprintf( "%02d",
-                        $stats{total_connections} / $stats{uptime} );
-                }
-                else {
-                    next;
-                }
-                print "$dsrc->{name}.value $output\n";
-            }
-        }
-    }
-    return;
-}
-
-=head2 print_rootmulti_output
-
-    This subroutine prints out the return values for our multigraph root graphs.
-    It takes one parameter $plugin and returns when completed.
-
-        $plugin;    root graph we are calling up to print data values for
-
-    Example: print_rootmulti_output($plugin);
-
-=cut
-
-sub print_rootmulti_output {
-
-    # Lets get our plugin, set our graph reference and print out info for Munin
-    my ( $prefix, $plugin ) = (@_);
-    my $graph = $graphs{$plugin};
-    if ($prefix) {
-        print "multigraph $prefix\_memcached_multi_$plugin\n";
-    }
-    else {
-        print "multigraph memcached_multi_$plugin\n";
-    }
-
-    # Lets print our data values with their appropriate name
-    foreach my $dsrc ( @{ $graph->{datasrc} } ) {
-        my $output  = 0;
-        my %datasrc = %$dsrc;
-        while ( my ( $key, $value ) = each(%datasrc) ) {
-            next if ( $key ne 'name' );
-            next
-              if ( ( $plugin eq 'evictions' )
-                && ( !exists( $globalmap->{globalevics}->{ $dsrc->{name} } ) )
-              );
-            next
-              if ( ( $plugin eq 'commands' )
-                && ( !exists( $globalmap->{globalcmds}->{ $dsrc->{name} } ) ) );
-            if ( ( $plugin eq 'evictions' ) && ( $value eq 'evicted_nonzero' ) )
-            {
-                foreach my $slabid ( sort { $a <=> $b } keys %items ) {
-                    $output += $items{$slabid}->{evicted_nonzero};
-                }
-            }
-            else {
-                $output = $stats{$value};
-            }
-            print "$dsrc->{name}.value $output\n";
-        }
-    }
-    return;
-}
-
-=head2 print_subrootmulti_output
-
-    This subroutine prints out the return values for our multigraph root graphs, only this set of
-    data will display on the subpage made by the multigraph capabilities of munin and the plugin.
-    It takes one parameter $plugin and returns when completed.
-
-        $plugin;    root graph we are calling up to print data values for
-
-    Example: print_rootmulti_output($plugin);
-
-=cut
-
-sub print_subrootmulti_output {
-
-    # Lets get our plugin, set our graph reference and print out info for Munin
-    my ( $prefix, $plugin ) = (@_);
-    my $graph = $graphs{$plugin};
-    if ($prefix) {
-        if ( $plugin eq 'evictions' ) {
-            print "multigraph $prefix\_memcached_multi_$plugin.global$plugin\n";
-        }
-        else {
-            print "multigraph $prefix\_memcached_multi_$plugin.$plugin\n";
-        }
-    }
-    else {
-        if ( $plugin eq 'evictions' ) {
-            print "multigraph memcached_multi_$plugin.global$plugin\n";
-        }
-        else {
-            print "multigraph memcached_multi_$plugin.$plugin\n";
-        }
-    }
-
-    # Lets print our data values with their appropriate name
-    foreach my $dsrc ( @{ $graph->{datasrc} } ) {
-        my $output  = 0;
-        my %datasrc = %$dsrc;
-        while ( my ( $key, $value ) = each(%datasrc) ) {
-            next if ( $key ne 'name' );
-            next
-              if ( ( $plugin eq 'evictions' )
-                && ( !exists( $globalmap->{globalevics}->{ $dsrc->{name} } ) )
-              );
-            next
-              if ( ( $plugin eq 'commands' )
-                && ( !exists( $globalmap->{globalcmds}->{ $dsrc->{name} } ) ) );
-            if ( ( $plugin eq 'evictions' ) && ( $value eq 'evicted_nonzero' ) )
-            {
-                foreach my $slabid ( sort { $a <=> $b } keys %items ) {
-                    $output += $items{$slabid}->{evicted_nonzero};
-                }
-            }
-            else {
-                $output = $stats{$value};
-            }
-            print "$dsrc->{name}.value $output\n";
-        }
-    }
-    return;
-}
-
-=head2 print_submulti_output
-
-    This subroutine prints out the return values for our multigraph subgraphs. It takes
-    three parameters $slabid, $plugin, @subgraphs and then rReturns when completed.
-
-        $slabid;    slab id that we will use to grab info from and print out
-        $plugin;    root graph being called, used for multigraph output and slab id
-        @subgraphs; graphs we are actually trying to print data values for
-
-    Example: print_submulti_output($slabid,$plugin,@subgraphs);
-
-=cut
-
-sub print_submulti_output {
-
-    # Lets get our slabid, plugin, and subgraphs
-    my ( $prefix, $slabid, $plugin, @subgraphs ) = (@_);
-    my $currslab = undef;
-
-    # Time to loop over our subgraphs array
-    foreach my $sgraph (@subgraphs) {
-
- # Lets set our graph reference for quick calling, and print some info for munin
-        my $graph = $graphs{$sgraph};
-        if ($prefix) {
-            print
-              "multigraph $prefix\_memcached_multi_$plugin.$sgraph\_$slabid\n";
-        }
-        else {
-            print "multigraph memcached_multi_$plugin.$sgraph\_$slabid\n";
-        }
-
-        # Lets figure out what slab info we are trying to call up
-        if (   ( $plugin eq 'evictions' )
-            || ( $plugin eq 'items' )
-            || ( $plugin eq 'unfetched' ) )
-        {
-            $currslab = $items{$slabid};
-        }
-        elsif ( ( $plugin eq 'memory' ) || ( $plugin eq 'commands' ) ) {
-            $currslab = $chnks{$slabid};
-        }
-        else {
-            return;
-        }
-
-        # Lets print our data values with their appropriate name
-        foreach my $dsrc ( @{ $graph->{datasrc} } ) {
-            my %datasrc = %$dsrc;
-            while ( my ( $key, $value ) = each(%datasrc) ) {
-                next if ( $key ne 'name' );
-                next
-                  if ( ( $sgraph eq 'slabevics' )
-                    && ( !exists( $globalmap->{slabevics}->{ $dsrc->{name} } ) )
-                  );
-                next
-                  if ( ( $plugin eq 'commands' )
-                    && ( !exists( $globalmap->{slabcmds}->{ $dsrc->{name} } ) )
-                  );
-                my $output = $currslab->{$value};
-                if (   ( $sgraph eq 'slabevictime' )
-                    || ( $sgraph eq 'slabitemtime' ) )
-                {
-                    $output = time_scale( 'data', $output );
-                }
-                print "$dsrc->{name}.value $output\n";
-            }
-        }
-    }
-    return;
-}
-
-=head1 Config Subroutines
-
-    These subroutines handle the config portion of munin calls.
-
-=head2 do_config
-
-    This is the main call issued assuming we call up config and plugin specified exists
-    The subroutine takes one parameter $plugin, and returns when completed.
-
-        $plugin; root graph being called
-
-    Example: do_config($prefix, $plugin);
-
-=cut
-
-sub do_config {
-    my ( $prefix, $plugin ) = (@_);
-    my @subgraphs;
-    if ( $plugin eq 'memory' ) {
-        @subgraphs = ('slabchnks');
-        foreach my $slabid ( sort { $a <=> $b } keys %chnks ) {
-            print_submulti_config( $prefix, $slabid, $plugin, @subgraphs );
-        }
-        print_subrootmulti_config( $prefix, $plugin );
-        print_rootmulti_config( $prefix, $plugin );
-    }
-    elsif ( $plugin eq 'commands' ) {
-        @subgraphs = ('slabhits');
-        foreach my $slabid ( sort { $a <=> $b } keys %chnks ) {
-            print_submulti_config( $prefix, $slabid, $plugin, @subgraphs );
-        }
-        print_subrootmulti_config( $prefix, $plugin );
-        print_rootmulti_config( $prefix, $plugin );
-    }
-    elsif ( $plugin eq 'evictions' ) {
-        @subgraphs = ('slabevics');
-        if ( $leitime == 1 ) { push( @subgraphs, 'slabevictime' ); }
-        foreach my $slabid ( sort { $a <=> $b } keys %items ) {
-            print_submulti_config( $prefix, $slabid, $plugin, @subgraphs );
-        }
-        print_subrootmulti_config( $prefix, $plugin );
-        print_rootmulti_config( $prefix, $plugin );
-    }
-    elsif ( $plugin eq 'items' ) {
-        @subgraphs = ( 'slabitems', 'slabitemtime' );
-        foreach my $slabid ( sort { $a <=> $b } keys %items ) {
-            print_submulti_config( $prefix, $slabid, $plugin, @subgraphs );
-        }
-        print_subrootmulti_config( $prefix, $plugin );
-        print_rootmulti_config( $prefix, $plugin );
-    }
-    elsif ( $plugin eq 'unfetched' ) {
-        @subgraphs = ('slabunfetched');
-        foreach my $slabid ( sort { $a <=> $b } keys %items ) {
-            print_submulti_config( $prefix, $slabid, $plugin, @subgraphs );
-        }
-        print_subrootmulti_config( $prefix, $plugin );
-        print_rootmulti_config( $prefix, $plugin );
-    }
-    else {
-        print_root_config( $prefix, $plugin );
-    }
-
-    return;
-}
-
-=head2 print_root_config
-
-    This subroutine prints out the config information for all of the non-multigraph root graphs.
-    It takes one parameter, $plugin, returns when completed.
-
-        $prefix;    possible prefix used to allow multiple plugins per machine
-        $plugin;    root graph used for multigraph call
-
-    Example:  print_root_config($prefix,$plugin);
-
-=cut
-
-sub print_root_config {
-
-    # Lets get our plugin, set our graph reference and our graph config info
-    my ( $prefix, $plugin ) = (@_);
-    my $graph     = $graphs{$plugin};
-    my %graphconf = %{ $graph->{config} };
-
-  # Lets tell munin about the graph we are referencing and print the main config
-    while ( my ( $key, $value ) = each(%graphconf) ) {
-        if ( $key eq 'title' ) {
-            if ($prefix) {
-                print "graph_$key " . ucfirst($prefix) . " $value\n";
-            }
-            else {
-                print "graph_$key $value\n";
-            }
-        }
-        else {
-            print "graph_$key $value\n";
-        }
-    }
-
-    # Lets tell munin about our data values and how to treat them
-    foreach my $dsrc ( @{ $graph->{datasrc} } ) {
-        my %datasrc = %$dsrc;
-        while ( my ( $key, $value ) = each(%datasrc) ) {
-            next if ( $key eq 'name' );
-            print "$dsrc->{name}.$key $value\n";
-        }
-    }
-    return;
-}
-
-=head2 print_rootmulti_config
-
-    This subroutine prints out the config information for all of the multigraph root graphs.
-    It takes one parameter, $plugin, returns when completed.
-
-        $prefix;    possible prefix used to allow multiple plugins per machine
-        $plugin;    root graph used for multigraph call
-
-    Example:  print_rootmulti_config($prefix,$plugin);
-
-=cut
-
-sub print_rootmulti_config {
-
-    # Lets get out plugin, set our graph reference and our graph config info
-    my ( $prefix, $plugin ) = (@_);
-    my $graph     = $graphs{$plugin};
-    my %graphconf = %{ $graph->{config} };
-
-  # Lets tell munin about the graph we are referencing and print the main config
-    if ($prefix) {
-        print "multigraph $prefix\_memcached_multi_$plugin\n";
-    }
-    else {
-        print "multigraph memcached_multi_$plugin\n";
-    }
-    while ( my ( $key, $value ) = each(%graphconf) ) {
-        if ( $key eq 'category' ) {
-            print "graph_$key memcached\n";
-        }
-        elsif ( $key eq 'title' ) {
-            if ($prefix) {
-                print "graph_$key " . ucfirst($prefix) . " $value\n";
-            }
-            else {
-                print "graph_$key $value\n";
-            }
-        }
-        else {
-            print "graph_$key $value\n";
-        }
-    }
-
-    # Lets tell munin about our data values and how to treat them
-    foreach my $dsrc ( @{ $graph->{datasrc} } ) {
-        my %datasrc = %$dsrc;
-        while ( my ( $key, $value ) = each(%datasrc) ) {
-            next if ( $key eq 'name' );
-            next
-              if ( ( $plugin eq 'evictions' )
-                && ( !exists( $globalmap->{globalevics}->{ $dsrc->{name} } ) )
-              );
-            next
-              if ( ( $plugin eq 'commands' )
-                && ( !exists( $globalmap->{globalcmds}->{ $dsrc->{name} } ) ) );
-            print "$dsrc->{name}.$key $value\n";
-        }
-    }
-    return;
-}
-
-=head2 print_subrootmulti_config
-
-    This subroutine prints out the config information for all of the multigraph root graph, only this
-    graph of the data will display on the subpage made by the multigraph capabilities of munin and
-    the plugin. It takes one parameter, $plugin, returns when completed.
-
-        $prefix;    possible prefix used to allow multiple plugins per machine
-        $plugin;    root graph used for multigraph call
-
-    Example:  print_rootmulti_config($prefix,$plugin);
-
-=cut
-
-sub print_subrootmulti_config {
-
-    # Lets get out plugin, set our graph reference and our graph config info
-    my ( $prefix, $plugin ) = (@_);
-    my $graph     = $graphs{$plugin};
-    my %graphconf = %{ $graph->{config} };
-    if ($prefix) {
-        if ( $plugin eq 'evictions' ) {
-            print "multigraph $prefix\_memcached_multi_$plugin.global$plugin\n";
-        }
-        else {
-            print "multigraph $prefix\_memcached_multi_$plugin.$plugin\n";
-        }
-    }
-    else {
-        if ( $plugin eq 'evictions' ) {
-            print "multigraph memcached_multi_$plugin.global$plugin\n";
-        }
-        else {
-            print "multigraph memcached_multi_$plugin.$plugin\n";
-        }
-    }
-
-    while ( my ( $key, $value ) = each(%graphconf) ) {
-        if ( $key eq 'title' ) {
-            if ($prefix) {
-                print "graph_$key " . ucfirst($prefix) . " $value\n";
-            }
-            else {
-                print "graph_$key $value\n";
-            }
-        }
-        else {
-            print "graph_$key $value\n";
-        }
-    }
-
-    # Lets tell munin about our data values and how to treat them
-    foreach my $dsrc ( @{ $graph->{datasrc} } ) {
-        my %datasrc = %$dsrc;
-        while ( my ( $key, $value ) = each(%datasrc) ) {
-            next if ( $key eq 'name' );
-            next
-              if ( ( $plugin eq 'evictions' )
-                && ( !exists( $globalmap->{globalevics}->{ $dsrc->{name} } ) )
-              );
-            next
-              if ( ( $plugin eq 'commands' )
-                && ( !exists( $globalmap->{globalcmds}->{ $dsrc->{name} } ) ) );
-            print "$dsrc->{name}.$key $value\n";
-        }
-    }
-    return;
-}
-
-=head2 print_submulti_config
-
-    This subroutine prints out the config information for all of the multigraph subgraphs.
-    It takes three parameters, $slabid, $plugin and @subgraphs, returns when completed.
-
-        $prefix;    possible prefix used to allow multiple plugins per machine
-        $slabid;    slab id that we will use to grab info from and print out
-        $plugin;    root graph being called, used for multigraph output and slab id
-        @subgraphs; graphs we are actually trying to print data values for
-
-    Example:  print_submulti_config($prefix,$slabid,$plugin,@subgraphs);
-
-=cut
-
-sub print_submulti_config {
-
-    # Lets get our slabid, plugin, and subgraphs
-    my ( $prefix, $slabid, $plugin, @subgraphs ) = (@_);
-    my ( $slabitems, $slabchnks ) = undef;
-
-    # Time to loop over our subgraphs array
-    foreach my $sgraph (@subgraphs) {
-
-        # Lets set our graph reference, and main graph config for easy handling
-        my $graph     = $graphs{$sgraph};
-        my %graphconf = %{ $graph->{config} };
-
-# Lets tell munin which graph we are graphing, and what our main graph config info is
-        if ($prefix) {
-            print
-              "multigraph $prefix\_memcached_multi_$plugin.$sgraph\_$slabid\n";
-        }
-        else {
-            print "multigraph memcached_multi_$plugin.$sgraph\_$slabid\n";
-        }
-        while ( my ( $key, $value ) = each(%graphconf) ) {
-            if ( $key eq 'title' ) {
-                if ($prefix) {
-                    print "graph_$key "
-                      . ucfirst($prefix)
-                      . " $value"
-                      . "$slabid"
-                      . " ($chnks{$slabid}->{chunk_size} Bytes)\n";
-                }
-                else {
-                    print "graph_$key $value"
-                      . "$slabid"
-                      . " ($chnks{$slabid}->{chunk_size} Bytes)\n";
-                }
-            }
-            elsif (
-                ( $key eq 'vlabel' )
-                && (   ( $sgraph eq 'slabevictime' )
-                    || ( $sgraph eq 'slabitemtime' ) )
-              )
-            {
-                $value = time_scale( 'config', $value );
-                print "graph_$key $value\n";
-            }
-            else {
-                print "graph_$key $value\n";
-            }
-        }
-
-        # Lets tell munin about our data values and how to treat them
-        foreach my $dsrc ( @{ $graph->{datasrc} } ) {
-            my %datasrc = %$dsrc;
-            while ( my ( $key, $value ) = each(%datasrc) ) {
-                next if ( $key eq 'name' );
-                next
-                  if ( ( $sgraph eq 'slabevics' )
-                    && ( !exists( $globalmap->{slabevics}->{ $dsrc->{name} } ) )
-                  );
-                next
-                  if ( ( $plugin eq 'commands' )
-                    && ( !exists( $globalmap->{slabcmds}->{ $dsrc->{name} } ) )
-                  );
-                print "$dsrc->{name}.$key $value\n";
-            }
-        }
-    }
-    return;
-}
-
-=head1 Misc Subroutines
-
-    These subroutines are misc ones, and are referenced inside of the code. They
-    should never be called up by Munin.
-
-=head2 get_conn
-
-    This subroutine returns a socket connection
-
-=cut
-
-sub get_conn {
-    my $s = undef;
-
-    # check if we want to use sockets instead of tcp
-    my ($sock) = ( $host =~ /unix:\/\/(.+)*$/ );
-
-    if ($sock) {
-        $connection = "unix:\/\/$sock";
-        $s = IO::Socket::UNIX->new( Peer => $sock );
-    }
-    else {
-        $connection = "$host:$port";
-        $s          = IO::Socket::INET->new(
-            Proto    => "tcp",
-            PeerAddr => $host,
-            PeerPort => $port,
-            Timeout  => 10,
-        );
-    }
-    return $s;
-}
-
-=head2 fetch_stats
-
-    This subroutine fetches the information from memcached and stores it into our
-    hashes for later referencing throughout the graph. Returns when completed
-
-=cut
-
-sub fetch_stats {
-
-    # Lets try and connect to memcached
-    my $s = get_conn();
-
-    # Die if we can't establish a connection to memcached
-    die "Error: Unable to Connect to $connection\n" unless $s;
-
-    # Lets print the stats command and store the info from the output
-    print $s "stats\r\n";
-    while ( my $line = <$s> ) {
-        if ( $line =~ /STAT\s(.+?)\s((\w|\d|\S)+)/ ) {
-            my ( $skey, $svalue ) = ( $1, $2 );
-            $stats{$skey} = $svalue;
-        }
-        last if $line =~ /^END/;
-    }
-
-    # Lets print the stats settings command and store the info from the output
-    print $s "stats settings\r\n";
-    while ( my $line = <$s> ) {
-        if ( $line =~ /STAT\s(.+?)\s((\w|\d|\S)+)/ ) {
-            my ( $skey, $svalue ) = ( $1, $2 );
-            if ( $skey eq 'evictions' ) {
-                $skey = 'evictions_active';
-            }
-            $stats{$skey} = $svalue;
-        }
-        last if $line =~ /^END/;
-    }
-
-    # Lets print the stats slabs command and store the info from the output
-    print $s "stats slabs\r\n";
-    while ( my $line = <$s> ) {
-        if ( $line =~ /STAT\s(\d+):(.+)\s(\d+)/ ) {
-            my ( $slabid, $slabkey, $slabvalue ) = ( $1, $2, $3 );
-            $chnks{$slabid}->{$slabkey} = $slabvalue;
-        }
-        last if $line =~ /^END/;
-    }
-
-    # Lets print the stats items command and store the info from the output
-    print $s "stats items\r\n";
-    while ( my $line = <$s> ) {
-        if ( $line =~ /STAT\sitems:(\d+):(.+?)\s(\d+)/ ) {
-            my ( $itemid, $itemkey, $itemvalue ) = ( $1, $2, $3 );
-            $items{$itemid}->{$itemkey} = $itemvalue;
-        }
-        last if $line =~ /^END/;
-    }
-}
-
-=head2 time_scale
-
-    This subroutine is here for me to adjust the timescale of the time graphs
-    for last evicted item and age of eldest item in cache.
-
-        Please note, after long usage I have noticed these counters may not
-        be accurate, I believe the developers are aware and have submitted
-        a patch upstream.
-
-=cut
-
-sub time_scale {
-
-    # Lets get our config option and value to adjust
-    my ( $configopt, $origvalue ) = (@_);
-    my $value;
-
-    # If config is defined, it returns the config info for time scale
-    # If data is defined, it returns the original value after its been adjusted
-    if ( $configopt eq 'config' ) {
-        if ( $timescale == 1 ) {
-            $value = "Seconds" . $origvalue;
-        }
-        elsif ( $timescale == 2 ) {
-            $value = "Minutes" . $origvalue;
-        }
-        elsif (( $timescale == 3 )
-            || ( $timescale > 4 )
-            || ( !defined($timescale) ) )
-        {
-            $value = "Hours" . $origvalue;
-        }
-        elsif ( $timescale == 4 ) {
-            $value = "Days" . $origvalue;
-        }
-    }
-    elsif ( $configopt eq 'data' ) {
-        if ( $timescale == 1 ) {
-            $value = sprintf( "%02.2f", $origvalue / 1 );
-        }
-        elsif ( $timescale == 2 ) {
-            $value = sprintf( "%02.2f", $origvalue / 60 );
-        }
-        elsif (( $timescale == 3 )
-            || ( $timescale > 4 )
-            || ( !defined($timescale) ) )
-        {
-            $value = sprintf( "%02.2f", $origvalue / 3600 );
-        }
-        elsif ( $timescale == 4 ) {
-            $value = sprintf( "%02.2f", $origvalue / 86400 );
-        }
-    }
-    else {
-        die "Unknown time_scale option given: either [config/data]\n";
-    }
-    return $value;
-}
-
-=head2 buildglobalmap
-
-    This subroutine looks at the specified commands inputted, and generates
-    a hashref containing two arrays, one for global command keys and one for
-    slab command keys.
-
-=cut
-
-sub buildglobalmap {
-    my $results;
-    my @cmds = split( ' ', $commands );
-    foreach my $cmd (@cmds) {
-        if ( $cmd eq "get" ) {
-            $results->{globalcmds}->{cmd_get}    = 1;
-            $results->{globalcmds}->{get_hits}   = 1;
-            $results->{globalcmds}->{get_misses} = 1;
-            $results->{slabcmds}->{get_hits}     = 1;
-        }
-        elsif ( $cmd eq "set" ) {
-            $results->{globalcmds}->{cmd_set} = 1;
-            $results->{slabcmds}->{cmd_set}   = 1;
-        }
-        elsif ( $cmd eq "delete" ) {
-            $results->{globalcmds}->{delete_hits}   = 1;
-            $results->{globalcmds}->{delete_misses} = 1;
-            $results->{slabcmds}->{delete_hits}     = 1;
-        }
-        elsif ( $cmd eq "incr" ) {
-            $results->{globalcmds}->{incr_hits}   = 1;
-            $results->{globalcmds}->{incr_misses} = 1;
-            $results->{slabcmds}->{incr_hits}     = 1;
-        }
-        elsif ( $cmd eq "decr" ) {
-            $results->{globalcmds}->{decr_hits}   = 1;
-            $results->{globalcmds}->{decr_misses} = 1;
-            $results->{slabcmds}->{decr_hits}     = 1;
-        }
-        elsif ( $cmd eq "cas" ) {
-            $results->{globalcmds}->{cas_hits}   = 1;
-            $results->{globalcmds}->{cas_misses} = 1;
-            $results->{globalcmds}->{cas_badval} = 1;
-            $results->{slabcmds}->{cas_hits}     = 1;
-            $results->{slabcmds}->{cas_badval}   = 1;
-        }
-        elsif ( $cmd eq "touch" ) {
-            if ( $stats{version} !~ /^1\.4\.[0-7]$/ ) {
-                $results->{globalcmds}->{cmd_touch}    = 1;
-                $results->{globalcmds}->{touch_hits}   = 1;
-                $results->{globalcmds}->{touch_misses} = 1;
-                $results->{slabcmds}->{touch_hits}     = 1;
-            }
-        }
-        elsif ( $cmd eq "flush" ) {
-            if ( $stats{version} !~ /^1\.4\.[0-7]$/ ) {
-                $results->{globalcmds}->{cmd_flush} = 1;
-            }
-        }
-        else {
-
-            # Do absolutely nothing...
-        }
-    }
-    $results->{globalevics}->{evictions}       = 1;
-    $results->{globalevics}->{evicted_nonzero} = 1;
-    $results->{slabevics}->{evicted}           = 1;
-    $results->{slabevics}->{evicted_nonzero}   = 1;
-    if ( $stats{version} !~ /^1\.4\.[0-2]$/ ) {
-        $results->{globalevics}->{reclaimed} = 1;
-        $results->{slabevics}->{reclaimed}   = 1;
-    }
-    return $results;
-}
diff --git a/cookbooks/munin/files/default/plugins/munin_rrdcached b/cookbooks/munin/files/default/plugins/munin_rrdcached
deleted file mode 100644 (file)
index 9f9cb6d..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-#!/usr/bin/perl -w
-# -*- cperl -*-
-
-use strict;
-use warnings;
-
-use IO::Socket::UNIX;
-
-$| = 1;
-
-my $arg = shift;
-if ($arg && $arg eq "config") {
-       print "graph_title Munin rrdcached statistics\n";
-       print "graph_category munin\n";
-       print "QueueLength.label Queue length\n";
-       print "UpdatesReceived.label UpdatesReceived\n";
-       print "UpdatesReceived.type DERIVE\n";
-       print "FlushesReceived.label FlushesReceived\n";
-       print "FlushesReceived.type DERIVE\n";
-       print "UpdatesWritten.label UpdatesWritten\n";
-       print "UpdatesWritten.type DERIVE\n";
-       print "DataSetsWritten.label DataSetsWritten\n";
-       print "DataSetsWritten.type DERIVE\n";
-       print "TreeNodesNumber.label TreeNodesNumber\n";
-       print "TreeDepth.label TreeDepth\n";
-       print "JournalBytes.label JournalBytes\n";
-       print "JournalBytes.type DERIVE\n";
-       print "JournalRotate.label JournalRotate\n";
-       print "JournalRotate.type DERIVE\n";
-       exit 0;
-}
-
-my $sock = new IO::Socket::UNIX(
-       Type => SOCK_STREAM,
-       Peer => "/var/run/rrdcached.sock",
-) or die "Cannot open socket : $!";
-
-print $sock "STATS\n";
-print $sock "QUIT\n";
-
-# skip first line
-<$sock>;
-print map { s/: /.value /; $_; } <$sock>;
-
-exit 0;
diff --git a/cookbooks/munin/files/default/plugins/mysql_ b/cookbooks/munin/files/default/plugins/mysql_
deleted file mode 100644 (file)
index 80c561e..0000000
+++ /dev/null
@@ -1,2514 +0,0 @@
-#!/usr/bin/perl
-
-=encoding utf8
-
-=head1 NAME
-
-mysql_ - Munin plugin to display misc MySQL server status
-
-=head1 APPLICABLE SYSTEMS
-
-Any MySQL platform, tested by the authors on:
-* MySQL 5.6.12
-* MySQL 5.5.32, 5.5.37
-* MySQL 5.1.29,
-* MySQL 5.0.51
-* MariaDB 5.5.39
-* MariaDB-5.5.39(galera).
-
-Plugins:
-* MariaDB-10 Query Response Time: https://mariadb.com/kb/en/mariadb/query_response_time-plugin/
-
-Information Schema tables:
-* User statistics - MariaDB-5.2+, OurDelta, Percona Server - https://mariadb.com/kb/en/mariadb/user-statistics
-
-=head1 CONFIGURATION
-
-This script is used to generate data for several graphs. To generate
-data for one specific graph, you need to create a symbolic link with a
-name like mysql_<GRAPH> to this script.
-
-If you need to run against multiple MySQL instances on the same host,
-create your symlinks with names like mysql<N>_<GRAPH> where N is any
-non-negative integer. You must also set the env.cachenamespace variable
-to a unique value for each group of symlinks.
-
-To get a list of symlinks that can be created, run:
-
-  ./mysql_ suggest
-
-In addition you might need to specify connection parameters in the
-plugin configuration to override the defaults. These are the defaults:
-
-  [mysql_*]
-    env.mysqlconnection DBI:mysql:information_schema
-    env.mysqluser root
-
-Non-default example:
-
-  [mysql_*]
-    env.mysqlconnection DBI:mysql:information_schema;host=127.0.0.1;port=3306
-    env.mysqluser munin
-    env.mysqlpassword geheim
-    env.cachenamespace munin_mysql_pri
-  [mysql2_*]
-    env.mysqlconnection DBI:mysql:information_schema;host=127.0.0.1;port=13306
-    env.mysqluser munin;
-    env.mysqlpassword ryuWyawEv
-    env.cachenamespace munin_mysql_alt
-  [mysql10_*]
-    user munin
-    env.mysqluser munin
-    env.mysqlconnection DBI:mysql:information_schema;mysql_read_default_file=/etc/munin/.my-10.cnf
-    env.cachenamespace munin_mysql_10
-    # here the [client] section of /etc/munin/.my-10.cnf is read. socket= can
-    # be specified here.
-
-Creating a munin user:
-
-  CREATE USER 'munin'@'localhost' IDENTIFIED BY 'ryuWyawEv';
-
-or with a unix_socket plugin (INSTALL PLUGIN unix_socket SONAME 'auth_socket')
-
-  CREATE USER 'munin'@'localhost' IDENTIFIED WITH unix_socket;
-
-Note: requires 'user munin' in the configuration.
-
-The minimum required priviledges of the munin database user is:
-
-  GRANT PROCESS, REPLICATION CLIENT ON *.* TO 'munin'@'localhost';
-
-
-Warning and critical values can be set via the environment in the usual way.
-For example:
-
-  [mysql_replication]
-    env.slave_io_running_warning 0.5
-    env.slave_sql_running_warning 0.5
-    env.seconds_behind_master_warning 300
-    env.seconds_behind_master_critical 600
-
-=head1 DEPENDENCIES
-
-=over
-
-=item Cache::Cache
-
-The plugin uses shared memory to cache the statistics gathered from
-MySQL. This ensures minimal inpact on the MySQL server.
-
-=item DBD::mysql
-
-=back
-
-=head1 INTERPRETATION
-
-=head2 InnoDB
-
-The statistics from innodb are mainly collected from the command
-
-  SHOW ENGINE INNODB STATUS
-
-A nice walk through is found at
-L<http://www.mysqlperformanceblog.com/2006/07/17/show-innodb-status-walk-through/>
-
-Undo logs:
-L<http://blog.jcole.us/2014/04/16/the-basics-of-the-innodb-undo-logging-and-history-system/>
-
-=head2 The graphs
-
-FIX point to relevant sections in the MySQL manual and other www
-resources for each graph
-
-=over
-
-=item mysql_replication
-
-slave_io_running and slave_sql_running both translate the "Yes" values to 0 and
-anything else to 1 for their respective fields in the "SHOW SLAVE STATUS" output.
-This can be used to warn on slave failure if the warning and critical values
-are set as seen in a previous section.
-
-=item wsrep_cluster_status
-
-"Primary" is translated 0 and "non-Primary" to 1.
-
-=back
-
-=head1 LICENSE
-
-Copyright (C) 2008,2009 Kjell-Magne Øierud, 2014 Open Query
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; version 2 dated June, 1991.
-
-This program is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License along
-with this program; if not, write to the Free Software Foundation, Inc.,
-51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-
-=head1 VERSION
-
-git-master + a few munin modifications
-
-This plugin was downloaded from L<http://github.com/kjellm/munin-mysql/>
-
-=head1 MAGICK MARKERS
-
-  #%# family=auto
-  #%# capabilities=suggest autoconf
-
-=cut
-
-use warnings;
-use strict;
-use utf8;
-
-use DBI;
-use File::Basename;
-use Math::BigInt; # Used to append "=> lib 'GMP'" here, but GMP caused
-                 # segfault on some occasions. Removed as I don't
-                 # think the tiny performance boost is worth the
-                 # debugging effort.
-use Storable qw(nfreeze thaw);
-
-use Munin::Plugin;
-
-my $has_cache;
-
-BEGIN {
-    eval 'require Cache::SharedMemoryCache';
-    $has_cache = $@ ? 0 : 1;
-}
-
-
-#---------------------------------------------------------------------
-#  C O N F I G
-#---------------------------------------------------------------------
-
-my %config = (
-    'dsn'        => $ENV{'mysqlconnection'} || 'DBI:mysql:information_schema',
-    'user'       => $ENV{'mysqluser'}       || 'root',
-    'password'   => $ENV{'mysqlpassword'}   || '',
-    'cache_namespace' => $ENV{'cachenamespace'} || 'munin_mysql',
-);
-
-
-#---------------------------------------------------------------------
-#  C A C H E
-#---------------------------------------------------------------------
-
-my %cache_options = (
-    'namespace'          => $config{cache_namespace},
-    'default_expires_in' => 60,
-);
-
-my $shared_memory_cache ;
-if ($has_cache)
-{
-  $shared_memory_cache = Cache::SharedMemoryCache->new(\%cache_options)
-    or die("Couldn't instantiate SharedMemoryCache");
-}
-
-#---------------------------------------------------------------------
-#  G R A P H   D E F I N I T I O N S
-#---------------------------------------------------------------------
-
-# These are defaults to save typing in the graph definitions
-my %defaults = (
-    global_attrs => {
-       args   => '--base 1000',
-    },
-    data_source_attrs => {
-       min   => '0',
-       type  => 'DERIVE',
-       draw  => 'AREASTACK',
-    },
-);
-
-# %graphs contains the graph definitions, it is indexed on the graph
-# name. The information stored for each graph is used for both showing
-# data source values and for printing the graph configuration. Each
-# graph follows the followingformat:
-#
-# $graph{NAME} => {
-#     config => {
-#         # The global attributes for this graph
-#         global_attrs => {}
-#         # Attributes common to all data sources in this graph
-#         data_source_attrs => {}
-#     },
-#     data_sources => [
-#         # NAME - The name of the data source (e.g. variable names
-#         #        from SHOW STATUS)
-#         # DATA_SOURCE_ATTRS - key-value pairs with data source
-#         #                     attributes
-#         {name => 'NAME', (DATA_SOURCE_ATTRS)},
-#         {...},
-#     ],
-my %graphs = ();
-
-#---------------------------------------------------------------------
-
-
-$graphs{wsrep_cluster_status} = {
-        config => {
-            global_attrs => {
-                title  => 'Galera Status',
-                vlabel => 'PRIMARY',
-            },
-            data_source_attrs => {
-                draw  => 'LINE1',
-                   min   => '0',
-                   max   => '1',
-            },
-        },
-        data_sources => [
-            {name => 'wsrep_cluster_status', label => '0-Primary, 1-Non-Primary',
-                                           info  => 'If the host is primary',
-                                           type  => 'GAUGE',
-                                           critical => '1'},
-        ],
-};
-
-$graphs{wsrep_cluster_size} = {
-        config => {
-            global_attrs => {
-                title  => 'Galera cluster size',
-                vlabel => 'Hosts',
-            },
-            data_source_attrs => {
-                draw  => 'LINE1',
-            },
-        },
-        data_sources => [
-            {name => 'wsrep_cluster_size', label => 'Cluster size',
-                                           info  => 'The number of hosts in the cluster.',
-                                           type  => 'GAUGE'},
-        ],
-};
-
-
-# http://www.codership.com/wiki/doku.php?id=galera_node_fsm
-$graphs{wsrep_local_state} = {
-        config => {
-            global_attrs => {
-                title  => 'Galera node state',
-                vlabel => 'State (galera_node_fsm)',
-                args   => '--lower-limit 0 --upper-limit 6',
-            },
-            data_source_attrs => {
-                draw  => 'LINE1',
-                   min   => '0',
-                   max   => '6',
-            },
-        },
-        data_sources => [
-            {name => 'wsrep_local_state', label => '1-Joining, 2-Donor, 3-Joined, 4-Synced, 5-Donor, 6-Join after Donor ',
-                                          info  => 'The state of the node in the cluster.',
-                                          type  => 'GAUGE',
-                                          warning => '3.5:4.5'},
-        ],
-};
-
-#---------------------------------------------------------------------
-
-$graphs{wsrep_transactions} = {
-        config => {
-            global_attrs => {
-                title  => 'Galera transactions',
-            },
-            data_source_attrs => {
-                draw  => 'LINE1',
-            },
-        },
-        data_sources => [
-            {name => 'wsrep_last_committed', label => 'Committed transactions',
-                                             info  => '# of committed transactions.',
-                                             type  => 'COUNTER',
-                                             min   => 0},
-            {name => 'wsrep_local_commits',  label => 'Locally Committed transactions',
-                                             info  => '# of locally committed transactions.',
-                                             type  => 'COUNTER',
-                                             min   => 0},
-        ],
-};
-
-#---------------------------------------------------------------------
-
-$graphs{wsrep_writesets} = {
-        config => {
-            global_attrs => {
-                title  => 'Galera writesets',
-            },
-            data_source_attrs => {
-                draw  => 'LINE1',
-            },
-        },
-        data_sources => [
-            {name => 'wsrep_replicated', label => 'Writesets sent',
-                                         info  => '# of writesets sent to other nodes',
-                                         type  => 'COUNTER',
-                                         min   => '0',
-                                         graph => 'no'},
-            {name => 'wsrep_received',   label => 'Writesets received',
-                                         info  => '# of writesets received from other nodes',
-                                         type  => 'COUNTER',
-                                         min   => '0',
-                                         negative => 'wsrep_replicated'},
-        ],
-};
-
-#-------------------------
-
-
-$graphs{wsrep_writesetbytes} = {
-        config => {
-            global_attrs => {
-                title  => 'Galera writesets bytes/sec',
-            },
-            data_source_attrs => {
-            },
-        },
-        data_sources => [
-            {name => 'wsrep_received_bytes',   label => 'Writesets bytes received',
-                                               info  => '# of bytes in writesets received from other nodes',
-                                               type  => 'DERIVE',
-                                               min   => 0,
-                                               graph => 'no'},
-            {name => 'wsrep_replicated_bytes', label => 'Writesets bytes sent',
-                                               info  => '# of bytes in writesets sent to other nodes',
-                                               type  => 'DERIVE',
-                                               draw  => 'LINE1',
-                                               min   => 0,
-                                               negative => 'wsrep_received_bytes'},
-            {name => 'wsrep_repl_keys_bytes', label => 'Writeset key size sent',
-                                               info  => '# of bytes in writesets of keys sent to other nodes',
-                                               type  => 'DERIVE',
-                                               min   => 0},
-            {name => 'wsrep_repl_data_bytes', label => 'Writeset data size sent',
-                                               info  => '# of bytes in writesets of data sent to other nodes',
-                                               type  => 'DERIVE',
-                                               min   => 0},
-            {name => 'wsrep_repl_other_bytes', label => 'Writeset other size sent',
-                                               info  => '# of bytes in writesets of other data sent to other nodes',
-                                               type  => 'DERIVE',
-                                               min   => 0},
-        ],
-};
-
-
-#-------------------------
-
-$graphs{wsrep_errors} = {
-        config => {
-            global_attrs => {
-                title  => 'Galera transaction problems'
-            },
-            data_source_attrs => {
-                draw  => 'LINE1',
-            },
-        },
-        data_sources => [
-            {name => 'wsrep_local_cert_failures', label => 'Certification failures',
-                                                  type  => 'DERIVE',
-                                                  min   => 0},
-            {name => 'wsrep_local_bf_aborts',     label => 'Aborted local transactions',
-                                                  type  => 'DERIVE',
-                                                  min   => 0},
-            {name => 'wsrep_local_replays',       label => 'Replays',
-                                                  type  => 'DERIVE',
-                                                  min   => 0},
-        ],
-};
-
-#-------------------------
-
-$graphs{wsrep_queue} = {
-        config => {
-            global_attrs => {
-                title  => 'Galera queues',
-                     vlabel => 'queue length received (-) / sent (+) per ${graph_period}',
-            },
-            data_source_attrs => {
-                draw  => 'LINE1',
-            },
-        },
-        data_sources => [
-            {name => 'wsrep_local_recv_queue',     label => 'Receive queue length',
-                                                   type  => 'GAUGE',
-                                                   graph => 'no'},
-            {name => 'wsrep_local_recv_queue_min', label => 'Receive queue length min',
-                                                   type  => 'GAUGE',
-                                                   graph => 'no'},
-            {name => 'wsrep_local_recv_queue_avg', label => 'Average receive queue length',
-                                                   type  => 'GAUGE',
-                                                   graph => 'no'},
-            {name => 'wsrep_local_recv_queue_max', label => 'Receive queue length max',
-                                                   type  => 'GAUGE',
-                                                   graph => 'no'},
-            {name => 'wsrep_local_send_queue',     label => 'Send queue length',
-                                                   type  => 'GAUGE',
-                                                   negative => 'wsrep_local_recv_queue'},
-            {name => 'wsrep_local_send_queue_min', label => 'Send queue length min',
-                                                   type  => 'GAUGE',
-                                                   negative => 'wsrep_local_recv_queue_min'},
-            {name => 'wsrep_local_send_queue_avg', label => 'Average send queue length',
-                                                   type  => 'GAUGE',
-                                                   negative => 'wsrep_local_recv_queue_avg'},
-            {name => 'wsrep_local_send_queue_max', label => 'Send queue length max',
-                                                   type  => 'GAUGE',
-                                                   negative => 'wsrep_local_recv_queue_max'},
-        ],
-};
-
-#-------------------------
-
-$graphs{wsrep_concurrency} = {
-        config => {
-            global_attrs => {
-                title  => 'Galera Performance - Apply to Commit',
-                vlabel => 'commit + / apply - '
-            },
-            data_source_attrs => {
-                draw  => 'LINE1',
-                type  => 'GAUGE',
-            },
-        },
-        data_sources => [
-            {name => 'wsrep_apply_window',         label => 'apply window',
-                                                   graph => 'no'},
-            {name => 'wsrep_apply_oooe',           label => 'apply out of order',
-                                                   graph => 'no'},
-            {name => 'wsrep_apply_oool',           label => 'apply out of order (slowness)',
-                                                   graph => 'no'},
-            {name => 'wsrep_commit_window',        label => 'commit window',
-                                                   negative => 'wsrep_apply_window'},
-            {name => 'wsrep_commit_oooe',          label => 'commit out of order',
-                                                   negative => 'wsrep_apply_oooe'},
-            {name => 'wsrep_commit_oool',          label => 'commit out of order (slowness)',
-                                                   negative => 'wsrep_apply_oool'},
-        ],
-};
-
-#-------------------------
-
-$graphs{wsrep_flow} = {
-        config => {
-            global_attrs => {
-                title  => 'Galera flow control',
-                     vlabel => 'events received (-) / sent (+) per ${graph_period}',
-            },
-            data_source_attrs => {
-                draw  => 'LINE1',
-            },
-        },
-        data_sources => [
-            {name => 'wsrep_flow_control_recv',      label => 'Pause events received',
-                                                     type  => 'DERIVE',
-                                                     min   => 0,
-                                                     graph => 'no'},
-            {name => 'wsrep_flow_control_sent',      label => 'Pause events sent',
-                                                     type  => 'DERIVE',
-                                                     min   => 0,
-                                                     negative => 'wsrep_flow_control_recv'},
-        ],
-  };
-
-
-
-#-------------------------
-
-$graphs{wsrep_flow_paused} = {
-        config => {
-            global_attrs => {
-                title  => 'Galera flow control paused ratio',
-            },
-            data_source_attrs => {
-                draw  => 'LINE1',
-            },
-        },
-        data_sources => [
-            {name => 'wsrep_flow_control_paused',    label => 'Ratio flow control was paused',
-                                                     type  => 'GAUGE',
-                                                     min   => '0',
-                                                     max   => '1',
-                                                     warning => 0.1,
-                                                     critical => 0.9},
-        ],
-   };
-
-#-------------------------
-
-$graphs{wsrep_flow_paused_ns} = {
-        config => {
-            global_attrs => {
-                title  => 'Galera flow control paused time',
-                vlabel => 'nanoseconds',
-            },
-            data_source_attrs => {
-                draw  => 'LINE1',
-            },
-        },
-        data_sources => [
-            {name => 'wsrep_flow_control_paused_ns',    label => 'Time flow control was paused (ns)',
-                                                     min   => '0',
-                                                     warning => 20000,
-                                                     critical => 1000000},
-        ],
-   };
-
-#-------------------------
-
-$graphs{wsrep_distance} = {
-        config => {
-            global_attrs => {
-                title  => 'Galera distance',
-            },
-            data_source_attrs => {
-                draw  => 'LINE1',
-            },
-        },
-        data_sources => [
-            {name => 'wsrep_cert_deps_distance',    label => 'cert_deps_distance',
-                                                    type  => 'GAUGE'},
-            {name => 'wsrep_cert_index_size',       label => 'wsrep_cert_index_size',
-                                                    type  => 'GAUGE'},
-            {name => 'wsrep_slave_threads',        label => 'wsrep_slave_threads',
-                                                    type  => 'GAUGE'},
-            {name => 'wsrep_commit_window',         label => 'commit_window',
-                                                    type  => 'GAUGE'},
-        ],
-};
-
-#-------------------------
-$graphs{bin_relay_log} = {
-    config => {
-       global_attrs => {
-           title  => 'Binary/Relay Logs',
-           vlabel => 'Log activity',
-       },
-       data_source_attrs => {
-           draw  => 'LINE1',
-       },
-    },
-    data_sources => [
-       {name => 'Binlog_cache_disk_use', label => 'Binlog Cache Disk Use'},
-       {name => 'Binlog_cache_use',      label => 'Binlog Cache Use'},
-       {name => 'Binlog_stmt_cache_disk_use', label => 'Binlog Statement Cache Disk Use'},
-       {name => 'Binlog_stmt_cache_use',      label => 'Binlog Statement Cache Use'},
-       {name => 'ma_binlog_size',        label => 'Binary Log Space'},
-       {name => 'relay_log_space',       label => 'Relay Log Space'},
-    ],
-};
-
-#---------------------------------------------------------------------
-
-$graphs{commands} = {
-    config => {
-       global_attrs => {
-           title  => 'Command Counters',
-           vlabel => 'Commands per ${graph_period}',
-           total  => 'Questions',
-       },
-       data_source_attrs => {},
-    },
-    data_sources => [
-       {name => 'Com_delete',         label => 'Delete'},
-       {name => 'Com_insert',         label => 'Insert'},
-       {name => 'Com_insert_select',  label => 'Insert select'},
-       {name => 'Com_load',           label => 'Load Data'},
-       {name => 'Com_replace',        label => 'Replace'},
-       {name => 'Com_replace_select', label => 'Replace select'},
-       {name => 'Com_select',         label => 'Select'},
-       {name => 'Com_update',         label => 'Update'},
-       {name => 'Com_update_multi',   label => 'Update multi'},
-    ],
-};
-
-#---------------------------------------------------------------------
-
-$graphs{connections} = {
-    config => {
-       global_attrs => {
-           title  => 'Connections',
-           vlabel => 'Connections per ${graph_period}',
-       },
-       data_source_attrs => {
-           draw  => 'LINE1',
-       },
-    },
-    data_sources => [
-       {name => 'max_connections',      label  => 'Max connections',
-                                        type   => 'GAUGE',
-                                        draw   => 'AREA',
-                                        colour => 'cdcfc4'},
-       {name => 'Max_used_connections', label  => 'Max used',
-                                        type   => 'GAUGE',
-                                        draw   => 'AREA',
-                                        colour => 'ffd660'},
-       {name => 'Aborted_clients',      label => 'Aborted clients'},
-       {name => 'Aborted_connects',     label => 'Aborted connects'},
-       {name => 'Threads_connected',    label => 'Threads connected',
-                                        type  => 'GAUGE'},
-       {name => 'Threads_running',      label => 'Threads running',
-                                        type  => 'GAUGE'},
-       {name => 'Connections',          label => 'New connections'},
-    ],
-};
-
-#---------------------------------------------------------------------
-
-$graphs{files} = {
-    config => {
-       global_attrs => {
-           title  => 'Files',
-       },
-       data_source_attrs => {
-           type  => 'GAUGE',
-           draw  => 'LINE1',
-       },
-    },
-    data_sources => [
-       {name => 'open_files_limit', label  => 'File Limit',
-                                    draw   => 'AREA',
-                                    colour => 'cdcfc4'},
-       {name => 'Open_files',       label => 'Open files',
-                                    type  => 'DERIVE',
-                  min   => 0},
-    ],
-};
-
-#---------------------------------------------------------------------
-
-$graphs{tables} = {
-    config => {
-       global_attrs => {
-           title  => 'Tables',
-       },
-       data_source_attrs => {
-           type  => 'GAUGE',
-           draw  => 'LINE1',
-       },
-    },
-    data_sources => [
-       {name => 'table_open_cache',   label  => 'Table cache',
-                                    draw   => 'AREA',
-                                    colour => 'cdcfc4'},
-       {name => 'innodb_open_files',  label => 'Innodb Table Cache Limit',
-                                    draw   => 'AREA',
-                                    colour => 'ffd660'},
-       {name => 'Open_tables',        label => 'Open tables'},
-       {name => 'Slave_open_temp_tables',  label => 'Open Slave Temp Tables'},
-       {name => 'Opened_tables',      label => 'Opened tables',
-                                    type  => 'DERIVE',
-                  min   => 0},
-       {name => 'Opened_views',       label => 'Opened Views',
-                                    type  => 'DERIVE',
-                  min   => 0},
-    ],
-};
-
-#---------------------------------------------------------------------
-
-$graphs{table_definitions} = {
-    config => {
-       global_attrs => {
-           title  => 'Tables Definitions',
-       },
-       data_source_attrs => {
-           type  => 'GAUGE',
-           draw  => 'LINE1',
-       },
-    },
-    data_sources => [
-       {name => 'table_definition_cache',  label => 'Cache Limit',
-                                    draw   => 'AREA',
-                                    colour => 'cdcfc4'},
-       {name => 'Open_table_definitions',  label => 'Open'},
-       {name => 'Opened_table_definitions',  label => 'Opened',
-                                    type  => 'DERIVE',
-                  min   => 0},
-    ],
-};
-
-#---------------------------------------------------------------------
-
-$graphs{innodb_bpool} = {
-    config => {
-       global_attrs => {
-           title  => 'InnoDB Buffer Pool',
-           vlabel => 'Pages',
-           args   => '--base 1024',
-       },
-       data_source_attrs => {
-           draw => 'LINE2',
-           type => 'GAUGE',
-       },
-    },
-    data_sources => [
-       {name => 'ib_bpool_size',     label  => 'Buffer pool size',
-                                     draw   => 'AREA',
-                                     colour => 'ffd660'},
-       {name => 'ib_bpool_dbpages',  label  => 'Database pages',
-                                     draw   => 'AREA',
-                                     colour => 'cdcfc4'},
-       {name => 'ib_bpool_free',     label => 'Free pages'},
-       {name => 'ib_bpool_modpages', label => 'Modified pages'},
-       {name => 'ib_bpool_oldpages', label => 'Old pages'},
-    ],
-};
-
-#---------------------------------------------------------------------
-
-$graphs{innodb_bpool_act} = {
-    config => {
-       global_attrs => {
-           title  => 'InnoDB Buffer Pool Activity',
-           vlabel => 'Pages per ${graph_period}',
-           total  => 'Total',
-       },
-       data_source_attrs => {
-           draw => 'LINE2',
-       },
-    },
-    data_sources => [
-       {name => 'ib_bpool_read',           label => 'Read'},
-       {name => 'ib_bpool_created',        label => 'Created'},
-       {name => 'ib_bpool_written',        label => 'Written'},
-       {name => 'ib_bpool_made_young',     label => 'Made young'},
-       {name => 'ib_bpool_made_not_young', label => 'Made not young'},
-    ],
-};
-
-#---------------------------------------------------------------------
-
-$graphs{innodb_bpool_internal_breakdown} = {
-    config => {
-        global_attrs => {
-            title  => 'InnoDB Buffer Pool Internal breakdown',
-            args   => '--base 1024 --lower-limit 0',
-            vlabel => 'bytes',
-        },
-        data_source_attrs => {
-            min  => '0',
-            draw => 'AREASTACK',
-            type => 'GAUGE',
-        },
-    },
-    data_sources => [
-        {name => 'ib_bpool_internal_adaptive_hash_size_const',    label => 'Adaptive Hash const'},
-        {name => 'ib_bpool_internal_adaptive_hash_size_var',      label => 'Adaptive Hash var'},
-        {name => 'ib_bpool_internal_page_hash_size_total',        label => 'Page Hash'},
-        {name => 'ib_bpool_internal_dictionary_cache_size_const', label => 'Dictionary const'},
-        {name => 'ib_bpool_internal_dictionary_cache_size_var',   label => 'Dictionary var'},
-        {name => 'ib_bpool_internal_file_system_size_const',      label => 'Filesystem const'},
-        {name => 'ib_bpool_internal_file_system_size_var',        label => 'Filesystem var'},
-        {name => 'ib_bpool_internal_lock_system_size_const',      label => 'Lock system const'},
-        {name => 'ib_bpool_internal_lock_system_size_var',        label => 'Lock system var'},
-        {name => 'ib_bpool_internal_recovery_system_size_const',  label => 'Recovery system const'},
-        {name => 'ib_bpool_internal_recovery_system_size_var',    label => 'Recovery system var'},
-    ],
-};
-
-#---------------------------------------------------------------------
-
-$graphs{innodb_insert_buf} = {
-    config => {
-       global_attrs => {
-           title  => 'InnoDB Insert Buffer',
-           vlabel => 'Activity per ${graph_period}',
-       },
-       data_source_attrs => {
-           draw => 'LINE1',
-       },
-    },
-    data_sources => [
-      {name => 'ib_ibuf_inserts',    label => 'Merge Inserts'},
-      {name => 'ib_ibuf_delete',     label => 'Merge Deletes'},
-      {name => 'ib_ibuf_merged_rec', label => 'Merged Records'},
-      {name => 'ib_ibuf_merges',     label => 'Merges'},
-      {name => 'ib_ibuf_discard_inserts', label => 'Discard Inserts'},
-      {name => 'ib_ibuf_discard_delete',  label => 'Discard Deletes'},
-    ],
-};
-
-#---------------------------------------------------------------------
-
-$graphs{innodb_adaptive_hash} = {
-    config => {
-       global_attrs => {
-           title  => 'InnoDB Adaptive Hash Optimiser',
-       },
-       data_source_attrs => {
-           draw => 'LINE1',
-       },
-    },
-    data_sources => [
-       {name => 'Innodb_adaptive_hash_hash_searches',    label => 'Hash Searches'},
-       {name => 'Innodb_adaptive_hash_non_hash_searches', label => 'Nonhash Searches'},
-    ],
-};
-
-#---------------------------------------------------------------------
-
-$graphs{innodb_io} = {
-    config => {
-       global_attrs => {
-           title  => 'InnoDB IO',
-           vlabel => 'IO operations per ${graph_period}',
-       },
-       data_source_attrs => {
-           draw => 'LINE1',
-       },
-    },
-    data_sources => [
-       {name => 'ib_io_read',  label => 'File reads'},
-       {name => 'ib_io_write', label => 'File writes'},
-       {name => 'ib_io_log',   label => 'Log writes'},
-       {name => 'ib_io_fsync', label => 'File syncs'},
-    ],
-};
-
-#---------------------------------------------------------------------
-
-$graphs{innodb_io_pend} = {
-    config => {
-       global_attrs => {
-           title  => 'InnoDB IO Pending',
-           vlabel => 'Pending operations',
-       },
-       data_source_attrs => {
-           draw => 'LINE1',
-       },
-    },
-    data_sources => [
-       {name => 'ib_iop_log',         label => 'AIO Log'},
-       {name => 'ib_iop_sync',        label => 'AIO Sync'},
-       {name => 'ib_iop_flush_bpool', label => 'Buf Pool Flush'},
-       {name => 'ib_iop_flush_log',   label => 'Log Flushes'},
-       {name => 'ib_iop_ibuf_aio',    label => 'Insert Buf AIO Read'},
-       {name => 'ib_iop_aioread',     label => 'Normal AIO Reads'},
-       {name => 'ib_iop_aiowrite',    label => 'Normal AIO Writes'},
-    ],
-};
-
-#---------------------------------------------------------------------
-
-$graphs{innodb_log} = {
-    config => {
-       global_attrs => {
-           title  => 'InnoDB Log',
-           vlabel => 'Log activity per ${graph_period}',
-       },
-       data_source_attrs => {
-           draw => 'LINE1',
-       },
-    },
-    data_sources => [
-       {name => 'innodb_log_buffer_size', label  => 'Buffer Size',
-                                          type   => 'GAUGE',
-                                          draw   => 'AREA',
-                                          colour => 'fafd9e'},
-       {name => 'ib_log_flush',           label => 'KB Flushed'},
-       {name => 'ib_log_written',         label => 'KB Written'},
-    ],
-};
-
-#---------------------------------------------------------------------
-
-$graphs{innodb_rows} = {
-    config => {
-       global_attrs => {
-           title  => 'InnoDB Row Operations',
-           vlabel => 'Operations per ${graph_period}',
-           total  => 'Total',
-       },
-       data_source_attrs => {},
-    },
-    data_sources => [
-       {name => 'Innodb_rows_deleted',  label => 'Deletes'},
-       {name => 'Innodb_rows_inserted', label => 'Inserts'},
-       {name => 'Innodb_rows_read',     label => 'Reads'},
-       {name => 'Innodb_rows_updated',  label => 'Updates'},
-    ],
-};
-
-#---------------------------------------------------------------------
-
-$graphs{innodb_semaphores} = {
-    config => {
-       global_attrs => {
-           title  => 'InnoDB Semaphores',
-           vlabel => 'Semaphores per ${graph_period}',
-       },
-       data_source_attrs => {
-           draw  => 'AREASTACK',
-       },
-    },
-    data_sources => [
-       {name => 'ib_spin_rounds', label => 'Spin Rounds'},
-       {name => 'ib_spin_waits',  label => 'Spin Waits'},
-       {name => 'ib_os_waits',    label => 'OS Waits'},
-  {name => 'ib_rw_shared_rounds', label => 'RW/S Rounds'},
-  {name => 'ib_rw_shared_waits',  label => 'RW/S Waits'},
-  {name => 'ib_rw_shared_os_waits',    label => 'RW/S OS Waits'},
-  {name => 'ib_rw_excl_rounds', label => 'RW/X Rounds'},
-  {name => 'ib_rw_excl_waits',  label => 'RW/X Waits'},
-  {name => 'ib_rw_excl_os_waits',    label => 'RW/X OS Waits'},
-    ],
-};
-
-#---------------------------------------------------------------------
-
-$graphs{innodb_tnx} = {
-    config => {
-       global_attrs => {
-           title  => 'InnoDB Transactions',
-           vlabel => 'Transactions per ${graph_period}',
-       },
-       data_source_attrs => {
-           draw  => 'LINE1',
-       },
-    },
-    data_sources => [
-       {name => 'ib_tnx', label => 'Transactions created'},
-    ],
-};
-
-#---------------------------------------------------------------------
-
-$graphs{innodb_history_list_length} = {
-    config => {
-       global_attrs => {
-           title  => 'InnoDB History List Length',
-           vlabel => 'Undo log units',
-       },
-       data_source_attrs => {
-           draw  => 'LINE1',
-      type  => 'GAUGE',
-       },
-    },
-    data_sources => [
-       {name => 'ib_tnx_hist', label => 'History List Length'},
-    ],
-};
-
-#---------------------------------------------------------------------
-
-$graphs{innodb_srv_master_thread} = {
-    config => {
-       global_attrs => {
-           title  => 'InnoDB Master Thread',
-       },
-       data_source_attrs => {
-           type  => 'DERIVE',
-           draw  => 'AREASTACK',
-       },
-    },
-    data_sources => [
-       {name => 'ib_srv_main_flush_loops', label => 'Flush Loop'},
-       {name => 'ib_srv_main_background_loops', label => 'Background Loop'},
-       {name => 'ib_srv_main_flushs_writes', label => 'Flushes/Writes', draw  => 'LINE1'},
-    ],
-};
-
-#---------------------------------------------------------------------
-
-$graphs{innodb_queries} = {
-    config => {
-       global_attrs => {
-           title  => 'InnoDB Engine Queries and Transactions',
-           args   => '--lower-limit 0',
-       },
-       data_source_attrs => {
-           type  => 'GAUGE',
-       },
-    },
-    data_sources => [
-       {name => 'ib_innodb_queries', label => 'Active'},
-       {name => 'ib_innodb_transactions_active', label => 'Transactions'},
-       {name => 'ib_innodb_query_queue_len', label => 'Queued'},
-    ],
-};
-
-#---------------------------------------------------------------------
-
-$graphs{innodb_read_views} = {
-    config => {
-       global_attrs => {
-           title  => 'InnoDB Read Views',
-           args   => '--lower-limit 0',
-       },
-       data_source_attrs => {
-           type  => 'GAUGE',
-       },
-    },
-    data_sources => [
-       {name => 'ib_innodb_read_views', label => 'Views'},
-    ],
-};
-
-#---------------------------------------------------------------------
-
-$graphs{innodb_descriptors} = {
-    config => {
-       global_attrs => {
-           title  => 'InnoDB Descriptors',
-           args   => '--lower-limit 0',
-       },
-       data_source_attrs => {
-           type  => 'GAUGE',
-       },
-    },
-    data_sources => [
-       {name => 'ib_innodb_descriptors', label => 'Descriptors'},
-       {name => 'ib_innodb_descriptors_max', label => 'Max', draw => 'AREA', colour => 'ffd660'},
-    ],
-};
-
-#---------------------------------------------------------------------
-
-$graphs{performance} = {
-    config => {
-       global_attrs => {
-           title  => 'Performance Schema Losses',
-       },
-       data_source_attrs => {
-           draw  => 'LINE1',
-       },
-    },
-    data_sources => [
-  {name => 'Performance_schema_cond_classes_lost',     label => 'Condition classes'},
-  {name => 'Performance_schema_cond_instances_lost',   label => 'Condition instances'},
-  {name => 'Performance_schema_file_classes_lost',     label => 'File classes'},
-  {name => 'Performance_schema_file_handles_lost',     label => 'File handles'},
-  {name => 'Performance_schema_file_instances_lost',   label => 'File instances'},
-  {name => 'Performance_schema_locker_lost',           label => 'Locker'},
-  {name => 'Performance_schema_mutex_classes_lost',    label => 'Mutex classes'},
-  {name => 'Performance_schema_mutex_instances_lost',  label => 'Mutex instances'},
-  {name => 'Performance_schema_rwlock_classes_lost',   label => 'Read/Write lock classes'},
-  {name => 'Performance_schema_rwlock_instances_lost', label => 'Read/Write lock instances'},
-  {name => 'Performance_schema_table_handles_lost',    label => 'Table handles'},
-  {name => 'Performance_schema_table_instances_lost',  label => 'Table instances'},
-  {name => 'Performance_schema_thread_classes_lost',   label => 'Thread classes'},
-  {name => 'Performance_schema_thread_instances_lost', label => 'Thread instances'},
-    ],
-};
-
-#---------------------------------------------------------------------
-
-$graphs{myisam_indexes} = {
-    config => {
-       global_attrs => {
-           title  => 'MyISAM Indexes',
-           vlabel => 'Requests per ${graph_period}',
-       },
-       data_source_attrs => {
-           draw  => 'LINE2',
-       },
-    },
-    data_sources => [
-       {name => 'Key_read_requests',  label => 'Key read requests'},
-       {name => 'Key_reads',          label => 'Key reads'},
-       {name => 'Key_write_requests', label => 'Key write requests'},
-       {name => 'Key_writes',         label => 'Key writes'},
-   ],
-};
-
-#---------------------------------------------------------------------
-
-$graphs{network_traffic} = {
-    config => {
-       global_attrs => {
-           title  => 'Network Traffic',
-           args   => '--base 1024',
-           vlabel => 'Bytes received (-) / sent (+) per ${graph_period}',
-       },
-       data_source_attrs => {
-           draw  => 'LINE2',
-       },
-    },
-    data_sources => [
-       {name => 'Bytes_received', label => 'Bytes transferred',
-                                  graph => 'no'},
-       {name => 'Bytes_sent',     label    => 'Bytes transferred',
-                                  negative => 'Bytes_received'},
-    ],
-};
-
-#---------------------------------------------------------------------
-
-$graphs{qcache} = {
-    config => {
-       global_attrs => {
-           title  => 'Query Cache',
-           vlabel => 'Commands per ${graph_period}',
-       },
-       data_source_attrs => {
-            draw => 'LINE1',
-       },
-    },
-    data_sources => [
-       {name => 'Qcache_queries_in_cache', label => 'Queries in cache', type  => 'GAUGE'},
-       {name => 'Qcache_hits',             label => 'Cache hits'},
-       {name => 'Subquery_cache_hit',      label => 'Subquery Cache hits'},
-       {name => 'Subquery_cache_miss',     label => 'Subquery Cache misses'},
-       {name => 'Qcache_inserts',          label => 'Inserts'},
-       {name => 'Qcache_not_cached',       label => 'Not cached'},
-       {name => 'Qcache_lowmem_prunes',    label => 'Low-memory prunes'},
-    ],
-};
-
-#---------------------------------------------------------------------
-
-$graphs{qcache_mem} = {
-    config => {
-       global_attrs => {
-           title  => 'Query Cache Memory',
-           vlabel => 'Bytes',
-           args   => '--base 1024 --lower-limit 0',
-       },
-       data_source_attrs => {
-           draw => 'AREA',
-           type => 'GAUGE',
-       },
-    },
-    data_sources => [
-       {name => 'query_cache_size',    label => 'Cache size'},
-       {name => 'Qcache_free_memory',  label => 'Free mem'},
-    ],
-};
-
-
-#---------------------------------------------------------------------
-
-$graphs{max_mem} = {
-    config => {
-       global_attrs => {
-           title  => 'Maximum memory that Mysql could use',
-           vlabel => 'Bytes',
-           args   => '--base 1024 --lower-limit 0',
-       },
-       data_source_attrs => {
-           draw => 'AREASTACK',
-           type => 'GAUGE',
-       },
-    },
-    data_sources => [
-       {name => 'mysql_connection_memory',    label => 'Connection Memory'},
-       {name => 'mysql_base_memory',  label => 'Base MYSQL Memory'},
-    ],
-};
-
-
-#---------------------------------------------------------------------
-
-$graphs{replication} = {
-    config => {
-       global_attrs => {
-           title  => 'Replication',
-           vlabel => 'Activity',
-       },
-       data_source_attrs => {
-           draw => 'LINE1',
-       },
-    },
-    data_sources => [
-       {name => 'slave_io_running',           label => 'Slave IO Running',
-                                              type  => 'GAUGE',
-                                              draw  => 'AREA'},
-       {name => 'slave_sql_running',          label => 'Slave SQL Running',
-                                              type  => 'GAUGE',
-                                              draw  => 'AREA'},
-       {name => 'Slave_retried_transactions', label => 'Retried Transactions'},
-       {name => 'Slave_open_temp_tables',     label => 'Open Temp Tables'},
-       {name => 'seconds_behind_master',      label => 'Secs Behind Master',
-                                              type  => 'GAUGE'},
-    ],
-};
-
-#---------------------------------------------------------------------
-
-$graphs{select_types} = {
-    config => {
-       global_attrs => {
-           title  => 'Select types',
-           vlabel => 'Commands per ${graph_period}',
-           total  => 'Total',
-       },
-       data_source_attrs => {},
-    },
-    data_sources => [
-       {name => 'Select_full_join',       label => 'Full join'},
-       {name => 'Select_full_range_join', label => 'Full range'},
-       {name => 'Select_range',           label => 'Range'},
-       {name => 'Select_range_check',     label => 'Range check'},
-       {name => 'Select_scan',            label => 'Scan'},
-    ],
-};
-
-#---------------------------------------------------------------------
-
-$graphs{slow} = {
-    config => {
-       global_attrs => {
-           title  => 'Slow Queries',
-           vlabel => 'Slow queries per ${graph_period}',
-       },
-       data_source_attrs => {
-           draw  => 'LINE2',
-       },
-    },
-    data_sources => [
-       {name => 'Slow_queries', label => 'Slow queries'},
-    ],
-};
-
-#---------------------------------------------------------------------
-
-$graphs{sorts} = {
-    config => {
-       global_attrs => {
-           title  => 'Sorts',
-           vlabel => 'Sorts / ${graph_period}',
-       },
-       data_source_attrs => {
-           draw  => 'LINE2',
-       },
-    },
-    data_sources => [
-       {name => 'Sort_rows',         label => 'Rows sorted'},
-       {name => 'Sort_range',        label => 'Range'},
-       {name => 'Sort_merge_passes', label => 'Merge passes'},
-       {name => 'Sort_scan',         label => 'Scan'},
-    ],
-};
-
-#---------------------------------------------------------------------
-
-$graphs{table_locks} = {
-    config => {
-       global_attrs => {
-           title  => 'Table locks',
-           vlabel => 'locks per ${graph_period}',
-       },
-       data_source_attrs => {
-           draw  => 'LINE2',
-       },
-    },
-    data_sources => [
-       {name => 'Table_locks_immediate', label => 'Table locks immed'},
-       {name => 'Table_locks_waited',    label => 'Table locks waited'},
-    ],
-};
-
-#---------------------------------------------------------------------
-
-$graphs{tmp_tables} = {
-    config => {
-       global_attrs => {
-           title  => 'Temporary objects',
-           vlabel => 'Objects per ${graph_period}',
-       },
-       data_source_attrs => {
-           draw  => 'LINE2',
-       },
-    },
-    data_sources => [
-       {name => 'Created_tmp_disk_tables', label => 'Temp disk tables'},
-       {name => 'Created_tmp_tables',      label => 'Temp tables'},
-       {name => 'Created_tmp_files',       label => 'Temp files'},
-    ],
-};
-
-
-#---------------------------------------------------------------------
-
-$graphs{rows} = {
-    config => {
-  global_attrs => {
-      title  => 'Rows',
-  },
-  data_source_attrs => {
-      draw  => 'LINE2',
-      type => 'DERIVE',
-  },
-    },
-    data_sources => [
-  {name => 'Rows_read',     label => 'Read'},
-  {name => 'Rows_sent',     label => 'Sent'},
-  {name => 'Rows_tmp_read', label => 'Temp Read'},
-    ],
-  };
-
-#---------------------------------------------------------------------
-
-$graphs{handler_read} = {
-    config => {
-  global_attrs => {
-      title  => 'Read Handler',
-  },
-  data_source_attrs => {
-      draw  => 'AREASTACK',
-      type => 'DERIVE',
-  },
-    },
-    data_sources => [
-  {name => 'Handler_read_first',       label => 'Key First'},
-  {name => 'Handler_read_key',         label => 'Key Read'},
-  {name => 'Handler_read_last',        label => 'Key Last'},
-  {name => 'Handler_read_prev',        label => 'Key Prev'},
-  {name => 'Handler_read_rnd',         label => 'Row position'},
-  {name => 'Handler_read_rnd_deleted', label => 'Row position delete'},
-  {name => 'Handler_read_rnd_next',    label => 'Row position next'},
-    ],
-  };
-
-#---------------------------------------------------------------------
-
-$graphs{handler_transaction} = {
-    config => {
-  global_attrs => {
-      title  => 'Transactions Handler',
-  },
-  data_source_attrs => {
-      draw  => 'AREASTACK',
-      type => 'DERIVE',
-  },
-    },
-    data_sources => [
-  {name => 'Handler_commit',             label => 'Commit'},
-  {name => 'Handler_rollback',           label => 'Rollback'},
-  {name => 'Handler_savepoint',          label => 'Savepoint'},
-  {name => 'Handler_savepoint_rollback', label => 'Savepoint Rollback'},
-    ],
-  };
-
-#---------------------------------------------------------------------
-
-$graphs{handler_write} = {
-    config => {
-  global_attrs => {
-      title  => 'Write/Update Handler',
-  },
-  data_source_attrs => {
-      draw => 'LINE2',
-      type => 'DERIVE',
-  },
-    },
-    data_sources => [
-  {name => 'Handler_write',  label => 'Writes'},
-  {name => 'Handler_update', label => 'Updates'},
-    ],
-  };
-
-#---------------------------------------------------------------------
-
-$graphs{handler_tmp} = {
-    config => {
-  global_attrs => {
-      title  => 'Temporary Write/Update Handler',
-  },
-  data_source_attrs => {
-      draw => 'LINE2',
-      type => 'DERIVE',
-  },
-    },
-    data_sources => [
-  {name => 'Handler_tmp_write',  label => 'Writes'},
-  {name => 'Handler_tmp_update', label => 'Updates'},
-    ],
-  };
-
-#---------------------------------------------------------------------
-
-$graphs{execution} = {
-    config => {
-  global_attrs => {
-      title  => 'Execution Events',
-  },
-  data_source_attrs => {
-      draw => 'LINE2',
-      type => 'DERIVE',
-  },
-    },
-    data_sources => [
-  {name => 'Executed_events',   label => 'Events'},
-  {name => 'Executed_triggers', label => 'Triggers'},
-    ],
-  };
-
-#---------------------------------------------------------------------
-
-$graphs{icp} = {
-    config => {
-       global_attrs => {
-           title  => 'Index Condition Pushdown',
-       },
-       data_source_attrs => {
-           draw  => 'LINE2',
-           type => 'DERIVE',
-       },
-    },
-    data_sources => [
-       {name => 'Handler_icp_attempts', label => 'Attempts'},
-       {name => 'Handler_icp_match',    label => 'Matches'},
-    ],
-};
-
-#---------------------------------------------------------------------
-
-$graphs{mrr} = {
-    config => {
-       global_attrs => {
-           title  => 'Multi Range Read optimizations',
-       },
-       data_source_attrs => {
-           draw  => 'LINE2',
-           type => 'DERIVE',
-       },
-    },
-    data_sources => [
-       {name => 'Handler_mrr_init', label => 'Uses'},
-       {name => 'Handler_mrr_key_refills',  label => 'Key refills'},
-       {name => 'Handler_mrr_rowid_refills',  label => 'Row refills'},
-    ],
-};
-
-#---------------------------------------------------------------------
-#  Plugin Graphs
-#  These are mysql plugins of type INFORMATION SCHEMA
-#
-#  These will be added to $graphs if available
-#---------------------------------------------------------------------
-
-my %graph_plugins = ();
-
-$graph_plugins{query_response_time} = {
-    count => {
-        config => {
-            global_attrs => {
-                title  => 'Query Response Time Count',
-                vlabel  => 'queries per ${graph_period}',
-            },
-            data_source_attrs => {
-                draw  => 'LINE2',
-                type => 'DERIVE',
-            },
-        },
-        # data_sources are populated by sub plugin_query_response_time
-        data_sources => [
-        ],
-   },
-   total => {
-        config => {
-            global_attrs => {
-                title  => 'Query Response Time Total',
-                vlabel  => 'query time (microseconds) per ${graph_period}',
-            },
-            data_source_attrs => {
-                draw  => 'LINE2',
-                type => 'DERIVE',
-            },
-        },
-        # data_sources are populated by sub plugin_query_response_time
-        data_sources => [
-        ],
-   }
-};
-
-$graph_plugins{user_statistics} = {
-    connections => {
-        config => {
-            global_attrs => {
-                title  => 'User Connections',
-                vlabel  => 'connections per ${graph_period}',
-            },
-            data_source_attrs => {
-                draw  => 'LINE2',
-                type => 'DERIVE',
-            },
-        },
-        cols => { 'total_connections' => {}, 'concurrent_connections' => {}, 'denied_connections' => {}, 'lost_connections'  => {}},
-        data_sources => [
-        ],
-   },
-   usertime => {
-        config => {
-            global_attrs => {
-                title  => 'User Time',
-                vlabel  => 'seconds',
-            },
-            data_source_attrs => {
-                draw  => 'LINE2',
-                type => 'DERIVE',
-            },
-        },
-        cols => { 'connected_time' => {}, 'busy_time' => {}, 'cpu_time' => {} },
-        data_sources => [
-        ],
-   },
-   bytes => {
-        config => {
-            global_attrs => {
-                title  => 'User Bytes',
-                vlabel  => 'bytes',
-            },
-            data_source_attrs => {
-                draw  => 'LINE2',
-                type => 'DERIVE',
-            },
-        },
-        cols => { 'bytes_received' => {}, 'bytes_sent' => {}, 'binlog_bytes_written' => {} },
-        data_sources => [
-        ],
-   },
-   rows => {
-        config => {
-            global_attrs => {
-                title  => 'User Rows',
-                vlabel  => 'rows',
-            },
-            data_source_attrs => {
-                draw  => 'LINE2',
-                type => 'DERIVE',
-            },
-        },
-        cols => { 'rows_read' => {}, 'rows_sent' => {}, 'rows_deleted' => {}, 'rows_inserted' => {}, 'rows_updated' => {} },
-        data_sources => [
-        ],
-   },
-   commands => {
-        config => {
-            global_attrs => {
-                title  => 'Command breakdown by user',
-                vlabel  => 'commands',
-            },
-            data_source_attrs => {
-                draw  => 'LINE2',
-                type => 'DERIVE',
-            },
-        },
-        cols => { 'select_commands' => {}, 'update_commands' => {}, 'other_commands' => {}, 'commit_transactions' => {}, 'rollback_transactions' => {} },
-        data_sources => [
-        ],
-   }
-
-};
-#---------------------------------------------------------------------
-#  M A I N
-#---------------------------------------------------------------------
-
-
-#
-# Global hash holding the data collected from mysql.
-#
-our $data; # Was 'my'. Changed to 'our' to facilitate testing.
-
-
-sub main {
-    my $graph = basename($0);
-    $graph =~ s/^mysql[0-9]*_//g; # allow multiple instances
-    my $command = $ARGV[0] || 'show';
-
-    my %command_map = (
-       'autoconf' => \&autoconf,
-       'config'   => \&config,
-       'show'     => \&show,
-       'suggest'  => \&suggest,
-    );
-
-    die "Unknown command: $command"
-       unless exists $command_map{$command};
-
-    die "Missing dependency Cache::Cache"
-       unless $has_cache || $command eq 'autoconf';
-
-    return $command_map{$command}->($graph);
-}
-
-
-#---------------------------------------------------------------------
-#  C O M M A N D   H A N D L E R S
-#---------------------------------------------------------------------
-
-# Each command handler should return an appropriate exit code
-
-
-# http://munin-monitoring.org/wiki/ConcisePlugins#autoconf
-sub autoconf {
-    unless ($has_cache) {
-       print "no (Missing dependency Cache::Cache)\n";
-       return 0;
-    }
-
-    eval {
-       db_connect();
-    };
-    if ($@) {
-       my $err = $@;
-       $err =~ s{\s at \s \S+ \s line .*}{}xms;
-       print "no ($err)\n";
-       return 0;
-    }
-    print "yes\n";
-    return 0;
-}
-
-
-# http://munin-monitoring.org/wiki/ConcisePlugins#suggest
-sub suggest {
-
-    # What is the best way to decide which graphs is applicable to a
-    # given system?
-    # Answer:
-    # Use lack of variables to indicate that the capability doesn't exist
-    # Use variable values to indicate some graph isn't currently used.
-    # update_data() now does this.
-
-    update_data();
-
-
-    foreach my $graph (sort keys(%graphs)) {
-        next if $graph =~ /innodb_/ && $data->{_innodb_disabled};
-        next if $graph =~ /wsrep_/ && $data->{_galera_disabled};
-        print "$graph\n";
-    }
-
-    return 0;
-}
-
-
-sub config {
-    my $graph_name = shift;
-
-    # In MySQL 5.1 (and probably erlier versions as well) status
-    # variables are unique when looking at the last 19 characters.
-    #
-    #   SELECT RIGHT(variable_name, 19), COUNT(*)
-    #     FROM information_schema.global_status
-    #    GROUP BY RIGHT(variable_name, 19)
-    #   HAVING COUNT(*) > 1;
-    #
-    #   Empty set (0.06 sec)
-    #
-    # There is one duplicate when looking at server variables
-    #
-    #   SELECT RIGHT(variable_name, 19), COUNT(*)
-    #     FROM information_schema.global_variables
-    #    GROUP BY RIGHT(variable_name, 19)
-    #   HAVING COUNT(*) > 1;
-    #
-    #   +--------------------------+----------+
-    #   | RIGHT(variable_name, 19) | COUNT(*) |
-    #   +--------------------------+----------+
-    #   | OW_PRIORITY_UPDATES      |        2 |
-    #   +--------------------------+----------+
-    #   1 row in set (0.05 sec)
-    #
-    #   show global variables like '%OW_PRIORITY_UPDATES';
-    #
-    #   +--------------------------+-------+
-    #   | Variable_name            | Value |
-    #   +--------------------------+-------+
-    #   | low_priority_updates     | OFF   |
-    #   | sql_low_priority_updates | OFF   |
-    #   +--------------------------+-------+
-    #   2 rows in set (0.00 sec)
-    #
-    # Not a problem since we don't graph these
-
-    update_data();
-
-    die 'Unknown graph ' . ($graph_name ? $graph_name : '')
-       unless $graphs{$graph_name};
-
-    my $graph = $graphs{$graph_name};
-
-    my %conf = (%{$defaults{global_attrs}}, %{$graph->{config}{global_attrs}});
-    while (my ($k, $v) = each %conf) {
-       print "graph_$k $v\n";
-    }
-    if ($graph_name =~ /wsrep_/) {
-      print "graph_category galera\n";
-    } else {
-      print "graph_category mysql\n";
-    }
-
-    my $i = 0;
-    for my $ds (@{$graph->{data_sources}}) {
-       my %ds_spec = (
-           %{$defaults{data_source_attrs}},
-           %{$graph->{config}{data_source_attrs}},
-           %$ds,
-       );
-       while (my ($k, $v) = each %ds_spec) {
-           # 'name' is only used internally in this script, not
-           # understood by munin.
-           next if ($k eq 'name');
-
-           # AREASTACK is part of munin as of version 1.3.3 (not
-           # released yet). Until then ...
-           if ($k eq 'draw' && $v eq 'AREASTACK') {
-               printf("%s.%s %s\n",
-                      clean_fieldname($ds->{name}), $k, ($i ? 'STACK' : 'AREA'));
-           }
-           else {
-               printf("%s.%s %s\n", clean_fieldname($ds->{name}), $k, $v);
-           }
-           $i++;
-       }
-       print_thresholds(clean_fieldname($ds->{name}));
-    }
-
-    return 0;
-}
-
-sub show {
-    my $graph_name = shift;
-
-    update_data();
-
-    die 'Unknown graph ' . ($graph_name ? $graph_name : '')
-       unless $graphs{$graph_name};
-
-    my $graph = $graphs{$graph_name};
-
-    die "Can't show data for '$graph_name' because InnoDB is disabled."
-       if $graph_name =~ /innodb_/ && $data->{_innodb_disabled};
-
-    die "Can't show data for '$graph_name' because not a Galera mysql version."
-       if $graph_name =~ /wsrep_/ && $data->{_galera_disabled};
-
-    for my $ds (@{$graph->{data_sources}}) {
-       printf "%s.value %s\n",
-           clean_fieldname($ds->{name}),
-           defined $data->{$ds->{name}} ? $data->{$ds->{name}} : 'U';
-    }
-
-    return 0;
-}
-
-
-
-#---------------------------------------------------------------------
-#  U T I L I T Y   S U B S
-#---------------------------------------------------------------------
-
-
-sub db_connect {
-    my $dsn = "$config{dsn};mysql_connect_timeout=5";
-
-    return DBI->connect($dsn, $config{user}, $config{password}, {
-       RaiseError       => 1,
-       PrintError       => 0,
-       FetchHashKeyName => 'NAME_lc',
-    });
-}
-
-
-sub update_data {
-    $data = $shared_memory_cache->get('data');
-    my $graphs_stored = $shared_memory_cache->get('graphs');
-    %graphs = %{thaw($graphs_stored)} if $graphs_stored;
-    return if $data;
-
-    $data = {};
-
-    my $dbh = db_connect();
-
-    update_variables($dbh);
-    update_plugins($dbh);
-    update_innodb($dbh);
-    update_master($dbh);
-    delete $graphs{replication} if update_slave($dbh)==1;
-
-    delete $graphs{bin_relay_log} if not defined $data->{relay_log_space}
-        && not defined $data->{ma_binlog_size};
-
-    delete $graphs{execution} if not defined $data->{Executed_events}
-        && not defined $data->{Executed_triggers};
-
-    delete $graphs{icp} if not defined $data->{Handler_icp_attempts}
-        && not defined $data->{Handler_icp_matches};
-
-    delete $graphs{innodb_adaptive_hash}
-        if not defined $data->{Innodb_adaptive_hash_hash_searches}
-        && not defined $data->{Innodb_adaptive_hash_non_hash_searches};
-
-    delete $graphs{innodb_bpool_internal_breakdown}
-        if not defined $data->{ib_bpool_internal_adaptive_hash_size_const};
-
-    delete $graphs{innodb_descriptors}
-        if not defined $data->{ib_innodb_descriptors};
-
-    delete $graphs{mrr} if not defined $data->{Handler_mrr_init};
-
-    delete $graphs{rows} if not defined $data->{Rows_sent};
-
-    delete $graphs{handler_temp} if not defined $data->{Handler_tmp_write};
-
-    $shared_memory_cache->set('data', $data);
-    $shared_memory_cache->set('graphs', nfreeze(\%graphs));
-}
-
-
-sub update_plugins {
-    my ($dbh) = @_;
-
-    my %plugin_map = (
-       'query_response_time'         => \&plugin_query_response_time,
-    );
-
-    sub add_graphs {
-      my ($f, $sec, $dbh, %g) = @_;
-      if ($f->($dbh) == 0) {
-        while (my ($k, $v) = each %g) {
-          $graphs{$sec . '_' . $k} = $v;
-        }
-      }
-    }
-
-    my $sth = $dbh->prepare("SHOW PLUGINS");
-    $sth->execute();
-    while (my $row = $sth->fetchrow_hashref()) {
-        next if $row->{'type'} ne 'INFORMATION SCHEMA';
-        my $sec = lc $row->{'name'};
-        next if not exists $plugin_map{$sec};
-        add_graphs($plugin_map{$sec}, $sec, $dbh, %{$graph_plugins{$sec}});
-    }
-    $sth->finish();
-
-    my %is_map = (
-       'user_statistics'         => \&is_user_statistics,
-    );
-
-    $sth = $dbh->prepare("SHOW TABLES IN INFORMATION_SCHEMA");
-    $sth->execute();
-    while (my $row = $sth->fetchrow_hashref()) {
-        my $sec = lc $row->{'tables_in_information_schema'};
-        next if not exists $is_map{$sec};
-        add_graphs($is_map{$sec}, $sec, $dbh, %{$graph_plugins{$sec}});
-    }
-    $sth->finish();
-}
-
-sub update_variables {
-    my ($dbh) = @_;
-    my @queries = (
-       'SHOW GLOBAL STATUS',
-       'SHOW GLOBAL VARIABLES',
-    );
-
-    my %variable_name_map = (
-       table_cache => 'table_open_cache', # table_open_cache was
-                                          # previously known as
-                                          # table_cache in MySQL
-                                          # 5.1.2 and earlier.
-    );
-    my %wsrep_cluster_status_map = (
-        'Primary' =>  0,
-        'non-Primary' => 1,
-    );
-
-    for my $query (@queries) {
-       $data->{$query} = {};
-
-       my $sth = $dbh->prepare($query);
-       $sth->execute();
-       while (my $row = $sth->fetch) {
-           my $var = $variable_name_map{$row->[0]} || $row->[0];
-           $data->{$var} = $row->[1];
-       }
-       $sth->finish();
-    }
-
-    $data->{'mysql_base_memory'} = $data->{'key_buffer_size'} 
-                                         + $data->{'query_cache_size'}
-                                         + $data->{'innodb_buffer_pool_size'}
-                                         + ( $data->{'innodb_additional_mem_pool_size'} || 0 )
-                                         + $data->{'innodb_log_buffer_size'}
-                                         + ( $data->{'tokudb_cache_size'} || 0 );
-
-    my $tmp_table_size = $data->{'tmp_table_size'};
-    my $max_heap_table_size = $data->{'max_heap_table_size'};
-    $data->{'mysql_connection_memory'} = $data->{'read_buffer_size'}
-                                   + $data->{'read_rnd_buffer_size'}
-                                   + $data->{'sort_buffer_size'}
-                                   + $data->{'join_buffer_size'}
-                                   + $data->{'binlog_cache_size'}
-                                   + $data->{'thread_stack'}
-                                   + ( $tmp_table_size >= $max_heap_table_size ? $tmp_table_size : $max_heap_table_size )
-                                   + ( $data->{'tokudb_read_buf_size'} || 0 );
-
-   # wsrep_thread_count was separated from max_connections for mariadb-5.5.38 https://mariadb.atlassian.net/browse/MDEV-6206
-   $data->{'mysql_connection_memory'} *= $data->{'max_connections'} + ( $data->{'wsrep_thread_count'} || 0 );
-
-    if ($data->{wsrep_cluster_status}) {
-      my $var = $wsrep_cluster_status_map{$data->{wsrep_cluster_status}};
-      $data->{wsrep_cluster_status} = $var;
-    }
-    $data->{_galera_disabled} = 1 unless ($data->{wsrep_provider_name});
-}
-
-
-sub update_innodb {
-    my ($dbh) = @_;
-
-    my $sth = $dbh->prepare('SHOW /*!50000 ENGINE*/ INNODB STATUS');
-    eval {
-       $sth->execute();
-    };
-    if ($@) {
-       if ($@ =~ /Unknown (storage|table) engine 'INNODB'|Cannot call SHOW INNODB STATUS because skip-innodb is defined/i) {
-           $data->{_innodb_disabled} = 1;
-           return;
-       }
-       die $@;
-    }
-    my $row = $sth->fetchrow_hashref();
-    my $status = $row->{'status'};
-    $sth->finish();
-
-    parse_innodb_status($status);
-}
-
-
-sub update_master {
-    my ($dbh) = @_;
-
-    my $sth = $dbh->prepare('SHOW MASTER LOGS');
-    eval {
-       $sth->execute();
-    };
-    if ($@) {
-       # SHOW MASTER LOGS failed because binlog is not enabled
-       return if $@ =~ /You are not using binary logging/;
-       die $@;
-    }
-
-    while (my $row = $sth->fetch) {
-       $data->{ma_binlog_size} += $row->[1];
-    }
-
-    $sth->finish();
-}
-
-
-sub update_slave {
-    my ($dbh) = @_;
-
-    my $sth = $dbh->prepare('SHOW SLAVE STATUS');
-    $sth->execute();
-    my $row = $sth->fetchrow_hashref();
-    return 1 unless $row;
-    while (my ($k, $v) = each %$row) {
-       $data->{$k} = $v;
-    }
-    $sth->finish();
-
-    # We choose master_host here as a stopped slave
-    # may not indicate that we have reset all slave capability
-    # however the minimium requirement is a master_host
-    return 1 if not defined $data->{master_host};
-
-    # undef when slave is stopped, or when MySQL fails to calculate
-    # the lag (which happens depresingly often). (mk-heartbeat fixes
-    # this problem.)
-    $data->{seconds_behind_master} ||= 0;
-
-    # Track these two fields so we can trigger warnings if the slave stops
-    # running
-    $data->{slave_sql_running} = ($data->{slave_sql_running} eq 'Yes')
-           ? 0 : 1;
-    $data->{slave_io_running} = ($data->{slave_io_running} eq 'Yes')
-           ? 0 : 1;
-    return 0;
-}
-
-
-#---------------------------------------------------------------------
-#  Information SCHEMA tables represent data to be processed
-#---------------------------------------------------------------------
-
-
-sub plugin_query_response_time {
-    my ($dbh) = @_;
-
-    return 1 if not defined $data->{query_response_time_stats};
-    return 1 if $data->{query_response_time_stats} eq 'OFF';
-
-    my $sth = $dbh->prepare("SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME");
-    $sth->execute();
-    while (my $row = $sth->fetchrow_hashref()) {
-        my $time = $row->{'time'};
-        $data->{'query_response_time_count_' . $time} = $row->{'count'};
-        push @{$graph_plugins{query_response_time}->{count}->{data_sources}}, {name => 'query_response_time_count_' . $time, label => $time };
-        next if $row->{'total'} eq 'TOO LONG';
-        $data->{'query_response_time_total_' . $time} = $row->{'total'} * 1e6;
-        push @{$graph_plugins{query_response_time}->{total}->{data_sources}}, {name => 'query_response_time_total_' . $time, label => $time };
-    }
-    $sth->finish();
-
-    return 0;
-}
-
-sub is_user_statistics {
-    my ($dbh) = @_;
-
-    return 1 if not defined $data->{userstat};
-    return 1 if $data->{userstat} eq 'OFF';
-
-    my $sth = $dbh->prepare("SELECT * FROM INFORMATION_SCHEMA.USER_STATISTICS");
-    $sth->execute();
-    while (my $row = $sth->fetchrow_hashref()) {
-        my $user = $row->{'user'};
-        my $var;
-        while (my ($g, $v) = each %{$graph_plugins{user_statistics}}) {
-          while (my ($userstat,$conf) = each %{$v->{cols}}) {
-            $var = 'user_stats_' . $user . '_' . $userstat;
-            $data->{$var} = int $row->{$userstat};
-            my $ds = { %$conf };
-            $ds->{name} = $var;
-            $ds->{label} = $user . ' ' . $userstat;
-            push @{$graph_plugins{user_statistics}->{$g}->{data_sources}}, $ds;
-          }
-        }
-    }
-    $sth->finish();
-    return 0;
-}
-
-#
-# In 'SHOW ENGINE INNODB STATUS' 64 bit integers are not formated as
-# plain integers. They are either:
-#
-#   - split in two and needs to be shifted together,
-#   - or hexadecimal
-#
-sub innodb_bigint {
-    my ($x, $y) = @_;
-
-    return defined $y
-       ? Math::BigInt->new($x)->blsft(32) + $y
-       : Math::BigInt->new("0x$x");
-}
-
-#---------------------------------------------------------------------
-#  P A R S E   'SHOW ENGINE INNODB STATUS'   O U T P U T
-#---------------------------------------------------------------------
-
-
-# A nice walk through
-# http://www.mysqlperformanceblog.com/2006/07/17/show-innodb-status-walk-through/
-
-# The parsing is split in one subrutine per section. Each subroutine
-# should parse a block with the following structure
-#
-# block body ...
-# more lines ....
-# ----------
-
-sub parse_innodb_status {
-    local $_ = shift;
-
-    # Add a dummy section to the end in case the innodb status output
-    # has been truncated (Happens for status > 64K characters)
-    $_ .= "\n----------\nDUMMY\n----------\n";
-
-    my %section_map = (
-
-       'BUFFER POOL AND MEMORY'      => \&parse_buffer_pool_and_memory,
-       'INDIVIDUAL BUFFER POOL INFO' => \&parse_individual_buffer_pool,
-       'FILE I/O'                    => \&parse_file_io,
-       'INSERT BUFFER AND ADAPTIVE HASH INDEX'
-           => \&parse_insert_buffer_and_adaptive_hash_index,
-       'LATEST DETECTED DEADLOCK'    => \&skip,
-       'LATEST FOREIGN KEY ERROR'    => \&skip,
-       'LOG'                         => \&parse_log,
-       'ROW OPERATIONS'              => \&parse_row_operations,
-       'SEMAPHORES'                  => \&parse_semaphores,
-       'TRANSACTIONS'                => \&parse_transactions,
-       'BACKGROUND THREAD'           => \&parse_background_thread,
-    );
-
-    skip_heading();
-    parse_header_seconds();
-    for (;;) {
-       m/\G(.*)\n/gc;
-       my $sec = $1;
-
-       last if $sec eq 'END OF INNODB MONITOR OUTPUT';
-       if ($sec eq 'DUMMY') {
-           handle_incomplete_innodb_status();
-           last;
-       }
-
-       if (exists $section_map{$sec}) {
-      $section_map{$sec}->();
-       } else {
-      #warn "Unknown section: $1";
-      skip();
-       }
-    }
-}
-
-
-# This regular expression handles the different formating of 64-bit
-# integers in different versions of the innodb engine. Either two
-# decimal 32-bit integers separated by a space, or a single
-# hexadecimal 64-bit integer.
-my $innodb_bigint_rx = qr{([[a-fA-F\d]+)(?: (\d+))?};
-
-
-sub match_new_section {
-   return m/\G
-            -+\n                 # ---------------------------
-            (?= [A-Z\/ ]+\n      # SECTION NAME
-                [=-]+\n)/gcx;    # --------------------------- ('=' on end of output)
-}
-
-
-sub skip_line    { return m/\G.*\n/gc; }
-
-
-sub skip_heading {
-    # Heading is 3 lines
-    for my $foo (1...3) {
-       skip_line or die('Parse error');
-    }
-}
-
-
-sub parse_section {
-    my ($parser) = @_;
-
-    #warn substr($_, pos(), 10);
-    for (;;) {
-       return if match_new_section;
-       next if $parser->();
-       skip_line();
-    }
-}
-
-
-sub skip { parse_section(sub {}); }
-
-
-sub parse_header_seconds {
-    parse_section(
-       sub {
-           m/\GPer second averages calculated from the last (\d+) seconds\n/gc && do {
-               $data->{innodb_engine_status_seconds}  = $1;
-               return 1;
-           };
-       }
-    );
-}
-
-
-sub parse_background_thread {
-    parse_section(
-       sub {
-           m/\Gsrv_master_thread loops: \d+ 1_second, \d+ sleeps, \d+ 10_second, (\d+) background, (\d+) flush\n/gc && do {
-               $data->{ib_srv_main_flush_loops} = $1;
-               $data->{ib_srv_main_background_loops} = $2;
-               return 1;
-           };
-           m/\Gsrv_master_thread log flush and writes: (\d+)\n/gc && do {
-               $data->{ib_srv_main_flushs_writes}  = $1;
-               return 1;
-           };
-       }
-    );
-}
-
-sub parse_row_operations {
-    parse_section(
-        sub {
-            m/\G(\d+) queries inside InnoDB, (\d+) queries in queue\n/gc && do {
-                $data->{ib_innodb_queries}  = $1;
-                $data->{ib_innodb_query_queue_len} = $2;
-                return 1;
-            };
-            m/\G(\d+) read views open inside InnoDB\n/gc && do {
-                $data->{ib_innodb_read_views}  = $1;
-                return 1;
-            };
-            m/\G(\d+) transactions active inside InnoDB\n/gc && do {
-                $data->{ib_innodb_transactions_active}  = $1;
-                return 1;
-            };
-            m/\G(\d+) out of (\d+) descriptors used\n/gc && do {
-                $data->{ib_innodb_descriptors}  = $1;
-                $data->{ib_innodb_descriptors_max} = $2;
-                return 1;
-            };
-            # no need for this - its exposed as status variables
-            # m/\GNumber of rows inserted (\d+), updated (\d+), deleted (\d+), read (\d+)\n/gc && do {
-            #     $data->{ib_innodb_rows_inserted} = $1;
-            #     $data->{ib_innodb_rows_updated}  = $2;
-            #     $data->{ib_innodb_rows_deleted}  = $3;
-            #     $data->{ib_innodb_rows_read}     = $4;
-            #     return 1;
-            # };
-        }
-   );
-}
-
-sub parse_semaphores {
-    parse_section(
-       sub {
-           m/\GMutex spin waits (\d+), rounds (\d+), OS waits (\d+)\n/gc && do {
-               $data->{ib_spin_waits}  = $1;
-               $data->{ib_spin_rounds} = $2;
-               $data->{ib_os_waits}    = $3;
-               return 1;
-           };
-           m/\GRW-shared spins (\d+), rounds (\d+), OS waits (\d+)\n/gc && do {
-               $data->{ib_rw_shared_waits}  = $1;
-               $data->{ib_rw_shared_rounds} = $2;
-               $data->{ib_rw_shared_os_waits}    = $3;
-               return 1;
-           };
-           m/\GRW-excl spins (\d+), rounds (\d+), OS waits (\d+)\n/gc && do {
-               $data->{ib_rw_excl_waits}  = $1;
-               $data->{ib_rw_excl_rounds} = $2;
-               $data->{ib_rw_excl_os_waits}    = $3;
-               return 1;
-           };
-       }
-    );
-}
-
-
-sub parse_transactions {
-    parse_section(
-       sub {
-           m/\GTrx id counter $innodb_bigint_rx\n/gc && do {
-               $data->{ib_tnx} = innodb_bigint($1, $2);
-               return 1;
-           };
-           m/\GPurge done for trx's n:o < $innodb_bigint_rx undo n:o < $innodb_bigint_rx\n/gc && do {
-               if (defined $3) {
-                   # old format
-                   $data->{ib_tnx_prg} = innodb_bigint($1, $2);
-                   # FIX add to data? innodb_bigint($3, $4);
-               }
-               else {
-                   # new format
-                   $data->{ib_tnx_prg} = innodb_bigint($1);
-                   # FIX add to data? innodb_bigint($2);
-               }
-               return 1;
-           };
-           m/\GHistory list length (\d+)\n/gc && do {
-               $data->{ib_tnx_hist} = $1;
-               return 1;
-           };
-       }
-    );
-
-}
-
-
-sub parse_file_io {
-    parse_section(
-       sub {
-           m/\GPending normal aio reads: (\d+)(?: \[(?:\d+, )*\d+\] )?, aio writes: (\d+)(?: \[(?:\d+, )*\d+\] )?,\n\s*ibuf aio reads: (\d+), log i\/o's: (\d+), sync i\/o's: (\d+)\n/gc && do {
-               $data->{ib_iop_aioread}  = $1;
-               $data->{ib_iop_aiowrite} = $2;
-               $data->{ib_iop_ibuf_aio} = $3;
-               $data->{ib_iop_log}      = $4;
-               $data->{ib_iop_sync}     = $5;
-               return 1;
-           };
-           m/\GPending flushes \(fsync\) log: (\d+); buffer pool: (\d+)\n/gc && do {
-               $data->{ib_iop_flush_log}   = $1;
-               $data->{ib_iop_flush_bpool} = $2;
-               return 1;
-           };
-           m/\G(\d+) OS file reads, (\d+) OS file writes, (\d+) OS fsyncs\n/gc && do {
-               $data->{ib_io_read}  = $1;
-               $data->{ib_io_write} = $2;
-               $data->{ib_io_fsync} = $3;
-               return 1;
-           };
-       }
-    );
-}
-
-
-sub parse_insert_buffer_and_adaptive_hash_index {
-    parse_section(
-       sub {
-      # MySQL < 5.5
-      m/\G(\d+) inserts, (\d+) merged recs, (\d+) merges\n/gc && do {
-        $data->{ib_ibuf_inserts}    = $1;
-        $data->{ib_ibuf_merged_rec} = $2;
-        $data->{ib_ibuf_merges}     = $3;
-        return 1;
-      };
-      # MySQL >= 5.5
-      m/\Gmerged operations:\n insert (\d+), delete mark (\d+), delete (\d+)\ndiscarded operations:\n insert (\d+), delete mark (\d+), delete (\d+)\n/gc && do {
-        $data->{ib_ibuf_inserts} = $1;
-        $data->{ib_ibuf_delete_mark} = $2;
-        $data->{ib_ibuf_delete} = $3;
-        $data->{ib_ibuf_discard_inserts} = $4;
-        $data->{ib_ibuf_discard_delete_mark} = $5;
-        $data->{ib_ibuf_discard_delete} = $6;
-        $data->{ib_ibuf_merged_rec} = $data->{ib_ibuf_inserts} +  $data->{ib_ibuf_discard_inserts};
-        return 1;
-      };
-
-      m/\GIbuf: size (\d+), free list len (\d+), seg size (\d+),(?: (\d+) merges)?\n/gc && do {
-    $data->{ib_ibuf_size}     = $1;
-    $data->{ib_ibuf_free_len} = $2;
-    $data->{ib_ibuf_seg_size} = $3;
-    $data->{ib_ibuf_merges}   = $4 if defined $4; # MySQL >= 5.5
-               return 1;
-           };
-       }
-    );
-}
-
-
-sub parse_log {
-    parse_section(
-       sub {
-           m/\GLog sequence number $innodb_bigint_rx\n/gc && do {
-               $data->{ib_log_written} = innodb_bigint($1, $2);
-               return 1;
-           };
-           m/\GLog flushed up to\s+$innodb_bigint_rx\n/gc && do {
-               $data->{ib_log_flush} = innodb_bigint($1, $2);
-               return 1;
-           };
-           m/\G(\d+) log i\/o's done.*\n/gc && do {
-               $data->{ib_io_log} = $1;
-               return 1;
-           };
-       }
-    );
-}
-
-
-sub parse_buffer_pool_and_memory {
-    parse_section(
-       sub {
-           m/\GBuffer pool size\s+(\d+)\n/gc && do {
-               $data->{ib_bpool_size} = $1;
-               return 1;
-           };
-      m/\GBuffer pool size, bytes\s+(\d+)\n/gc && do {
-    $data->{ib_bpool_size_bytes} = $1;
-               return 1;
-      };
-           m/\GFree buffers\s+(\d+)\n/gc && do {
-               $data->{ib_bpool_free} = $1;
-               return 1;
-           };
-           m/\GDatabase pages\s+(\d+)\n/gc && do {
-               $data->{ib_bpool_dbpages} = $1;
-               return 1;
-           };
-           m/\GModified db pages\s+(\d+)\n/gc && do {
-               $data->{ib_bpool_modpages} = $1;
-               return 1;
-           };
-           m/\GOld database pages\s+(\d+)\n/gc && do {
-               $data->{ib_bpool_oldpages} = $1;
-               return 1;
-           };
-      m/\GPages made young (\d+), not young (\d+)\n/gc && do {
-    $data->{ib_bpool_made_young}     = $1;
-    $data->{ib_bpool_made_not_young} = $2;
-               return 1;
-    };
-           m/\GPages read (\d+), created (\d+), written (\d+)\n/gc && do {
-               $data->{ib_bpool_read}    = $1;
-               $data->{ib_bpool_created} = $2;
-               $data->{ib_bpool_written} = $3;
-               return 1;
-           };
-      # mariadb-5.5
-      m/\GInternal hash tables \(constant factor \+ variable factor\)\n\s*Adaptive hash index\s*(\d+)\s*\((\d+) \+ (\d+)\) *\n\s+Page hash +(\d+) +\(buffer pool \d+ only\) *\n\s+Dictionary cache\s*(\d+)\s+\((\d+) \+ (\d+)\) *\n\s+File system\s+(\d+)\s+\((\d+) \+ (\d+)\) *\n\s+Lock system\s+(\d+)\s+\((\d+) \+ (\d+)\) *\n\s+Recovery system\s*(\d+)\s+\((\d+) \+ (\d+)\) *\n/gc  
-          && do {
-          $data->{ib_bpool_internal_adaptive_hash_size_total}  = $1;
-          $data->{ib_bpool_internal_adaptive_hash_size_const}  = $2;
-          $data->{ib_bpool_internal_adaptive_hash_size_var}    = $3;
-          $data->{ib_bpool_internal_page_hash_size_total}  = $4;
-          $data->{ib_bpool_internal_dictionary_cache_size_total}  = $5;
-          $data->{ib_bpool_internal_dictionary_cache_size_const}  = $6;
-          $data->{ib_bpool_internal_dictionary_cache_size_var}    = $7;
-          $data->{ib_bpool_internal_file_system_size_total}  = $8;
-          $data->{ib_bpool_internal_file_system_size_const}  = $9;
-          $data->{ib_bpool_internal_file_system_size_var}    = $10;
-          $data->{ib_bpool_internal_lock_system_size_total}  = $11;
-          $data->{ib_bpool_internal_lock_system_size_const}  = $12;
-          $data->{ib_bpool_internal_lock_system_size_var}    = $13;
-          $data->{ib_bpool_internal_recovery_system_size_total}  = $14;
-          $data->{ib_bpool_internal_recovery_system_size_const}  = $15;
-          $data->{ib_bpool_internal_recovery_system_size_var}    = $16;
-          return 1;
-      };
-
-       }
-    );
-}
-
-sub parse_individual_buffer_pool {
-    parse_section(
-  sub {
-    m/\G---BUFFER POOL (\d+)\n/gc && do {
-      my $pool = $1;
-      $data->{ib_bpool_individual_pool_count} = $pool + 1;
-      m/\GBuffer pool size\s+(\d+)\n/gc && do {
-        $data->{"ib_bpool_individual_pool_${pool}_size"} = $1;
-      };
-      m/\GBuffer pool size, bytes\s+(\d+)\n/gc && do {
-        $data->{"ib_bpool_individual_pool_${pool}_size_bytes"} = $1;
-      };
-      m/\GFree buffers\s+(\d+)\nDatabase pages\s+(\d+)\nOld database pages\s+(\d+)\nModified db pages\s+(\d+)\nPending reads\s+(\d+)\nPending writes: LRU\s+(\d+), flush list\s+(\d+), single page\s+(\d+)\n/gc && do {
-        $data->{"ib_bpool_individual_pool_${pool}_free"} = $1;
-        $data->{"ib_bpool_individual_pool_${pool}_dbpages"} = $2;
-        $data->{"ib_bpool_individual_pool_${pool}_oldpages"} = $3;
-        $data->{"ib_bpool_individual_pool_${pool}_modpages"} = $4;
-        $data->{"ib_bpool_individual_pool_${pool}_pending_reads"} = $5;
-        $data->{"ib_bpool_individual_pool_${pool}_pending_writes_lru"} = $6;
-        $data->{"ib_bpool_individual_pool_${pool}_pending_writes_flush"} = $7;
-        $data->{"ib_bpool_individual_pool_${pool}_pending_writes_single"} = $8;
-      };
-      skip_line();
-      m/\GPages read (\d+), created (\d+), written (\d+)\n/gc && do {
-        $data->{"ib_bpool_individual_pool_${pool}_read"}    = $1;
-        $data->{"ib_bpool_individual_pool_${pool}_created"} = $2;
-        $data->{"ib_bpool_individual_pool_${pool}_written"} = $3;
-      };
-      return 1;
-    };
-        }
-  );
-}
-
-sub handle_incomplete_innodb_status {
-
-    warn "Output from SHOW ENGINE INNODB STATUS was truncated. "
-       . "This happens if the output of STATUS exceeds 64KB. "
-       . "Several of the InnoDB graphs might be affected by this.";
-
-    # FIX Is it possible to find some of the missing values from SHOW
-    # STATUS?
-}
-
-
-exit main() unless caller;
-
-
-1;
diff --git a/cookbooks/munin/files/default/plugins/passenger_memory b/cookbooks/munin/files/default/plugins/passenger_memory
deleted file mode 100755 (executable)
index dd0f663..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-#!/usr/bin/env ruby
-# put in /etc/munin/plugins and restart munin-node
-# by Dan Manges, http://www.dcmanges.com/blog/rails-application-visualization-with-munin
-# NOTE: you might need to add munin to allow passwordless sudo for passenger-memory-stats
-
-require "English"
-
-def output_config
-  puts <<~CONFIG
-    graph_args --base 1024 -l 0 --vertical-label bytes --upper-limit 4056231936
-    graph_category passenger
-    graph_title Passenger memory
-
-    memory.label memory
-  CONFIG
-  exit 0
-end
-
-def output_values
-  status = `/usr/sbin/passenger-memory-stats | tail -1`
-  unless $CHILD_STATUS.success?
-    warn "failed executing passenger-memory-stats"
-    exit 1
-  end
-  status =~ /(\d+\.\d+)/
-  puts "memory.value #{(Regexp.last_match[1].to_f * 1024 * 1024).round}"
-end
-
-if ARGV[0] == "config"
-  output_config
-else
-  output_values
-end
diff --git a/cookbooks/munin/files/default/plugins/passenger_processes b/cookbooks/munin/files/default/plugins/passenger_processes
deleted file mode 100755 (executable)
index 863ff86..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-#!/usr/bin/env ruby
-
-require "English"
-require "rexml/document"
-
-def passenger_status
-  @passenger_status ||= REXML::Document.new(`/usr/sbin/passenger-status --show=xml`)
-end
-
-def output_config
-  puts <<~CONFIG
-    graph_args --lower-limit 0
-    graph_category passenger
-    graph_title Passenger processes
-    graph_order active inactive
-    graph_vlabel processes
-    graph_total total
-
-    active.label busy servers
-    active.draw AREA
-    inactive.label idle servers
-    inactive.draw STACK
-  CONFIG
-  exit 0
-end
-
-def output_values
-  active = 0
-  inactive = 0
-
-  passenger_status.get_elements("//process").each do |process|
-    if process.text("sessions").to_i.positive?
-      active += 1
-    else
-      inactive += 1
-    end
-  end
-
-  puts "active.value #{active}"
-  puts "inactive.value #{inactive}"
-end
-
-if ARGV[0] == "config"
-  output_config
-else
-  output_values
-end
diff --git a/cookbooks/munin/files/default/plugins/passenger_queues b/cookbooks/munin/files/default/plugins/passenger_queues
deleted file mode 100755 (executable)
index a546766..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-#!/usr/bin/env ruby
-
-require "English"
-require "rexml/document"
-
-def passenger_status
-  @passenger_status ||= REXML::Document.new(`/usr/sbin/passenger-status --show=xml`)
-end
-
-def output_config
-  puts <<~CONFIG
-    graph_args --lower-limit 0
-    graph_category passenger
-    graph_title Passenger queues
-    graph_vlabel count
-
-    global.label global
-    global.draw AREA
-  CONFIG
-
-  groups = passenger_status.get_elements("//supergroup").map do |supergroup|
-    supergroup.text("name")
-  end
-
-  groups.sort.each do |name|
-    puts "#{name}.label #{name}"
-    puts "#{name}.draw STACK"
-  end
-end
-
-def output_values
-  global = passenger_status.text("/item/get_wait_list").to_i
-
-  puts "global.value #{global}"
-
-  passenger_status.get_elements("//supergroup").each do |supergroup|
-    name = supergroup.text("name")
-    queue = supergroup.text("get_wait_list").to_i
-
-    puts "#{name}.value #{queue}"
-  end
-end
-
-if ARGV[0] == "config"
-  output_config
-else
-  output_values
-end
diff --git a/cookbooks/munin/files/default/plugins/passenger_requests b/cookbooks/munin/files/default/plugins/passenger_requests
deleted file mode 100755 (executable)
index 67dc343..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-#!/usr/bin/env ruby
-
-require "English"
-require "rexml/document"
-
-def passenger_status
-  @passenger_status ||= REXML::Document.new(`/usr/sbin/passenger-status --show=xml`)
-end
-
-def output_config
-  puts <<~CONFIG
-    graph_args --base 1000 --lower-limit 0
-    graph_category passenger
-    graph_title Passenger requests
-    graph_vlabel requests / ${graph_period}
-
-    total.label total
-    total.type DERIVE
-    total.max 1000000
-    total.min 0
-  CONFIG
-
-  groups = passenger_status.get_elements("//supergroup").map do |supergroup|
-    supergroup.text("name")
-  end
-
-  groups.sort.each do |name|
-    puts "#{name}.label #{name}"
-    puts "#{name}.type DERIVE"
-    puts "#{name}.max 1000000"
-    puts "#{name}.min 0"
-  end
-end
-
-def output_values
-  total_requests = 0
-
-  passenger_status.get_elements("//supergroup").map do |supergroup|
-    name = supergroup.text("name")
-    requests = 0
-
-    supergroup.get_elements("group/processes/process").each do |process|
-      requests += process.text("processed").to_i
-    end
-
-    total_requests += requests
-
-    puts "#{name}.value #{requests}"
-  end
-
-  puts "total.value #{total_requests}"
-end
-
-if ARGV[0] == "config"
-  output_config
-else
-  output_values
-end
diff --git a/cookbooks/munin/files/default/plugins/planet_age b/cookbooks/munin/files/default/plugins/planet_age
deleted file mode 100755 (executable)
index 220c7c5..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-#!/usr/bin/ruby
-
-files = [
-  {
-    :label => "planet",
-    :name => "/store/planet/planet/planet-latest.osm.bz2",
-    :title => "Planet Dump",
-    :frequency => 7 * 24 * 60 * 60,
-    :warning => 1.05,
-    :critical => 1.1
-  },
-  {
-    :label => "day",
-    :name => "/store/planet/replication/day/state.txt",
-    :title => "Daily Replication",
-    :frequency => 24 * 60 * 60,
-    :warning => 1.05,
-    :critical => 1.1
-  },
-  {
-    :label => "hour",
-    :name => "/store/planet/replication/hour/state.txt",
-    :title => "Hourly Replication",
-    :frequency => 60 * 60,
-    :warning => 1.05,
-    :critical => 1.1
-  },
-  {
-    :label => "minute",
-    :name => "/store/planet/replication/minute/state.txt",
-    :title => "Minutely Replication",
-    :frequency => 60,
-    :warning => 5,
-    :critical => 10
-  }
-]
-
-if ARGV[0] == "config"
-  puts "graph_title Planet Age"
-  puts "graph_args --base 1000 --lower-limit 0"
-  puts "graph_scale no"
-  puts "graph_vlabel fraction of expected max age"
-  puts "graph_category planet"
-
-  files.each do |file|
-    puts "#{file[:label]}.label #{file[:title]}"
-    puts "#{file[:label]}.type GAUGE"
-    puts "#{file[:label]}.warning 0:#{file[:warning]}"
-    puts "#{file[:label]}.critical 0:#{file[:critical]}"
-  end
-else
-
-  files.each do |file|
-    value = (Time.now - File.mtime(file[:name])) / file[:frequency]
-
-    puts "#{file[:label]}.value #{value}"
-  end
-end
diff --git a/cookbooks/munin/files/default/plugins/postgres_replication b/cookbooks/munin/files/default/plugins/postgres_replication
deleted file mode 100755 (executable)
index 56ee163..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-#!/usr/bin/perl
-
-use strict;
-use warnings;
-
-use Munin::Plugin::Pgsql;
-
-my $pg = Munin::Plugin::Pgsql->new(
-    title     => 'PostgreSQL replication delay',
-    info      => 'Replication delay',
-    vlabel    => 'Seconds',
-    basequery => "SELECT (extract(epoch FROM now()) - extract(epoch FROM pg_last_xact_replay_timestamp()))::int AS delay",
-    pivotquery => 1,
-    configquery => "VALUES ('delay','Replication delay')",
-    extraconfig => "delay.warning 300\ndelay.critical 3600",
-    graphmin  => 0
-);
-
-$pg->Process();
diff --git a/cookbooks/munin/files/default/plugins/replication_delay b/cookbooks/munin/files/default/plugins/replication_delay
deleted file mode 100755 (executable)
index 27dd108..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-#!/bin/sh
-#
-# Plugin to monitor the age of the imported data in the rendering db
-#
-# Parameters:
-#
-#       config   (required)
-#       autoconf (optional - used by munin-config)
-#
-
-if [ "$1" = "config" ]; then
-
-        echo 'graph_title Data import lag'
-        echo 'graph_args --base 1000 -l 0'
-        echo 'graph_vlabel minutes'
-        echo 'graph_category renderd'
-        echo 'age.label DB import age'
-        echo 'age.type GAUGE'
-        echo 'age.cdef age,60,/'
-        echo 'age.warning :600'
-        echo 'age.critical :3600'
-        exit 0
-fi
-
-tstamp=$(osmium fileinfo --extended --get=data.timestamp.last /var/lib/replicate/changes-latest.osc.gz)
-tstampsec=$(date --date=${tstamp} +%s)
-nowsec=$(date +%s)
-
-echo "age.value " `expr $nowsec - $tstampsec`
diff --git a/cookbooks/munin/files/default/plugins/rrdcached b/cookbooks/munin/files/default/plugins/rrdcached
deleted file mode 100644 (file)
index ff18a9a..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-#!/usr/bin/perl
-# -*- cperl -*-
-
-use strict;
-use warnings;
-
-use IO::Socket::UNIX;
-
-$| = 1;
-
-my $arg = shift;
-if ($arg && $arg eq "config") {
-       print "graph_title rrdcached stats\n";
-       print "QueueLength.label Queue length\n";
-       print "UpdatesReceived.label UpdatesReceived\n";
-       print "UpdatesReceived.type DERIVE\n";
-       print "FlushesReceived.label FlushesReceived\n";
-       print "FlushesReceived.type DERIVE\n";
-       print "UpdatesWritten.label UpdatesWritten\n";
-       print "UpdatesWritten.type DERIVE\n";
-       print "DataSetsWritten.label DataSetsWritten\n";
-       print "DataSetsWritten.type DERIVE\n";
-       print "TreeNodesNumber.label TreeNodesNumber\n";
-       print "TreeDepth.label TreeDepth\n";
-       print "JournalBytes.label JournalBytes\n";
-       print "JournalBytes.type DERIVE\n";
-       print "JournalRotate.label JournalRotate\n";
-       print "JournalRotate.type DERIVE\n";
-       exit 0;
-}
-
-my $sock = new IO::Socket::UNIX(
-       Type => SOCK_STREAM,
-       Peer => "/var/run/rrdcached.sock",
-) or die "Cannot open socket : $!";
-
-print $sock "STATS\n";
-print $sock "QUIT\n";
-
-# skip first line
-<$sock>;
-print map { s/: /.value /; $_; } <$sock>;
-
-exit 0;
diff --git a/cookbooks/munin/files/default/plugins/snmp__apcpdu_current b/cookbooks/munin/files/default/plugins/snmp__apcpdu_current
deleted file mode 100755 (executable)
index d2f8b26..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-#!/usr/bin/perl
-
-=head1 MAGIC MARKERS
-
-  #%# family=snmpauto
-  #%# capabilities=snmpconf
-
-=cut
-
-use strict;
-use warnings;
-use Munin::Plugin::SNMP;
-
-my $session = Munin::Plugin::SNMP->session;
-
-if (defined $ARGV[0] and $ARGV[0] eq "config") {
-    my $host = $session->hostname;
-    my $warning = $session->get_single(".1.3.6.1.4.1.318.1.1.26.6.1.1.6.1");
-    my $critical = $session->get_single(".1.3.6.1.4.1.318.1.1.26.6.1.1.7.1");
-
-    print "host_name $host\n" unless $host eq "localhost";
-    print "graph_title Load\n";
-    print "graph_args --base 1000 -l 0\n";
-    print "graph_vlabel Amps\n";
-    print "graph_category power\n";
-    print "graph_info This graph shows the total throughput the PDU.\n";
-
-    print "current.label Current\n";
-    print "current.type GAUGE\n";
-    print "current.info Current load in amps.\n";
-    print "current.draw LINE2\n";
-    print "current.warning ${warning}\n";
-    print "current.critical ${critical}\n";
-} else {
-    my $current = $session->get_single(".1.3.6.1.4.1.318.1.1.26.6.3.1.5.1");
-
-    $current = $current / 10 unless $current eq "U";
-
-    print "current.value ${current}\n";
-}
diff --git a/cookbooks/munin/files/default/plugins/snmp__apcpdu_humidity b/cookbooks/munin/files/default/plugins/snmp__apcpdu_humidity
deleted file mode 100755 (executable)
index 5900689..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-#!/usr/bin/perl
-
-=head1 MAGIC MARKERS
-
-  #%# family=snmpauto
-  #%# capabilities=snmpconf
-
-=cut
-
-use strict;
-use warnings;
-use Munin::Plugin::SNMP;
-
-my $session = Munin::Plugin::SNMP->session;
-
-if (defined $ARGV[0] and $ARGV[0] eq "config") {
-    my $host = $session->hostname;
-    my $warning = $session->get_single(".1.3.6.1.4.1.318.1.1.26.10.2.1.1.13.1");
-    my $critical = $session->get_single(".1.3.6.1.4.1.318.1.1.26.10.2.1.1.14.1");
-
-    print "host_name $host\n" unless $host eq "localhost";
-    print "graph_title Humidity\n";
-    print "graph_args -l 0\n";
-    print "graph_vlabel %\n";
-    print "graph_category sensors\n";
-    print "graph_info This graph shows the humidity from the PDUs environmental sensor.\n";
-
-    print "humidity.label Humidity\n";
-    print "humidity.type GAUGE\n";
-    print "humidity.info Relative humidity.\n";
-    print "humidity.draw LINE2\n";
-    print "humidity.warning ${warning}:\n";
-    print "humidity.critical ${critical}:\n";
-} else {
-    my $humidity = $session->get_single(".1.3.6.1.4.1.318.1.1.26.10.2.2.1.10.1");
-    
-    print "humidity.value ${humidity}\n";
-}
diff --git a/cookbooks/munin/files/default/plugins/snmp__apcpdu_power b/cookbooks/munin/files/default/plugins/snmp__apcpdu_power
deleted file mode 100755 (executable)
index cfb6a81..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-#!/usr/bin/perl
-
-=head1 MAGIC MARKERS
-
-  #%# family=snmpauto
-  #%# capabilities=snmpconf
-
-=cut
-
-use strict;
-use warnings;
-use Munin::Plugin::SNMP;
-
-my $session = Munin::Plugin::SNMP->session;
-
-if (defined $ARGV[0] and $ARGV[0] eq "config") {
-    my $host = $session->hostname;
-
-    print "host_name $host\n" unless $host eq "localhost";
-    print "graph_title Power\n";
-    print "graph_args --base 1000 -l 0\n";
-    print "graph_vlabel Watts\n";
-    print "graph_category power\n";
-    print "graph_info This graph shows the power being supplied by the PDU.\n";
-
-    print "power.label Power\n";
-    print "power.type GAUGE\n";
-    print "power.info Current power draw in watts.\n";
-    print "power.draw LINE2\n";
-} else {
-    my $power = $session->get_single(".1.3.6.1.4.1.318.1.1.26.6.3.1.7.1");
-
-    $power = $power * 10 unless $power eq "U";
-
-    print "power.value ${power}\n";
-}
diff --git a/cookbooks/munin/files/default/plugins/snmp__apcpdu_temperature b/cookbooks/munin/files/default/plugins/snmp__apcpdu_temperature
deleted file mode 100755 (executable)
index 309f473..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-#!/usr/bin/perl
-
-=head1 MAGIC MARKERS
-
-  #%# family=snmpauto
-  #%# capabilities=snmpconf
-
-=cut
-
-use strict;
-use warnings;
-use Munin::Plugin::SNMP;
-
-my $session = Munin::Plugin::SNMP->session;
-
-if (defined $ARGV[0] and $ARGV[0] eq "config") {
-    my $host = $session->hostname;
-    my $warning = $session->get_single(".1.3.6.1.4.1.318.1.1.26.10.2.1.1.11.1");
-    my $critical = $session->get_single(".1.3.6.1.4.1.318.1.1.26.10.2.1.1.10.1");
-
-    print "host_name $host\n" unless $host eq "localhost";
-    print "graph_title Temperature\n";
-    print "graph_args -l 0\n";
-    print "graph_vlabel Degrees Celsius\n";
-    print "graph_category sensors\n";
-    print "graph_info This graph shows the temperature from the PDUs environmental sensor.\n";
-
-    print "temperature.label Temperature\n";
-    print "temperature.type GAUGE\n";
-    print "temperature.info Temperature in degrees celsius.\n";
-    print "temperature.draw LINE2\n";
-    print "temperature.warning :${warning}\n";
-    print "temperature.critical :${critical}\n";
-} else {
-    my $temperature = $session->get_single(".1.3.6.1.4.1.318.1.1.26.10.2.2.1.8.1");
-
-    $temperature = $temperature / 10 unless $temperature eq "U";
-    
-    print "temperature.value ${temperature}\n";
-}
diff --git a/cookbooks/munin/files/default/plugins/snmp__apcpdu_voltage b/cookbooks/munin/files/default/plugins/snmp__apcpdu_voltage
deleted file mode 100755 (executable)
index 362d44c..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-#!/usr/bin/perl
-
-=head1 MAGIC MARKERS
-
-  #%# family=snmpauto
-  #%# capabilities=snmpconf
-
-=cut
-
-use strict;
-use warnings;
-use Munin::Plugin::SNMP;
-
-my $session = Munin::Plugin::SNMP->session;
-
-if (defined $ARGV[0] and $ARGV[0] eq "config") {
-    my $host = $session->hostname;
-
-    print "host_name $host\n" unless $host eq "localhost";
-    print "graph_title Voltage\n";
-    print "graph_args --base 1000 -l 0\n";
-    print "graph_vlabel Volts\n";
-    print "graph_category power\n";
-    print "graph_info This graph shows the voltage being supplied by the PDU.\n";
-
-    print "voltage.label Voltage\n";
-    print "voltage.type GAUGE\n";
-    print "voltage.info Current voltage.\n";
-    print "voltage.draw LINE2\n";
-} else {
-    my $voltage = $session->get_single(".1.3.6.1.4.1.318.1.1.26.6.3.1.6.1");
-
-    print "voltage.value ${voltage}\n";
-}
diff --git a/cookbooks/munin/files/default/www/favicon.ico b/cookbooks/munin/files/default/www/favicon.ico
deleted file mode 100644 (file)
index 975e1cb..0000000
Binary files a/cookbooks/munin/files/default/www/favicon.ico and /dev/null differ
diff --git a/cookbooks/munin/files/default/www/robots.txt b/cookbooks/munin/files/default/www/robots.txt
deleted file mode 100644 (file)
index 1f53798..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-User-agent: *
-Disallow: /
index 9b2c6f294776195a57813c1841cba5eb7567f178..1501c2c90d8532f0dd36da42cf35c2c893e0ddaf 100644 (file)
 # limitations under the License.
 #
 
-package "munin-node"
-
 service "munin-node" do
-  action [:enable, :start]
-  supports :status => true, :restart => true, :reload => true
+  action [:stop, :disable]
 end
 
-servers = search(:node, "recipes:munin\\:\\:server").map(&:ipaddresses).flatten
-
-firewall_rule "accept-munin" do
-  action :accept
-  context :incoming
-  protocol :tcp
-  source servers
-  dest_ports "munin"
-  source_ports "1024-65535"
-  not_if { servers.empty? }
+file "/etc/munin/munin-node.conf" do
+  action :delete
 end
 
-template "/etc/munin/munin-node.conf" do
-  source "munin-node.conf.erb"
-  owner "root"
-  group "root"
-  mode "644"
-  variables :servers => servers
-  notifies :restart, "service[munin-node]"
+package "munin-node" do
+  action :purge
 end
index dde0a55ddc816cab55bb047644995814927b095c..3a4e7ebdc350a58f82b07be00dc51367dca14b68 100644 (file)
 
 include_recipe "munin"
 
-remote_directory "/usr/local/share/munin/plugins" do
-  source "plugins"
-  owner "root"
-  group "root"
-  mode "755"
-  files_owner "root"
-  files_group "root"
-  files_mode "755"
-  purge true
-end
-
-remote_directory "/etc/munin/plugin-conf.d" do
-  source "plugin-conf.d"
-  owner "root"
-  group "munin"
-  mode "750"
-  files_owner "root"
-  files_group "root"
-  files_mode "644"
-  purge false
-  notifies :restart, "service[munin-node]"
-end
-
-if Dir.glob("/proc/acpi/thermal_zone/*/temperature").empty?
-  munin_plugin "acpi" do
-    action :delete
-  end
-else
-  munin_plugin "acpi"
-end
-
-# apcpdu_
-munin_plugin "cpu"
-
-if File.exist?("/sys/devices/system/cpu/cpu0/cpufreq/stats/time_in_state")
-  munin_plugin "cpuspeed"
-else
-  munin_plugin "cpuspeed" do
-    action :delete
-  end
-end
-
-munin_plugin_conf "df" do
-  template "df.erb"
-end
-
-munin_plugin "df"
-munin_plugin "df_inode"
-
-munin_plugin_conf "diskstats" do
-  template "diskstats.erb"
-end
-
-munin_plugin "diskstats"
-munin_plugin "entropy"
-munin_plugin "forks"
-
-if node[:kernel][:modules].include?("nf_conntrack")
-  package "conntrack"
-
-  munin_plugin "fw_conntrack"
-  munin_plugin "fw_forwarded_local"
-else
-  munin_plugin "fw_conntrack" do
-    action :delete
-  end
-
-  munin_plugin "fw_forwarded_local" do
-    action :delete
-  end
-end
-
-if File.read("/proc/sys/net/ipv4/ip_forward").chomp == "1"
-  munin_plugin "fw_packets"
-else
-  munin_plugin "fw_packets" do
-    action :delete
-  end
-end
-
-if File.exist?("/sbin/hpasmcli")
-  munin_plugin "hpasmcli2_temp" do
-    target "hpasmcli2_"
-  end
-
-  munin_plugin "hpasmcli2_fans" do
-    target "hpasmcli2_"
-  end
-else
-  munin_plugin "hpasmcli2_temp" do
-    action :delete
-  end
-
-  munin_plugin "hpasmcli2_fans" do
-    action :delete
-  end
-end
-
-node[:network][:interfaces].each do |ifname, ifattr|
-  if ifattr[:flags]&.include?("UP") && !ifattr[:flags].include?("LOOPBACK")
-    if node[:hardware] &&
-       node[:hardware][:network] &&
-       node[:hardware][:network][ifname][:device] =~ /^virtio/
-      munin_plugin_conf "if_#{ifname}" do
-        template "if.erb"
-        variables :ifname => ifname
-      end
-    else
-      munin_plugin_conf "if_#{ifname}" do
-        action :delete
-      end
-    end
-
-    munin_plugin "if_err_#{ifname}" do
-      target "if_err_"
-    end
-
-    munin_plugin "if_#{ifname}" do
-      target "if_"
-    end
-  else
-    munin_plugin "if_err_#{ifname}" do
-      action :delete
-    end
-
-    munin_plugin "if_#{ifname}" do
-      action :delete
-    end
-  end
-end
-
-munin_plugin "interrupts"
-munin_plugin "iostat"
-munin_plugin "iostat_ios"
-
-if Dir.glob("/dev/ipmi*").empty?
-  munin_plugin_conf "ipmi" do
-    action :delete
-  end
-
-  munin_plugin "ipmi_fans" do
-    action :delete
-  end
-
-  munin_plugin "ipmi_temp" do
-    action :delete
-  end
-
-  munin_plugin "ipmi_power" do
-    action :delete
-  end
-else
-  munin_plugin_conf "ipmi" do
-    template "ipmi.erb"
-  end
-
-  munin_plugin "ipmi_fans" do
-    target "ipmi_"
-  end
-
-  munin_plugin "ipmi_temp" do
-    target "ipmi_"
-  end
-
-  munin_plugin "ipmi_power" do
-    target "ipmi_"
-  end
-end
-
-munin_plugin "irqstats"
-munin_plugin "load"
-munin_plugin "memory"
-munin_plugin "netstat"
-
-munin_plugin "nfs_client" do
+directory "/etc/munin/plugins" do
   action :delete
+  recursive true
 end
 
-munin_plugin "nfs4_client" do
+directory "/usr/local/share/munin/plugins" do
   action :delete
+  recursive true
 end
 
-munin_plugin "nfsd" do
+directory "/etc/munin/plugin-conf.d" do
   action :delete
+  recursive true
 end
-
-munin_plugin "nfsd4" do
-  action :delete
-end
-
-munin_plugin "open_files"
-munin_plugin "open_inodes"
-
-munin_plugin "postfix_mailqueue" do
-  action :delete
-end
-
-munin_plugin "postfix_mailvolume" do
-  action :delete
-end
-
-munin_plugin "processes"
-munin_plugin "proc_pri"
-
-sensors_fan = false
-sensors_temp = false
-sensors_volt = false
-
-Dir.glob("/sys/class/hwmon/hwmon*").each do |hwmon|
-  hwmon = "#{hwmon}/device" unless File.exist?("#{hwmon}/name")
-
-  sensors_fan = true unless Dir.glob("#{hwmon}/fan*_input").empty?
-  sensors_temp = true unless Dir.glob("#{hwmon}/temp*_input").empty?
-  sensors_volt = true unless Dir.glob("#{hwmon}/in*_input").empty?
-end
-
-package "lm-sensors" if sensors_fan || sensors_temp || sensors_volt
-
-if sensors_fan
-  munin_plugin "sensors_fan" do
-    target "sensors_"
-  end
-else
-  munin_plugin "sensors_fan" do
-    action :delete
-  end
-end
-
-if sensors_temp
-  munin_plugin "sensors_temp" do
-    target "sensors_"
-  end
-else
-  munin_plugin "sensors_temp" do
-    action :delete
-  end
-end
-
-if sensors_volt
-  munin_plugin "sensors_volt" do
-    target "sensors_"
-    conf "sensors_volt.erb"
-  end
-else
-  munin_plugin "sensors_volt" do
-    action :delete
-  end
-end
-
-munin_plugin "swap"
-munin_plugin "tcp"
-munin_plugin "threads"
-munin_plugin "uptime"
-munin_plugin "users"
-munin_plugin "vmstat"
index bda824f4474530fc20cb90aa8ca7e3ca7ea2c519..fda514948f8536cdad9063c5525d4e47233e12fb 100644 (file)
 
 include_recipe "apache"
 
-package "munin"
-package "rrdcached"
-package "libcgi-fast-perl"
-
-template "/etc/default/rrdcached" do
-  source "rrdcached.erb"
-  owner "root"
-  group "root"
-  mode "644"
+file "/etc/default/rrdcached" do
+  action :delete
 end
 
 directory "/var/lib/munin/rrdcached" do
-  owner "munin"
-  group "munin"
-  mode "755"
+  action :delete
+  recursive true
 end
 
 service "rrdcached" do
-  action [:enable, :start]
-  subscribes :restart, "template[/etc/default/rrdcached]"
+  action [:stop, :disable]
 end
 
-munin_plugin "rrdcached"
-
-expiry_time = 14 * 86400
-
-clients = search(:node, "recipes:munin\\:\\:default").sort_by(&:name)
-frontends = search(:node, "recipes:web\\:\\:frontend").reject { |n| Time.now - Time.at(n[:ohai_time]) > expiry_time }.sort_by(&:name).map do |n|
-  { :name => n.name.split(".").first, :interface => n.interfaces(:role => :external).first[:interface].tr(".", "_") }
-end
-renderers = search(:node, "roles:tile").reject { |n| Time.now - Time.at(n[:ohai_time]) > expiry_time }.sort_by(&:name).map do |n|
-  { :name => n.name.split(".").first, :interface => n.interfaces(:role => :external).first[:interface].tr(".", "_") }
-end
-geocoders = search(:node, "roles:nominatim").reject { |n| Time.now - Time.at(n[:ohai_time]) > expiry_time }.sort_by(&:name).map do |n|
-  { :name => n.name.split(".").first, :interface => n.interfaces(:role => :external).first[:interface].tr(".", "_") }
+file "/etc/munin/munin.conf" do
+  action :delete
 end
 
-template "/etc/munin/munin.conf" do
-  source "munin.conf.erb"
-  owner "root"
-  group "root"
-  mode "644"
-  variables :expiry_time => expiry_time, :clients => clients,
-            :frontends => frontends, :geocoders => geocoders,
-            :renderers => renderers
+directory "/srv/munin.openstreetmap.org" do
+  action :delete
+  recursive true
 end
 
-apache_module "fcgid"
-apache_module "rewrite"
-apache_module "headers"
-
-remote_directory "/srv/munin.openstreetmap.org" do
-  source "www"
-  owner "root"
-  group "root"
-  mode "755"
-  files_owner "root"
-  files_group "root"
-  files_mode "644"
+ssl_certificate "munin.openstreetmap.org" do
+  action :delete
 end
 
-# directory to put dumped files in
-directory "/srv/munin.openstreetmap.org/dumps" do
-  owner "www-data"
-  group "www-data"
-  mode "755"
+apache_site "munin.openstreetmap.org" do
+  action :delete
 end
 
-ssl_certificate "munin.openstreetmap.org" do
-  domains ["munin.openstreetmap.org", "munin.osm.org"]
-  notifies :reload, "service[apache2]"
+file "/etc/cron.daily/munin-backup" do
+  action :delete
 end
 
-apache_site "munin.openstreetmap.org" do
-  template "apache.erb"
+package "munin" do
+  action :purge
 end
 
-template "/etc/cron.daily/munin-backup" do
-  source "backup.cron.erb"
-  owner "root"
-  group "root"
-  mode "755"
+package "rrdcached" do
+  action :purge
 end
 
-munin_plugin "munin_stats"
-munin_plugin "munin_update"
-munin_plugin "munin_rrdcached"
+package "libcgi-fast-perl" do
+  action :purge
+end
diff --git a/cookbooks/munin/resources/plugin.rb b/cookbooks/munin/resources/plugin.rb
deleted file mode 100644 (file)
index 10c1494..0000000
+++ /dev/null
@@ -1,87 +0,0 @@
-#
-# Cookbook:: munin
-# Provider:: munin_plugin
-#
-# Copyright:: 2013, OpenStreetMap Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     https://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-unified_mode true
-
-default_action :create
-
-property :plugin, :kind_of => String, :name_property => true
-property :target, :kind_of => String
-property :conf, :kind_of => String
-property :conf_cookbook, :kind_of => String
-property :conf_variables, :kind_of => Hash, :default => {}
-property :restart_munin, :kind_of => [TrueClass, FalseClass], :default => true
-
-action :create do
-  link_action = case target_path
-                when nil then :delete
-                else :create
-                end
-
-  link plugin_path do
-    action link_action
-    to target_path
-  end
-
-  if new_resource.conf
-    munin_plugin_conf new_resource.plugin do
-      cookbook new_resource.conf_cookbook
-      template new_resource.conf
-      variables new_resource.conf_variables
-      restart_munin false
-    end
-  end
-end
-
-action :delete do
-  link plugin_path do
-    action :delete
-  end
-
-  if new_resource.conf
-    munin_plugin_conf new_resource.plugin do
-      action :delete
-      restart_munin false
-    end
-  end
-end
-
-action_class do
-  def plugin_path
-    "/etc/munin/plugins/#{new_resource.plugin}"
-  end
-
-  def target_path
-    if ::File.exist?(target)
-      target
-    elsif ::File.exist?("/usr/local/share/munin/plugins/#{target}")
-      "/usr/local/share/munin/plugins/#{target}"
-    elsif ::File.exist?("/usr/share/munin/plugins/#{target}")
-      "/usr/share/munin/plugins/#{target}"
-    end
-  end
-
-  def target
-    new_resource.target || new_resource.plugin
-  end
-end
-
-def after_created
-  notifies :restart, "service[munin-node]" if restart_munin
-end
diff --git a/cookbooks/munin/resources/plugin_conf.rb b/cookbooks/munin/resources/plugin_conf.rb
deleted file mode 100644 (file)
index 8306b04..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-#
-# Cookbook:: munin
-# Resource:: munin_plugin_conf
-#
-# Copyright:: 2013, OpenStreetMap Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# https://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-unified_mode true
-
-default_action :create
-
-property :plugin_conf, :kind_of => String, :name_property => true
-property :cookbook, :kind_of => [String, nil]
-property :template, :kind_of => String, :required => [:create]
-property :variables, :kind_of => Hash, :default => {}
-property :restart_munin, :kind_of => [TrueClass, FalseClass], :default => true
-
-action :create do
-  declare_resource :template, config_file do
-    cookbook new_resource.cookbook
-    source new_resource.template
-    owner "root"
-    group "root"
-    mode "644"
-    variables new_resource.variables.merge(:name => new_resource.plugin_conf)
-  end
-end
-
-action :delete do
-  file config_file do
-    action :delete
-  end
-end
-
-action_class do
-  def config_file
-    "/etc/munin/plugin-conf.d/#{new_resource.plugin_conf}"
-  end
-end
-
-def after_created
-  notifies :restart, "service[munin-node]" if restart_munin
-end
diff --git a/cookbooks/munin/templates/default/apache.erb b/cookbooks/munin/templates/default/apache.erb
deleted file mode 100644 (file)
index ed922b3..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-# DO NOT EDIT - This file is being maintained by Chef
-
-<VirtualHost *:443>
-  ServerName munin.openstreetmap.org
-  ServerAlias munin.osm.org
-  ServerAdmin webmaster@openstreetmap.org
-
-  CustomLog /var/log/apache2/munin.openstreetmap.org-access.log combined
-  ErrorLog /var/log/apache2/munin.openstreetmap.org-error.log
-
-  SSLEngine on
-  SSLCertificateFile /etc/ssl/certs/munin.openstreetmap.org.pem
-  SSLCertificateKeyFile /etc/ssl/private/munin.openstreetmap.org.key
-
-  SetEnv RRDCACHED_ADDRESS /var/run/rrdcached.sock
-
-  DocumentRoot /srv/munin.openstreetmap.org
-  Alias /static/favicon.ico /srv/munin.openstreetmap.org/favicon.ico
-  Alias /static/ /etc/munin/static/
-  ScriptAlias /munin-cgi/ /usr/lib/munin/cgi/
-
-  # Remove Proxy request header to mitigate https://httpoxy.org/
-  RequestHeader unset Proxy early
-
-  RewriteEngine on
-  RewriteCond %{REQUEST_URI} !^/static/
-  RewriteCond %{REQUEST_URI} !^/dumps/
-  RewriteRule ^(/.*\.html)?$ /munin-cgi/munin-cgi-html/$1 [PT]
-</VirtualHost>
-
-<VirtualHost *:80>
-  ServerName munin.openstreetmap.org
-  ServerAlias munin.osm.org
-  ServerAdmin webmaster@openstreetmap.org
-
-  CustomLog /var/log/apache2/munin.openstreetmap.org-access.log combined
-  ErrorLog /var/log/apache2/munin.openstreetmap.org-error.log
-
-  RedirectPermanent /.well-known/acme-challenge/ http://acme.openstreetmap.org/.well-known/acme-challenge/
-  RedirectPermanent / https://munin.openstreetmap.org/
-</VirtualHost>
-
-<Directory /srv/munin.openstreetmap.org>
-  Require all granted
-</Directory>
-
-<Directory /srv/munin.openstreetmap.org/dumps>
-  Options +Indexes
-</Directory>
-
-<Directory /etc/munin/static>
-  Require all granted
-</Directory>
-
-<Directory /usr/lib/munin/cgi>
-  Options +ExecCGI
-  SetHandler fcgid-script
-  Require all granted
-</Directory>
diff --git a/cookbooks/munin/templates/default/backup.cron.erb b/cookbooks/munin/templates/default/backup.cron.erb
deleted file mode 100644 (file)
index 13d4228..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-#!/bin/sh
-
-# DO NOT EDIT - This file is being maintained by Chef
-
-T=$(mktemp -d -t -p /var/tmp munin.XXXXXXXXXX)
-D=$(date +%Y-%m-%d)
-B=munin-$D.tar.gz
-
-mkdir $T/munin-$D
-ln -s /var/lib/munin/openstreetmap $T/munin-$D
-ln -s /var/lib/munin/*.storable $T/munin-$D
-
-export RSYNC_RSH="ssh -ax"
-
-nice tar --create --dereference --directory=$T --warning=no-file-removed munin-$D | nice gzip --rsyncable -9 > $T/$B
-nice rsync --preallocate --fuzzy $T/$B backup::backup
-
-rm -rf $T
diff --git a/cookbooks/munin/templates/default/df.erb b/cookbooks/munin/templates/default/df.erb
deleted file mode 100644 (file)
index 6db42e6..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-# DO NOT EDIT - This file is being maintained by Chef
-
-[df*]
-env.exclude_re ^/run/user/
diff --git a/cookbooks/munin/templates/default/diskstats.erb b/cookbooks/munin/templates/default/diskstats.erb
deleted file mode 100644 (file)
index aa9f65e..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-# DO NOT EDIT - This file is being maintained by Chef
-
-[diskstats]
-env.exclude fd0
diff --git a/cookbooks/munin/templates/default/if.erb b/cookbooks/munin/templates/default/if.erb
deleted file mode 100644 (file)
index 1f36d50..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-# DO NOT EDIT - This file is being maintained by Chef
-
-[if_<%= @ifname %>]
-env.speed 1000
diff --git a/cookbooks/munin/templates/default/ipmi.erb b/cookbooks/munin/templates/default/ipmi.erb
deleted file mode 100644 (file)
index a52fa50..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-# DO NOT EDIT - This file is being maintained by Chef
-
-[ipmi_*]
-timeout 10
diff --git a/cookbooks/munin/templates/default/munin-node.conf.erb b/cookbooks/munin/templates/default/munin-node.conf.erb
deleted file mode 100644 (file)
index 6bd38df..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-# DO NOT EDIT - This file is being maintained by Chef
-
-# Configure logging
-log_level 4
-log_file /var/log/munin/munin-node.log
-pid_file /var/run/munin/munin-node.pid
-
-# Run in the background
-background 1
-setsid 1
-
-# Run as root
-user root
-group root
-
-# Regexps for files to ignore
-ignore_file ~$
-ignore_file DEADJOE$ 
-ignore_file \.bak$
-ignore_file %$
-ignore_file \.dpkg-(tmp|new|old|dist)$
-ignore_file \.rpm(save|new)$
-ignore_file \.pod$
-
-# Set the hostname
-host_name <%= node.name %>
-
-# List on port 4949 on all interfaces
-host *
-port 4949
-
-# List the addresses that are allowed to connect
-allow ^127\.0\.0\.1$
-<% @servers.sort.each do |server| -%>
-allow ^<%= Regexp.quote(server) %>$
-<% end -%>
-<% node[:munin][:allow].each do |address| -%>
-allow ^<%= Regexp.quote(address) %>$
-<% end -%>
diff --git a/cookbooks/munin/templates/default/munin.conf.erb b/cookbooks/munin/templates/default/munin.conf.erb
deleted file mode 100644 (file)
index 44afaa5..0000000
+++ /dev/null
@@ -1,655 +0,0 @@
-# DO NOT EDIT - This file is being maintained by Chef
-
-# Set maximum number of update processes to run at once
-max_processes 64
-
-# Maximum number of graphs to generate at once
-max_graph_jobs 24
-max_cgi_graph_jobs 24
-
-# Render pages and graphs on demand
-html_strategy cgi
-graph_strategy cgi
-
-# Use rrdcached
-rrdcached_socket /var/run/rrdcached.sock
-
-# Ignore uncontactable hosts for twelve hours
-unknown_limit 144
-<% @clients.sort { |a,b| a.name <=> b.name }.each do |client| -%>
-
-# Configure monitoring for <%= client.name %>
-[<%= client.name %>]
-<% if Time.now - Time.at(client[:ohai_time]) > @expiry_time -%>
-    update no
-<% end -%>
-<% if client[:networking][:roles][:external][:zone] == "ucl" -%>
-    address <%= client.internal_ipaddress || client.external_ipaddress %>
-<% elsif client[:networking][:roles][:external][:zone] == "ams" -%>
-    address <%= client.internal_ipaddress || client.external_ipaddress %>
-<% elsif client[:networking][:roles][:external][:zone] == "dub" -%>
-    address <%= client.internal_ipaddress || client.external_ipaddress %>
-<% elsif client.external_ipaddress -%>
-    address <%= client.external_ipaddress %>
-<% end -%>
-    use_node_name yes
-<% if client[:munin][:plugins] -%>
-<% client[:munin][:plugins].keys.sort.each do |plugin| -%>
-<% client[:munin][:plugins][plugin].keys.sort.each do |value| -%>
-<% if client[:munin][:plugins][plugin][value].kind_of?(Hash) -%>
-<% if client[:munin][:plugins][plugin][value][:graph] -%>
-    <%= plugin %>.<%= value %>.graph <%= client[:munin][:plugins][plugin][value][:graph] %>
-<% end -%>
-<% if client[:munin][:plugins][plugin][value][:draw] -%>
-    <%= plugin %>.<%= value %>.draw <%= client[:munin][:plugins][plugin][value][:draw] %>
-<% end -%>
-<% if client[:munin][:plugins][plugin][value][:label] -%>
-    <%= plugin %>.<%= value %>.label <%= client[:munin][:plugins][plugin][value][:label] %>
-<% end -%>
-<% if client[:munin][:plugins][plugin][value][:warning] -%>
-    <%= plugin %>.<%= value %>.warning <%= client[:munin][:plugins][plugin][value][:warning] %>
-<% end -%>
-<% if client[:munin][:plugins][plugin][value][:critical] -%>
-    <%= plugin %>.<%= value %>.critical <%= client[:munin][:plugins][plugin][value][:critical] %>
-<% end -%>
-<% else -%>
-    <%= plugin %>.<%= value %> <%= client[:munin][:plugins][plugin][value] %>
-<% end -%>
-<% end -%>
-<% end -%>
-<% end -%>
-<% if client[:munin][:graphs] -%>
-<% client[:munin][:graphs].keys.sort.each do |graph| -%>
-<% if client[:munin][:graphs][graph][:title] -%>
-    <%= graph %>.graph_title <%= client[:munin][:graphs][graph][:title] %>
-<% end -%>
-<% if client[:munin][:graphs][graph][:vlabel] -%>
-    <%= graph %>.graph_vlabel <%= client[:munin][:graphs][graph][:vlabel] %>
-<% end -%>
-<% if client[:munin][:graphs][graph][:category] -%>
-    <%= graph %>.graph_category <%= client[:munin][:graphs][graph][:category] %>
-<% end -%>
-<% client[:munin][:graphs][graph][:values].keys.sort.each do |value| -%>
-<% if client[:munin][:graphs][graph][:values][value][:sum] -%>
-    <%= graph %>.<%= value %>.sum <%= client[:munin][:graphs][graph][:values][value][:sum].join(" ") %>
-<% end -%>
-<% if client[:munin][:graphs][graph][:values][value][:label] -%>
-    <%= graph %>.<%= value %>.label <%= client[:munin][:graphs][graph][:values][value][:label] %>
-<% end -%>
-<% end -%>
-<% end -%>
-<% end -%>
-<% end -%>
-
-# Configure monitoring for switch1.openstreetmap.org
-[openstreetmap.org;switch1.openstreetmap.org]
-    address 10.0.48.10
-    use_node_name no
-
-# Configure monitoring for pdu1.ams.openstreetmap.org
-[openstreetmap.org;pdu1.ams.openstreetmap.org]
-    address 10.0.48.10
-    use_node_name no
-
-# Configure monitoring for pdu1.ams.openstreetmap.org
-[openstreetmap.org;pdu2.ams.openstreetmap.org]
-    address 10.0.48.10
-    use_node_name no
-
-# Configure compound graphs for ams.openstreetmap.org
-[ams.openstreetmap.org]
-    update no
-    apcpdu_current.graph_title Load
-    apcpdu_current.graph_args --lower-limit 0
-    apcpdu_current.graph_vlabel Amps
-    apcpdu_current.graph_category power
-    apcpdu_current.graph_order pdu1=pdu1.ams.openstreetmap.org:snmp_pdu1_ams_openstreetmap_org_apcpdu_current.current pdu2=pdu2.ams.openstreetmap.org:snmp_pdu2_ams_openstreetmap_org_apcpdu_current.current
-    apcpdu_current.graph_total total
-    apcpdu_current.pdu1.label PDU A
-    apcpdu_current.pdu1.draw AREASTACK
-    apcpdu_current.pdu1.min 0
-    apcpdu_current.pdu2.label PDU B
-    apcpdu_current.pdu2.draw AREASTACK
-    apcpdu_current.pdu2.min 0
-    apcpdu_power.graph_title Power
-    apcpdu_power.graph_args --base 1000 --lower-limit 0
-    apcpdu_power.graph_vlabel Watts
-    apcpdu_power.graph_category power
-    apcpdu_power.graph_order pdu1=pdu1.ams.openstreetmap.org:snmp_pdu1_ams_openstreetmap_org_apcpdu_power.power pdu2=pdu2.ams.openstreetmap.org:snmp_pdu2_ams_openstreetmap_org_apcpdu_power.power
-    apcpdu_power.graph_total total
-    apcpdu_power.pdu1.label PDU A
-    apcpdu_power.pdu1.draw AREASTACK
-    apcpdu_power.pdu1.min 0
-    apcpdu_power.pdu2.label PDU B
-    apcpdu_power.pdu2.draw AREASTACK
-    apcpdu_power.pdu2.min 0
-    apcpdu_temperature.graph_title Temperature
-    apcpdu_temperature.graph_args --lower-limit 0
-    apcpdu_temperature.graph_vlabel Degrees Celsius
-    apcpdu_temperature.graph_category sensors
-    apcpdu_temperature.graph_order temperature=pdu1.ams.openstreetmap.org:snmp_pdu1_ams_openstreetmap_org_apcpdu_temperature.temperature
-    apcpdu_temperature.temperature.label Temperature
-    apcpdu_temperature.temperature.draw LINE2
-    apcpdu_temperature.temperature.min 0
-    apcpdu_humidity.graph_title Humidity
-    apcpdu_humidity.graph_args --lower-limit 0
-    apcpdu_humidity.graph_vlabel %
-    apcpdu_humidity.graph_category sensors
-    apcpdu_humidity.graph_order humidity=pdu1.ams.openstreetmap.org:snmp_pdu1_ams_openstreetmap_org_apcpdu_humidity.humidity
-    apcpdu_humidity.humidity.label Humidity
-    apcpdu_humidity.humidity.draw LINE2
-    apcpdu_humidity.humidity.min 0
-<% unless @frontends.empty? -%>
-
-# Configure compound graphs for www.openstreetmap.org
-[www.openstreetmap.org]
-    update no
-    apache_accesses.graph_title Apache accesses
-    apache_accesses.graph_vlabel accesses / ${graph_period}
-    apache_accesses.graph_category apache
-    apache_accesses.graph_args --lower-limit 0
-    apache_accesses.accesses80.sum <%= Chef::Munin.expand "%%name%%.openstreetmap.org:apache_accesses.accesses80", @frontends %>
-    apache_accesses.accesses80.label port 80
-    apache_accesses.accesses80.min 0
-    apache_volume.graph_title Apache volume
-    apache_volume.graph_vlabel bytes per ${graph_period}
-    apache_volume.graph_category apache
-    apache_volume.graph_args --lower-limit 0
-    apache_volume.volume80.sum <%= Chef::Munin.expand "%%name%%.openstreetmap.org:apache_volume.volume80", @frontends %>
-    apache_volume.volume80.label port 80
-    apache_volume.volume80.min 0
-    network_in.graph_title Inbound network traffic
-    network_in.graph_vlabel bits in per ${graph_period}
-    network_in.graph_category network
-    network_in.graph_order <%= Chef::Munin.expand "%%%name%%%=%%name%%.openstreetmap.org:if_%%interface%%.down", @frontends %>
-    network_in.graph_total total
-    network_in.graph_args --lower-limit 0
-<% @frontends.each do |fe| -%>
-    network_in.<%= fe[:name].tr("-", "_") %>.label <%= fe[:name] %>
-    network_in.<%= fe[:name].tr("-", "_") %>.cdef <%= fe[:name].tr("-", "_") %>,8,*
-    network_in.<%= fe[:name].tr("-", "_") %>.draw AREASTACK
-    network_in.<%= fe[:name].tr("-", "_") %>.min 0
-<% end -%>
-    network_out.graph_title Outbound network traffic
-    network_out.graph_vlabel bits out per ${graph_period}
-    network_out.graph_category network
-    network_out.graph_order <%= Chef::Munin.expand "%%%name%%%=%%name%%.openstreetmap.org:if_%%interface%%.up", @frontends %>
-    network_out.graph_total total
-    network_out.graph_args --lower-limit 0
-<% @frontends.each do |fe| -%>
-    network_out.<%= fe[:name].tr("-", "_") %>.label <%= fe[:name] %>
-    network_out.<%= fe[:name].tr("-", "_") %>.cdef <%= fe[:name].tr("-", "_") %>,8,*
-    network_out.<%= fe[:name].tr("-", "_") %>.draw AREASTACK
-    network_out.<%= fe[:name].tr("-", "_") %>.min 0
-<% end -%>
-    api_calls_www.graph_title Active requests
-    api_calls_www.graph_vlabel Number of requests
-    api_calls_www.graph_category api
-    api_calls_www.graph_order map upload amf history full trkpts web other
-    api_calls_www.web.sum <%= Chef::Munin.expand "%%name%%.openstreetmap.org:api_calls_%%%name%%%.web", @frontends %>
-    api_calls_www.web.label Web site traffic
-    api_calls_www.upload.sum <%= Chef::Munin.expand "%%name%%.openstreetmap.org:api_calls_%%%name%%%.upload", @frontends %>
-    api_calls_www.upload.label Changeset diff uploads
-    api_calls_www.other.sum <%= Chef::Munin.expand "%%name%%.openstreetmap.org:api_calls_%%%name%%%.other", @frontends %>
-    api_calls_www.other.label Other API calls
-    api_calls_www.amf.sum <%= Chef::Munin.expand "%%name%%.openstreetmap.org:api_calls_%%%name%%%.amf", @frontends %>
-    api_calls_www.amf.label AMF API calls
-    api_calls_www.history.sum <%= Chef::Munin.expand "%%name%%.openstreetmap.org:api_calls_%%%name%%%.history", @frontends %>
-    api_calls_www.history.label Element history fetches
-    api_calls_www.full.sum <%= Chef::Munin.expand "%%name%%.openstreetmap.org:api_calls_%%%name%%%.full", @frontends %>
-    api_calls_www.full.label Full element fetches
-    api_calls_www.map.sum <%= Chef::Munin.expand "%%name%%.openstreetmap.org:api_calls_%%%name%%%.map", @frontends %>
-    api_calls_www.map.label Map API calls
-    api_calls_www.trkpts.sum <%= Chef::Munin.expand "%%name%%.openstreetmap.org:api_calls_%%%name%%%.trkpts", @frontends %>
-    api_calls_www.trkpts.label GPX trackpoints calls
-    api_calls_error.graph_title HTTP errors
-    api_calls_error.graph_vlabel Number of errors per ${graph_period}
-    api_calls_error.graph_category api
-    api_calls_error.graph_order http401 http422 http500 http502 http503 http509
-    api_calls_error.http401.sum <%= Chef::Munin.expand "%%name%%.openstreetmap.org:api_calls_status.http401", @frontends %>
-    api_calls_error.http401.label 401 Unauthorized
-    api_calls_error.http401.warning :0.5
-    api_calls_error.http422.sum <%= Chef::Munin.expand "%%name%%.openstreetmap.org:api_calls_status.http422", @frontends %>
-    api_calls_error.http422.label 422 Unprocessable Entity
-    api_calls_error.http422.warning :0.5
-    api_calls_error.http500.sum <%= Chef::Munin.expand "%%name%%.openstreetmap.org:api_calls_status.http500", @frontends %>
-    api_calls_error.http500.label 500 Internal Server Error
-    api_calls_error.http500.warning :0.5
-    api_calls_error.http502.sum <%= Chef::Munin.expand "%%name%%.openstreetmap.org:api_calls_status.http502", @frontends %>
-    api_calls_error.http502.label 502 Bad Gateway
-    api_calls_error.http502.warning :0.5
-    api_calls_error.http503.sum <%= Chef::Munin.expand "%%name%%.openstreetmap.org:api_calls_status.http503", @frontends %>
-    api_calls_error.http503.label 503 Service Unavailable
-    api_calls_error.http503.warning :0.5
-    api_calls_error.http509.sum <%= Chef::Munin.expand "%%name%%.openstreetmap.org:api_calls_status.http509", @frontends %>
-    api_calls_error.http509.label 509 Bandwidth Limit Exceeded
-    api_calls_error.http509.warning :5
-    api_calls_num.graph_title Requests processed
-    api_calls_num.graph_vlabel Number of requests per ${graph_period}
-    api_calls_num.graph_category api
-    api_calls_num.graph_order map upload amf history full trkpts web other
-    api_calls_num.web.sum <%= Chef::Munin.expand "%%name%%.openstreetmap.org:api_calls_num.web", @frontends %>
-    api_calls_num.web.label Web site traffic
-    api_calls_num.upload.sum <%= Chef::Munin.expand "%%name%%.openstreetmap.org:api_calls_num.upload", @frontends %>
-    api_calls_num.upload.label Changeset diff uploads
-    api_calls_num.other.sum <%= Chef::Munin.expand "%%name%%.openstreetmap.org:api_calls_num.other", @frontends %>
-    api_calls_num.other.label Other API calls
-    api_calls_num.amf.sum <%= Chef::Munin.expand "%%name%%.openstreetmap.org:api_calls_num.amf", @frontends %>
-    api_calls_num.amf.label AMF API calls
-    api_calls_num.history.sum <%= Chef::Munin.expand "%%name%%.openstreetmap.org:api_calls_num.history", @frontends %>
-    api_calls_num.history.label Element history fetches
-    api_calls_num.full.sum <%= Chef::Munin.expand "%%name%%.openstreetmap.org:api_calls_num.full", @frontends %>
-    api_calls_num.full.label Full element fetches
-    api_calls_num.map.sum <%= Chef::Munin.expand "%%name%%.openstreetmap.org:api_calls_num.map", @frontends %>
-    api_calls_num.map.label Map API calls
-    api_calls_num.trkpts.sum <%= Chef::Munin.expand "%%name%%.openstreetmap.org:api_calls_num.trkpts", @frontends %>
-    api_calls_num.trkpts.label GPX trackpoints calls
-    api_waits_www.graph_title Wait times for active requests
-    api_waits_www.graph_vlabel Average time of requests
-    api_waits_www.graph_category api
-    api_waits_www.graph_order map upload amf history full trkpts web other
-    api_waits_www.web.sum <%= Chef::Munin.expand "%%name%%.openstreetmap.org:api_waits_%%%name%%%.web", @frontends %>
-    api_waits_www.web.label Web site traffic
-    api_waits_www.web.cdef web,2,/
-    api_waits_www.upload.sum <%= Chef::Munin.expand "%%name%%.openstreetmap.org:api_waits_%%%name%%%.upload", @frontends %>
-    api_waits_www.upload.label Changeset diff uploads
-    api_waits_www.upload.cdef upload,2,/
-    api_waits_www.other.sum <%= Chef::Munin.expand "%%name%%.openstreetmap.org:api_waits_%%%name%%%.other", @frontends %>
-    api_waits_www.other.label Other API calls
-    api_waits_www.other.cdef other,2,/
-    api_waits_www.amf.sum <%= Chef::Munin.expand "%%name%%.openstreetmap.org:api_waits_%%%name%%%.amf", @frontends %>
-    api_waits_www.amf.label AMF API calls
-    api_waits_www.amf.cdef amf,2,/
-    api_waits_www.history.sum <%= Chef::Munin.expand "%%name%%.openstreetmap.org:api_waits_%%%name%%%.history", @frontends %>
-    api_waits_www.history.label Element history fetches
-    api_waits_www.history.cdef history,2,/
-    api_waits_www.full.sum <%= Chef::Munin.expand "%%name%%.openstreetmap.org:api_waits_%%%name%%%.full", @frontends %>
-    api_waits_www.full.label Full element fetches
-    api_waits_www.full.cdef full,2,/
-    api_waits_www.map.sum <%= Chef::Munin.expand "%%name%%.openstreetmap.org:api_waits_%%%name%%%.map", @frontends %>
-    api_waits_www.map.label Map API calls
-    api_waits_www.map.cdef map,2,/
-    api_waits_www.trkpts.sum <%= Chef::Munin.expand "%%name%%.openstreetmap.org:api_waits_%%%name%%%.trkpts", @frontends %>
-    api_waits_www.trkpts.label GPX trackpoints calls
-    api_waits_www.trkpts.cdef trkpts,2,/
-    memcached_multi_commands.graph_title Commands
-    memcached_multi_commands.graph_vlabel Commands per ${graph_period}
-    memcached_multi_commands.graph_category memcached
-    memcached_multi_commands.graph_order cmd_get cmd_set cmd_touch get_hits get_misses delete_hits delete_misses incr_hits incr_misses decr_hits decr_misses touch_hits touch_misses
-    memcached_multi_commands.cmd_get.sum <%= Chef::Munin.expand "%%name%%.openstreetmap.org:memcached_multi_commands.cmd_get", @frontends %>
-    memcached_multi_commands.cmd_get.label Gets
-    memcached_multi_commands.cmd_set.sum <%= Chef::Munin.expand "%%name%%.openstreetmap.org:memcached_multi_commands.cmd_set", @frontends %>
-    memcached_multi_commands.cmd_set.label Sets
-    memcached_multi_commands.cmd_touch.sum <%= Chef::Munin.expand "%%name%%.openstreetmap.org:memcached_multi_commands.cmd_touch", @frontends %>
-    memcached_multi_commands.cmd_touch.label Touches
-    memcached_multi_commands.get_hits.sum <%= Chef::Munin.expand "%%name%%.openstreetmap.org:memcached_multi_commands.get_hits", @frontends %>
-    memcached_multi_commands.get_hits.label Get Hits
-    memcached_multi_commands.get_misses.sum <%= Chef::Munin.expand "%%name%%.openstreetmap.org:memcached_multi_commands.get_misses", @frontends %>
-    memcached_multi_commands.get_misses.label Get Misses
-    memcached_multi_commands.delete_hits.sum <%= Chef::Munin.expand "%%name%%.openstreetmap.org:memcached_multi_commands.delete_hits", @frontends %>
-    memcached_multi_commands.delete_hits.label Delete Hits
-    memcached_multi_commands.delete_misses.sum <%= Chef::Munin.expand "%%name%%.openstreetmap.org:memcached_multi_commands.delete_misses", @frontends %>
-    memcached_multi_commands.delete_misses.label Delete Misses
-    memcached_multi_commands.incr_hits.sum <%= Chef::Munin.expand "%%name%%.openstreetmap.org:memcached_multi_commands.incr_hits", @frontends %>
-    memcached_multi_commands.incr_hits.label Increment Hits
-    memcached_multi_commands.incr_misses.sum <%= Chef::Munin.expand "%%name%%.openstreetmap.org:memcached_multi_commands.incr_misses", @frontends %>
-    memcached_multi_commands.incr_misses.label Increment Misses
-    memcached_multi_commands.decr_hits.sum <%= Chef::Munin.expand "%%name%%.openstreetmap.org:memcached_multi_commands.decr_hits", @frontends %>
-    memcached_multi_commands.decr_hits.label Decrement Hits
-    memcached_multi_commands.decr_misses.sum <%= Chef::Munin.expand "%%name%%.openstreetmap.org:memcached_multi_commands.decr_misses", @frontends %>
-    memcached_multi_commands.decr_misses.label Decrement Misses
-    memcached_multi_commands.touch_hits.sum <%= Chef::Munin.expand "%%name%%.openstreetmap.org:memcached_multi_commands.touch_hits", @frontends %>
-    memcached_multi_commands.touch_hits.label Touch Hits
-    memcached_multi_commands.touch_misses.sum <%= Chef::Munin.expand "%%name%%.openstreetmap.org:memcached_multi_commands.touch_misses", @frontends %>
-    memcached_multi_commands.touch_misses.label Touch Misses
-    memcached_multi_conns.graph_title Connections
-    memcached_multi_conns.graph_vlabel Connections per ${graph_period}
-    memcached_multi_conns.graph_category memcached
-    memcached_multi_conns.graph_order max_conns curr_conns avg_conns
-    memcached_multi_conns.curr_conns.sum <%= Chef::Munin.expand "%%name%%.openstreetmap.org:memcached_multi_conns.curr_conns", @frontends %>
-    memcached_multi_conns.curr_conns.label Current Connections
-    memcached_multi_conns.max_conns.sum <%= Chef::Munin.expand "%%name%%.openstreetmap.org:memcached_multi_conns.max_conns", @frontends %>
-    memcached_multi_conns.max_conns.label Max Connections
-    memcached_multi_conns.avg_conns.sum <%= Chef::Munin.expand "%%name%%.openstreetmap.org:memcached_multi_conns.avg_conns", @frontends %>
-    memcached_multi_conns.avg_conns.label Avg Connections
-    memcached_multi_evictions.graph_title Evictions
-    memcached_multi_evictions.graph_vlabel Evictions per ${graph_period}
-    memcached_multi_evictions.graph_category memcached
-    memcached_multi_evictions.evictions.sum <%= Chef::Munin.expand "%%name%%.openstreetmap.org:memcached_multi_evictions.evictions", @frontends %>
-    memcached_multi_evictions.evictions.label Evictions
-    memcached_multi_evictions.evicted_nonzero.sum <%= Chef::Munin.expand "%%name%%.openstreetmap.org:memcached_multi_evictions.evicted_nonzero", @frontends %>
-    memcached_multi_evictions.evicted_nonzero.label Evictions prior to Expire
-    memcached_multi_evictions.reclaimed.sum <%= Chef::Munin.expand "%%name%%.openstreetmap.org:memcached_multi_evictions.reclaimed", @frontends %>
-    memcached_multi_evictions.reclaimed.label Reclaimed Items
-    memcached_multi_items.graph_title Items
-    memcached_multi_items.graph_vlabel Items in Memcached
-    memcached_multi_items.graph_category memcached
-    memcached_multi_items.graph_order curr_items total_items
-    memcached_multi_items.curr_items.sum <%= Chef::Munin.expand "%%name%%.openstreetmap.org:memcached_multi_items.curr_items", @frontends %>
-    memcached_multi_items.curr_items.label Current Items
-    memcached_multi_items.total_items.sum <%= Chef::Munin.expand "%%name%%.openstreetmap.org:memcached_multi_items.total_items", @frontends %>
-    memcached_multi_items.total_items.label New Items
-    memcached_multi_memory.graph_title Memory Usage
-    memcached_multi_memory.graph_vlabel Bytes Used
-    memcached_multi_memory.graph_category memcached
-    memcached_multi_memory.graph_order limit_maxbytes bytes
-    memcached_multi_memory.limit_maxbytes.sum <%= Chef::Munin.expand "%%name%%.openstreetmap.org:memcached_multi_memory.limit_maxbytes", @frontends %>
-    memcached_multi_memory.limit_maxbytes.label Maximum Bytes Allocated
-    memcached_multi_memory.bytes.sum <%= Chef::Munin.expand "%%name%%.openstreetmap.org:memcached_multi_memory.bytes", @frontends %>
-    memcached_multi_memory.bytes.label Current Bytes Used
-    memcached_multi_bytes.graph_title Network Traffic
-    memcached_multi_bytes.graph_args --base 1000
-    memcached_multi_bytes.graph_vlabel bits in (-) / out (+)
-    memcached_multi_bytes.graph_category memcached
-    memcached_multi_bytes.graph_order bytes_read bytes_written
-    memcached_multi_bytes.bytes_read.sum <%= Chef::Munin.expand "%%name%%.openstreetmap.org:memcached_multi_bytes.bytes_read", @frontends %>
-    memcached_multi_bytes.bytes_read.label Network Traffic coming in (-)
-    memcached_multi_bytes.bytes_read.cdef bytes_read,8,*
-    memcached_multi_bytes.bytes_read.graph no
-    memcached_multi_bytes.bytes_written.sum <%= Chef::Munin.expand "%%name%%.openstreetmap.org:memcached_multi_bytes.bytes_written", @frontends %>
-    memcached_multi_bytes.bytes_written.negative bytes_read
-    memcached_multi_bytes.bytes_written.label Traffic in (-) / out (+)
-    memcached_multi_bytes.bytes_written.cdef bytes_written,8,*
-<% end -%>
-<% unless @renderers.empty? -%>
-
-# Configure compound graphs for render.openstreetmap.org
-[render.openstreetmap.org]
-    update no
-    apache_accesses.graph_title Apache accesses
-    apache_accesses.graph_vlabel accesses / ${graph_period}
-    apache_accesses.graph_category apache
-    apache_accesses.graph_order <%= Chef::Munin.expand "%%%name%%%=%%name%%.openstreetmap.org:apache_accesses.accesses80", @renderers %>
-    apache_accesses.graph_total total
-    apache_accesses.graph_args --lower-limit 0
-<% @renderers.each do |rs| -%>
-    apache_accesses.<%= rs[:name].tr("-", "_") %>.label <%= rs[:name] %>
-    apache_accesses.<%= rs[:name].tr("-", "_") %>.draw AREASTACK
-    apache_accesses.<%= rs[:name].tr("-", "_") %>.min 0
-<% end -%>
-    apache_volume.graph_title Apache volume
-    apache_volume.graph_vlabel bytes per ${graph_period}
-    apache_volume.graph_category apache
-    apache_volume.graph_order <%= Chef::Munin.expand "%%%name%%%=%%name%%.openstreetmap.org:apache_volume.volume80", @renderers %>
-    apache_volume.graph_total total
-    apache_volume.graph_args --lower-limit 0
-<% @renderers.each do |rs| -%>
-    apache_volume.<%= rs[:name].tr("-", "_") %>.label <%= rs[:name] %>
-    apache_volume.<%= rs[:name].tr("-", "_") %>.draw AREASTACK
-    apache_volume.<%= rs[:name].tr("-", "_") %>.min 0
-<% end -%>
-    network_in.graph_title Inbound network traffic
-    network_in.graph_vlabel bits in per ${graph_period}
-    network_in.graph_category network
-    network_in.graph_order <%= Chef::Munin.expand "%%%name%%%=%%name%%.openstreetmap.org:if_%%interface%%.down", @renderers %>
-    network_in.graph_total total
-    network_in.graph_args --lower-limit 0
-<% @renderers.each do |rs| -%>
-    network_in.<%= rs[:name].tr("-", "_") %>.label <%= rs[:name] %>
-    network_in.<%= rs[:name].tr("-", "_") %>.cdef <%= rs[:name].tr("-", "_") %>,8,*
-    network_in.<%= rs[:name].tr("-", "_") %>.draw AREASTACK
-    network_in.<%= rs[:name].tr("-", "_") %>.min 0
-<% end -%>
-    network_out.graph_title Outbound network traffic
-    network_out.graph_vlabel bits out per ${graph_period}
-    network_out.graph_category network
-    network_out.graph_order <%= Chef::Munin.expand "%%%name%%%=%%name%%.openstreetmap.org:if_%%interface%%.up", @renderers %>
-    network_out.graph_total total
-    network_out.graph_args --lower-limit 0
-<% @renderers.each do |rs| -%>
-    network_out.<%= rs[:name].tr("-", "_") %>.label <%= rs[:name] %>
-    network_out.<%= rs[:name].tr("-", "_") %>.cdef <%= rs[:name].tr("-", "_") %>,8,*
-    network_out.<%= rs[:name].tr("-", "_") %>.draw AREASTACK
-    network_out.<%= rs[:name].tr("-", "_") %>.min 0
-<% end -%>
-    mod_tile_fresh.graph_title freshness of served tiles
-    mod_tile_fresh.graph_args --base 1000 -l 0
-    mod_tile_fresh.graph_vlabel tiles per ${graph_period}
-    mod_tile_fresh.graph_order fresh freshrender old oldrender outdated outdatedrender
-    mod_tile_fresh.graph_category mod_tile
-    mod_tile_fresh.fresh.sum <%= Chef::Munin.expand "%%name%%.openstreetmap.org:mod_tile_fresh.fresh", @renderers %>
-    mod_tile_fresh.fresh.label Fresh from disk
-    mod_tile_fresh.fresh.draw AREA
-    mod_tile_fresh.freshrender.sum <%= Chef::Munin.expand "%%name%%.openstreetmap.org:mod_tile_fresh.freshrender", @renderers %>
-    mod_tile_fresh.freshrender.label Freshly rendered
-    mod_tile_fresh.freshrender.draw STACK
-    mod_tile_fresh.old.sum <%= Chef::Munin.expand "%%name%%.openstreetmap.org:mod_tile_fresh.old", @renderers %>
-    mod_tile_fresh.old.label Old from disk
-    mod_tile_fresh.old.draw STACK
-    mod_tile_fresh.oldrender.sum <%= Chef::Munin.expand "%%name%%.openstreetmap.org:mod_tile_fresh.oldrender", @renderers %>
-    mod_tile_fresh.oldrender.label Old tile, attempted render
-    mod_tile_fresh.oldrender.draw STACK
-    mod_tile_fresh.outdated.sum <%= Chef::Munin.expand "%%name%%.openstreetmap.org:mod_tile_fresh.outdated", @renderers %>
-    mod_tile_fresh.outdated.label Outdated from disk
-    mod_tile_fresh.outdated.draw STACK
-    mod_tile_fresh.outdatedrender.sum <%= Chef::Munin.expand "%%name%%.openstreetmap.org:mod_tile_fresh.outdatedrender", @renderers %>
-    mod_tile_fresh.outdatedrender.label Outdated tile, attempted render
-    mod_tile_fresh.outdatedrender.draw STACK
-    mod_tile_response.graph_title mod_tile HTTP response codes
-    mod_tile_response.graph_args --base 1000 -l 0
-    mod_tile_response.graph_vlabel responses per ${graph_period}
-    mod_tile_response.graph_order response200 response304 response404 response500
-    mod_tile_response.graph_category mod_tile
-    mod_tile_response.response200.sum <%= Chef::Munin.expand "%%name%%.openstreetmap.org:mod_tile_response.response200", @renderers %>
-    mod_tile_response.response200.label 200 OK
-    mod_tile_response.response200.draw AREA
-    mod_tile_response.response304.sum <%= Chef::Munin.expand "%%name%%.openstreetmap.org:mod_tile_response.response304", @renderers %>
-    mod_tile_response.response304.label 304 Not Modified
-    mod_tile_response.response304.draw STACK
-    mod_tile_response.response404.sum <%= Chef::Munin.expand "%%name%%.openstreetmap.org:mod_tile_response.response404", @renderers %>
-    mod_tile_response.response404.label 404 Not Found
-    mod_tile_response.response404.draw STACK
-    mod_tile_response.response500.sum <%= Chef::Munin.expand "%%name%%.openstreetmap.org:mod_tile_response.response500", @renderers %>
-    mod_tile_response.response500.label 500 Internal Error
-    mod_tile_response.response500.draw STACK
-    mod_tile_zoom.graph_title mod_tile responses by zoom layer
-    mod_tile_zoom.graph_args --base 1000 -l 0
-    mod_tile_zoom.graph_vlabel responses per ${graph_period}
-    mod_tile_zoom.graph_order z1 z2 z3 z4 z5 z6
-    mod_tile_zoom.graph_category mod_tile
-    mod_tile_zoom.z1.sum <%= Chef::Munin.expand "%%name%%.openstreetmap.org:mod_tile_zoom.z1", @renderers %>
-    mod_tile_zoom.z1.label z1-8
-    mod_tile_zoom.z1.draw AREA
-    mod_tile_zoom.z2.sum <%= Chef::Munin.expand "%%name%%.openstreetmap.org:mod_tile_zoom.z2", @renderers %>
-    mod_tile_zoom.z2.label z9-12
-    mod_tile_zoom.z2.draw STACK
-    mod_tile_zoom.z3.sum <%= Chef::Munin.expand "%%name%%.openstreetmap.org:mod_tile_zoom.z3", @renderers %>
-    mod_tile_zoom.z3.label z13-14
-    mod_tile_zoom.z3.draw STACK
-    mod_tile_zoom.z4.sum <%= Chef::Munin.expand "%%name%%.openstreetmap.org:mod_tile_zoom.z4", @renderers %>
-    mod_tile_zoom.z4.label z15-16
-    mod_tile_zoom.z4.draw STACK
-    mod_tile_zoom.z5.sum <%= Chef::Munin.expand "%%name%%.openstreetmap.org:mod_tile_zoom.z5", @renderers %>
-    mod_tile_zoom.z5.label z17-18
-    mod_tile_zoom.z5.draw STACK
-    mod_tile_zoom.z6.sum <%= Chef::Munin.expand "%%name%%.openstreetmap.org:mod_tile_zoom.z6", @renderers %>
-    mod_tile_zoom.z6.label z19-20
-    mod_tile_zoom.z6.draw STACK
-    renderd_queue.graph_title Renderd queue length
-    renderd_queue.graph_args --base 1000 -l 0
-    renderd_queue.graph_vlabel metatiles
-    renderd_queue.graph_order reqPrio req reqLow dirty reqBulk
-    renderd_queue.graph_category renderd
-    renderd_queue.reqPrio.sum <%= Chef::Munin.expand "%%name%%.openstreetmap.org:renderd_queue.reqPrio", @renderers %>
-    renderd_queue.reqPrio.label Priority request Queue
-    renderd_queue.reqPrio.type GAUGE
-    renderd_queue.req.sum <%= Chef::Munin.expand "%%name%%.openstreetmap.org:renderd_queue.req", @renderers %>
-    renderd_queue.req.label Request Queue
-    renderd_queue.req.type GAUGE
-    renderd_queue.reqLow.sum <%= Chef::Munin.expand "%%name%%.openstreetmap.org:renderd_queue.reqLow", @renderers %>
-    renderd_queue.reqLow.label Low priority request Queue
-    renderd_queue.reqLow.type GAUGE
-    renderd_queue.dirty.sum <%= Chef::Munin.expand "%%name%%.openstreetmap.org:renderd_queue.dirty", @renderers %>
-    renderd_queue.dirty.label Dirty Queue
-    renderd_queue.dirty.type GAUGE
-    renderd_queue.reqBulk.sum <%= Chef::Munin.expand "%%name%%.openstreetmap.org:renderd_queue.reqBulk", @renderers %>
-    renderd_queue.reqBulk.label Bulk request Queue
-    renderd_queue.reqBulk.type GAUGE
-    renderd_processed.graph_title Renderd throughput
-    renderd_processed.graph_args --base 1000 -l 0
-    renderd_processed.graph_vlabel Metatiles per ${graph_period}
-    renderd_processed.graph_order reqPrio req reqLow dirty reqBulk dropped
-    renderd_processed.graph_category renderd
-    renderd_processed.graph_info Displays the number of metatiles being rendered by renderd per ${graph_period}
-    renderd_processed.reqPrio.sum <%= Chef::Munin.expand "%%name%%.openstreetmap.org:renderd_processed.reqPrio", @renderers %>
-    renderd_processed.reqPrio.label Priority request Queue
-    renderd_processed.reqPrio.draw AREA
-    renderd_processed.reqPrio.info Throughput of Metatiles submitted high priority for on the fly rendering
-    renderd_processed.req.sum <%= Chef::Munin.expand "%%name%%.openstreetmap.org:renderd_processed.req", @renderers %>
-    renderd_processed.req.label Request Queue
-    renderd_processed.req.draw STACK
-    renderd_processed.req.info Throughput of Metatiles submitted for on the fly rendering
-    renderd_processed.reqLow.sum <%= Chef::Munin.expand "%%name%%.openstreetmap.org:renderd_processed.reqLow", @renderers %>
-    renderd_processed.reqLow.label Low priority request Queue
-    renderd_processed.reqLow.draw STACK
-    renderd_processed.reqLow.info Throughput of Metatiles submitted low priority for on the fly rendering
-    renderd_processed.dirty.sum <%= Chef::Munin.expand "%%name%%.openstreetmap.org:renderd_processed.dirty", @renderers %>
-    renderd_processed.dirty.label Dirty Queue
-    renderd_processed.dirty.draw STACK
-    renderd_processed.dirty.info Throughput of dirty Metatiles submitted for re-render
-    renderd_processed.reqBulk.sum <%= Chef::Munin.expand "%%name%%.openstreetmap.org:renderd_processed.reqBulk", @renderers %>
-    renderd_processed.reqBulk.label Bulk request Queue
-    renderd_processed.reqBulk.draw STACK
-    renderd_processed.reqBulk.info Throughput of Metatiles submitted with background priority
-    renderd_processed.dropped.sum <%= Chef::Munin.expand "%%name%%.openstreetmap.org:renderd_processed.dropped", @renderers %>
-    renderd_processed.dropped.label Dropped (x20)
-    renderd_processed.dropped.draw LINE2
-    renderd_processed.dropped.info Number of Tiles dropped due to queue overload (x20)
-    renderd_processed.dropped.cdef dropped,20,/
-    renderd_zoom.graph_title Renderd throughput by zoom
-    renderd_zoom.graph_args --base 1000 -l 0
-    renderd_zoom.graph_vlabel Metatiles per ${graph_period}
-    renderd_zoom.graph_order z1 z2 z3 z4 z5 z6
-    renderd_zoom.graph_category renderd
-    renderd_zoom.graph_info Displays the number of metatiles being rendered by renderd per ${graph_period}
-    renderd_zoom.z1.sum <%= Chef::Munin.expand "%%name%%.openstreetmap.org:renderd_zoom.z1", @renderers %>
-    renderd_zoom.z1.label zoom z0 - z8
-    renderd_zoom.z1.draw AREA
-    renderd_zoom.z1.info Throughput of Metatiles for z0 - z8
-    renderd_zoom.z2.sum <%= Chef::Munin.expand "%%name%%.openstreetmap.org:renderd_zoom.z2", @renderers %>
-    renderd_zoom.z2.label zoom z9 - z12
-    renderd_zoom.z2.draw STACK
-    renderd_zoom.z2.info Throughput of Metatiles for z9 - z12
-    renderd_zoom.z3.sum <%= Chef::Munin.expand "%%name%%.openstreetmap.org:renderd_zoom.z3", @renderers %>
-    renderd_zoom.z3.label zoom z13 - z14
-    renderd_zoom.z3.draw STACK
-    renderd_zoom.z3.info Throughput of Metatiles for z13 - z14
-    renderd_zoom.z4.sum <%= Chef::Munin.expand "%%name%%.openstreetmap.org:renderd_zoom.z4", @renderers %>
-    renderd_zoom.z4.label zoom z15 - z16
-    renderd_zoom.z4.draw STACK
-    renderd_zoom.z4.info Throughput of Metatiles for z15 - z16
-    renderd_zoom.z5.sum <%= Chef::Munin.expand "%%name%%.openstreetmap.org:renderd_zoom.z5", @renderers %>
-    renderd_zoom.z5.label zoom z17 - z18
-    renderd_zoom.z5.draw STACK
-    renderd_zoom.z5.info Throughput of Metatiles for z17 - z18
-    renderd_zoom.z6.sum <%= Chef::Munin.expand "%%name%%.openstreetmap.org:renderd_zoom.z6", @renderers %>
-    renderd_zoom.z6.label zoom z19 - z20
-    renderd_zoom.z6.draw STACK
-    renderd_zoom.z6.info Throughput of Metatiles for z19 - z20
-    renderd_queue_time.graph_title Renderd time spent by queue
-    renderd_queue_time.graph_args --base 1000 -l 0
-    renderd_queue_time.graph_vlabel metatiles
-    renderd_queue_time.graph_order reqPrio req reqLow dirty reqBulk
-    renderd_queue_time.graph_category renderd
-    renderd_queue_time.reqPrio.sum <%= Chef::Munin.expand "%%name%%.openstreetmap.org:renderd_queue_time.reqPrio", @renderers %>
-    renderd_queue_time.reqPrio.label Priority request queue
-    renderd_queue_time.reqPrio.cdef reqPrio,1000,/
-    renderd_queue_time.reqPrio.draw AREA
-    renderd_queue_time.reqPrio.info Time for priority request queue
-    renderd_queue_time.req.sum <%= Chef::Munin.expand "%%name%%.openstreetmap.org:renderd_queue_time.req", @renderers %>
-    renderd_queue_time.req.label Request queue
-    renderd_queue_time.req.cdef req,1000,/
-    renderd_queue_time.req.draw STACK
-    renderd_queue_time.req.info Time for Request queue
-    renderd_queue_time.reqLow.sum <%= Chef::Munin.expand "%%name%%.openstreetmap.org:renderd_queue_time.reqLow", @renderers %>
-    renderd_queue_time.reqLow.label Low priority request queue
-    renderd_queue_time.reqLow.cdef reqLow,1000,/
-    renderd_queue_time.reqLow.draw STACK
-    renderd_queue_time.reqLow.info Time for low priority request queue
-    renderd_queue_time.dirty.sum <%= Chef::Munin.expand "%%name%%.openstreetmap.org:renderd_queue_time.dirty", @renderers %>
-    renderd_queue_time.dirty.label Dirty queue
-    renderd_queue_time.dirty.cdef dirty,1000,/
-    renderd_queue_time.dirty.draw STACK
-    renderd_queue_time.dirty.info Time for dirty queue
-    renderd_queue_time.reqBulk.sum <%= Chef::Munin.expand "%%name%%.openstreetmap.org:renderd_queue_time.reqBulk", @renderers %>
-    renderd_queue_time.reqBulk.label Bulk queue
-    renderd_queue_time.reqBulk.cdef reqBulk,1000,/
-    renderd_queue_time.reqBulk.draw STACK
-    renderd_queue_time.reqBulk.info Time for bulk queue
-    renderd_zoom_time.graph_title Renderd time spent by zoom
-    renderd_zoom_time.graph_args --base 1000 -l 0
-    renderd_zoom_time.graph_vlabel time spent per ${graph_period}
-    renderd_zoom_time.graph_order zoomtime1 zoomtime2 zoomtime3 zoomtime4 zoomtime5 zoomtime6
-    renderd_zoom_time.graph_category renderd
-    renderd_zoom_time.graph_info Displays the amount of time renderd has spent rendering tiles of a given zoom per ${graph_period}
-    renderd_zoom_time.zoomtime1.sum <%= Chef::Munin.expand "%%name%%.openstreetmap.org:renderd_zoom_time.zoomtime1", @renderers %>
-    renderd_zoom_time.zoomtime1.label zoom z0 - z8
-    renderd_zoom_time.zoomtime1.cdef zoomtime1,1000,/
-    renderd_zoom_time.zoomtime1.draw AREA
-    renderd_zoom_time.zoomtime1.info Time for Metatiles z0 - z8
-    renderd_zoom_time.zoomtime2.sum <%= Chef::Munin.expand "%%name%%.openstreetmap.org:renderd_zoom_time.zoomtime2", @renderers %>
-    renderd_zoom_time.zoomtime2.label zoom z9 - z12
-    renderd_zoom_time.zoomtime2.cdef zoomtime2,1000,/
-    renderd_zoom_time.zoomtime2.draw STACK
-    renderd_zoom_time.zoomtime2.info Time for Metatiles for z9 - z12
-    renderd_zoom_time.zoomtime3.sum <%= Chef::Munin.expand "%%name%%.openstreetmap.org:renderd_zoom_time.zoomtime3", @renderers %>
-    renderd_zoom_time.zoomtime3.label zoom z13 - z14
-    renderd_zoom_time.zoomtime3.cdef zoomtime3,1000,/
-    renderd_zoom_time.zoomtime3.draw STACK
-    renderd_zoom_time.zoomtime3.info Time for Metatiles for z13 - z14
-    renderd_zoom_time.zoomtime4.sum <%= Chef::Munin.expand "%%name%%.openstreetmap.org:renderd_zoom_time.zoomtime4", @renderers %>
-    renderd_zoom_time.zoomtime4.label zoom z15 - z16
-    renderd_zoom_time.zoomtime4.cdef zoomtime4,1000,/
-    renderd_zoom_time.zoomtime4.draw STACK
-    renderd_zoom_time.zoomtime4.info Time for Metatiles for z15 - z16
-    renderd_zoom_time.zoomtime5.sum <%= Chef::Munin.expand "%%name%%.openstreetmap.org:renderd_zoom_time.zoomtime5", @renderers %>
-    renderd_zoom_time.zoomtime5.label zoom z17 - z18
-    renderd_zoom_time.zoomtime5.cdef zoomtime5,1000,/
-    renderd_zoom_time.zoomtime5.draw STACK
-    renderd_zoom_time.zoomtime5.info Time for Metatiles for z17 - z18
-    renderd_zoom_time.zoomtime6.sum <%= Chef::Munin.expand "%%name%%.openstreetmap.org:renderd_zoom_time.zoomtime6", @renderers %>
-    renderd_zoom_time.zoomtime6.label zoom z19 - z20
-    renderd_zoom_time.zoomtime6.cdef zoomtime6,1000,/
-    renderd_zoom_time.zoomtime6.draw STACK
-    renderd_zoom_time.zoomtime6.info Time for Metatiles for z19 - z20
-<% end -%>
-<% unless @geocoders.empty? -%>
-
-# Configure compound graphs for nominatim.openstreetmap.org
-[nominatim.openstreetmap.org]
-    update no
-    nominatim_requests.graph_title Requests by API call
-    nominatim_requests.graph_args --base 1000 -l 0
-    nominatim_requests.graph_vlabel requests per minute
-    nominatim_requests.graph_category nominatim
-    nominatim_requests.graph_order z1 z2 z3 z4
-    nominatim_requests.z1.sum <%= Chef::Munin.expand "%%name%%.openstreetmap.org:nominatim_requests.z1", @geocoders %>
-    nominatim_requests.z1.label reverse
-    nominatim_requests.z1.draw AREA
-    nominatim_requests.z1.type GAUGE
-    nominatim_requests.z2.sum <%= Chef::Munin.expand "%%name%%.openstreetmap.org:nominatim_requests.z2", @geocoders %>
-    nominatim_requests.z2.label search (successful)
-    nominatim_requests.z2.draw STACK
-    nominatim_requests.z2.type GAUGE
-    nominatim_requests.z3.sum <%= Chef::Munin.expand "%%name%%.openstreetmap.org:nominatim_requests.z3", @geocoders %>
-    nominatim_requests.z3.label search (no result)
-    nominatim_requests.z3.draw STACK
-    nominatim_requests.z3.type GAUGE
-    nominatim_requests.z4.sum <%= Chef::Munin.expand "%%name%%.openstreetmap.org:nominatim_requests.z4", @geocoders %>
-    nominatim_requests.z4.label details
-    nominatim_requests.z4.draw STACK
-    nominatim_requests.z4.type GAUGE
-    nominatim_throttled_ips.graph_title Restricted IPs
-    nominatim_throttled_ips.graph_args -l 0
-    nominatim_throttled_ips.graph_vlabel number of IPs
-    nominatim_throttled_ips.graph_category nominatim
-    nominatim_throttled_ips.graph_order bulk block
-    nominatim_throttled_ips.bulk.sum <%= Chef::Munin.expand "%%name%%.openstreetmap.org:nominatim_throttled_ips.bulk", @geocoders %>
-    nominatim_throttled_ips.bulk.label bulk
-    nominatim_throttled_ips.bulk.draw AREA
-    nominatim_throttled_ips.bulk.type GAUGE
-    nominatim_throttled_ips.block.sum <%= Chef::Munin.expand "%%name%%.openstreetmap.org:nominatim_throttled_ips.block", @geocoders %>
-    nominatim_throttled_ips.block.label blocked
-    nominatim_throttled_ips.block.draw STACK
-    nominatim_throttled_ips.block.type GAUGE
-<% end -%>
diff --git a/cookbooks/munin/templates/default/rrdcached.erb b/cookbooks/munin/templates/default/rrdcached.erb
deleted file mode 100644 (file)
index 8d2ae8a..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-# DO NOT EDIT - This file is being maintained by Chef
-
-# Full path to daemon
-DAEMON=/usr/bin/rrdcached
-
-# Optional override flush interval, in seconds.
-WRITE_TIMEOUT=1800
-
-# Optional override maximum write delay, in seconds.
-WRITE_JITTER=1800
-
-# Optional override number of write_threads
-#WRITE_THREADS=4
-
-# Where database files are placed.  If left unset, the default /tmp will
-# be used.  NB: The daemon will reject a directory that has symlinks as
-# components.  NB: You may want to have -B in BASE_OPTS.
-BASE_PATH=/var/lib/munin/
-
-# Where journal files are placed.  If left unset, journaling will
-# be disabled.
-JOURNAL_PATH=/var/lib/munin/rrdcached/
-
-# FHS standard placement for process ID file.
-PIDFILE=/var/run/rrdcached.pid
-
-# FHS standard placement for local control socket.
-SOCKFILE=/var/run/rrdcached.sock
-
-# Optional override group that should own/access the local control
-# socket
-SOCKGROUP=munin
-
-# Optional override access mode of local control socket.
-SOCKMODE=0666
-
-# Optional unprivileged group to run under when daemon.  If unset
-# retains invocation group privileges.
-#DAEMON_GROUP=_rrdcached
-
-# Optional unprivileged user to run under when daemon.  If unset
-# retains invocation user privileges.
-#DAEMON_USER=_rrdcached
-
-# Network socket address requests.  Use in conjunction with SOCKFILE to
-# also listen on INET domain sockets.  The option is a lower-case ell
-# ASCII 108 = 0x6c, and should be repeated for each address.  The
-# parameter is an optional IP address, followed by an optional port with
-# a colon separating it from the address.  The empty string is
-# interpreted as "open sockets on the default port on all available
-# interfaces", but generally does not pass through init script functions
-# so use -L with no parameters for that configuration.
-#NETWORK_OPTIONS="-L"
-
-# Any other options not specifically supported by the script (-P, -f,
-# -F, -B).
-BASE_OPTIONS="-F -B"
diff --git a/cookbooks/munin/templates/default/sensors_volt.erb b/cookbooks/munin/templates/default/sensors_volt.erb
deleted file mode 100644 (file)
index 1224ef3..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-# DO NOT EDIT - This file is being maintained by Chef
-
-[sensors_volt]
-env.volt_warn_percent 0
index 0fa3df913041df5fbfaf2b4ec5e6ee7a208f1ed5..b38a6364baa257878fd5d952bce22f2fc449582a 100644 (file)
@@ -55,29 +55,13 @@ template "/etc/apparmor.d/local/usr.sbin.mysqld" do
   only_if { ::Dir.exist?("/sys/kernel/security/apparmor") }
 end
 
-package "libdbd-mysql-perl"
-package "libcache-cache-perl"
-
-%w[
-  commands connections files handler_read handler_tmp handler_transaction
-  handler_write innodb_bpool innodb_bpool_act innodb_history_list_length
-  innodb_insert_buf innodb_io innodb_io_pend innodb_log innodb_queries
-  innodb_read_views innodb_rows innodb_semaphores innodb_srv_master_thread
-  innodb_tnx max_mem mrr myisam_indexes network_traffic performance
-  qcache qcache_mem select_types slow sorts table_definitions table_locks
-  tmp_tables
-].each do |stat|
-  munin_plugin "mysql_#{stat}" do
-    target "mysql_"
-  end
+# FIXME: Remove purge post munin removal
+package "libdbd-mysql-perl" do
+  action :purge
 end
 
-%w[
-  bin_relay_log files_tables replication
-].each do |stat|
-  munin_plugin "mysql_#{stat}" do
-    action :delete
-  end
+package "libcache-cache-perl" do
+  action :purge
 end
 
 mysql_password = persistent_token("mysql", "prometheus", "password")
index 085428583ef5e540deb4ce738011181ce2ac19ff..bc763760966b5d3d06df8af339ed19770ed8acb3 100644 (file)
@@ -53,15 +53,11 @@ service "nginx" do
   subscribes :restart, "template[/etc/nginx/nginx.conf]"
 end
 
-munin_plugin_conf "nginx" do
-  template "munin.erb"
+# FIXME: Remove purge post munin removal
+package "libwww-perl" do
+  action :purge
 end
 
-package "libwww-perl"
-
-munin_plugin "nginx_request"
-munin_plugin "nginx_status"
-
 prometheus_exporter "nginx" do
   port 9113
   options "--nginx.scrape-uri=http://localhost:8050/nginx_status"
diff --git a/cookbooks/nginx/templates/default/munin.erb b/cookbooks/nginx/templates/default/munin.erb
deleted file mode 100644 (file)
index 56a2eff..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-[nginx*]
-  env.url http://localhost:8050/nginx_status
index f5d4fc26904e22bb9544b8c34a4104b7a974cf69..0d2387b2e30b4fa01988383845e8ce40b8c20410 100644 (file)
@@ -57,7 +57,7 @@ http {
     proxy_cache_path <%= node['nginx']['cache']['proxy']['directory'] %> levels=2:2:2 use_temp_path=off keys_zone=<%= node['nginx']['cache']['proxy']['keys_zone'] %> inactive=<%= node['nginx']['cache']['proxy']['inactive'] %> max_size=<%= node['nginx']['cache']['proxy']['max_size'] %>;
     <% end -%>
 
-    # Internal site for munin monitoring
+    # Internal site for stats monitoring
     server {
       listen 127.0.0.1:8050;
       server_name localhost;
index bf0db0aecd9a26067f04b96af04dcbb34871f42c..14b2b6628d854f30f3146144898a506c190a0011 100644 (file)
@@ -86,11 +86,6 @@ postgresql_user "www-data" do
   only_if { node[:nominatim][:state] != "slave" }
 end
 
-postgresql_munin "nominatim" do
-  cluster node[:nominatim][:dbcluster]
-  database node[:nominatim][:dbname]
-end
-
 directory "#{basedir}/tablespaces" do
   owner "postgres"
   group "postgres"
@@ -611,25 +606,6 @@ template "/etc/logrotate.d/nominatim" do
 end
 
 # Monitoring
-
-munin_plugin_conf "nominatim" do
-  template "munin.erb"
-  variables :db => node[:nominatim][:dbname],
-            :querylog => "#{node[:nominatim][:logdir]}/query.log"
-end
-
-munin_plugin "nominatim_importlag" do
-  target "#{source_directory}/munin/nominatim_importlag"
-end
-
-munin_plugin "nominatim_query_speed" do
-  target "#{source_directory}/munin/nominatim_query_speed_querylog"
-end
-
-munin_plugin "nominatim_requests" do
-  target "#{source_directory}/munin/nominatim_requests_querylog"
-end
-
 prometheus_exporter "nominatim" do
   port 8082
   user "www-data"
diff --git a/cookbooks/nominatim/templates/default/munin.erb b/cookbooks/nominatim/templates/default/munin.erb
deleted file mode 100644 (file)
index 2843145..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-# DO NOT EDIT - This file is being maintained by Chef
-
-[nominatim_*]
-user www-data
-env.PGDATABASE <%= @db %>
-env.PGUSER www-data
-env.NOMINATIM_QUERYLOG <%= @querylog %>
index 3a9b0bb8bc2fb2d4eb97a64d2a0fd34eb142a47e..1b131f8f8fa26eb8b2ca74d438ecebc3735636eb 100644 (file)
@@ -61,8 +61,6 @@ service "chrony" do
   action [:enable, :start]
 end
 
-munin_plugin "chrony"
-
 prometheus_exporter "chrony" do
   port 9123
 end
index 720b113216d342abe8f6ccec947cd0aa5f15eb28..47469716875a78bbdfb801df44f002addb2959ea 100644 (file)
@@ -27,7 +27,7 @@ username = "overpass"
 basedir = data_bag_item("accounts", username)["home"]
 web_passwords = data_bag_item("web", "passwords")
 
-%w[bin site diffs db src munin].each do |dirname|
+%w[bin site diffs db src].each do |dirname|
   directory "#{basedir}/#{dirname}" do
     owner username
     group username
@@ -36,6 +36,12 @@ web_passwords = data_bag_item("web", "passwords")
   end
 end
 
+# FIXME: Remove purge post munin removal
+directory "#{basedir}/munin" do
+  action :delete
+  recursive true
+end
+
 ## Install overpass from source
 
 srcdir = "#{basedir}/src/osm-3s_v#{node[:overpass][:version]}"
@@ -229,24 +235,6 @@ template "/etc/logrotate.d/overpass" do
   variables :logdir => logdir
 end
 
-# Munin scripts
-
-%w[db_lag request_count].each do |name|
-  template "#{basedir}/munin/overpass_#{name}" do
-    source "munin_#{name}.erb"
-    owner username
-    group username
-    mode "755"
-    variables :basedir => basedir
-  end
-
-  munin_plugin "overpass_#{name}" do
-    target "#{basedir}/munin/overpass_#{name}"
-    conf "munin.erb"
-    conf_variables :user => username
-  end
-end
-
 prometheus_exporter "overpass" do
   port 9898
   user username
diff --git a/cookbooks/overpass/templates/default/munin.erb b/cookbooks/overpass/templates/default/munin.erb
deleted file mode 100644 (file)
index a2f47fa..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-# DO NOT EDIT - This file is being maintained by Chef
-
-[<%= @name %>]
-user <%= @user %>
diff --git a/cookbooks/overpass/templates/default/munin_db_lag.erb b/cookbooks/overpass/templates/default/munin_db_lag.erb
deleted file mode 100644 (file)
index ce8bdfa..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-#!/usr/bin/env bash
-
-# DO NOT EDIT - This file is being maintained by Chef
-#
-# Based on: https://github.com/drolbr/Overpass-API/blob/way_based_areas/munin/osm_replication_lag-api
-
-if [ "$1" = "config" ]; then
-
-        echo 'graph_title DB Lag'
-        echo 'graph_args --base 1000'
-        echo 'graph_vlabel minutes behind main database'
-        echo 'graph_category overpass'
-
-        echo 'lag.label replication lag'
-        echo 'lag.draw LINE'
-        echo 'lag.cdef lag,60,/'
-        echo 'lag.critical 1000'
-
-        exit 0
-fi
-
-lag=$(($(date +%s)-$(date +%s --utc -d "$(cat <%= @basedir %>/db/osm_base_version | cut -f2 -d\" | sed s/"\\\\"/""/g | sed s/[ZT]/" "/g)" )))
-echo "lag.value $lag"
diff --git a/cookbooks/overpass/templates/default/munin_request_count.erb b/cookbooks/overpass/templates/default/munin_request_count.erb
deleted file mode 100644 (file)
index 7e85851..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-#!/usr/bin/env bash
-#
-# DO NOT EDIT - This file is being maintained by Chef
-#
-# Based on: https://github.com/drolbr/Overpass-API/blob/way_based_areas/munin/osm_db_request_count
-
-if [[ "$1" = "config" ]]; then
-{
-  echo 'graph_title API request count'
-  echo 'graph_vlabel per minute'
-  echo 'graph_category overpass'
-  echo "overpass_request_started.label Base started"
-  echo "overpass_request_started.type COUNTER"
-  echo "overpass_request_started.cdef overpass_request_started,60,*"
-  echo "overpass_request_started.max 10000"
-  echo "overpass_request_completed.label Base completed"
-  echo "overpass_request_completed.type COUNTER"
-  echo "overpass_request_completed.cdef overpass_request_completed,60,*"
-  echo "overpass_request_completed.max 10000"
-  echo "overpass_area_request_started.label Area started"
-  echo "overpass_area_request_started.type COUNTER"
-  echo "overpass_area_request_started.cdef overpass_area_request_started,60,*"
-  echo "overpass_area_request_started.max 10000"
-  echo "overpass_area_request_completed.label Area completed"
-  echo "overpass_area_request_completed.type COUNTER"
-  echo "overpass_area_request_completed.cdef overpass_area_request_completed,60,*"
-  echo "overpass_area_request_completed.max 10000"
-  exit 0
-}; fi
-
-BASE_STATUS=`<%= @basedir %>/bin/dispatcher --osm-base --status | tr '\n' '|'`
-AREA_STATUS=`<%= @basedir %>/bin/dispatcher --areas --status | tr '\n' '|'`
-
-STARTED=`echo $BASE_STATUS | sed 's,.*Counter of started requests:,,;s:|.*::'`
-echo "overpass_request_started.value $STARTED"
-
-COMPLETED=`echo $BASE_STATUS | sed 's,.*Counter of finished requests:,,;s:|.*::'`
-echo "overpass_request_completed.value $COMPLETED"
-
-STARTED=`echo $AREA_STATUS | sed 's,.*Counter of started requests:,,;s:|.*::'`
-echo "overpass_area_request_started.value $STARTED"
-
-COMPLETED=`echo $AREA_STATUS | sed 's,.*Counter of finished requests:,,;s:|.*::'`
-echo "overpass_area_request_completed.value $COMPLETED"
index e162e612f7bb58581065bfc1e07f38beda394f69..04e85b486493a3ac5039af867ce5f558545a5fe5 100644 (file)
@@ -42,15 +42,6 @@ apache_module "passenger" do
   conf "passenger.conf.erb"
 end
 
-munin_plugin_conf "passenger" do
-  template "munin.erb"
-end
-
-munin_plugin "passenger_memory"
-munin_plugin "passenger_processes"
-munin_plugin "passenger_queues"
-munin_plugin "passenger_requests"
-
 prometheus_exporter "passenger" do
   port 9149
   user "root"
diff --git a/cookbooks/passenger/templates/default/munin.erb b/cookbooks/passenger/templates/default/munin.erb
deleted file mode 100644 (file)
index 903fcfe..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-# DO NOT EDIT - This file is being maintained by Chef
-
-[passenger_*]
-user root
-env.PASSENGER_INSTANCE_REGISTRY_DIR <%= node[:passenger][:instance_registry_dir] %>
index b83d3449b88e375d4b9e3f27b4b01cfcf895a1c7..519f58a52036f790e69e0981b5cba942eedc97fd 100644 (file)
@@ -138,8 +138,6 @@ template "/etc/logrotate.d/apache2" do
   mode "644"
 end
 
-munin_plugin "planet_age"
-
 template "/usr/local/bin/planet-file-cleanup" do
   source "planet-file-cleanup.erb"
   owner "root"
index b23cd2bc670cb1454339170a298565962fee7922..4aea35d5422e51fb870522a1949afccd894c6d3a 100644 (file)
@@ -6,7 +6,6 @@ defines a number of providers that can be used in other cookbooks:
 * database: For managing databases.
 * execute: For running commands against the database.
 * extension: For installing extensions.
-* munin: For configuring munin plugins for a given database name.
 * table: For managing database tables.
 * user: For managing database users.
 * tablespace: For managing tablespaces.
index 086047258a6d3f4e685b36b9531333f6e666fcc9..c34b4b0131e3194892929307a527706f7a9d99e2 100644 (file)
@@ -173,44 +173,4 @@ clusters.each do |name, details|
       action :delete
     end
   end
-
-  munin_suffix = name.tr("/", ":")
-
-  munin_plugin "postgres_bgwriter_#{munin_suffix}" do
-    target "postgres_bgwriter"
-    conf "munin.erb"
-    conf_variables :port => details[:port]
-  end
-
-  munin_plugin "postgres_checkpoints_#{munin_suffix}" do
-    target "postgres_checkpoints"
-    conf "munin.erb"
-    conf_variables :port => details[:port]
-  end
-
-  munin_plugin "postgres_connections_db_#{munin_suffix}" do
-    target "postgres_connections_db"
-    conf "munin.erb"
-    conf_variables :port => details[:port]
-  end
-
-  munin_plugin "postgres_users_#{munin_suffix}" do
-    target "postgres_users"
-    conf "munin.erb"
-    conf_variables :port => details[:port]
-  end
-
-  munin_plugin "postgres_xlog_#{munin_suffix}" do
-    target "postgres_xlog"
-    conf "munin.erb"
-    conf_variables :port => details[:port]
-  end
-
-  next unless File.exist?("/var/lib/postgresql/#{details[:version]}/main/recovery.conf")
-
-  munin_plugin "postgres_replication_#{munin_suffix}" do
-    target "postgres_replication"
-    conf "munin.erb"
-    conf_variables :port => details[:port]
-  end
 end
diff --git a/cookbooks/postgresql/resources/munin.rb b/cookbooks/postgresql/resources/munin.rb
deleted file mode 100644 (file)
index 4b69d42..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-#
-# Cookbook:: postgresql
-# Resource:: postgresql_munin
-#
-# Copyright:: 2015, OpenStreetMap Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# https://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-unified_mode true
-
-default_action :create
-
-property :munin, :kind_of => String, :name_property => true
-property :cluster, :kind_of => String, :required => true
-property :database, :kind_of => String, :required => true
-
-action :create do
-  cluster = node[:postgresql][:clusters] && node[:postgresql][:clusters][new_resource.cluster]
-  database = new_resource.database
-
-  if cluster
-    %w[cache connections locks querylength scans size transactions tuples].each do |plugin|
-      munin_plugin "postgres_#{plugin}_#{database}:#{suffix}" do
-        target "postgres_#{plugin}_"
-        conf "munin.erb"
-        conf_cookbook "postgresql"
-        conf_variables :port => cluster[:port]
-        restart_munin false
-      end
-    end
-  else
-    Chef::Log.info "Postgres cluster #{new_resource.cluster} not found"
-  end
-end
-
-action :delete do
-  database = new_resource.database
-
-  %w[cache connections locks querylength scans size transactions tuples].each do |plugin|
-    munin_plugin "postgres_#{plugin}_#{database}:#{suffix}" do
-      action :delete
-      restart_munin false
-    end
-  end
-end
-
-action_class do
-  def suffix
-    new_resource.cluster.tr("/", ":")
-  end
-end
-
-def after_created
-  notifies :restart, "service[munin-node]"
-end
diff --git a/cookbooks/postgresql/templates/default/munin.erb b/cookbooks/postgresql/templates/default/munin.erb
deleted file mode 100644 (file)
index fd08870..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-# DO NOT EDIT - This file is being maintained by Chef
-
-[<%= @name %>]
-user postgres
-env.PGUSER postgres
-env.PGPORT <%= @port %>
index 6cfe88d45f31ff69540737cbd908a0a365292b25..bd660f34294bbcdf56d29bbe1ee25171b908667a 100644 (file)
@@ -490,11 +490,6 @@ if node[:tile][:database][:external_data_script]
   end
 end
 
-postgresql_munin "gis" do
-  cluster node[:tile][:database][:cluster]
-  database "gis"
-end
-
 directory File.dirname(node[:tile][:database][:node_file]) do
   owner "root"
   group "root"
@@ -669,19 +664,6 @@ tile_directories.each do |directory|
   end
 end
 
-munin_plugin "mod_tile_fresh"
-munin_plugin "mod_tile_latency"
-munin_plugin "mod_tile_response"
-munin_plugin "mod_tile_zoom"
-
-munin_plugin "renderd_processed"
-munin_plugin "renderd_queue"
-munin_plugin "renderd_queue_time"
-munin_plugin "renderd_zoom"
-munin_plugin "renderd_zoom_time"
-
-munin_plugin "replication_delay"
-
 package "ruby-webrick"
 
 prometheus_exporter "modtile" do
index 7d39696dc9799be531baa41b6d9bc4d26c4bed00..ddaecdffbd489519710d4b84d8ea2a0aab991f43 100644 (file)
@@ -231,14 +231,3 @@ end
 gem_package "hpricot" do
   gem_binary node[:ruby][:gem]
 end
-
-munin_plugin "api_calls_status"
-munin_plugin "api_calls_num"
-
-munin_plugin "api_calls_#{node[:hostname]}" do
-  target "api_calls_"
-end
-
-munin_plugin "api_waits_#{node[:hostname]}" do
-  target "api_waits_"
-end
index d37a4097da0e571e627665f1912870a92b5f432d..faa580d9aeec8541f8012c127fd0ed65fefe0bb5 100644 (file)
@@ -10,13 +10,6 @@ default_attributes(
       :jburgess => { :status => :administrator }
     }
   },
-  :munin => {
-    :plugins => {
-      :chrony => {
-        :systime => { :warning => "100", :critical => "250" }
-      }
-    }
-  },
   :networking => {
     :roles => {
       :internal => { :metric => 200 },
index a21cb286b21426c806b158dff44fbbbfa7c90160..9ae1fbc0024efd9e822f53e18f346ae318799176 100644 (file)
@@ -1,20 +1,6 @@
 name "chef-server"
 description "Role applied to all chef servers"
 
-default_attributes(
-  :munin => {
-    :plugins => {
-      :chef_status => {
-        :ascalon => { :warning => ":", :critical => ":" },
-        :idris => { :warning => ":", :critical => ":" },
-        :norbert => { :warning => ":", :critical => ":" },
-        :smaug => { :warning => ":", :critical => ":" },
-        :zark => { :warning => ":", :critical => ":" }
-      }
-    }
-  }
-)
-
 run_list(
   "recipe[chef::server]"
 )
index 05cd66aa946ac426fddf39299028976b8ce77b07..24ae106838bc76ee796153504a4579f3a064c633 100644 (file)
@@ -15,26 +15,6 @@ default_attributes(
       :enable => false
     }
   },
-  :munin => {
-    :plugins => {
-      :postgres_connections_openstreetmap => {
-        :waiting => {
-          :warning => 10,
-          :critical => 20
-        }
-      },
-      :postgres_locks_openstreetmap => {
-        :accesssharelock => {
-          :warning => 900,
-          :critical => 1000
-        },
-        :rowexclusivelock => {
-          :warning => 250,
-          :critical => 300
-        }
-      }
-    }
-  },
   :postgresql => {
     :settings => {
       :defaults => {
index 20c9c32c0f09df7a0670378e0ccc259f15f0ad25..695bc958e50fef08407d65b09fa3128ad6a93bbb 100644 (file)
@@ -1,13 +1,2 @@
 name "hp-dl360e-g8"
 description "Role applied to all HP DL360e G8 machines"
-
-default_attributes(
-  :munin => {
-    :plugins => {
-      :hpasmcli2_temp => {
-        :temp15 => { :warning => 68, :critical => 80 },
-        :temp16 => { :warning => 68, :critical => 80 }
-      }
-    }
-  }
-)
index 20125bb34e45ce66f2a1f18f67829e7c644fe77d..f7aa64a3a21bc73d1a7ffcea33712ad0d93d5d53 100644 (file)
@@ -4,44 +4,5 @@ description "Role applied to all HP DL180 G6 machines"
 default_attributes(
   :hardware => {
     :blacklisted_modules => %w[acpi_power_meter]
-  },
-  :munin => {
-    :plugins => {
-      :hpasmcli2_fans => {
-        :fan1 => { :warning => "98", :critical => "100" },
-        :fan2 => { :warning => "98", :critical => "100" },
-        :fan3 => { :warning => "98", :critical => "100" },
-        :fan4 => { :warning => "98", :critical => "100" }
-      },
-      :hpasmcli2_temp => {
-        :temp3 => { :warning => "80.0", :critical => "85" }
-      },
-      :ipmi_temp => {
-        :Temp1 => { :label => "Air Inlet" },
-        :Temp2CPU1 => { :warning => ":", :label => "CPU 1" },
-        :Temp3CPU2 => { :warning => ":", :label => "CPU 2" },
-        :Temp4 => { :warning => ":", :label => "Memory 1" },
-        :Temp5 => { :warning => ":", :label => "Memory 2" },
-        :Temp8MemB0 => { :warning => ":", :label => "Memory 3" },
-        :Temp9MemB0 => { :warning => ":", :label => "Memory 4" },
-        :Temp10MemB0 => { :warning => ":", :label => "Memory 5" },
-        :Temp12MemB1 => { :warning => ":", :label => "Memory 6" },
-        :Temp13MemB1 => { :warning => ":", :label => "Memory 7" },
-        :Temp14MemB1 => { :warning => ":", :label => "Memory 8" },
-        :Temp15 => { :warning => ":", :label => "Main System Board 3" },
-        :Temp16 => { :warning => ":", :label => "Main System Board 4" },
-        :Temp17 => { :warning => ":", :label => "Main System Board 5" },
-        :Temp18 => { :warning => ":", :label => "Main System Board 6" },
-        :Temp19 => { :warning => ":", :label => "Main System Board 7" },
-        :Temp20 => { :warning => ":", :label => "Main System Board 8" },
-        :Temp21 => { :warning => ":", :label => "Main System Board 9" },
-        :Temp26 => { :warning => ":", :label => "Drive Backplane 1" },
-        :Temp27 => { :warning => ":", :label => "Drive Backplane 2" },
-        :Temp28 => { :warning => ":", :label => "Drive Backplane 3" },
-        :Temp29 => { :warning => ":", :label => "Drive Backplane 4" },
-        :Temp30 => { :warning => ":", :label => "Drive Backplane 5" },
-        :Temp31 => { :warning => ":", :label => "Drive Backplane 6" }
-      }
-    }
   }
 )
index c7a14cda43d48ee589d8c54c2357f60669789242..fe953d50a8e19db4601cad66f3bdc78f696f9c34 100644 (file)
@@ -4,45 +4,5 @@ description "Role applied to all HP DL360 G6 machines"
 default_attributes(
   :hardware => {
     :blacklisted_modules => %w[acpi_power_meter]
-  },
-  :munin => {
-    :plugins => {
-      :hpasmcli2_fans => {
-        :fan1 => { :warning => "85", :critical => "90" },
-        :fan2 => { :warning => "85", :critical => "90" },
-        :fan3 => { :warning => "85", :critical => "90" },
-        :fan4 => { :warning => "85", :critical => "90" }
-      },
-      :ipmi_temp => {
-        :Temp1 => { :label => "External Environment" },
-        :Temp2 => { :warning => ":", :label => "CPU 1" },
-        :Temp3 => { :warning => ":", :label => "CPU 2" },
-        :Temp4 => { :warning => ":", :label => "Memory 1" },
-        :Temp5 => { :warning => ":", :label => "Memory 2" },
-        :Temp6 => { :warning => ":", :label => "Memory 3" },
-        :Temp7 => { :warning => ":", :label => "Memory 4" },
-        :Temp8 => { :warning => ":", :label => "Memory 5" },
-        :Temp9 => { :warning => ":", :label => "Memory 6" },
-        :Temp10 => { :warning => ":", :label => "Memory 7" },
-        :Temp11 => { :warning => ":", :label => "Memory 8" },
-        :Temp12 => { :warning => ":", :label => "PSU 1" },
-        :Temp13 => { :warning => ":", :label => "PSU 2" },
-        :Temp14 => { :warning => ":", :label => "Memory 9" },
-        :Temp15 => { :warning => ":", :label => "CPU Zone 1" },
-        :Temp16 => { :warning => ":", :label => "CPU Zone 2" },
-        :Temp17 => { :warning => ":", :label => "Memory 10" },
-        :Temp18 => { :warning => ":", :label => "CPU Zone 3" },
-        :Temp19 => { :warning => ":", :label => "Peripheral Bay 1" },
-        :Temp20 => { :warning => ":", :label => "Peripheral Bay 2" },
-        :Temp21 => { :warning => ":", :label => "Peripheral Bay 3" },
-        :Temp22 => { :warning => ":", :label => "Peripheral Bay 4" },
-        :Temp23 => { :warning => ":", :label => "Peripheral Bay 5" },
-        :Temp24 => { :warning => ":", :label => "Peripheral Bay 6" },
-        :Temp25 => { :warning => ":", :label => "Peripheral Bay 7" },
-        :Temp26 => { :warning => ":", :label => "Peripheral Bay 8" },
-        :Temp27 => { :warning => ":", :label => "Drive Backplane" },
-        :Temp28 => { :warning => ":", :label => "System Board" }
-      }
-    }
   }
 )
index 01f2afc001de04d30612b48229f9dffddb8ba488..4d086da763ab4a052f3d88a9140680c28e49f23a 100644 (file)
@@ -1,15 +1,2 @@
 name "hp-g9"
 description "Role applied to all HP G9 machines"
-
-default_attributes(
-  :munin => {
-    :plugins => {
-      :hpasmcli2_temp => {
-        :temp11 => { :warning => 85, :critical => 100 },
-        :temp12 => { :warning => 85, :critical => 100 },
-        :temp19 => { :warning => 85, :critical => 100 },
-        :temp20 => { :warning => 85, :critical => 100 }
-      }
-    }
-  }
-)
index 3af9613075e5d49bb37c00bcf128f55cc62a86cf..3505bc18a2edf7c999fae979dafdc3f7c23cd524 100644 (file)
@@ -10,16 +10,6 @@ default_attributes(
       }
     }
   },
-  :munin => {
-    :plugins => {
-      :sensors_temp => {
-        :temp6 => { :warning => "71.0", :critical => "76.0" },
-        :temp7 => { :warning => "71.0", :critical => "76.0" },
-        :temp8 => { :warning => "71.0", :critical => "76.0" },
-        :temp9 => { :warning => "71.0", :critical => "76.0" }
-      }
-    }
-  },
   :networking => {
     :interfaces => {
       :external => {
index 6cf89549391c925261d98b8f8cc7d91a499ab48d..6648ce7d8c54d86d74949fe7b5d55e619e34847e 100644 (file)
@@ -98,16 +98,6 @@ default_attributes(
     },
     :private_aliases => "mail"
   },
-  :munin => {
-    :plugins => {
-      :exim_mailqueue => {
-        :mails => {
-          :warning => 500,
-          :critical => 1000
-        }
-      }
-    }
-  },
   :prometheus => {
     :metrics => {
       :exim_queue_limit => { :metric => 2500 }
index 516546968c35a112d77e8ae2ef41a2206efeb0bf..1fad914b4d09e2cccc6811511e33efe5b62c4480 100644 (file)
@@ -9,10 +9,7 @@ default_attributes(
     }
   },
   :hosted_by => "Université de Pau et des Pays de l'Adour",
-  :location => "Pau, France",
-  :munin => {
-    :allow => ["10.64.1.11"]
-  }
+  :location => "Pau, France"
 )
 
 override_attributes(
index a16c9e72162fb03ac8e4205c7313e42be3156f98..61352aaa7b4c8f73dbf91a1cbf59bfe585ef4f26 100644 (file)
@@ -8,24 +8,6 @@ default_attributes(
     }
   },
   :location => "Zagreb, Croatia",
-  :munin => {
-    :plugins => {
-      :sensors_temp => {
-        :temp1 => { :warning => "85.0" },
-        :temp2 => { :warning => "85.0" },
-        :temp3 => { :warning => "85.0" },
-        :temp4 => { :warning => "85.0" },
-        :temp5 => { :warning => "85.0" },
-        :temp6 => { :warning => "85.0" },
-        :temp8 => { :warning => "85.0" },
-        :temp9 => { :warning => "85.0" },
-        :temp10 => { :warning => "85.0" },
-        :temp11 => { :warning => "85.0" },
-        :temp12 => { :warning => "85.0" },
-        :temp13 => { :warning => "85.0" }
-      }
-    }
-  },
   :networking => {
     :interfaces => {
       :external => {
index 5b60d18b0793819b3d24fcfa175c505e53d4df51..d81b06c9f77cadf104e4e7f0e2c51d518c93c6f8 100644 (file)
@@ -2,44 +2,6 @@ name "stormfly-03"
 description "Master role applied to stormfly-03"
 
 default_attributes(
-  :munin => {
-    :plugins => {
-      :hpasmcli2_temp => {
-        :temp2 => { :warning => "68" },
-        :temp3 => { :warning => "68" }
-      },
-      :sensors_temp => {
-        :temp4 => { :warning => "98" },
-        :temp5 => { :warning => "98" },
-        :temp6 => { :warning => "98" },
-        :temp7 => { :warning => "98" },
-        :temp8 => { :warning => "98" },
-        :temp9 => { :warning => "98" },
-        :temp10 => { :warning => "98" },
-        :temp11 => { :warning => "98" },
-        :temp12 => { :warning => "98" },
-        :temp13 => { :warning => "98" },
-        :temp14 => { :warning => "98" },
-        :temp15 => { :warning => "98" },
-        :temp16 => { :warning => "98" },
-        :temp17 => { :warning => "98" },
-        :temp21 => { :warning => "98" },
-        :temp22 => { :warning => "98" },
-        :temp23 => { :warning => "98" },
-        :temp24 => { :warning => "98" },
-        :temp25 => { :warning => "98" },
-        :temp26 => { :warning => "98" },
-        :temp27 => { :warning => "98" },
-        :temp28 => { :warning => "98" },
-        :temp29 => { :warning => "98" },
-        :temp30 => { :warning => "98" },
-        :temp31 => { :warning => "98" },
-        :temp32 => { :warning => "98" },
-        :temp33 => { :warning => "98" },
-        :temp34 => { :warning => "98" }
-      }
-    }
-  },
   :networking => {
     :interfaces => {
       :external => {
index b5ab1693263151759bab58dd458ac092496e603c..97bd895f8d55f49ed75dcbb024a55a88ff3d8f8b 100644 (file)
@@ -24,15 +24,6 @@ default_attributes(
       :listen_cores_buckets_ratio => 8
     }
   },
-  :munin => {
-    :plugins => {
-      :renderd_processed => {
-        :graph_order => "reqPrio req reqLow dirty reqBulk dropped",
-        :reqPrio => { :draw => "AREA" },
-        :req => { :draw => "STACK" }
-      }
-    }
-  },
   :postgresql => {
     :settings => {
       :defaults => {
diff --git a/test/integration/munin-server/inspec/apache_spec.rb b/test/integration/munin-server/inspec/apache_spec.rb
deleted file mode 100644 (file)
index 8006330..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-describe package("apache2") do
-  it { should be_installed }
-end
-
-describe service("apache2") do
-  it { should be_enabled }
-  it { should be_running }
-end
-
-describe port(80) do
-  it { should be_listening }
-  its("protocols") { should cmp "tcp" }
-end
-
-describe port(443) do
-  it { should be_listening }
-  its("protocols") { should cmp "tcp" }
-end
index a27a00ce9ab9a19853bad751423577781d88c115..766d65c034a49bebc36ac580614f75ac99774f25 100644 (file)
@@ -1,3 +1,3 @@
 describe package("munin") do
-  it { should be_installed }
+  it { should_not be_installed }
 end
index 57025897051c0ada3396f36f48ca68351f851983..e097789de431ce3a307cbffe525d948251d201c0 100644 (file)
@@ -1,8 +1,8 @@
 describe package("rrdcached") do
-  it { should be_installed }
+  it { should_not be_installed }
 end
 
 describe service("rrdcached") do
-  it { should be_enabled }
-  it { should be_running }
+  it { should_not be_enabled }
+  it { should_not be_running }
 end
index e07e3b27988ab5fd9a405bd55258858a2e85d166..023bd961242c347d126648ed147ca1fd4de01fc2 100644 (file)
@@ -1,13 +1,12 @@
 describe package("munin-node") do
-  it { should be_installed }
+  it { should_not be_installed }
 end
 
 describe service("munin-node") do
-  it { should be_enabled }
-  it { should be_running }
+  it { should_not be_enabled }
+  it { should_not be_running }
 end
 
 describe port(4949) do
-  it { should be_listening }
-  its("protocols") { should cmp "tcp" }
+  it { should_not be_listening }
 end