diff --git a/sensu/_common.sls b/sensu/_common.sls
new file mode 100644
index 0000000..3376acc
--- /dev/null
+++ b/sensu/_common.sls
@@ -0,0 +1,38 @@
+
+{#
+{%- if grains.os_family == 'Debian' %}
+
+sensu_repo:
+  pkgrepo.managed:
+  - human_name: Sensu
+  - name: deb http://repos.sensuapp.org/apt sensu main
+  - file: /etc/apt/sources.list.d/sensu.list
+  - key_url: salt://sensu/conf/sensu-apt.gpg
+
+{%- elif grains.os_family == 'RedHat' %}
+
+sensu_repo:
+  pkgrepo.managed:
+  - name: sensu
+  - humanname: sensu-main
+  - baseurl: http://repos.sensuapp.org/yum/el/$releasever/$basearch/
+  - gpgcheck: 0
+
+{%- endif %}
+#}
+
+/etc/sensu:
+  file.directory:
+  - user: sensu
+  - group: sensu
+  - mode: 755
+  - makedirs: true
+
+/srv/sensu:
+  file.directory:
+  - user: root
+  - group: root
+  - mode: 755
+  - makedirs: true
+  - require:
+    - file: /etc/sensu
diff --git a/sensu/client.sls b/sensu/client.sls
new file mode 100644
index 0000000..8c48480
--- /dev/null
+++ b/sensu/client.sls
@@ -0,0 +1,107 @@
+{%- from "sensu/map.jinja" import client with context %}
+{%- if client.enabled %}
+
+include:
+- sensu._common
+
+sensu_client_packages:
+  pkg.installed:
+  - names: {{ client.pkgs }}
+  - require_in:
+    - file: /etc/sensu
+
+/etc/sensu/plugins:
+  file.recurse:
+  - clean: true
+  - source: salt://sensu/files/checks
+  - user: sensu
+  - group: sensu
+  - file_mode: 755
+  - dir_mode: 755
+  - makedirs: true
+  - require:
+    - file: /srv/sensu
+
+{%- for plugin_name, plugin in client.plugin.iteritems() %}
+{%- if plugin.enabled %}
+
+{%- if plugin_name == 'sensu_community_plugins' %}
+
+sensu_client_community_plugins
+  gem.installed:
+  - names:
+    - sensu-plugin
+
+{%- endif %}
+
+{%- if plugin_name == 'monitoring_for_openstack' %}
+
+sensu_monitor_openstack_six:
+  pip.installed:
+  - name: six>=1.9.0
+
+sensu_monitor_openstack_source:
+  git.latest:
+  - name: https://github.com/stackforge/monitoring-for-openstack.git
+  - target: /root/monitoring-for-openstack
+  - rev: master
+  - require:
+    - pip: sensu_monitor_openstack_six
+
+sensu_monitor_openstack_install:
+  cmd.run:
+  - name: python setup.py install
+  - cwd: /root/monitoring-for-openstack
+  - unless: pip freeze | grep monitoring-for-openstack
+  - require:
+    - git: sensu_monitor_openstack_source
+
+{%- endif %}
+
+{%- endif %}
+{%- endfor %}
+
+sensu_client_check_grains:
+  file.managed:
+  - name: /etc/salt/grains
+  - source: salt://sensu/files/checks.grain
+  - template: jinja
+  - mode: 600
+  - require:
+    - pkg: sensu_client_packages
+
+/etc/sensu/conf.d/rabbitmq.json:
+  file.managed:
+  - source: salt://sensu/files/rabbitmq.json
+  - template: jinja
+  - mode: 644
+  - require:
+    - file: /etc/sensu
+  - watch_in:
+    - service: service_sensu_client
+
+/etc/sensu/conf.d/client.json:
+  file.managed:
+  - source: salt://sensu/files/client.json
+  - template: jinja
+  - mode: 644
+  - require:
+    - file: /etc/sensu
+  - watch_in:
+    - service: service_sensu_client
+
+service_sensu_client:
+  service.running:
+  - name: sensu-client
+  - enable: true
+  - require:
+    - pkg: sensu_client_packages
+
+/etc/sudoers.d/90-sensu-user:
+  file.managed:
+  - source: salt://sensu/files/sudoer
+  - user: root
+  - group: root
+  - mode: 440
+
+{%- endif %}
diff --git a/sensu/dashboard.sls b/sensu/dashboard.sls
new file mode 100644
index 0000000..5416d65
--- /dev/null
+++ b/sensu/dashboard.sls
@@ -0,0 +1,29 @@
+{%- from "sensu/map.jinja" import dashboard with context %}
+{%- if dashboard.enabled %}
+
+include:
+- sensu._common
+
+sensu_dashboard_packages:
+  pkg.installed:
+  - names: {{ dashboard.pkgs }}
+  - require_in:
+    - file: /etc/sensu
+    - service: service_sensu_dashboard
+
+/etc/sensu/uchiwa.json:
+  file.managed:
+  - source: salt://sensu/files/uchiwa.json
+  - template: jinja
+  - mode: 644
+  - require:
+    - file: /etc/sensu
+  - watch_in:
+    - service: service_sensu_dashboard
+
+service_sensu_dashboard:
+  service.running:
+  - name: uchiwa
+  - enable: true
+
+{%- endif %}
\ No newline at end of file
diff --git a/sensu/files/api.json b/sensu/files/api.json
new file mode 100644
index 0000000..ec290ec
--- /dev/null
+++ b/sensu/files/api.json
@@ -0,0 +1,7 @@
+{%- from "sensu/map.jinja" import server with context -%}
+{
+  "api": {
+    "host": "{{ server.bind.address }}",
+    "port": {{ server.bind.port }}
+  }
+}
\ No newline at end of file
diff --git a/sensu/files/check.json b/sensu/files/check.json
new file mode 100644
index 0000000..5f0efee
--- /dev/null
+++ b/sensu/files/check.json
@@ -0,0 +1,50 @@
+{
+  "checks": {
+    "{{ check_name }}": {
+      "subscribers": [
+        {%- for subscriber in check.subscribers %}
+        "{{ subscriber }}"{% if not loop.last %},{% endif %}
+        {%- endfor %}
+      ],
+      "command": "{{ check.command }}",
+      {%- if check.notification is defined %}
+      "notification": "{{ check.notification }}",
+      {%- endif %}
+      {%- if check.asset is defined %}
+      "asset": "{{ check.asset }}",
+      {%- endif %}
+      {%- if check.customer is defined %}
+      "customer": "{{ check.customer }}",
+      {%- endif %}
+      {%- if check.standalone is defined %}
+      {%- if check.standalone %}
+      "standalone": true,
+      {%- else %}
+      "standalone": false,
+      {%- endif %}
+      {%- endif %}
+
+      {%- if check.type is defined %}
+      "handlers": [
+        {%- for handler in pillar.sensu.server.metric_handlers %}
+        "{{ handler }}"{% if not loop.last %},{% endif %}
+        {%- endfor %}
+      ],
+      "type": "{{ check.type }}",
+      {%- else %}
+      "handlers": [
+        "default"
+        {#
+        {%- for handler in pillar.sensu.server.check_handlers %}
+        "{{ handler }}"{% if not loop.last %},{% endif %}
+        {%- endfor %}
+        #}
+      ],
+      {%- endif %}
+      {%- if check.occurrences is defined %}
+      "occurrences": {{ check.occurrences }},
+      {%- endif %}
+      "interval": {{ check.interval }}
+    }
+  }
+}
diff --git a/sensu/files/check_manual.json b/sensu/files/check_manual.json
new file mode 100644
index 0000000..266789c
--- /dev/null
+++ b/sensu/files/check_manual.json
@@ -0,0 +1,54 @@
+{%- for check in pillar.sensu.server.checks %}
+{%- if check_name == check.name %}
+{
+  "checks": {
+    "{{ check.name }}": {
+      "subscribers": [
+        {%- for subscriber in check.subscribers %}
+        "{{ subscriber }}"{% if not loop.last %},{% endif %}
+        {%- endfor %}
+      ],
+      "command": "{{ check.command }}",
+      {%- if check.notification is defined %}
+      "notification": "{{ check.notification }}",
+      {%- endif %}
+      {%- if check.asset is defined %}
+      "asset": "{{ check.asset }}",
+      {%- endif %}
+      {%- if check.customer is defined %}
+      "customer": "{{ check.customer }}",
+      {%- endif %}
+      {%- if check.standalone is defined %}
+      {%- if check.standalone %}
+      "standalone": true,
+      {%- else %}
+      "standalone": false,
+      {%- endif %}
+      {%- endif %}
+
+      {%- if check.type is defined %}
+      "handlers": [
+        {%- for handler in pillar.sensu.server.metric_handlers %}
+        "{{ handler }}"{% if not loop.last %},{% endif %}
+        {%- endfor %}
+      ],
+      "type": "{{ check.type }}",
+      {%- else %}
+      "handlers": [
+        "default"
+        {#
+        {%- for handler in pillar.sensu.server.check_handlers %}
+        "{{ handler }}"{% if not loop.last %},{% endif %}
+        {%- endfor %}
+        #}
+      ],
+      {%- endif %}
+      {%- if check.occurrences is defined %}
+      "occurrences": {{ check.occurrences }},
+      {%- endif %}
+      "interval": {{ check.interval }}
+    }
+  }
+}
+{%- endif %}
+{%- endfor %}
\ No newline at end of file
diff --git a/sensu/files/checks.grain b/sensu/files/checks.grain
new file mode 100644
index 0000000..8b96b74
--- /dev/null
+++ b/sensu/files/checks.grain
@@ -0,0 +1,10 @@
+sensu_checks:
+{%- from "sensu/map.jinja" import client with context %}
+{%- for service in client.supported_services %}
+{%- if service in grains.get('services', []) %}
+{%- set service_checks_file = service+'/files/sensu.conf' %}
+{%- macro indent_service_checks() %}{% include service_checks_file %}{% endmacro %}
+{{ indent_service_checks()|indent(2, true) }}
+
+{%- endif %}
+{%- endfor %}
\ No newline at end of file
diff --git a/sensu/files/checks/check-dns.rb b/sensu/files/checks/check-dns.rb
new file mode 100644
index 0000000..5b868bb
--- /dev/null
+++ b/sensu/files/checks/check-dns.rb
@@ -0,0 +1,107 @@
+#! /usr/bin/env ruby
+#
+#   check-dns
+#
+# DESCRIPTION:
+#   This plugin checks DNS resolution using `dig`.
+#   Note: if testing reverse DNS with -t PTR option,
+#   results will end with trailing '.' (dot)
+#
+# OUTPUT:
+#   plain text
+#
+# PLATFORMS:
+#   Linux, BSD
+#
+# DEPENDENCIES:
+#   gem: sensu-plugin
+#
+# USAGE:
+#   example commands
+#
+# NOTES:
+#   Does it behave differently on specific platforms, specific use cases, etc
+#
+# LICENSE:
+#   Copyright 2014 Sonian, Inc. and contributors. <support@sensuapp.org>
+#   Released under the same terms as Sensu (the MIT license); see LICENSE
+#   for details.
+#
+
+require 'rubygems' if RUBY_VERSION < '1.9.0'
+require 'sensu-plugin/check/cli'
+
+class DNS < Sensu::Plugin::Check::CLI
+  option :domain,
+         description: 'Domain to resolve (or ip if type PTR)',
+         short: '-d DOMAIN',
+         long: '--domain DOMAIN'
+
+  option :type,
+         description: 'Record type to resolve (A, AAAA, TXT, etc) use PTR for reverse lookup',
+         short: '-t RECORD',
+         long: '--type RECORD',
+         default: 'A'
+
+  option :server,
+         description: 'Server to use for resolution',
+         short: '-s SERVER',
+         long: '--server SERVER'
+
+  option :result,
+         description: 'A positive result entry',
+         short: '-r RESULT',
+         long: '--result RESULT'
+
+  option :warn_only,
+         description: 'Warn instead of critical on failure',
+         short: '-w',
+         long: '--warn-only',
+         boolean: true
+
+  option :debug,
+         description: 'Print debug information',
+         long: '--debug',
+         boolean: true
+
+  def resolve_domain
+    if config[:type] == 'PTR'
+      cmd = "dig #{config[:server] ? "@#{config[:server]}" : ''} -x #{config[:domain]} +short +time=1"
+    else
+      cmd = "dig #{config[:server] ? "@#{config[:server]}" : ''} #{config[:domain]} #{config[:type]} +short +time=1"
+    end
+    puts cmd if config[:debug]
+    output = `#{cmd}`
+    puts output if config[:debug]
+    # Trim, split, remove comments and empty lines
+    entries = output.strip.split("\n").reject { |l| l.match('^;') || l.match('^$') }
+    puts "Entries: #{entries}" if config[:debug]
+    entries
+  end
+
+  def run
+    if config[:domain].nil?
+      unknown 'No domain specified'
+    else
+      entries = resolve_domain
+      if entries.length.zero?
+        if config[:warn_only]
+          warning "Could not resolve #{config[:domain]}"
+        else
+          critical "Could not resolve #{config[:domain]}"
+        end
+      else
+        if config[:result]
+          # #YELLOW
+          if entries.include?(config[:result])  # rubocop:disable BlockNesting
+            ok "Resolved #{config[:domain]} including #{config[:result]}"
+          else
+            critical "Resolved #{config[:domain]} did not include #{config[:result]}"
+          end
+        else
+          ok "Resolved #{config[:domain]} #{config[:type]} records"
+        end
+      end
+    end
+  end
+end
diff --git a/sensu/files/checks/check-haproxy.rb b/sensu/files/checks/check-haproxy.rb
new file mode 100644
index 0000000..6219d26
--- /dev/null
+++ b/sensu/files/checks/check-haproxy.rb
@@ -0,0 +1,173 @@
+#! /usr/bin/env ruby
+#
+#   check-haproxy.rb
+#
+# DESCRIPTION:
+#   Defaults to checking if ALL services in the given group are up; with
+#   -1, checks if ANY service is up. with -A, checks all groups.
+#
+# OUTPUT:
+#   plain text
+#
+# PLATFORMS:
+#   Linux
+#
+# DEPENDENCIES:
+#   gem: sensu-plugin
+#
+# USAGE:
+#
+# LICENSE:
+#   Copyright 2011 Sonian, Inc. and contributors. <support@sensuapp.org>
+#   Released under the same terms as Sensu (the MIT license); see LICENSE
+#   for details.
+#
+
+require 'sensu-plugin/check/cli'
+require 'net/http'
+require 'socket'
+require 'csv'
+require 'uri'
+
+#
+# Check HA Proxy
+#
+class CheckHAProxy < Sensu::Plugin::Check::CLI
+  option :stats_source,
+         short: '-S HOSTNAME|SOCKETPATH',
+         long: '--stats HOSTNAME|SOCKETPATH',
+         description: 'HAproxy web stats hostname or path to stats socket',
+         required: true
+  option :port,
+         short: '-P PORT',
+         long: '--port PORT',
+         description: 'HAproxy web stats port',
+         default: '80'
+  option :path,
+         short: '-q STATUSPATH',
+         long: '--statspath STATUSPATH',
+         description: 'HAproxy web stats path',
+         default: '/'
+  option :username,
+         short: '-u USERNAME',
+         long: '--user USERNAME',
+         description: 'HAproxy web stats username'
+  option :password,
+         short: '-p PASSWORD',
+         long: '--pass PASSWORD',
+         description: 'HAproxy web stats password'
+  option :warn_percent,
+         short: '-w PERCENT',
+         boolean: true,
+         default: 50,
+         proc: proc(&:to_i),
+         description: 'Warning Percent, default: 50'
+  option :crit_percent,
+         short: '-c PERCENT',
+         boolean: true,
+         default: 25,
+         proc: proc(&:to_i),
+         description: 'Critical Percent, default: 25'
+  option :session_warn_percent,
+         short: '-W PERCENT',
+         boolean: true,
+         default: 75,
+         proc: proc(&:to_i),
+         description: 'Session Limit Warning Percent, default: 75'
+  option :session_crit_percent,
+         short: '-C PERCENT',
+         boolean: true,
+         default: 90,
+         proc: proc(&:to_i),
+         description: 'Session Limit Critical Percent, default: 90'
+  option :all_services,
+         short: '-A',
+         boolean: true,
+         description: 'Check ALL Services, flag enables'
+  option :missing_ok,
+         short: '-m',
+         boolean: true,
+         description: 'Missing OK, flag enables'
+  option :service,
+         short: '-s SVC',
+         description: 'Service Name to Check'
+  option :exact_match,
+         short: '-e',
+         boolean: false,
+         description: 'Whether service name specified with -s should be exact match or not'
+
+  def run #rubocop:disable all
+    if config[:service] || config[:all_services]
+      services = acquire_services
+    else
+      unknown 'No service specified'
+    end
+
+    if services.empty?
+      message "No services matching /#{config[:service]}/"
+      if config[:missing_ok]
+        ok
+      else
+        warning
+      end
+    else
+      percent_up = 100 * services.count { |svc| svc[:status] == 'UP' || svc[:status] == 'OPEN' } / services.size
+      failed_names = services.reject { |svc| svc[:status] == 'UP' || svc[:status] == 'OPEN' }.map { |svc| svc[:svname] }
+      critical_sessions = services.select { |svc| svc[:slim].to_i > 0 && (100 * svc[:scur].to_f / svc[:slim].to_f) > config[:session_crit_percent] }
+      warning_sessions = services.select { |svc| svc[:slim].to_i > 0 && (100 * svc[:scur].to_f / svc[:slim].to_f) > config[:session_warn_percent] }
+
+      status = "UP: #{percent_up}% of #{services.size} /#{config[:service]}/ services" + (failed_names.empty? ? '' : ", DOWN: #{failed_names.join(', ')}")
+      if percent_up < config[:crit_percent]
+        critical status
+      elsif !critical_sessions.empty?
+        critical status + '; Active sessions critical: ' + critical_sessions.map { |s| "#{s[:scur]} #{s[:pxname]}.#{s[:svname]}" }.join(', ')
+      elsif percent_up < config[:warn_percent]
+        warning status
+      elsif !warning_sessions.empty?
+        warning status + '; Active sessions warning: ' + warning_sessions.map { |s| "#{s[:scur]} #{s[:pxname]}.#{s[:svname]}" }.join(', ')
+      else
+        ok status
+      end
+    end
+  end
+
+  def acquire_services #rubocop:disable all
+    uri = URI.parse(config[:stats_source])
+
+    if uri.is_a?(URI::Generic) && File.socket?(uri.path)
+      srv = UNIXSocket.open(config[:stats_source])
+      srv.write("show stat\n")
+      out = srv.read
+      srv.close
+    else
+      res = Net::HTTP.start(config[:stats_source], config[:port]) do |http|
+        req = Net::HTTP::Get.new("/#{config[:path]};csv;norefresh")
+        unless config[:username].nil?
+          req.basic_auth config[:username], config[:password]
+        end
+        http.request(req)
+      end
+      unless res.code.to_i == 200
+        unknown "Failed to fetch from #{config[:stats_source]}:#{config[:port]}/#{config[:path]}: #{res.code}"
+      end
+
+      out = res.body
+    end
+
+    parsed = CSV.parse(out, skip_blanks: true)
+    keys = parsed.shift.reject(&:nil?).map { |k| k.match(/(\w+)/)[0].to_sym }
+    haproxy_stats = parsed.map { |line| Hash[keys.zip(line)] }
+
+    if config[:all_services]
+      haproxy_stats
+    else
+      regexp = config[:exact_match] ? Regexp.new("^#{config[:service]}$") : Regexp.new("#{config[:service]}")
+      haproxy_stats.select do |svc|
+        svc[:pxname] =~ regexp
+        # #YELLOW
+      end.reject do |svc| # rubocop: disable MultilineBlockChain
+        %w(FRONTEND BACKEND).include?(svc[:svname])
+      end
+    end
+  end
+end
diff --git a/sensu/files/checks/check-rabbitmq-queue.rb b/sensu/files/checks/check-rabbitmq-queue.rb
new file mode 100644
index 0000000..be5d4da
--- /dev/null
+++ b/sensu/files/checks/check-rabbitmq-queue.rb
@@ -0,0 +1,117 @@
+#!/usr/bin/env ruby
+#  encoding: UTF-8
+#
+# Check RabbitMQ Queue Messages
+# ===
+#
+# DESCRIPTION:
+# This plugin checks the number of messages queued on the RabbitMQ server in a specific queues
+#
+# PLATFORMS:
+#   Linux, BSD, Solaris
+#
+# DEPENDENCIES:
+#   RabbitMQ rabbitmq_management plugin
+#   gem: sensu-plugin
+#   gem: carrot-top
+#
+# LICENSE:
+# Copyright 2012 Evan Hazlett <ejhazlett@gmail.com>
+#
+# Released under the same terms as Sensu (the MIT license); see LICENSE
+# for details.
+
+require 'sensu-plugin/check/cli'
+require 'socket'
+require 'carrot-top'
+
+# main plugin class
+class CheckRabbitMQMessages < Sensu::Plugin::Check::CLI
+  option :host,
+         description: 'RabbitMQ management API host',
+         long: '--host HOST',
+         default: 'localhost'
+
+  option :port,
+         description: 'RabbitMQ management API port',
+         long: '--port PORT',
+         proc: proc(&:to_i),
+         default: 15_672
+
+  option :ssl,
+         description: 'Enable SSL for connection to the API',
+         long: '--ssl',
+         boolean: true,
+         default: false
+
+  option :user,
+         description: 'RabbitMQ management API user',
+         long: '--user USER',
+         default: 'guest'
+
+  option :password,
+         description: 'RabbitMQ management API password',
+         long: '--password PASSWORD',
+         default: 'guest'
+
+  option :queue,
+         description: 'RabbitMQ queue to monitor',
+         long: '--queue queue_names',
+         required: true,
+         proc: proc { |a| a.split(',') }
+
+  option :warn,
+         short: '-w NUM_MESSAGES',
+         long: '--warn NUM_MESSAGES',
+         description: 'WARNING message count threshold',
+         default: 250
+
+  option :critical,
+         short: '-c NUM_MESSAGES',
+         long: '--critical NUM_MESSAGES',
+         description: 'CRITICAL message count threshold',
+         default: 500
+
+  def acquire_rabbitmq_info
+    begin
+      rabbitmq_info = CarrotTop.new(
+        host: config[:host],
+        port: config[:port],
+        user: config[:user],
+        password: config[:password],
+        ssl: config[:ssl]
+      )
+    rescue
+      warning 'could not get rabbitmq info'
+    end
+    rabbitmq_info
+  end
+
+  def run
+    @crit = []
+    @warn = []
+    rabbitmq = acquire_rabbitmq_info
+    queues = rabbitmq.queues
+    config[:queue].each do |q|
+      unless queues.map  { |hash| hash['name'] }.include? q
+        @warn << "Queue #{ q } not available"
+        next
+      end
+      queues.each do |queue|
+        next unless queue['name'] == q
+        total = queue['messages']
+        total = 0 if total.nil?
+        message "#{total}"
+        @crit << "#{ q }:#{ total }" if total > config[:critical].to_i
+        @warn << "#{ q }:#{ total }" if total > config[:warn].to_i
+      end
+    end
+    if @crit.empty? && @warn.empty?
+      ok
+    elsif !(@crit.empty?)
+      critical "critical: #{ @crit } warning: #{ @warn }"
+    elsif !(@warn.empty?)
+      warning "critical: #{ @crit } warning: #{ @warn }"
+    end
+  end
+end
diff --git a/sensu/files/checks/check_contrail_analytics.sh b/sensu/files/checks/check_contrail_analytics.sh
new file mode 100755
index 0000000..3976818
--- /dev/null
+++ b/sensu/files/checks/check_contrail_analytics.sh
@@ -0,0 +1,65 @@
+#!/bin/bash
+#
+# check contrail-analytics services status on control nodes
+
+service=analytics
+
+read -ra contrail_status <<< $(sudo supervisorctl -s unix:///tmp/supervisord_$service.sock status)
+
+check_ok=0
+state=RUNNING
+
+read -ra contrail_test <<< ${contrail_status[@]#contrail-$service-api}
+#compare arrays
+if [ ${#contrail_status[@]} -ne ${#contrail_test[@]} ]; then
+        check_ok=1
+fi
+
+if [ check_ok=1 ]; then
+
+        read -ra contrail_test <<< ${contrail_status[@]#STARTING}
+
+        if [ ${#contrail_status[@]} -ne ${#contrail_test[@]} ]; then
+                state=STARTING
+        fi
+
+        read -ra contrail_test <<< ${contrail_status[@]#STOPPED}
+        if [ ${#contrail_status[@]} -ne ${#contrail_test[@]} ]; then
+                state=STOPPED
+        fi
+
+        read -ra contrail_test <<< ${contrail_status[@]#FATAL}
+        if [ ${#contrail_status[@]} -ne ${#contrail_test[@]} ]; then
+                state=FATAL
+        fi
+else
+        state=FATAL
+fi
+
+OK=0
+WARN=0
+CRIT=0
+NUM=0
+
+case "$state" in
+	RUNNING) OK=$(expr $OK + 1) ;;
+	STOPPED|STARTING) WARN=$(expr $WARN + 1) ;;
+	FATAL) CRIT=$(expr $CRIT + 1) ;;
+	*) CRIT=$(expr $CRIT + 1) ;;
+esac
+
+if [ "$NUM" -eq "$OK" ]; then
+	EXITVAL=0 #Status 0 = OK (green)
+fi
+
+if [ "$WARN" -gt 0 ]; then
+	EXITVAL=1 #Status 1 = WARNING (yellow)
+fi
+
+if [ "$CRIT" -gt 0 ]; then
+	EXITVAL=2 #Status 2 = CRITICAL (red)
+fi
+
+echo State of contrail-$service OK:$OK WARN:$WARN CRIT:$CRIT - $LIST
+
+exit $EXITVAL
diff --git a/sensu/files/checks/check_contrail_config.sh b/sensu/files/checks/check_contrail_config.sh
new file mode 100644
index 0000000..a87e539
--- /dev/null
+++ b/sensu/files/checks/check_contrail_config.sh
@@ -0,0 +1,65 @@
+#!/bin/bash
+#
+# check contrail-config services status on control nodes
+
+service=config
+
+read -ra contrail_status <<< $(sudo supervisorctl -s unix:///tmp/supervisord_$service.sock status)
+
+check_ok=0
+state=RUNNING
+
+read -ra contrail_test <<< ${contrail_status[@]#contrail-$service-nodemgr}
+#compare arrays
+if [ ${#contrail_status[@]} -ne ${#contrail_test[@]} ]; then
+        check_ok=1
+fi
+
+if [ check_ok=1 ]; then
+
+        read -ra contrail_test <<< ${contrail_status[@]#STARTING}
+
+        if [ ${#contrail_status[@]} -ne ${#contrail_test[@]} ]; then
+                state=STARTING
+        fi
+
+        read -ra contrail_test <<< ${contrail_status[@]#STOPPED}
+        if [ ${#contrail_status[@]} -ne ${#contrail_test[@]} ]; then
+                state=STOPPED
+        fi
+
+        read -ra contrail_test <<< ${contrail_status[@]#FATAL}
+        if [ ${#contrail_status[@]} -ne ${#contrail_test[@]} ]; then
+                state=FATAL
+        fi
+else
+        state=FATAL
+fi
+
+OK=0
+WARN=0
+CRIT=0
+NUM=0
+
+case "$state" in
+	RUNNING) OK=$(expr $OK + 1) ;;
+	STOPPED|STARTING) WARN=$(expr $WARN + 1) ;;
+	FATAL) CRIT=$(expr $CRIT + 1) ;;
+	*) CRIT=$(expr $CRIT + 1) ;;
+esac
+
+if [ "$NUM" -eq "$OK" ]; then
+	EXITVAL=0 #Status 0 = OK (green)
+fi
+
+if [ "$WARN" -gt 0 ]; then
+	EXITVAL=1 #Status 1 = WARNING (yellow)
+fi
+
+if [ "$CRIT" -gt 0 ]; then
+	EXITVAL=2 #Status 2 = CRITICAL (red)
+fi
+
+echo State of contrail-$service OK:$OK WARN:$WARN CRIT:$CRIT - $LIST
+
+exit $EXITVAL
diff --git a/sensu/files/checks/check_contrail_control.sh b/sensu/files/checks/check_contrail_control.sh
new file mode 100644
index 0000000..11573a4
--- /dev/null
+++ b/sensu/files/checks/check_contrail_control.sh
@@ -0,0 +1,65 @@
+#!/bin/bash
+#
+# check contrail-control services status on control nodes
+
+service=control
+
+read -ra contrail_status <<< $(sudo supervisorctl -s unix:///tmp/supervisord_$service.sock status)
+
+check_ok=0
+state=RUNNING
+
+read -ra contrail_test <<< ${contrail_status[@]#contrail-$service}
+#compare arrays
+if [ ${#contrail_status[@]} -ne ${#contrail_test[@]} ]; then
+        check_ok=1
+fi
+
+if [ check_ok=1 ]; then
+
+        read -ra contrail_test <<< ${contrail_status[@]#STARTING}
+
+        if [ ${#contrail_status[@]} -ne ${#contrail_test[@]} ]; then
+                state=STARTING
+        fi
+
+        read -ra contrail_test <<< ${contrail_status[@]#STOPPED}
+        if [ ${#contrail_status[@]} -ne ${#contrail_test[@]} ]; then
+                state=STOPPED
+        fi
+
+        read -ra contrail_test <<< ${contrail_status[@]#FATAL}
+        if [ ${#contrail_status[@]} -ne ${#contrail_test[@]} ]; then
+                state=FATAL
+        fi
+else
+        state=FATAL
+fi
+
+OK=0
+WARN=0
+CRIT=0
+NUM=0
+
+case "$state" in
+	RUNNING) OK=$(expr $OK + 1) ;;
+	STOPPED|STARTING) WARN=$(expr $WARN + 1) ;;
+	FATAL) CRIT=$(expr $CRIT + 1) ;;
+	*) CRIT=$(expr $CRIT + 1) ;;
+esac
+
+if [ "$NUM" -eq "$OK" ]; then
+	EXITVAL=0 #Status 0 = OK (green)
+fi
+
+if [ "$WARN" -gt 0 ]; then
+	EXITVAL=1 #Status 1 = WARNING (yellow)
+fi
+
+if [ "$CRIT" -gt 0 ]; then
+	EXITVAL=2 #Status 2 = CRITICAL (red)
+fi
+
+echo State of contrail-$service OK:$OK WARN:$WARN CRIT:$CRIT - $LIST
+
+exit $EXITVAL
diff --git a/sensu/files/checks/check_contrail_database.sh b/sensu/files/checks/check_contrail_database.sh
new file mode 100644
index 0000000..c27df5e
--- /dev/null
+++ b/sensu/files/checks/check_contrail_database.sh
@@ -0,0 +1,65 @@
+#!/bin/bash
+#
+# check contrail-database services status on control nodes
+
+service=contrail-database
+
+read -ra contrail_status <<< $(sudo supervisorctl -s unix:///tmp/supervisord_$service.sock status)
+
+check_ok=0
+state=RUNNING
+
+read -ra contrail_test <<< ${contrail_status[@]#contrail-$service}
+#compare arrays
+if [ ${#contrail_status[@]} -ne ${#contrail_test[@]} ]; then
+        check_ok=1
+fi
+
+if [ check_ok=1 ]; then
+
+        read -ra contrail_test <<< ${contrail_status[@]#STARTING}
+
+        if [ ${#contrail_status[@]} -ne ${#contrail_test[@]} ]; then
+                state=STARTING
+        fi
+
+        read -ra contrail_test <<< ${contrail_status[@]#STOPPED}
+        if [ ${#contrail_status[@]} -ne ${#contrail_test[@]} ]; then
+                state=STOPPED
+        fi
+
+        read -ra contrail_test <<< ${contrail_status[@]#FATAL}
+        if [ ${#contrail_status[@]} -ne ${#contrail_test[@]} ]; then
+                state=FATAL
+        fi
+else
+        state=FATAL
+fi
+
+OK=0
+WARN=0
+CRIT=0
+NUM=0
+
+case "$state" in
+	RUNNING) OK=$(expr $OK + 1) ;;
+	STOPPED|STARTING) WARN=$(expr $WARN + 1) ;;
+	FATAL) CRIT=$(expr $CRIT + 1) ;;
+	*) CRIT=$(expr $CRIT + 1) ;;
+esac
+
+if [ "$NUM" -eq "$OK" ]; then
+	EXITVAL=0 #Status 0 = OK (green)
+fi
+
+if [ "$WARN" -gt 0 ]; then
+	EXITVAL=1 #Status 1 = WARNING (yellow)
+fi
+
+if [ "$CRIT" -gt 0 ]; then
+	EXITVAL=2 #Status 2 = CRITICAL (red)
+fi
+
+echo State of contrail-$service OK:$OK WARN:$WARN CRIT:$CRIT - $LIST
+
+exit $EXITVAL
diff --git a/sensu/files/checks/check_contrail_support_service.sh b/sensu/files/checks/check_contrail_support_service.sh
new file mode 100644
index 0000000..babec63
--- /dev/null
+++ b/sensu/files/checks/check_contrail_support_service.sh
@@ -0,0 +1,65 @@
+#!/bin/bash
+#
+# check contrail-support-service services status on control nodes
+
+service=support_service
+
+read -ra contrail_status <<< $(sudo supervisorctl -s unix:///tmp/supervisord_$service.sock status)
+
+check_ok=0
+state=RUNNING
+
+read -ra contrail_test <<< ${contrail_status[@]#rabbitmq-server}
+#compare arrays
+if [ ${#contrail_status[@]} -ne ${#contrail_test[@]} ]; then
+        check_ok=1
+fi
+
+if [ check_ok=1 ]; then
+
+        read -ra contrail_test <<< ${contrail_status[@]#STARTING}
+
+        if [ ${#contrail_status[@]} -ne ${#contrail_test[@]} ]; then
+                state=STARTING
+        fi
+
+        read -ra contrail_test <<< ${contrail_status[@]#STOPPED}
+        if [ ${#contrail_status[@]} -ne ${#contrail_test[@]} ]; then
+                state=STOPPED
+        fi
+
+        read -ra contrail_test <<< ${contrail_status[@]#FATAL}
+        if [ ${#contrail_status[@]} -ne ${#contrail_test[@]} ]; then
+                state=FATAL
+        fi
+else
+        state=FATAL
+fi
+
+OK=0
+WARN=0
+CRIT=0
+NUM=0
+
+case "$state" in
+	RUNNING) OK=$(expr $OK + 1) ;;
+	STOPPED|STARTING) WARN=$(expr $WARN + 1) ;;
+	FATAL) CRIT=$(expr $CRIT + 1) ;;
+	*) CRIT=$(expr $CRIT + 1) ;;
+esac
+
+if [ "$NUM" -eq "$OK" ]; then
+	EXITVAL=0 #Status 0 = OK (green)
+fi
+
+if [ "$WARN" -gt 0 ]; then
+	EXITVAL=1 #Status 1 = WARNING (yellow)
+fi
+
+if [ "$CRIT" -gt 0 ]; then
+	EXITVAL=2 #Status 2 = CRITICAL (red)
+fi
+
+echo State of contrail-$service OK:$OK WARN:$WARN CRIT:$CRIT - $LIST
+
+exit $EXITVAL
diff --git a/sensu/files/checks/check_contrail_webui.sh b/sensu/files/checks/check_contrail_webui.sh
new file mode 100644
index 0000000..2e69783
--- /dev/null
+++ b/sensu/files/checks/check_contrail_webui.sh
@@ -0,0 +1,65 @@
+#!/bin/bash
+#
+# check contrail-web ui services status on control nodes
+
+service=webui
+
+read -ra contrail_status <<< $(sudo supervisorctl -s unix:///tmp/supervisord_$service.sock status)
+
+check_ok=0
+state=RUNNING
+
+read -ra contrail_test <<< ${contrail_status[@]#contrail-$service}
+#compare arrays
+if [ ${#contrail_status[@]} -ne ${#contrail_test[@]} ]; then
+        check_ok=1
+fi
+
+if [ check_ok=1 ]; then
+
+        read -ra contrail_test <<< ${contrail_status[@]#STARTING}
+
+        if [ ${#contrail_status[@]} -ne ${#contrail_test[@]} ]; then
+                state=STARTING
+        fi
+
+        read -ra contrail_test <<< ${contrail_status[@]#STOPPED}
+        if [ ${#contrail_status[@]} -ne ${#contrail_test[@]} ]; then
+                state=STOPPED
+        fi
+
+        read -ra contrail_test <<< ${contrail_status[@]#FATAL}
+        if [ ${#contrail_status[@]} -ne ${#contrail_test[@]} ]; then
+                state=FATAL
+        fi
+else
+        state=FATAL
+fi
+
+OK=0
+WARN=0
+CRIT=0
+NUM=0
+
+case "$state" in
+	RUNNING) OK=$(expr $OK + 1) ;;
+	STOPPED|STARTING) WARN=$(expr $WARN + 1) ;;
+	FATAL) CRIT=$(expr $CRIT + 1) ;;
+	*) CRIT=$(expr $CRIT + 1) ;;
+esac
+
+if [ "$NUM" -eq "$OK" ]; then
+	EXITVAL=0 #Status 0 = OK (green)
+fi
+
+if [ "$WARN" -gt 0 ]; then
+	EXITVAL=1 #Status 1 = WARNING (yellow)
+fi
+
+if [ "$CRIT" -gt 0 ]; then
+	EXITVAL=2 #Status 2 = CRITICAL (red)
+fi
+
+echo State of contrail-$service OK:$OK WARN:$WARN CRIT:$CRIT - $LIST
+
+exit $EXITVAL
diff --git a/sensu/files/checks/check_fibrealliance.sh b/sensu/files/checks/check_fibrealliance.sh
new file mode 100644
index 0000000..8d25c95
--- /dev/null
+++ b/sensu/files/checks/check_fibrealliance.sh
@@ -0,0 +1,154 @@
+#!/bin/sh
+
+# Version 0.0.3 2010-08-18
+# Verify that the sensors check returns data. If not, return unknown to nagios.
+
+# Version 0.0.2 2010-05-11
+# Ulric Eriksson <ulric.eriksson@dgc.se>
+
+BASEOID=.1.3.6.1.3.94
+SYSTEMOID=$BASEOID.1.6
+connUnitStateOID=$SYSTEMOID.1.5
+# 1 = unknown, 2 = online, 3 = diag/offline
+connUnitStatusOID=$SYSTEMOID.1.6
+# 3 = OK, 4 = warning, 5 = failed
+connUnitProductOID=$SYSTEMOID.1.7
+# e.g. "QLogic SANbox2 FC Switch"
+connUnitSnOID=$SYSTEMOID.1.8
+# chassis serial number
+connUnitNumSensorsOID=$SYSTEMOID.1.14
+# number of sensors in connUnitSensorTable
+connUnitNameOID=$SYSTEMOID.1.20
+# symbolic name
+connUnitContactOID=$SYSTEMOID.1.23
+connUnitLocationOID=$SYSTEMOID.1.24
+
+SENSOROID=$BASEOID.1.8
+connUnitSensorIndexOID=$SENSOROID.1.2
+connUnitSensorNameOID=$SENSOROID.1.3
+# textual id of sensor
+connUnitSensorStatusOID=$SENSOROID.1.4
+# 1 = unknown, 2 = other, 3 = ok, 4 = warning, 5 = failed
+connUnitSensorMessageOID=$SENSOROID.1.6
+# textual status message
+
+PORTOID=$BASEOID.1.10
+connUnitPortUnitIdOID=$PORTOID.1.1
+connUnitPortIndexOID=$PORTOID.1.2
+connUnitPortTypeOID=$PORTOID.1.3
+connUnitPortStateOID=$PORTOID.1.6
+# user selected state
+# 1 = unknown, 2 = online, 3 = offline, 4 = bypassed, 5 = diagnostics
+connUnitPortStatusOID=$PORTOID.1.7
+# actual status
+# 1 = unknown, 2 = unused, 3 = ready, 4 = warning, 5 = failure
+# 6 = notparticipating, 7 = initializing, 8 = bypass, 9 = ols, 10 = other
+# Always returns 2, so this is utterly useless
+connUnitPortSpeedOID=$PORTOID.1.15
+# port speed in kilobytes per second
+
+usage()
+{
+	echo "Usage: $0 -H host -C community -T status|sensors"
+	exit 0
+}
+
+
+get_system()
+{
+        echo "$SYSTEM"|grep "^$1."|head -1|sed -e 's,^.*: ,,'
+}
+
+get_sensor()
+{
+        echo "$SENSOR"|grep "^$2.*$1 = "|head -1|sed -e 's,^.*: ,,'
+}
+
+get_port()
+{
+        echo "$PORT"|grep "^$2.*$1 = "|head -1|sed -e 's,^.*: ,,'
+}
+
+if test "$1" = -h; then
+	usage
+fi
+
+while getopts "H:C:T:" o; do
+	case "$o" in
+	H )
+		HOST="$OPTARG"
+		;;
+	C )
+		COMMUNITY="$OPTARG"
+		;;
+	T )
+		TEST="$OPTARG"
+		;;
+	* )
+		usage
+		;;
+	esac
+done
+
+RESULT=
+STATUS=0	# OK
+
+case "$TEST" in
+sensors )
+	SENSOR=`snmpwalk -v 1 -c $COMMUNITY -On $HOST $SENSOROID`
+	# Figure out which sensor indexes we have
+	connUnitSensorIndex=`echo "$SENSOR"|
+	grep -F "$connUnitSensorIndexOID."|
+	sed -e 's,^.*: ,,'`
+	for i in $connUnitSensorIndex; do
+		connUnitSensorName=`get_sensor $i $connUnitSensorNameOID`
+		connUnitSensorStatus=`get_sensor $i $connUnitSensorStatusOID`
+		connUnitSensorMessage=`get_sensor $i $connUnitSensorMessageOID`
+		RESULT="$RESULT$connUnitSensorName = $connUnitSensorMessage
+"
+		if test "$connUnitSensorStatus" != 3; then
+			STATUS=2	# Critical
+		fi
+	done
+	if test -z "$SENSOR"; then
+		STATUS=3	# Unknown
+	fi
+	;;
+status )
+	SYSTEM=`snmpwalk -v 1 -c $COMMUNITY -On $HOST $SYSTEMOID`
+	connUnitStatus=`get_system $connUnitStatusOID`
+	connUnitProduct=`get_system $connUnitProductOID`
+	connUnitSn=`get_system $connUnitSnOID`
+	case "$connUnitStatus" in
+	3 )
+		RESULT="Overall unit status: OK"
+		;;
+	4 )
+		RESULT="Overall unit status: Warning"
+		STATUS=1
+		;;
+	5 )
+		RESULT="Overall unit status: Failed"
+		STATUS=2
+		;;
+	* )
+		RESULT="Overall unit status: Unknown"
+		STATUS=3
+		;;
+	esac
+	if test ! -z "$connUnitProduct"; then
+		RESULT="$RESULT
+Product: $connUnitProduct"
+	fi
+	if test ! -z "$connUnitSn"; then
+		RESULT="$RESULT
+Serial number: $connUnitSn"
+	fi
+	;;
+* )
+	usage
+	;;
+esac
+
+echo "$RESULT"
+exit $STATUS
diff --git a/sensu/files/checks/check_fqdn.py b/sensu/files/checks/check_fqdn.py
new file mode 100644
index 0000000..4b04b8f
--- /dev/null
+++ b/sensu/files/checks/check_fqdn.py
@@ -0,0 +1,74 @@
+#!/usr/bin/env python
+"""
+nagios plugin to monitor fqdn validity
+--------------------------------------
+
+usage
+
+::
+
+    check_fqdn.py -n node01 -f node01.cluster.domain.com
+
+"""
+from optparse import OptionParser
+import os
+import subprocess
+
+#nagios return codes
+UNKNOWN = -1
+OK = 0
+WARNING = 1
+CRITICAL = 2
+
+HOSTNAME_CHECK='hostname'
+
+#supervisor states, map state to desired warning level
+
+def get_status(hostname, fqdn):
+
+    ok = []
+    crit = []
+    warn = []
+
+    lines = subprocess.Popen([HOSTNAME_CHECK], stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate()[0]
+    hostname_output = lines.splitlines()[0]
+
+    if hostname == hostname_output:
+      ok.append('Hostname is OK. ')
+    else:
+      crit.append('Hostname %s does not match desired %s. ' % (hostname_output, hostname))
+
+    try:
+        lines = subprocess.Popen([HOSTNAME_CHECK, '-f'], stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate()[0]
+        fqdn_output = lines.splitlines()[0]
+
+        if fqdn == fqdn_output:
+          ok.append('FQDN is OK. ')
+        else:
+          crit.append('FQDN %s does not match desired %s. ' % (fqdn_output, fqdn))
+    except:
+        crit.append('FQDN is not desired %s. ' % fqdn)
+
+    status = OK
+    prepend = "OK"
+
+    if len(warn) > 0:
+      status = WARNING
+      prepend = "WARNING"
+
+    if len(crit) > 0:
+      status = CRITICAL
+      prepend = "CRITICAL"
+
+    return ("%s - %s%s%s" %(prepend, "".join(crit), "".join(warn), "".join(ok)), status)
+
+parser = OptionParser()
+parser.add_option('-n', '--hostname', dest='hostname',
+    help="Server hostname")
+parser.add_option('-f', '--fqdn', dest='fqdn')
+
+options, args = parser.parse_args()
+
+output = get_status(options.hostname, options.fqdn)
+print output[0]
+raise SystemExit, output[1]
diff --git a/sensu/files/checks/check_galera_cluster b/sensu/files/checks/check_galera_cluster
new file mode 100644
index 0000000..89b5d95
--- /dev/null
+++ b/sensu/files/checks/check_galera_cluster
@@ -0,0 +1,159 @@
+#!/bin/bash
+PROGNAME=`basename $0`
+VERSION="Version 1.0,"
+AUTHOR="Guillaume Coré <g@fridim.org>"
+
+ST_OK=0
+ST_WR=1
+ST_CR=2
+ST_UK=3
+
+print_version() {
+  echo "$VERSION $AUTHOR"
+} 
+
+print_help() {
+  print_version $PROGNAME $VERSION
+  echo ""
+  echo "$PROGNAME is a Nagios plugin to monitor Galera cluster status."
+  echo ""
+  echo "$PROGNAME -u USER -p PASSWORD [-H HOST] [-P PORT] [-w SIZE] [-c SIZE] [-f FLOAT] [-0]"
+  echo ""
+  echo "Options:"
+  echo "  u)"
+  echo "    MySQL user."
+  echo "  p)"
+  echo "    MySQL password."
+  echo "  H)"
+  echo "    MySQL host. Default is localhost."
+  echo "  P)"
+  echo "    MySQL port. Default is 3306."
+  echo "  w)"
+  echo "    Sets minimum number of nodes in the cluster when WARNING is raised. (default is same as critical)."
+  echo "  c)"
+  echo "    Sets minimum number of nodes in the cluster when CRITICAL is raised. (default is 2)."
+  echo "  f)"
+  echo "    Sets critical value of wsrep_flow_control_paused (default is 0.1)."
+  echo "  0)"
+  echo "    Rise CRITICAL if the node is not primary"
+  exit $ST_UK
+}
+
+# default values
+crit=2
+port='3306'
+mysqlhost='localhost'
+fcp=0.1
+
+while getopts “hvu:p:H:P:w:c:f:0” OPTION; do
+  case $OPTION in
+    h)
+      print_help
+      exit $ST_UK
+      ;;
+    v)
+      print_version $PROGNAME $VERSION
+      exit $ST_UK
+      ;;
+    u)
+      mysqluser=$OPTARG
+      ;;
+    p)
+      password=$OPTARG
+      ;;
+    H)
+      mysqlhost=$OPTARG
+      ;;
+    P)
+      port=$OPTARG
+      ;;
+    w)
+      warn=$OPTARG
+      ;;
+    c)
+      crit=$OPTARG
+      ;;
+    f)
+      fcp=$OPTARG
+      ;;
+    0)
+      primary='TRUE'
+      ;;
+    ?)
+      echo "Unknown argument: $1"
+      print_help
+      exit $ST_UK
+      ;;
+  esac
+done
+
+if [ -z "$warn" ]; then
+  warn=$crit
+fi
+
+# MANDATORY args
+if [ -z "$mysqluser" ]; then
+  echo "argument -u missing"
+  print_help
+  exit $ST_UK
+fi
+
+if [ -z "$password" ]; then
+  echo "argument -p missing"
+  print_help
+  exit $ST_UK
+fi
+
+r1=$(mysql -h$mysqlhost -P$port -u$mysqluser -p$password -B -N -e "show status like 'wsrep_cluster_size'"|cut -f 2) # 3  (GALERA_CLUSTER_SIZE)
+r2=$(mysql -h$mysqlhost -P$port -u$mysqluser -p$password -B -N -e "show status like 'wsrep_cluster_status'"|cut -f 2) # Primary
+r3=$(mysql -h$mysqlhost -P$port -u$mysqluser -p$password -B -N -e "show status like 'wsrep_flow_control_paused'"|cut -f 2) # < 0.1
+r4=$(mysql -h$mysqlhost -P$port -u$mysqluser -p$password -B -N -e "show status like 'wsrep_ready'"|cut -f 2)  # ON
+r5=$(mysql -h$mysqlhost -P$port -u$mysqluser -p$password -B -N -e "show status like 'wsrep_connected'"|cut -f 2)  # ON
+r6=$(mysql -h$mysqlhost -P$port -u$mysqluser -p$password -B -N -e "show status like 'wsrep_local_state_comment'"|cut -f 2)  # Synced
+
+if [ -z "$r3" ]; then
+  echo "UNKNOWN: wsrep_flow_control_paused is empty"
+  ST_FINAL=$ST_UK
+fi
+
+if [ $(echo "$r3 > $fcp" | bc) = 1 ]; then
+  echo "CRITICAL: wsrep_flow_control_paused is > $fcp"
+  ST_FINAL=$ST_CR
+fi
+
+if [ "$primary" = 'TRUE' ]; then
+  if [ "$r2" != 'Primary' ]; then
+    echo "CRITICAL: node is not primary"
+    ST_FINAL=$ST_CR
+  fi
+fi
+
+if [ "$r4" != 'ON' ]; then
+  echo "CRITICAL: node is not ready"
+  ST_FINAL=$ST_CR
+fi
+
+if [ "$r5" != 'ON' ]; then
+  echo "CRITICAL: node is not connected"
+  ST_FINAL=$ST_CR
+fi
+
+if [ "$r6" != 'Synced' ]; then
+  echo "CRITICAL: node is not synced"
+  ST_FINAL=$ST_CR
+fi
+
+if [ $r1 -gt $warn ]; then
+  echo "OK: number of NODES = $r1"
+  ST_FINAL=${ST_FINAL-$ST_OK}
+elif [ $r1 -le $crit ]; then
+  echo "CRITICAL: number of NODES = $r1"
+  ST_FINAL=$ST_CR
+elif [ $r1 -le $warn ]; then
+  echo "WARNING: number of NODES = $r1"
+  ST_FINAL=${ST_FINAL-$ST_WR}
+else
+  exit $ST_UK
+fi
+
+exit $ST_FINAL
diff --git a/sensu/files/checks/check_glusterfs b/sensu/files/checks/check_glusterfs
new file mode 100755
index 0000000..e3a72f6
--- /dev/null
+++ b/sensu/files/checks/check_glusterfs
@@ -0,0 +1,123 @@
+#!/bin/bash
+
+PATH=/sbin:/bin:/usr/sbin:/usr/bin
+
+PROGNAME=$(basename -- $0)
+
+# parse command line
+usage () {
+  echo ""
+  echo "USAGE: "
+  echo "  $PROGNAME -v VOLUME -n BRICKS [-w GB -c GB]"
+  echo "     -n BRICKS: number of bricks"
+  echo "     -w and -c values in GB"
+  exit $STATE_UNKNOWN
+}
+
+while getopts "v:n:w:c:" opt; do
+  case $opt in
+    v) VOLUME=${OPTARG} ;;
+    n) BRICKS=${OPTARG} ;;
+    w) WARN=${OPTARG} ;;
+    c) CRIT=${OPTARG} ;;
+    *) usage ;;
+  esac
+done
+
+if [ -z "${VOLUME}" -o -z "${BRICKS}" ]; then
+  usage
+fi
+
+Exit () {
+	echo "$1: ${2:0}"
+	status=STATE_$1
+		case "$status" in
+			STATE_OK) EXITVAL=0 ;;
+			STATE_WARNING) EXITVAL=1 ;;
+			STATE_CRITICAL|STATE_UNKNOWN) EXITVAL=2 ;;
+			*) EXITVAL=2 ;;
+		esac
+	exit $EXITVAL
+}
+
+# check for commands
+for cmd in basename bc awk sudo pidof gluster; do
+	if ! type -p "$cmd" >/dev/null; then
+		Exit UNKNOWN "$cmd not found"
+	fi
+done
+
+# check for glusterd (management daemon)
+if ! pidof glusterd &>/dev/null; then
+	Exit CRITICAL "glusterd management daemon not running"
+fi
+
+# check for glusterfsd (brick daemon)
+if ! pidof glusterfsd &>/dev/null; then
+	Exit CRITICAL "glusterfsd brick daemon not running"
+fi
+
+# get volume status
+bricksfound=0
+freegb=9999999
+shopt -s nullglob
+while read -r line; do
+	field=($(echo $line))
+	case ${field[0]} in
+	Brick) 
+		brick=${field[@]:2}
+		;;
+	Disk)
+		key=${field[@]:0:3}
+		if [ "${key}" = "Disk Space Free" ]; then
+			freeunit=${field[@]:4}
+			free=${freeunit:0:-2}
+			unit=${freeunit#$free}
+			if [ "$unit" != "GB" ]; then
+				Exit UNKNOWN "unknown disk space size $freeunit"
+			fi
+			free=$(echo "${free} / 1" | bc -q)
+			if [ $free -lt $freegb ]; then
+				freegb=$free
+			fi
+		fi
+		;;
+	Online)
+		online=${field[@]:2}
+		if [ "${online}" = "Y" ]; then
+			let $((bricksfound++))
+		else
+			errors=("${errors[@]}" "$brick offline")
+		fi
+		;;
+	esac
+done < <(sudo gluster volume status ${VOLUME} detail)
+
+if [ $bricksfound -eq 0 ]; then
+	Exit CRITICAL "no bricks found"
+elif [ $bricksfound -lt $BRICKS ]; then
+	errors=("${errors[@]}" "found $bricksfound bricks, expected $BRICKS ")
+fi
+
+if [ -n "$CRIT" -a -n "$WARN" ]; then
+	if [ $CRIT -ge $WARN ]; then
+		Exit UNKNOWN "critical threshold below warning"
+	elif [ $freegb -lt $CRIT ]; then
+		Exit CRITICAL "free space ${freegb}GB"
+	elif [ $freegb -lt $WARN ]; then
+		errors=("${errors[@]}" "free space ${freegb}GB")
+	fi
+fi
+
+# exit with warning if errors
+if [ -n "$errors" ]; then
+	sep='; '
+	msg=$(printf "${sep}%s" "${errors[@]}")
+	msg=${msg:${#sep}}
+
+	Exit WARNING "${msg}"
+fi
+
+# exit with no errors
+Exit OK "${bricksfound} bricks; free space ${freegb}GB"
+
diff --git a/sensu/files/checks/check_http_json.py b/sensu/files/checks/check_http_json.py
new file mode 100644
index 0000000..b922f0b
--- /dev/null
+++ b/sensu/files/checks/check_http_json.py
@@ -0,0 +1,208 @@
+#!/usr/bin/python
+
+"""
+Check HTTP JSON Nagios Plugin
+
+Generic Nagios plugin which checks json values from a given endpoint against argument specified rules
+and determines the status and performance data for that service.
+"""
+
+import httplib, urllib, urllib2
+import json
+import argparse
+from pprint import pprint
+
+
+class NagiosHelper:
+	"""Help with Nagios specific status string formatting."""
+	code = 0
+	message_prefixes = {0: 'OK', 1: 'WARNING', 2: 'CRITICAL', 3: 'UNKNOWN'}
+	message_text = ''
+	performance_data = ''
+
+	def getMessage(self):
+		"""Build a status-prefixed message with optional performance data generated externally"""
+		text = "%s" % self.message_prefixes[self.code]
+		if self.message_text:
+			text += ": %s" % self.message_text
+		if self.performance_data:
+			text += "|%s" % self.performance_data
+		return text
+
+	def setCodeAndMessage(self, code, text): 
+		self.code = code
+		self.message_text = text
+
+	def ok(self, text): self.setCodeAndMessage(0, text)
+	def warning(self, text): self.setCodeAndMessage(1, text)
+	def critical(self, text): self.setCodeAndMessage(2, text)
+	def unknown(self, text): self.setCodeAndMessage(3, text)
+
+class JsonHelper:
+	"""Perform simple comparison operations against values in a given JSON dict"""
+	def __init__(self, json_data):
+		self.data = json_data
+
+	def equals(self, key, value): return self.exists(key) and str(self.get(key)) == value
+	def lte(self, key, value): return self.exists(key) and str(self.get(key)) <= value
+	def gte(self, key, value): return self.exists(key) and str(self.get(key)) >= value
+	def exists(self, key): return (self.get(key) != (None, 'not_found'))
+	def get(self, key, temp_data=''):
+		"""Can navigate nested json keys with a dot format (Element.Key.NestedKey). Returns (None, 'not_found') if not found"""
+		if temp_data:
+			data = temp_data
+		else:
+			data = self.data
+
+		if '.' in key:
+			return self.get(key[key.find('.') + 1:], data[key[:key.find('.')]])
+		else:
+			if key in data:
+				return  data[key]
+			else:
+				return (None, 'not_found')
+
+class JsonRuleProcessor:
+	"""Perform checks and gather values from a JSON dict given rules and metrics definitions"""
+	def __init__(self, json_data, rules_args):
+		self.data = json_data
+		self.rules = rules_args
+
+	def isAlive(self):
+		"""Return a tuple with liveness and reason for not liveness given existence, equality, and comparison rules"""
+		reason = ''
+		helper = JsonHelper(self.data)
+
+		if self.rules.key_list != None:
+			for k in self.rules.key_list:
+				if (helper.exists(k) == False):
+					reason += " Key %s did not exist." % k
+
+		if self.rules.key_value_list != None:
+			for kv in self.rules.key_value_list:
+				k, v = kv.split(',')
+				if (helper.equals(k, v) == False):
+					reason += " Value %s for key %s did not match." % (v, k)
+
+		if self.rules.key_lte_list != None:
+			for kv in self.rules.key_lte_list:
+				k, v = kv.split(',')
+				if (helper.lte(k, v) == False):
+					reason += " Value %s was not less than or equal to value for key %s." % (v, k)
+
+		if self.rules.key_gte_list != None:
+			for kv in self.rules.key_gte_list:
+				k, v = kv.split(',')
+				if (helper.gte(k, v) == False):
+					reason += " Value %s was not greater than or equal to value for key %s." % (v, k)
+
+		is_alive = (reason == '')
+
+		return (is_alive, reason)
+
+	def getMetrics(self):
+		"""Return a Nagios specific performance metrics string given keys and parameter definitions"""
+		metrics = ''
+		helper = JsonHelper(self.data)
+
+		if self.rules.metric_list != None:
+			for metric in self.rules.metric_list:
+				key = metric
+				minimum = maximum = warn_range = crit_range = 0
+				uom = ''
+
+				vals = metric.split(',')
+
+				if ',' in metric:
+					vals = metric.split(',')
+
+					if len(vals) == 2:
+						key,uom = vals
+					if len(vals) == 4:
+						key,uom,minimum,maximum = vals
+					if len(vals) == 6:
+						key,uom,minimum,maximum,warn_range,crit_range = vals
+
+				if helper.exists(key):
+					metrics += "'%s'=%s" % (key, helper.get(key))
+					if uom: metrics += uom
+					metrics += ";%s" % minimum
+					metrics += ";%s" % maximum
+					if warn_range: metrics += ";%s" % warn_range
+					if crit_range: metrics += ";%s" % crit_range
+
+				metrics += ' '
+
+				
+		return "%s" % metrics
+
+def parseArgs():
+	parser = argparse.ArgumentParser(description=
+			'Nagios plugin which checks json values from a given endpoint against argument specified rules\
+			and determines the status and performance data for that service')
+
+	parser.add_argument('-H', '--host', dest='host', required=True, help='Host.')
+	parser.add_argument('-p', '--path', dest='path', help='Path.')
+	parser.add_argument('-e', '--key_exists', dest='key_list', nargs='*', 
+		help='Checks existence of these keys to determine status.')
+	parser.add_argument('-q', '--key_equals', dest='key_value_list', nargs='*', 
+		help='Checks equality of these keys and values (key,value key2,value2) to determine status.')
+	parser.add_argument('-l', '--key_lte', dest='key_lte_list', nargs='*', 
+		help='Checks that these keys and values (key,value key2,value2) are less than or equal to\
+		the returned json value to determine status.')
+	parser.add_argument('-g', '--key_gte', dest='key_gte_list', nargs='*', 
+		help='Checks that these keys and values (key,value key2,value2) are greater than or equal to\
+		the returned json value to determine status.')
+	parser.add_argument('-m', '--key_metric', dest='metric_list', nargs='*', 
+		help='Gathers the values of these keys (key,UnitOfMeasure,Min,Max,WarnRange,CriticalRange) for Nagios performance data.\
+		More information about Range format and units of measure for nagios can be found at https://nagios-plugins.org/doc/guidelines.html\
+		Additional formats for this parameter are: (key), (key,UnitOfMeasure), (key,UnitOfMeasure,Min,Max).')
+	parser.add_argument('-d', '--debug', action='store_true', help='Debug mode.')
+
+	return parser.parse_args()
+
+def debugPrint(debug_flag, message, pretty_flag=False):
+	if debug_flag:
+		if pretty_flag:
+			pprint(message)
+		else:
+			print message
+
+"""Program entry point"""
+if __name__ == "__main__":
+	args = parseArgs()
+	nagios = NagiosHelper()
+
+	url = "http://%s" % args.host
+	if args.path: url += "/%s" % args.path
+	debugPrint(args.debug, "url:%s" % url)
+
+	# Attempt to reach the endpoint
+	try:
+		req = urllib2.Request(url)
+		response = urllib2.urlopen(req)
+	except urllib2.HTTPError as e:
+		nagios.unknown("HTTPError[%s], url:%s" % (str(e.code), url))
+	except urllib2.URLError as e:
+		nagios.critical("URLError[%s], url:%s" % (str(e.reason), url))
+	else:
+		jsondata = response.read()
+		data = json.loads(jsondata)
+
+		debugPrint(args.debug, 'json:')
+		debugPrint(args.debug, data, True)
+
+		# Apply rules to returned JSON data
+		processor = JsonRuleProcessor(data, args)
+		is_alive, reason = processor.isAlive()
+
+		if is_alive:
+			# Rules all passed, attempt to get performance data
+			nagios.performance_data = processor.getMetrics()
+			nagios.ok("Status OK.")
+		else:
+			nagios.warning("Status check failed, reason:%s" % reason)
+
+	# Print Nagios specific string and exit appropriately
+	print nagios.getMessage()
+	exit(nagios.code)
diff --git a/sensu/files/checks/check_ibm_bladecenter.py b/sensu/files/checks/check_ibm_bladecenter.py
new file mode 100644
index 0000000..ef7cb3c
--- /dev/null
+++ b/sensu/files/checks/check_ibm_bladecenter.py
@@ -0,0 +1,591 @@
+#!/usr/bin/python
+#
+# Copyright 2010, Pall Sigurdsson <palli@opensource.is>
+#
+# This script 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, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This script 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, see <http://www.gnu.org/licenses/>.
+
+# About this script
+#
+# This script will check the status of a remote IBM Bladecenter via SNMP.
+
+
+# No real need to change anything below here
+version = "1.1.2"
+ok = 0
+warning = 1
+critical = 2
+unknown = 3
+not_present = -1
+exit_status = -1
+
+
+state = {}
+state[not_present] = "Not Present"
+state[ok] = "OK"
+state[warning] = "Warning"
+state[critical] = "Critical"
+state[unknown] = "Unknown"
+
+
+longserviceoutput = "\n"
+perfdata = ""
+summary = ""
+sudo = False
+
+
+from sys import exit
+from sys import argv
+from os import getenv, putenv, environ
+import subprocess
+
+
+# Parse some Arguments
+from optparse import OptionParser
+parser = OptionParser()
+parser.add_option("-m", "--mode", dest="mode",
+                  help="Which check mode is in use (powermodules,system-health,temperature,chassis-status,bladehealth,blowers,switchmodules)")
+parser.add_option("-H", "--host", dest="host",
+                  help="Hostname or IP address of the host to check")
+parser.add_option("-w", "--warning", dest="warning_threshold",
+                  help="Warning threshold", type="int", default=None)
+parser.add_option("-c", "--critical", type="int", dest="critical_threshold",
+                  help="Critical threshold", default=None)
+parser.add_option("-e", "--exclude", dest="exclude",
+                  help="Exclude specific object", default=None)
+parser.add_option("-v", "--snmp_version", dest="snmp_version",
+                  help="SNMP Version to use (1, 2c or 3)", default="1")
+parser.add_option("-u", "--snmp_username", dest="snmp_username",
+                  help="SNMP username (only with SNMP v3)", default=None)
+parser.add_option("-C", "--snmp_community", dest="snmp_community",
+                  help="SNMP Community (only with SNMP v1|v2c)", default=None)
+parser.add_option("-p", "--snmp_password", dest="snmp_password",
+                  help="SNMP password (only with SNMP v3)", default=None)
+parser.add_option("-l", "--snmp_security_level", dest="snmp_seclevel",
+                  help="SNMP security level (only with SNMP v3) (noAuthNoPriv|authNoPriv|authPriv)", default=None)
+parser.add_option("-t", "--snmp_timeout", dest="snmp_timeout",
+                  help="Timeout in seconds for SNMP", default=10)
+parser.add_option("-d", "--debug", dest="debug",
+                  help="Enable debugging (for troubleshooting", action="store_true", default=False)
+
+(opts, args) = parser.parse_args()
+
+
+if opts.host is None:
+    parser.error("Hostname (-H) is required.")
+if opts.mode is None:
+    parser.error("Mode (--mode) is required.")
+
+snmp_options = ""
+
+
+def set_snmp_options():
+    global snmp_options
+    if opts.snmp_version is not None:
+        snmp_options = snmp_options + " -v%s" % opts.snmp_version
+    if opts.snmp_version == "3":
+        if opts.snmp_username is None:
+            parser.error("--snmp_username required with --snmp_version=3")
+        if opts.snmp_seclevel is None:
+            parser.error(
+                "--snmp_security_level required with --snmp_version=3")
+        if opts.snmp_password is None:
+            parser.error("--snmp_password required with --snmp_version=3")
+        snmp_options = snmp_options + " -u %s -l %s -A %s " % (
+            opts.snmp_username, opts.snmp_seclevel, opts.snmp_password)
+    else:
+        if opts.snmp_community is None:
+            parser.error(
+                "--snmp_community is required with --snmp_version=1|2c")
+        snmp_options = snmp_options + " -c %s " % opts.snmp_community
+    snmp_options += " -t %s " % (opts.snmp_timeout)
+
+
+def error(errortext):
+    print "* Error: %s" % errortext
+    exit(unknown)
+
+
+def debug(debugtext):
+    if opts.debug:
+        print debugtext
+
+
+def nagios_status(newStatus):
+    global exit_status
+    exit_status = max(exit_status, newStatus)
+    return exit_status
+
+
+def runCommand(command):
+    '''runCommand: Runs command from the shell prompt. Exit Nagios style if unsuccessful'''
+    debug("Executing: %s" % command)
+    proc = subprocess.Popen(
+        command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE,)
+    stdout, stderr = proc.communicate('through stdin to stdout')
+    if proc.returncode > 0:
+        print "Error %s: %s\n command was: '%s'" % (proc.returncode, stderr.strip(), command)
+        debug("results: %s" % (stdout.strip()))
+        if proc.returncode == 127:  # File not found, lets print path
+            path = getenv("PATH")
+            print "Check if your path is correct %s" % (path)
+        if stderr.find('Password:') == 0 and command.find('sudo') == 0:
+            print "Check if user is in the sudoers file"
+        if stderr.find('sorry, you must have a tty to run sudo') == 0 and command.find('sudo') == 0:
+            print "Please remove 'requiretty' from /etc/sudoers"
+        exit(unknown)
+    else:
+        return stdout
+
+
+def end():
+    global summary
+    global longserviceoutput
+    global perfdata
+    global exit_status
+    print "%s - %s | %s" % (state[exit_status], summary, perfdata)
+    print longserviceoutput
+    if exit_status < 0:
+        exit_status = unknown
+    exit(exit_status)
+
+
+def add_perfdata(text):
+    global perfdata
+    text = text.strip()
+    perfdata = perfdata + " %s " % (text)
+
+
+def add_long(text):
+    global longserviceoutput
+    longserviceoutput = longserviceoutput + text + '\n'
+
+
+def add_summary(text):
+    global summary
+    summary = summary + text
+
+
+def set_path(path):
+    current_path = getenv('PATH')
+    if current_path.find('C:\\') > -1:  # We are on this platform
+        if path == '':
+            pass
+        else:
+            path = ';' + path
+    else:  # Unix/Linux, etc
+        if path == '':
+            path = ":/usr/sbin"
+        else:
+            path = ':' + path
+    current_path = "%s%s" % (current_path, path)
+    environ['PATH'] = current_path
+
+
+def snmpget(oid):
+    snmpgetcommand = "snmpget %s %s %s" % (snmp_options, opts.host, oid)
+    output = runCommand(snmpgetcommand)
+    oid, result = output.strip().split(' = ', 1)
+    resultType, resultValue = result.split(': ', 1)
+    if resultType == 'STRING':  # strip quotes of the string
+        resultValue = resultValue[1:-1]
+    return resultValue
+
+# snmpwalk -v3 -u v3get mgmt-rek-proxy-p02 -A proxy2011 -l authNoPriv
+# 1.3.6.1.4.1.15497
+
+
+def snmpwalk(base_oid):
+    snmpwalkcommand = "snmpwalk %s %s %s" % (snmp_options, opts.host, base_oid)
+    output = runCommand(snmpwalkcommand + " " + base_oid)
+    return output
+
+
+def getTable(base_oid):
+    myTable = {}
+    output = snmpwalk(base_oid)
+    for line in output.split('\n'):
+        tmp = line.strip().split(' = ', 1)
+        if len(tmp) == 2:
+            oid, result = tmp
+        else:
+            continue
+        tmp = result.split(': ', 1)
+        if len(tmp) > 1:
+            resultType, resultValue = tmp[0], tmp[1]
+        else:
+            resultType = None
+            resultValue = tmp[0]
+        if resultType == 'STRING':  # strip quotes of the string
+            resultValue = resultValue[1:-1]
+        index = oid.strip().split('.')
+        column = int(index.pop())
+        row = int(index.pop())
+        if not myTable.has_key(column):
+            myTable[column] = {}
+        myTable[column][row] = resultValue
+    return myTable
+
+
+def check_powermodules():
+    powermodules = getTable('1.3.6.1.4.1.2.3.51.2.2.4')
+    index = 1
+    exists = 2
+    status = 3
+    details = 4
+    num_ok = 0
+    num_no = 0
+    for i in powermodules.values():
+        myIndex = i[index]
+        myStatus = i[status]
+        myDetails = i[details]
+        myExists = i[exists]
+        if myIndex == opts.exclude:
+            continue
+        if myExists == "0":
+            num_no = num_no + 1
+        else:
+            if myStatus != "1":
+                nagios_status(warning)
+                add_summary('Powermodule "%s" status "%s". %s. ' %
+                            (myIndex, myStatus, myDetails))
+            else:
+                num_ok = num_ok + 1
+        add_long('Powersupply "%s" status "%s". %s. ' %
+                 (myIndex, myStatus, myDetails))
+    add_summary("%s out of %s powermodules are healthy" %
+                (num_ok, len(powermodules)))
+    add_perfdata("'Number of powermodules'=%s" %
+                 (len(powermodules) - num_no))
+
+    nagios_status(ok)
+
+
+def check_switchmodules():
+    switchmodules = getTable("1.3.6.1.4.1.2.3.51.2.22.3.1.1")
+    # The following oid is undocumented, but contains some useful extra info
+    try:
+        extrainfo = getTable("1.3.6.1.4.1.2.3.51.2.22.3.1.7").values()
+    except:
+        extrainfo = []
+    for module in switchmodules.values():
+        myIndex = module[1]
+        healthstate = module[15]
+        resultavailable = module[3]
+        resultvalue = module[4]
+        enabledisable = module[6]
+        if resultavailable == "1":
+            'this module is installed'
+            if healthstate == "1":
+                nagios_status(ok)
+                add_long("Module%s health good.\n  post=%s" %
+                         (myIndex, resultvalue))
+            else:
+                nagios_status(warning)
+                add_long("Module%s health bad(%s).\n  post=%s" %
+                         (myIndex, healthstate, resultvalue))
+                add_summary("Problem with Module %s. " % (myIndex))
+            if len(extrainfo) > int(myIndex):
+                try:
+                    myExtraInfo = extrainfo[int(myIndex) - 1]
+                    module_type = myExtraInfo[22]
+                    module_ip = myExtraInfo[6]
+                    add_long("  type=%s ip=%s" % (module_type, module_ip))
+                except:
+                    pass
+    if exit_status == ok:
+        add_summary("All switchmodules healthy")
+
+
+def check_blowers():
+    " Check blower status "
+    blowers = getTable("1.3.6.1.4.1.2.3.51.2.2.3")
+    # This mib only seems to support 2 blowers.
+    blower1speed = snmpget("1.3.6.1.4.1.2.3.51.2.2.3.1.0")
+    blower1state = snmpget("1.3.6.1.4.1.2.3.51.2.2.3.10.0")
+
+    blower2speed = snmpget("1.3.6.1.4.1.2.3.51.2.2.3.2.0")
+    blower2state = snmpget("1.3.6.1.4.1.2.3.51.2.2.3.11.0")
+
+    add_long("Blower 1 state=%s speed=%s" % (blower1state, blower1speed))
+    add_long("Blower 2 state=%s speed=%s" % (blower2state, blower2speed))
+    add_perfdata("blower1=%s" % (blower1speed.split(None, 1)[0]))
+    add_perfdata("blower2=%s" % (blower2speed.split(None, 1)[0]))
+    # Check blower 1
+    if blower1state == "1":
+        nagios_status(ok)
+        add_summary("Blower1 OK. ")
+    else:
+        add_summary("Blower1 NOT OK. ")
+        nagios_status(warning)
+
+    # Check blower 2
+    if blower2state == "1":
+        nagios_status(ok)
+        add_summary("Blower2 OK. ")
+    else:
+        add_summary("Blower2 NOT OK. ")
+        nagios_status(warning)
+
+    if blower1state != "1" and blower2state != "1":
+        nagios_status(critical)
+
+
+def check_chassis_status():
+    chassis = getTable('1.3.6.1.4.1.2.3.51.2.2.5.2')
+    oids = chassis.values()[0]
+    chassis_oid = {
+        1: "bistSdram",
+        10: "bistBootRomFlashImage",
+            11: "bistEthernetPort1",
+            113: "bistSwitchModulesCommunicating",
+            12: "bistEthernetPort2",
+            13: "bistInternalPCIBus",
+            14: "bistExternalI2CDevices",
+            15: "bistUSBController",
+            16: "bistVideoCompressorBoard",
+            17: "bistPrimaryBus",
+            18: "bistInternalEthernetSwitch",
+            2: "bistRs485Port1",
+            3: "bistRs485Port2",
+            33: "bistBladesInstalled",
+            4: "bistNvram",
+            49: "bistBladesCommunicating",
+            6: "bistRtc",
+            65: "bistBlowersInstalled",
+            7: "bistLocalI2CBus",
+            73: "bistBlowersFunctional",
+            74: "bistMediaTrayInstalled",
+            75: "bistMediaTrayCommunicating",
+            8: "bistPrimaryMainAppFlashImage",
+            81: "bistPowerModulesInstalled",
+            89: "bistPowerModulesFunctional",
+            9: "bistSecondaryMainAppFlashImage",
+            97: "bistSwitchModulesInstalled",
+    }
+
+    # Check if all blades are working
+    bistBladesInstalled = 33
+    bistBlowersInstalled = 65
+    bistMediaTrayInstalled = 74
+    bistPowerModulesInstalled = 81
+    bistSwitchModulesInstalled = 97
+
+    bistSwitchModulesCommunicating = 113
+    bistBladesCommunicating = 49
+    bistMediaTrayCommunicating = 75
+    bistBlowersFunctional = 73
+    bistPowerModulesFunctional = 89
+
+    # Check Blade Communications
+    if not oids.has_key(bistBladesInstalled) or not oids.has_key(bistBladesCommunicating):
+        add_summary("Blades N/A. ")
+    elif oids[bistBladesInstalled] == oids[bistBladesCommunicating]:
+        nagios_status(ok)
+        add_summary("Blades OK. ")
+    else:
+        nagios_status(warning)
+        add_summary("Blades NOT OK. ")
+    # Check PowerModule Status
+    if not oids.has_key(bistPowerModulesFunctional) or not oids.has_key(bistPowerModulesInstalled):
+        add_summary("Powermodules N/A. ")
+    elif oids[bistPowerModulesFunctional] == oids[bistPowerModulesInstalled]:
+        nagios_status(ok)
+        add_summary("PowerModules OK. ")
+    else:
+        nagios_status(warning)
+        add_summary("PowerModules NOT OK. ")
+
+    # Check SwitcModule Communications
+    if not oids.has_key(bistSwitchModulesCommunicating) or not oids.has_key(bistSwitchModulesInstalled):
+        add_summary("SwitchModules N/A. ")
+    if oids[bistSwitchModulesCommunicating] == oids[bistSwitchModulesInstalled]:
+        nagios_status(ok)
+        add_summary("Switchmodules OK. ")
+    else:
+        nagios_status(warning)
+        add_summary("Switchmodules NOT OK. ")
+    # Check blower status
+    if not oids.has_key(bistBlowersInstalled) or not oids.has_key(bistBlowersFunctional):
+        add_summary("Blowers N/A. ")
+    elif oids[bistBlowersInstalled] == oids[bistBlowersFunctional]:
+        nagios_status(ok)
+        add_summary("Blowers OK. ")
+    else:
+        nagios_status(warning)
+        add_summary("Blowers NOT OK. ")
+    # Check Media Tray Status
+    if not oids.has_key(bistMediaTrayCommunicating) or not oids.has_key(bistMediaTrayInstalled):
+        nagios_status(ok)
+        add_summary("Media Trays N/A. ")
+    elif oids[bistMediaTrayCommunicating] == oids[bistMediaTrayInstalled]:
+        add_summary("Media Trays OK. ")
+    else:
+        nagios_status(warning)
+        add_summary("Media Trays NOT OK. ")
+
+    # status_oids, oids that where 0 == ok
+    status_oids = (2, 3, 5, 7, 8, 9, 10, 11, 14, 18,
+                   19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, )
+
+    add_long("Other Sensors: ")
+    sensor_status = ok
+    for oid in status_oids:
+        if not chassis_oid.has_key(oid):
+            continue
+        oidValue = oids[oid]
+        oidName = chassis_oid[oid]
+        if oidValue == "0":
+            friendly_status = "%s (ok)" % oidValue
+        else:
+            friendly_status = "%s (not ok)" % oidValue
+            nagios_status(warning)
+            sensor_status = warning
+            add_summary("%s is %s" % oidName, friendly_status)
+        add_long(" %s status: %s" % (oidName, friendly_status))
+    if sensor_status == ok:
+        add_summary("Other Sensors: OK. ")
+
+
+def check_bladehealth():
+    blades = getTable('1.3.6.1.4.1.2.3.51.2.22.1.5.2.1')
+    bladestate = getTable('1.3.6.1.4.1.2.3.51.2.22.1.5.1.1').values()
+
+    index, bladeid, severity, description = (1, 2, 3, 4)
+    good_blades = 0
+    total_blades = 0
+    for i, row in enumerate(blades.values()):
+        myIndex = row[index]
+        myBladeid = row[bladeid]
+        mySeverity = row[severity]
+        myDescription = row[description]
+        try:
+            myName = bladestate[i][6]
+        except:
+            myName = ""
+        if mySeverity == "(No severity)":
+            continue
+        add_long("blade%s (%s): %s %s" %
+                 (myBladeid, myName, mySeverity, myDescription))
+        if opts.exclude:
+            if myDescription.find(opts.exclude) > -1:
+                continue
+        total_blades += 1
+        if mySeverity == 'Good':
+            nagios_status(ok)
+            good_blades += 1
+        else:
+            nagios_status(warning)
+            add_summary("blade%s (%s): %s %s. " %
+                        (myBladeid, myName, mySeverity, myDescription))
+    if good_blades == total_blades:
+        add_summary("%s out of %s blades in Good health. " %
+                    (good_blades, total_blades))
+        nagios_status(ok)
+    else:
+        nagios_status(warning)
+
+
+def check_systemhealth():
+    systemhealthstat = snmpget('1.3.6.1.4.1.2.3.51.2.2.7.1.0')
+    summary = getTable('1.3.6.1.4.1.2.3.51.2.2.7.2.1')
+    index, severity, description, date = (1, 2, 3, 4)
+    # Sometimes chassis delivers warning when absolutely nothing is going on.
+    # Lets work around that
+    workaround = [{1: '1', 2: 'Good', 3: 'No critical or warning events', 4: 'No timestamp'}]
+    # Check overall health
+    if systemhealthstat == '255':
+        nagios_status(ok)
+        add_summary("Bladecenter health: OK. ")
+    elif summary.values() == workaround:
+        add_summary("Non-Critical Error (bug in firmware): '%s' " %
+                    workaround[0][description])
+        nagios_status(ok)
+        return
+    elif systemhealthstat == "2":
+        nagios_status(warning)
+        add_summary("Non-Critical Error. ")
+    elif systemhealthstat == "4":
+        nagios_status(critical)
+        add_summary("System-Level Error. ")
+    elif systemhealthstat == "0":
+        nagios_status(critical)
+        add_summary("Critical. ")
+    else:
+        nagios_status(unknown)
+        add_summary(
+            "Bladecenter health unkown (oid 1.3.6.1.4.1.2.3.51.2.2.7.1.0 returns %s). " %
+            systemhealthstat)
+    for row in summary.values():
+        if row[severity] == 'Good':
+            nagios_status(ok)
+        elif row[severity] == 'Warning':
+            nagios_status(warning)
+        elif row[severity] == 'System Level':
+            nagios_status(warning)
+        else:
+            nagios_status(critical)
+        add_summary("%s. " % (row[description]))
+        add_long("* %s. " % (row[description]))
+
+
+def check_temperature():
+    # set some sensible defaults
+    if opts.warning_threshold is None:
+        opts.warning_threshold = 28
+    if opts.critical_threshold is None:
+        opts.critical_threshold = 35
+    str_temp = snmpget('1.3.6.1.4.1.2.3.51.2.2.1.5.1.0')
+    float_temp, measurement = str_temp.split(None, 1)
+    float_temp = float(float_temp)
+    if opts.critical_threshold is not None and float_temp > opts.critical_threshold:
+        nagios_status(critical)
+        add_summary(
+            "ambient temperature (%s) is over critical thresholds (%s). " %
+            (str_temp, opts.critical_threshold))
+    elif opts.warning_threshold is not None and float_temp > opts.warning_threshold:
+        nagios_status(warning)
+        add_summary(
+            "ambient temperature (%s) is over warning thresholds (%s). " %
+            (str_temp, opts.warning_threshold))
+    else:
+        add_summary("Ambient temperature = %s. " % (str_temp))
+    add_perfdata("'ambient_temp'=%s;%s;%s " %
+                 (float_temp, opts.warning_threshold, opts.critical_threshold))
+    #add_long( "Ambient Temperature = %s" % (str_temp) )
+    nagios_status(ok)
+
+
+if __name__ == '__main__':
+    try:
+        set_snmp_options()
+        if opts.mode == 'powermodules':
+            check_powermodules()
+        elif opts.mode == 'system-health':
+            check_systemhealth()
+        elif opts.mode == 'temperature':
+            check_temperature()
+        elif opts.mode == 'chassis-status':
+            check_chassis_status()
+        elif opts.mode == 'bladehealth':
+            check_bladehealth()
+        elif opts.mode == 'blowers':
+            check_blowers()
+        elif opts.mode == 'switchmodules':
+            check_switchmodules()
+        else:
+            parser.error("%s is not a valid option for --mode" % opts.mode)
+    except Exception, e:
+        print "Unhandled exception while running script: %s" % e
+        exit(unknown)
+    end()
diff --git a/sensu/files/checks/check_ibm_storwize.py b/sensu/files/checks/check_ibm_storwize.py
new file mode 100644
index 0000000..63cdc55
--- /dev/null
+++ b/sensu/files/checks/check_ibm_storwize.py
@@ -0,0 +1,206 @@
+#!/usr/bin/env python
+
+from pynag.Plugins import PluginHelper, ok, warning, critical, unknown
+from pynag.Utils import runCommand
+from collections import namedtuple
+
+valid_queries = "lsarray lsdrive lsenclosurebattery lsenclosurecanister lsenclosurepsu lsenclosureslot lsenclosure lsmdiskgrp lsmdskgrp lsmgrp lsrcrelationship lsvdisk"
+
+p = PluginHelper()
+p.add_option("-H", "--hostname", '-M', help="Hostname or ip address", dest="hostname")
+p.add_option("-U", "--user", help="Log in as this user to storwize", dest="user", default="nagios")
+p.add_option("-Q", "--query", help="Query to send to storwize (see also -L)", dest="query", default="lsarray")
+p.add_option("-L", "--list-queries", help="List of valid queries", dest="list_queries", action="store_true")
+p.add_option("--test", help="Run this plugin in test mode", dest="test", action="store_true")
+
+p.parse_arguments()
+
+if p.options.list_queries is True:
+    p.parser.error("Valid Queries: %s" % valid_queries)
+if not p.options.hostname:
+    p.parser.error("Required options -H is missing")
+if p.options.query not in valid_queries.split():
+    p.parser.error("%s does not look like a valid query. Use -L for a list of valid queries" % p.options.query)
+
+query = p.options.query
+
+
+# Connect to remote storwize and run a connect
+def run_query():
+    """ Connect to a remote storwize box and run query  """
+    command = "ssh %s@%s %s -delim ':'" % (p.options.user, p.options.hostname, p.options.query)
+    if p.options.test:
+        command = "cat %s.txt" % (p.options.query)
+    return_code, stdout, stderr = runCommand(command)
+
+    if return_code != 0:
+        p.status(unknown)
+        p.add_summary("Got error %s when trying to log into remote storwize box" % return_code)
+        p.add_long_output("\ncommand:\n===============\n%s" % command)
+        p.add_long_output("\nStandard output:\n==============\n%s" % (stdout))
+        p.add_long_output("\nStandard stderr:\n==============\n%s" % (stderr))
+        p.exit()
+    if stderr:
+        p.status(unknown)
+        p.add_summary("Error when connecting to storwize: %s" % stderr)
+        p.exit()
+
+    # Parse the output of run query and return a list of "rows"
+    lines = stdout.splitlines()
+    top_line = lines.pop(0)
+    headers = top_line.split(':')
+    Row = namedtuple('Row', ' '.join(headers))
+    rows = []
+    for i in lines:
+        i = i.strip()
+        columns = i.split(':')
+        row = Row(*columns)
+        rows.append(row)
+    return rows
+
+
+def check_lsmdiskgrp():
+    p.add_summary("%s diskgroups found" % (len(rows)))
+    p.add_metric("number of groups", len(rows))
+    for row in rows:
+        if row.status != 'online':
+            p.status(critical)
+            p.add_summary("group %s is %s." % (row.name, row.status))
+        p.add_long_output("%s: used: %s out of %s" % (row.name, row.used_capacity, row.capacity))
+        # Add a performance metric
+        metric_name = "%s_capacity" % row.name
+        p.add_metric(metric_name, value=row.used_capacity, max=row.capacity)
+
+
+def check_lsdrive():
+    p.add_summary("%s drives found" % (len(rows)))
+    p.add_metric("number of drives", len(rows))
+    for row in rows:
+        if row.status != 'online':
+            p.status(critical)
+            p.add_summary("drive %s is %s" % (row.id, row.status))
+
+
+def check_lsmgrp():
+    p.add_summary("%s groups found" % (len(rows)))
+    p.add_metric("number of groups", len(rows))
+    for row in rows:
+        if row.status != 'online':
+            p.status(critical)
+            p.add_summary("group %s is %s" % (row.name, row.status))
+
+
+def check_lsenclosurebattery():
+    p.add_summary("%s batteries found" % (len(rows)))
+    p.add_metric("number of batteries", len(rows))
+    for row in rows:
+        if row.status != 'online':
+            p.status(critical)
+            p.add_summary("battery %s:%s is %s" % (row.enclosure_id, row.battery_id, row.status))
+
+
+def check_lsenclosurecanister():
+    p.add_summary("%s canisters found" % (len(rows)))
+    p.add_metric("number of canisters", len(rows))
+    for row in rows:
+        if row.status != 'online':
+            p.status(critical)
+            p.add_summary("canister %s:%s is %s" % (row.enclosure_id, row.canister_id, row.status))
+
+
+def check_lsenclosurepsu():
+    p.add_summary("%s psu found" % (len(rows)))
+    p.add_metric("number of psu", len(rows))
+    for row in rows:
+        if row.status != 'online':
+            p.status(critical)
+            p.add_summary("psu %s:%s is %s" % (row.enclosure_id, row.PSU_id, row.status))
+
+
+def check_lsenclosure():
+    p.add_summary("%s enclosures found" % (len(rows)))
+    p.add_metric("number of enclosures", len(rows))
+    for row in rows:
+        if row.status != 'online':
+            p.status(critical)
+            p.add_summary("enclosure %s is %s" % (row.id, row.status))
+
+
+def check_lsenclosureslot():
+    p.add_summary("%s slots found" % (len(rows)))
+    p.add_metric("number of slots", len(rows))
+    for row in rows:
+        if row.port_1_status != 'online':
+            p.status(critical)
+            p.add_summary("port1 on slot %s:%s is %s" % (row.enclosure_id, row.slot_id, row.port_1_status))
+        if row.port_2_status != 'online':
+            p.status(critical)
+            p.add_summary("port2 on slot %s:%s is %s" % (row.enclosure_id, row.slot_id, row.port_2_status))
+
+
+def check_lsrcrelationship():
+    p.add_summary("%s cluster relationships found" % (len(rows)))
+    p.add_metric("number of relationships", len(rows))
+    for row in rows:
+        if row.state != 'consistent_synchronized':
+            p.status(critical)
+            p.add_summary("%s is %s" % (row.consistency_group_name, row.state))
+
+
+def check_lsvdisk():
+    p.add_summary("%s disks found" % (len(rows)))
+    p.add_metric("number of disks", len(rows))
+    for row in rows:
+        if row.status != 'online':
+            p.status(critical)
+            p.add_summary("disk %s is %s" % (row.name, row.status))
+
+
+def check_lsarray():
+    p.add_summary("%s arrays found" % (len(rows)))
+    p.add_metric("number of arrays", len(rows))
+    for row in rows:
+        if row.status != 'online':
+            p.add_summary("array %s is %s." % (row.mdisk_name, row.status))
+            p.status(critical)
+        if row.raid_status != 'online':
+            p.add_summary("array %s has raid status %s." % (row.mdisk_name, row.raid_status))
+            p.status(critical)
+        # Add some performance metrics
+        metric_name = row.mdisk_name + "_capacity"
+        p.add_metric(metric_name, value=row.capacity)
+
+# Run our given query, and parse the output
+rows = run_query()
+
+if query == 'lsmdiskgrp':
+    check_lsmdiskgrp()
+elif query == 'lsarray':
+    check_lsarray()
+elif query == 'lsdrive':
+    check_lsdrive()
+elif query == 'lsvdisk':
+    check_lsvdisk()
+elif query == 'lsmgrp':
+    check_lsmgrp()
+elif query == 'lsenclosure':
+    check_lsenclosure()
+elif query == 'lsenclosurebattery':
+    check_lsenclosurebattery()
+elif query == 'lsenclosurecanister':
+    check_lsenclosurecanister()
+elif query == 'lsenclosurepsu':
+    check_lsenclosurepsu()
+elif query == 'lsrcrelationship':
+    check_lsrcrelationship()
+elif query == 'lsenclosureslot':
+    check_lsenclosureslot()
+else:
+    p.status(unknown)
+    p.add_summary("unsupported query: %s. See -L for list of valid queries" % query)
+    p.exit()
+
+# Check metrics and exit
+p.check_all_metrics()
+p.exit()
+
diff --git a/sensu/files/checks/check_ibm_svc.pl b/sensu/files/checks/check_ibm_svc.pl
new file mode 100644
index 0000000..aab36a0
--- /dev/null
+++ b/sensu/files/checks/check_ibm_svc.pl
@@ -0,0 +1,667 @@
+#!/usr/bin/perl -w
+# nagios: +epn
+#
+# $Id: check_ibm_svc.pl 352 2013-12-28 19:14:19Z u09422fra $
+#
+# IBM SVC health status plugin for Nagios. Needs wbemcli to query
+# the SVC clusters CIMOM server.
+#
+
+use strict;
+use Getopt::Std;
+#use XML::LibXML;
+use Time::Local;
+
+#
+# Variables
+#
+my %conf = (
+#    wbemcli => '/opt/sblim-wbemcli/bin/wbemcli',
+    wbemcli => '/usr/bin/wbemcli',
+    wbemcli_opt => '-noverify -nl',
+    SNAME => {
+       BackendController => 'BE Ctrl',
+       BackendTargetSCSIProtocolEndpoint => 'BE Target',
+       BackendVolume => 'BE Volume',
+       Cluster => 'Cluster',
+       ConcreteStoragePool => 'Storage Pool',
+       EthernetPort => 'Ethernet Port',
+       FCPort => 'FC Port',
+       FCPortStatistics => 'FC Port Stats',
+       IOGroup => 'I/O Group',
+       MasterConsole => 'Master Console',
+       MirrorExtent => 'VDisk Mirrors',
+       Node => 'Node',
+       QuorumDisk => 'Quorum Disk',
+       StorageVolume => 'Storage Volume' },
+    RC => {
+       OK => '0',
+       WARNING => '1',
+       CRITICAL => '2',
+       UNKNOWN => '3' },
+    STATUS => {
+       0 => 'OK',
+       1 => 'WARNING',
+       2 => 'CRITICAL',
+       3 => 'UNKNOWN' }
+);
+# A hash map of CIMOM return codes to human readable strings according to the "V6.4.0 CIM Agent
+# Developer's Guide for IBM System Storage SAN Volume Controller" and the "Managed Object Format
+# Documents" in particular. 
+# The 'default' hash tree referes to mappings used commonly.
+my %rcmap_default = (
+    OperationalStatus => {
+        0 => 'Unknown',
+        1 => 'Other',
+        2 => 'OK',
+        3 => 'Degraded',
+        4 => 'Stressed',
+        5 => 'Predictive Failure',
+        6 => 'Error',
+        7 => 'Non-Recoverable Error',
+        8 => 'Starting',
+        9 => 'Stopping',
+        10 => 'Stopped',
+        11 => 'In Service',
+        12 => 'No Contact',
+        13 => 'Lost Communication',
+        14 => 'Aborted',
+        15 => 'Dormant',
+        16 => 'Supporting Entity in Error',
+        17 => 'Completed',
+        18 => 'Power Mode',
+        32768 => 'Vendor Reserved'
+    }
+);
+my %rcmap = (
+    BackendController => {
+        OperationalStatus => $rcmap_default{'OperationalStatus'}
+    },
+    BackendVolume => {
+        Access => {
+            0 => 'Unknown',
+            1 => 'Readable',
+            2 => 'Writeable',
+            3 => 'Read/Write Supported',
+            4 => 'Write Once'
+        },
+        NativeStatus => {
+            0 => 'Offline',
+            1 => 'Online',
+            2 => 'Degraded',
+            3 => 'Excluded',
+            4 => 'Degraded Paths',
+            5 => 'Degraded Port Errors'
+        },
+        OperationalStatus => $rcmap_default{'OperationalStatus'}
+    },
+    ConcreteStoragePool => {
+        NativeStatus => {
+            0 => 'Offline',
+            1 => 'Online',
+            2 => 'Degraded',
+            3 => 'Excluded',
+            4 => 'Degraded Paths',
+            5 => 'Degraded Port Errors'
+        },
+        OperationalStatus => $rcmap_default{'OperationalStatus'}
+    },
+    Cluster => {
+        OperationalStatus => $rcmap_default{'OperationalStatus'}
+    },
+    EthernetPort => {
+        OperationalStatus => {
+            0 => 'unknown',
+            1 => 'Other',
+            2 => 'OK',
+            6 => 'Error',
+            10 => 'Stopped',
+            11 => 'In Service'
+        }
+    },
+    FCPort => {
+        OperationalStatus => $rcmap_default{'OperationalStatus'}
+    },
+    MasterConsole => {
+        OperationalStatus => $rcmap_default{'OperationalStatus'}
+    },
+    MirrorExtent => {
+        Status => {
+            0 => 'Offline',
+            1 => 'Online'
+        },
+        Sync => {
+            TRUE => 'In sync',
+            FALSE => 'Out of sync'
+        }
+    },
+    Node => {
+        NativeStatus => {
+            0 => 'Offline',
+            1 => 'Online',
+            2 => 'Pending',
+            3 => 'Adding',
+            4 => 'Deleting',
+            5 => 'Flushing'
+        },
+        OperationalStatus => $rcmap_default{'OperationalStatus'}
+    },
+    StorageVolume => {
+        CacheState => {
+            0 => 'Empty',
+            1 => 'Not empty',
+            2 => 'Corrupt',
+            3 => 'Repairing'
+        },
+        NativeStatus => {
+            0 => 'Offline',
+            1 => 'Online',
+            2 => 'Degraded',
+            3 => 'Formatting'
+        },
+        OperationalStatus => $rcmap_default{'OperationalStatus'}
+    },
+);
+my %output = (
+    perfStr => '',
+    retRC => $conf{'RC'}{'OK'},
+    retStr => '',
+);
+
+#
+# Functions
+#
+# Command line processing
+# Takes: reference to conf hash
+# Returns: nothing
+sub cli {
+    my ($cfg) = @_;
+    my %opts;
+    my $optstring = "C:H:P:c:hp:u:w:";
+    getopts( "$optstring", \%opts) or usage();
+    usage() if ( $opts{h} );
+    if ( exists $opts{H} && $opts{H} ne '' ) {
+        $$cfg{'host'} = $opts{H};
+        if ( exists $opts{P} && $opts{P} ne '' ) {
+            $$cfg{'port'} = $opts{P};
+        } else {
+            $$cfg{'port'} = '5989';
+        }
+        if ( exists $opts{u} && $opts{u} ne '' && exists $opts{p} && $opts{p} ne '' ) {
+            $$cfg{'user'} = $opts{u};
+            $$cfg{'password'} = $opts{p};
+            if ( exists $opts{C} && $opts{C} ne '' ) {
+                if ( $opts{C} eq 'BackendTargetSCSIPE' ) {
+                    $$cfg{'check'} = 'BackendTargetSCSIProtocolEndpoint';
+                } else {
+                    $$cfg{'check'} = $opts{C};
+                }
+            } else {
+                usage();
+            }
+        } else {
+            usage();
+        }
+        if ( exists $opts{c} && $opts{c} ne ''  ) {
+            $$cfg{'critical'} = $opts{c};
+        } else {
+            if ( $$cfg{'check'} eq "IOGroup" ) {
+                usage();
+            }
+        }
+        if ( exists $opts{w} && $opts{w} ne ''  ) {
+            $$cfg{'warning'} = $opts{w};
+        } else {
+            if ( $$cfg{'check'} eq "IOGroup" ) {
+                usage();
+            }
+        }
+    } else {
+        usage();
+    }
+}
+
+#
+# Query SVC for check output
+# Takes: reference to conf and output hash
+# Returns: nothing
+sub querySVC {
+    my ($cfg, $out, $rcmap) = @_;
+    my $objectPath = "https://$$cfg{'user'}:$$cfg{'password'}\@$$cfg{'host'}:$$cfg{'port'}/root/ibm:IBMTSSVC_$$cfg{'check'}";
+    open( WBEMCLI, "-|", "$$cfg{'wbemcli'} $$cfg{'wbemcli_opt'} ei \'$objectPath\'" ) or die "Can't fork\n";
+
+    my %obj;
+    my $obj_begin;
+    my $prop_name = '';
+    my $prop_value = '';
+    my $inst_count = 0;
+    my $inst_count_half = 0;
+    my $inst_count_nok = 0;
+    my $inst_count_ok = 0;
+    my $path_count = 0;
+    my $path_count_max = 0;
+    my $path_count_half = 0;
+    my $quorum_active = '';
+    while( my $line = <WBEMCLI> ) {
+        if ( ( $line =~ /^$$cfg{'host'}:$$cfg{'port'}\/root\/ibm:IBMTSSVC_$$cfg{'check'}\.(.*)$/ ) == 1 ) {
+            $obj_begin = 1;
+        }
+        elsif ( ( ( $prop_name, $prop_value ) = $line =~ /^-(.*)=(.*)$/ ) == 2 ) {
+            $prop_value =~ s/"//g;
+            $obj{$prop_name} = $prop_value;
+        }
+        elsif ( $line =~ /^\s*$/ && $obj_begin == 1 ) {
+            $obj_begin = 0;
+            $inst_count++;
+            # This should be the end of the paragraph/instance so we should
+            # have gathered all properties at this point
+
+            # Controller on the backend of the clusters FC. BackendControllers control the
+            # BackendVolumes that are needed to form StoragePools in the SAN Volume Controller.
+            # Check for:
+            #   OperationalStatus
+            #
+            if ( $$cfg{'check'} eq 'BackendController' ) {
+                if ( $obj{'OperationalStatus'} != 2 ) {
+                    $$out{'retStr'} .= " $obj{'ElementName'}($$rcmap{'BackendController'}{'OperationalStatus'}{$obj{'OperationalStatus'}})";
+                    $$out{'retRC'} = $$cfg{'RC'}{'CRITICAL'};
+                    $inst_count_nok++;
+                } else {
+                    $inst_count_ok++;
+                }
+            }
+            # A SCSIProtocolEndpoint represents the protocol (command) aspects of a logical
+            # SCSI port, independent of the connection/transport. SCSIProtocolEndpoint is
+            # either directly or indirectly associated with one or more instances of LogicalPort
+            # (via PortImplementsEndpoint) depending on the underlying transport. Indirect
+            # associations aggregate one or more LogicalPorts using intermediate Protocol-
+            # Endpoints (iSCSI, etc). SCSIProtocolEndpoint is also associated to a SCSIProtocol-
+            # Controller, representing the SCSI device. This is impelementation that represents
+            # the SCSIProtocolEndpoint (RemoteServiceAccessPoint) of the Backend Storage.
+            #
+            # Check for:
+            #   Status
+            #
+            elsif ( $$cfg{'check'} eq 'BackendTargetSCSIProtocolEndpoint' ) {
+                if ( $obj{'Status'} ne 'Active' ) {
+                    $$out{'retStr'} .= " $obj{'ElementName'}($$cfg{'STATUS'}{$$out{'retRC'}},$obj{'Name'})";
+                    $$out{'retRC'} = $$cfg{'RC'}{'WARNING'};
+                    $inst_count_nok++;
+                } else {
+                    $inst_count_ok++;
+                }
+            }
+            # A BackendVolume is a SCSI LUN which is exposed on the fabric by a Storage
+            # Controller (typically a RAID array) to the SAN Volume Controller. It can
+            # be a raid array made from local drives or it can be an logical unit from
+            # a external SAN attached controller that SVC manages.
+            #
+            # In other words, these are the SVC MDisks
+            #
+            # Check for:
+            #   Access, NativeStatus, OperationalStatus, Path count
+            #
+            elsif ( $$cfg{'check'} eq 'BackendVolume' ) {
+                if ( $obj{'MaxPathCount'} ne '' ) {
+                    $path_count_max = $obj{'MaxPathCount'};
+                    $path_count_half = $obj{'MaxPathCount'}/2;
+                }
+                if ( $obj{'PathCount'} ne '' ) {
+                    $path_count = $obj{'PathCount'};
+                }
+                if ( $obj{'OperationalStatus'} != 2 || $obj{'NativeStatus'} != 1 || $path_count <= $path_count_half ) {
+                    $$out{'retStr'} .= " $obj{'ElementName'}($$rcmap{'BackendVolume'}{'NativeStatus'}{$obj{'NativeStatus'}},$$rcmap{'BackendVolume'}{'OperationalStatus'}{$obj{'OperationalStatus'}},Paths:$path_count/$path_count_max)";
+                    $$out{'retRC'} = $$cfg{'RC'}{'CRITICAL'};
+                    $inst_count_nok++;
+                } elsif ( $obj{'Access'} != 3 ) {
+                   $$out{'retStr'} .= " $obj{'ElementName'}($$rcmap{'BackendVolume'}{'Access'}{$obj{'Access'}})";
+                   if ( $$out{'retRC'} != $$cfg{'RC'}{'CRITICAL'} ) {
+                       $$out{'retRC'} = $$cfg{'RC'}{'WARNING'};
+                   }
+                    $inst_count_nok++;
+                } elsif ( $path_count < $path_count_max ) {
+                    $$out{'retStr'} .= " $obj{'ElementName'}(Path: $path_count/$path_count_max)";
+                    if ( $$out{'retRC'} != $$cfg{'RC'}{'CRITICAL'} ) {
+                        $$out{'retRC'} = $$cfg{'RC'}{'WARNING'};
+                    }
+                    $inst_count_nok++;
+                } else {
+                    $inst_count_ok++;
+                }
+            }
+            # A group of between one and four Redundancy Groups therefore up to eight Nodes
+            # form a Cluster.
+            #
+            # Check for:
+            #   OperationalStatus
+            #
+            elsif ( $$cfg{'check'} eq 'Cluster' ) {
+                if ( $obj{'OperationalStatus'} != 2 ) {
+                    $$out{'retRC'} = $$cfg{'RC'}{'CRITICAL'};
+                    $$out{'retStr'} .= " $obj{'ElementName'}($$rcmap{'Cluster'}{'OperationalStatus'}{$obj{'OperationalStatus'}})";
+                    $inst_count_nok++;
+                } else {
+                    $inst_count_ok++;
+                }
+            }
+            # A pool of Storage that is managed within the scope of a particular System.
+            # StoragePools may consist of component StoragePools or StorageExtents. Storage-
+            # Extents that belong to the StoragePool have a Component relationship to the
+            # StoragePool. StorageExtents/StoragePools that are elements of a pool have
+            # their available space aggregated into the pool. StoragePools and Storage-
+            # Volumes may be created from StoragePools. This is indicated by the Allocated-
+            # FromStoragePool association. StoragePool is scoped to a system by the Hosted-
+            # StoragePool association.
+            # For SVC concrete storage pools, this corresponds to a Managed Disk Group from
+            # which Virtual Disks can be allocated. SVC concrete StoragePools are not pre-
+            # configured and must be created by the storage administrator.
+            #
+            # In other words, these are the SVC MDiskGroups
+            #
+            # Check for:
+            #   NativeStatus, OperationalStatus
+            #
+            elsif ( $$cfg{'check'} eq 'ConcreteStoragePool' ) {
+                if ( $obj{'OperationalStatus'} != 2 || $obj{'NativeStatus'} != 1 ) {
+                    $$out{'retStr'} .= " $obj{'ElementName'}($$rcmap{'ConcreteStoragePool'}{'NativeStatus'}{$obj{'NativeStatus'}},$$rcmap{'ConcreteStoragePool'}{'OperationalStatus'}{$obj{'OperationalStatus'}})";
+                    $$out{'retRC'} = $$cfg{'RC'}{'CRITICAL'};
+                    $inst_count_nok++;
+                } else {
+                    $inst_count_ok++;
+                }
+                $$out{'perfStr'} .= " cap_$obj{'ElementName'}=$obj{'UsedCapacity'};;;;$obj{'TotalManagedSpace'}";
+                $$out{'perfStr'} .= " md_$obj{'ElementName'}=$obj{'NumberOfBackendVolumes'};;;;";
+                $$out{'perfStr'} .= " vd_$obj{'ElementName'}=$obj{'NumberOfStorageVolumes'};;;;";
+            }
+            # 
+            # Ethernet port of a SVC node.
+            #
+            # Check for:
+            #   OperationalStatus
+            #
+            elsif ( $$cfg{'check'} eq 'EthernetPort' ) {
+                if ( $obj{'OperationalStatus'} != 2 && $obj{'OperationalStatus'} != 11 ) {
+                    $$out{'retStr'} .= " MAC:$obj{'PermanentAddress'}($$rcmap{'EthernetPort'}{'OperationalStatus'}{$obj{'OperationalStatus'}})";
+                    if ( $$out{'retRC'} != $$cfg{'RC'}{'CRITICAL'} ) {
+                        $$out{'retRC'} = $$cfg{'RC'}{'WARNING'};
+                    }
+                    $inst_count_nok++;
+                } else {
+                    $inst_count_ok++;
+                }
+                $inst_count_half = $inst_count/2;
+                if ( $inst_count_ok < $inst_count_half ) {
+                    $$out{'retRC'} = $$cfg{'RC'}{'CRITICAL'};
+                }
+            }
+            # Fibre-Channel port of a SVC node. Generally all FC ports of a SVC RedundancyGroup
+            # expose the same devices. Furthermore all FC ports of a SVC cluster share the same
+            # BackendVolumes.
+            #
+            # Check for:
+            #   OperationalStatus
+            #
+            elsif ( $$cfg{'check'} eq 'FCPort' ) {
+                if ( $obj{'OperationalStatus'} != 2 ) {
+                    $$out{'retStr'} .= " $obj{'ElementName'}($$rcmap{'FCPort'}{'OperationalStatus'}{$obj{'OperationalStatus'}})";
+                    if ($$rcmap{'FCPort'}{'OperationalStatus'}{$obj{'OperationalStatus'}} == 'Stopped') {
+                        $inst_count_ok++;
+                    }
+                    else {
+                        $inst_count_nok++;
+                    }
+                } else {
+                    $inst_count_ok++;
+                }
+                $inst_count_half = $inst_count/2;
+
+                if ( $inst_count_ok < $inst_count ) {
+                    if ( $$out{'retRC'} != $$cfg{'RC'}{'CRITICAL'} ) {
+                        $$out{'retRC'} = $$cfg{'RC'}{'WARNING'};
+                    }
+                }
+
+                if ( $inst_count_ok < $inst_count_half ) {
+                    $$out{'retRC'} = $$cfg{'RC'}{'CRITICAL'};
+                }
+            }
+            # FCPortStatistics is the statistics for the FCPort.
+            #
+            # Check for:
+            #   -
+            #
+            elsif ( $$cfg{'check'} eq 'FCPortStatistics' ) {
+                my ($node, $port) = $obj{'ElementName'} =~ /^FCPort statistics for port (\d+) on node (\d+)/;
+                my %stats = (
+                    BytesTransmitted => 'trans',
+                    BytesReceived => 'recv',
+                    LinkFailures => 'lf',
+                    LossOfSignalCounter => 'losig',
+                    LossOfSyncCounter => 'losync',
+                    PrimitiveSeqProtocolErrCount => 'pspec',
+                    CRCErrors => 'crc',
+                    InvalidTransmissionWords => 'inval',
+                    BBCreditZeroTime => 'bbzero'
+                );
+
+                $$out{'retStr'} = "OK";
+                foreach my $stat ( sort keys %stats) {
+                    $$out{'perfStr'} .= " ".$stats{$stat}."_n".$node."p".$port."=".$obj{$stat}."c;;;;";
+                }
+            }
+            # A group containing two Nodes. An IOGroup defines an interface for a set of
+            # Volumes. All Nodes and Volumes are associated with exactly one IOGroup. The
+            # read and write cache provided by a node is duplicated for redundancy. When
+            # IO is performed to a Volume, the node that processes the IO will duplicate
+            # the data on the Partner node in the IOGroup. This class represents the system
+            # aspect of an IO group wheras IOGroupSet represents the set aspect.
+            #
+            # Check for:
+            #   OperationalStatus
+            #
+            elsif ( $$cfg{'check'} eq 'IOGroup' ) {
+                my @mem_elements;
+                $inst_count--;
+                for my $mem ( 'FlashCopy', 'Mirror', 'RAID', 'RemoteCopy' ) {
+                    my $mem_free = $mem."FreeMemory";
+                    my $mem_total = $mem."TotalMemory";
+                    $inst_count++;
+                    if ( $obj{$mem_total} == 0 ) {
+                        # For inactive memory metrics the value of "*TotalMemory" is zero, skip those.
+                        $inst_count--;
+                    } elsif ( $obj{$mem_free} <= $$cfg{'critical'} ) {
+                        push (@mem_elements, "$mem:CRITICAL");
+                        $$out{'retRC'} = $$cfg{'RC'}{'CRITICAL'};
+                        $inst_count_nok++;
+                    } elsif ( $obj{$mem_free} <= $$cfg{'warning'} && $obj{$mem_free} > $$cfg{'critical'} ) {
+                        push (@mem_elements, "$mem:WARNING");
+                        if ( $$out{'retRC'} != $$cfg{'RC'}{'CRITICAL'} ) {
+                            $$out{'retRC'} = $$cfg{'RC'}{'WARNING'};
+                        }
+                        $inst_count_nok++;
+                    } else {
+                        push (@mem_elements, "$mem:OK");
+                        $inst_count_ok++;
+                    }
+                }
+                if ( @mem_elements ) {
+                    $$out{'retStr'} .= " $obj{'ElementName'}(".join(',', @mem_elements).")";
+                }
+
+                $$out{'perfStr'} .= " num_hosts_$obj{'ElementName'}=$obj{'NumberOfHosts'};;;;";
+                $$out{'perfStr'} .= " num_nodes_$obj{'ElementName'}=$obj{'NumberOfNodes'};;;;";
+                $$out{'perfStr'} .= " num_vol_$obj{'ElementName'}=$obj{'NumberOfVolumes'};;;;";
+                $$out{'perfStr'} .= " mem_fc_$obj{'ElementName'}=$obj{'FlashCopyFreeMemory'};;;0;$obj{'FlashCopyTotalMemory'}";
+                $$out{'perfStr'} .= " mem_mirr_$obj{'ElementName'}=$obj{'MirrorFreeMemory'};;;0;$obj{'MirrorTotalMemory'}";
+                $$out{'perfStr'} .= " mem_raid_$obj{'ElementName'}=$obj{'RAIDFreeMemory'};;;0;$obj{'RAIDTotalMemory'}";
+                $$out{'perfStr'} .= " mem_rc_$obj{'ElementName'}=$obj{'RemoteCopyFreeMemory'};;;0;$obj{'RemoteCopyTotalMemory'}";
+            }
+            # The SVC management web interface processes.
+            #
+            # Check for:
+            #   OperationalStatus
+            #
+            elsif ( $$cfg{'check'} eq 'MasterConsole' ) {
+                if ( $obj{'OperationalStatus'} != 2 ) {
+                    $$out{'retStr'} .= " $obj{'ElementName'}($$rcmap{'MasterConsole'}{'OperationalStatus'}{$obj{'OperationalStatus'}})";
+                    $$out{'retRC'} = $$cfg{'RC'}{'CRITICAL'};
+                    $inst_count_nok++;
+                } else {
+                    $inst_count_ok++;
+                }
+            }
+            # Represents a single vdisk copy. Each vdisk must have at least one copy and will
+            # have two copies if it is mirrored.
+            #
+            # Check for:
+            #   Status, Sync
+            #
+            elsif ( $$cfg{'check'} eq 'MirrorExtent' ) {
+                if ( $obj{'Status'} != 1 || $obj{'Sync'} ne 'TRUE' ) {
+                    $$out{'retStr'} .= " VDisk:$obj{'StorageVolumeID'},Copy:$obj{'CopyID'}($$rcmap{'MirrorExtent'}{'Status'}{$obj{'Status'}},$$rcmap{'MirrorExtent'}{'Sync'}{$obj{'Sync'}})";
+                    $$out{'retRC'} = $$cfg{'RC'}{'CRITICAL'};
+                    $inst_count_nok++;
+                } else {
+                    $inst_count_ok++;
+                }
+            }
+            # A single SAN Volume Controller unit. Nodes work in pairs for redundancy. The
+            # pairs are associated by their IO Group. One or more Node pairs form a Cluster.
+            # When the Cluster is formed, one Node is designated the Config Node. This node
+            # is chosen automatically and it is this Node that binds to the Cluster IP address.
+            # This forms the Configuration Interface to the Cluster.
+            #
+            # Check for:
+            #   NativeStatus, OperationalStatus
+            #
+            elsif ( $$cfg{'check'} eq 'Node' ) {
+                if ( $obj{'OperationalStatus'} != 2 || $obj{'NativeStatus'} != 1 ) {
+                    $$out{'retStr'} .= " $obj{'ElementName'}($$rcmap{'Node'}{'NativeStatus'}{$obj{'NativeStatus'}},$$rcmap{'Node'}{'OperationalStatus'}{$obj{'OperationalStatus'}})";
+                    $$out{'retRC'} = $$cfg{'RC'}{'CRITICAL'};
+                    $inst_count_nok++;
+                } else {
+                    $inst_count_ok++;
+                }
+            }
+            # Represents a single candidate quorum disk. There is only ONE quorum disk but
+            # the cluster uses three disks as quorum candidate disks. The cluster will select
+            # the actual quorum disk from the pool of quorum candidate disks. When MDisks
+            # are added to the SVC cluster, it checks the MDisk to see if it can be used as
+            # a quorum disk. If the MDisk fulfils the demands, the SVC will assign the three
+            # first MDisks as quorum candidates, and one of them is selected as the active
+            # quorum disk.
+            #
+            # Check for:
+            #   Active, Status
+            #
+            elsif ( $$cfg{'check'} eq 'QuorumDisk' ) {
+                if ( $obj{'Status'} ne 'online' ) {
+                    $$out{'retStr'} .= " $obj{'ElementName'}($obj{'Status'})";
+                    $$out{'retRC'} = $$cfg{'RC'}{'CRITICAL'};
+                    $inst_count_nok++;
+                } else {
+                    $inst_count_ok++;
+                }
+                if ( $obj{'Active'} ne 'FALSE' ) {
+                    $quorum_active = $obj{'ElementName'};
+                }
+            }
+            # A device presented by the Cluster which can be mapped as a SCSI LUN to host
+            # systems on the SAN. A Volume is formed by allocating a set of Extents from a
+            # Pool. In SVC terms a VDisk
+            #
+            # Check for:
+            #   CacheState, NativeStatus, OperationalStatus
+            #
+            elsif ( $$cfg{'check'} eq 'StorageVolume' ) {
+                if ( $obj{'OperationalStatus'} != 2 || $obj{'NativeStatus'} != 1 ) {
+                    $$out{'retStr'} .= " $obj{'ElementName'}($$rcmap{'StorageVolume'}{'CacheState'}{$obj{'CacheState'}},$$rcmap{'StorageVolume'}{'NativeStatus'}{$obj{'NativeStatus'}},$$rcmap{'StorageVolume'}{'OperationalStatus'}{$obj{'OperationalStatus'}})";
+                    $$out{'retRC'} = $$cfg{'RC'}{'CRITICAL'};
+                    $inst_count_nok++;
+                } elsif ( $obj{'CacheState'} != 0 && $obj{'CacheState'} != 1 ) {
+                    $$out{'retStr'} .= " $obj{'ElementName'}($$rcmap{'StorageVolume'}{'CacheState'}{$obj{'CacheState'}},$$rcmap{'StorageVolume'}{'NativeStatus'}{$obj{'NativeStatus'}},$$rcmap{'StorageVolume'}{'OperationalStatus'}{$obj{'OperationalStatus'}})";
+                    if ( $$out{'retRC'} != $$cfg{'RC'}{'CRITICAL'} ) {
+                        $$out{'retRC'} = $$cfg{'RC'}{'WARNING'};
+                    }
+                    $inst_count_nok++;
+                } else {
+                    $inst_count_ok++;
+                }
+            }
+        }
+        else { next; }
+    }
+    close( WBEMCLI );
+
+    $$out{'retStr'} =~ s/^ //;
+    $$out{'retStr'} =~ s/,$//;
+    if ( $inst_count_ok != 0 && $inst_count != 0 ) {
+        if ( $$out{'retStr'} ne '' ) {
+            $$out{'retStr'} = " - $$out{'retStr'}";
+        }
+        $$out{'retStr'} = "Not OK:$inst_count_nok/OK:$inst_count_ok/Total:$inst_count".$$out{'retStr'};
+    }
+
+    # Special case: Check if at least one QuorumDisk was in the "active='TRUE'" state.
+    if ( $$cfg{'check'} eq 'QuorumDisk' ) {
+        if ( $quorum_active ne '' ) {
+            $$out{'retStr'} .= " - Active quorum on \"$quorum_active\"";
+        } else {
+            $$out{'retRC'} = $$cfg{'RC'}{'CRITICAL'};
+            $$out{'retStr'} .= " - No active quorum disk found";
+        }
+    }
+
+    $$out{'perfStr'} =~ s/^ //;
+    $$out{'perfStr'} =~ s/,$//;
+    if ( $$out{'perfStr'} ne '' ) {
+        $$out{'perfStr'} = "|".$$out{'perfStr'};
+    } else {
+        $$out{'perfStr'} = "|nok=$inst_count_nok;;;; ok=$inst_count_ok;;;; total=$inst_count;;;;";
+    }
+}
+
+#
+# Print usage
+# Takes: nothing
+# Returns: nothing
+sub usage {
+    (my $Me = $0) =~ s!.*/!!;
+    print STDOUT << "EOF";
+
+IBM SVC health status plugin for Nagios. Needs wbemcli to query
+the SVC clusters CIMOM server.
+
+Usage: $Me [-h] -H host [-P port] -u user -p password -C check [-c crit] [-w warn]
+
+Flags:
+    -C check    Check to run. Currently available checks:
+                    BackendController, BackendTargetSCSIPE, BackendVolume, Cluster,
+                    ConcreteStoragePool, EthernetPort, FCPort, FCPortStatistics,
+                    IOGroup*, MasterConsole, MirrorExtent, Node, QuorumDisk, StorageVolume
+    -H host     Hostname of IP of the SVC cluster.
+    -P port     CIMOM port on the SVC cluster.
+    -c crit     Critical threshold (only for checks with '*')
+    -h          Print this help message.
+    -p          Password for CIMOM access on the SVC cluster.
+    -u          User with CIMOM access on the SVC cluster.
+    -w warn     Warning threshold (only for checks with '*')
+
+EOF
+    exit;
+}
+
+#
+# Main
+#
+# Get command-line options
+cli(\%conf);
+
+# Query SVC for check output
+querySVC(\%conf, \%output, \%rcmap);
+
+print uc($conf{'SNAME'}{$conf{'check'}})." $conf{'STATUS'}{$output{'retRC'}} - $output{'retStr'}$output{'perfStr'}\n";
+exit $output{'retRC'};
+
+#
+## EOF
diff --git a/sensu/files/checks/check_keystone_api b/sensu/files/checks/check_keystone_api
new file mode 100644
index 0000000..cb5e7bb
--- /dev/null
+++ b/sensu/files/checks/check_keystone_api
@@ -0,0 +1,87 @@
+#!/bin/bash
+#
+# Keystone API monitoring script for Sensu
+#
+# Copyright © 2013 eNovance <licensing@enovance.com>
+#
+# Author: Emilien Macchi <emilien.macchi@enovance.com>
+#
+# 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, either version 3 of the License, or
+# (at your option) any later version.
+#
+# 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, see <http://www.gnu.org/licenses/>.
+#
+# Requirement: curl
+#
+set -e
+
+STATE_OK=0
+STATE_WARNING=1
+STATE_CRITICAL=2
+STATE_UNKNOWN=3
+STATE_DEPENDENT=4
+
+usage ()
+{
+    echo "Usage: $0 [OPTIONS]"
+    echo " -h               Get help"
+    echo " -H <Auth URL>    URL for obtaining an auth token"
+    echo " -U <username>    Username to use to get an auth token"
+    echo " -P <password>    Password to use ro get an auth token"
+}
+
+while getopts 'h:H:U:T:P:' OPTION
+do
+    case $OPTION in
+        h)
+            usage
+            exit 0
+            ;;
+        H)
+            export OS_AUTH_URL=$OPTARG
+            ;;
+        U)
+            export OS_USERNAME=$OPTARG
+            ;;
+        P)
+            export OS_PASSWORD=$OPTARG
+            ;;
+        *)
+            usage
+            exit 1
+            ;;
+    esac
+done
+
+if ! which curl >/dev/null 2>&1
+then
+    echo "curl is not installed."
+    exit $STATE_UNKNOWN
+fi
+
+START=`date +%s`
+TOKEN=$(curl -d '{"auth":{"passwordCredentials":{"username": "'$OS_USERNAME'", "password": "'$OS_PASSWORD'"}}}' -H "Content-type: application/json" ${OS_AUTH_URL}:5000/v2.0/tokens/ 2>&1 | grep token|awk '{print $8}'|grep -o '".*"' | sed -n 's/.*"\([^"]*\)".*/\1/p')
+END=`date +%s`
+
+TIME=$((END-START))
+
+if [ -z "$TOKEN" ]; then
+    echo "Unable to get a token"
+    exit $STATE_CRITICAL
+else
+    if [ $TIME -gt 10 ]; then
+        echo "Get a token after 10 seconds, it's too long."
+        exit $STATE_WARNING
+    else
+        echo "Got a token, Keystone API is working."
+        exit $STATE_OK
+    fi
+fi
diff --git a/sensu/files/checks/check_kvm.sh b/sensu/files/checks/check_kvm.sh
new file mode 100644
index 0000000..f40fb50
--- /dev/null
+++ b/sensu/files/checks/check_kvm.sh
@@ -0,0 +1,87 @@
+#!/bin/bash
+#
+# Key for libvirt-client: command="sudo /srv/sensu/checks/check_virsh_list.sh $SSH_ORIGINAL_COMMAND",no-port-forwarding,no-x11-forwarding,no-agent-forwarding ssh-rsa ...
+#check_virsh_list.sh:
+#
+#!/bin/bash
+#case $1 in
+#    list) virsh list --all;;
+#    dumpxml) virsh dumpxml $2;;
+#    *) echo invalid option;exit 1;;
+#esac
+#
+#Usage:
+# check_kvm.sh -i instance_id -u user_name -p user_password -t tenant_name -w auth_url
+
+
+while getopts ":i:u:p:t:w:" opt; do
+    case $opt in
+        i)
+            inst_id=${OPTARG};;
+        u)
+            user=${OPTARG};;
+      	p)
+	          passwd=${OPTARG};;
+      	t)
+            tenant_name=${OPTARG};;
+	      w)
+            auth_url=${OPTARG};;
+        \?)
+            echo "Invalid option";exit 1;;
+        : ) echo "Option -"$OPTARG" requires an argument." >&2
+            exit 1;;
+    esac
+done
+#keystone:
+export OS_USERNAME=$user
+export OS_PASSWORD=$passwd
+export OS_TENANT_NAME=$tenant_name
+export OS_AUTH_URL=$auth_url
+
+#Clear getopts variables
+for ((i=1 ; i <= 9 ; i++))
+do
+      shift
+done
+
+#Get hypervisor name
+hypervisor=`nova show $inst_id | grep hypervisor_hostname | awk '{print $4}'`
+
+#Get kvm instance name
+inst_name=`ssh -i /opt/sensu/.ssh/id_rsa libvirt-client@$hypervisor "dumpxml $inst_id" | grep '<name>'`
+#inst_name=`ssh root@$hypervisor "virsh dumpxml $inst_id | grep '<name>'"`
+inst_name=`awk '{gsub("<name>", "");print}' <<< $inst_name`
+inst_name=`awk '{gsub("</name>", "");print}' <<< $inst_name`
+
+#Get state
+state=`ssh -i /opt/sensu/.ssh/id_rsa libvirt-client@$hypervisor "list" | sed '1,2d' | sed '/^$/d'| awk '{print $2" "$3}' | grep $inst_name `
+#state=`ssh root@$hypervisor "virsh list --all | sed '1,2d' | sed '/^$/d'| awk '{print $2" "$3}' | grep $inst_name "`
+state=$(echo $state | awk -F" " '{print $2}')
+
+OK=0
+WARN=0
+CRIT=0
+NUM=0
+
+  case "$state" in
+    running|blocked) OK=$(expr $OK + 1) ;;
+    paused) WARN=$(expr $WARN + 1) ;;
+    shutdown|shut*|crashed) CRIT=$(expr $CRIT + 1) ;;
+    *) CRIT=$(expr $CRIT + 1) ;;
+  esac
+
+if [ "$NUM" -eq "$OK" ]; then
+  EXITVAL=0 #Status 0 = OK (green)
+fi
+
+if [ "$WARN" -gt 0 ]; then
+  EXITVAL=1 #Status 1 = WARNING (yellow)
+fi
+
+if [ "$CRIT" -gt 0 ]; then
+  EXITVAL=2 #Status 2 = CRITICAL (red)
+fi
+
+echo hosts:$NUM OK:$OK WARN:$WARN CRIT:$CRIT - $LIST
+
+exit $EXITVAL
diff --git a/sensu/files/checks/check_log.sh b/sensu/files/checks/check_log.sh
new file mode 100644
index 0000000..193d724
--- /dev/null
+++ b/sensu/files/checks/check_log.sh
@@ -0,0 +1,51 @@
+#!/bin/bash
+
+#check logs
+#usage: ./check_log.sh -p path_to_log -l check_for_last_x_minutes -r regular_expression_you_are_looking_for -c check_last_n_lines
+
+while getopts ":p:l:r:c:" opt; do
+    case $opt in
+        p)
+            LOGPATH=${OPTARG};;
+        l)
+            LAST=${OPTARG};;
+        r)
+            REGEXP=${OPTARG};;
+        c)
+            LINESCOUNT=${OPTARG};;
+       \?)
+            echo "Invalid option";exit 1;;
+        : ) echo "Option -"$OPTARG" requires an argument." >&2
+            exit 1;;
+    esac
+done
+
+NAME=$(echo "$LOGPATH" | sed "s/.*\///" | sed "s/\..*//")
+
+LASTCHANGED=$(expr `date +%s` - `stat -c %Y $LOGPATH`)
+
+LAST=$[LAST*60]
+
+if [[ $LASTCHANGED -gt $LAST ]]; then
+        echo No new lines in file.
+        exit 0
+fi
+
+tail -$LINESCOUNT $LOGPATH > LASTLINES_$NAME
+
+ERRCODE=0
+while read line; do
+        if [[ $line == *"$REGEXP"* ]]; then
+                EXITCODE=$[EXITCODE+1]
+        fi
+done < LASTLINES_$NAME
+
+rm -rf /etc/sensu/plugins/LASTLINES_$NAME
+
+if [[ $EXITCODE -gt 0 ]]; then
+        echo CRIT:$EXITCODE from last $LINESCOUNT lines.
+        exit 2
+else
+        echo OK:$EXITCODE
+        exit 1
+fi
\ No newline at end of file
diff --git a/sensu/files/checks/check_neutron_agents.py b/sensu/files/checks/check_neutron_agents.py
new file mode 100644
index 0000000..3eadbe1
--- /dev/null
+++ b/sensu/files/checks/check_neutron_agents.py
@@ -0,0 +1,104 @@
+#!/usr/bin/env python
+#
+# Check OpenStack Neutron Agent Status
+# ===
+#
+# Dependencies
+# -----------
+# - python-quantumclient and related libraries
+#
+# Performs API query to determine 'alive' status of all
+# (or filtered list of) Neutron network agents. Also has
+# ability to warn if any agents have been administratively
+# disabled.
+#
+# Copyright 2013 Brian Clark <brian.clark@cloudapt.com>
+#
+# Released under the same terms as Sensu (the MIT license);
+# see LICENSE for details.
+#
+
+import sys
+import argparse
+import logging
+from quantumclient.quantum import client
+
+STATE_OK = 0
+STATE_WARNING = 1
+STATE_CRITICAL = 2
+STATE_UNKNOWN = 3
+
+logging.basicConfig(level=logging.INFO)
+#logging.basicConfig(level=logging.DEBUG)
+
+parser = argparse.ArgumentParser(description='Check OpenStack Neutron agent status')
+parser.add_argument('--auth-url', metavar='URL', type=str,
+                    required=True,
+                    help='Keystone URL')
+parser.add_argument('--username', metavar='username', type=str,
+                    required=True,
+                    help='username for authentication')
+parser.add_argument('--password', metavar='password', type=str,
+                    required=True,
+                    help='password for authentication')
+parser.add_argument('--tenant', metavar='tenant', type=str,
+                    required=True,
+                    help='tenant name for authentication')
+parser.add_argument('--region_name', metavar='region', type=str,
+                    help='Region to select for authentication')
+parser.add_argument('--host', metavar='host', type=str,
+                    help='filter by specific host')
+parser.add_argument('--agent-type', metavar='type', type=str,
+                    help='filter by specific agent type')
+parser.add_argument('--warn-disabled', action='store_true',
+                    default=False,
+                    help='warn if any agents administratively disabled')
+args = parser.parse_args()
+
+try:
+    c = client.Client('2.0',
+                      username=args.username,
+                      tenant_name=args.tenant,
+                      password=args.password,
+                      auth_url=args.auth_url,
+                      region_name=args.region_name)
+    params = {}
+    if args.host: params['host'] = args.host
+    if args.agent_type: params['agent_type'] = args.agent_type
+    agents = c.list_agents(**params)
+except Exception as e:
+    print str(e)
+    sys.exit(STATE_CRITICAL)
+
+agents_down = []
+agents_disabled = []
+messages = []
+exit_state = STATE_OK
+for a in agents['agents']:
+    if a['admin_state_up'] and not a['alive']:
+        agents_down.append(a)
+    elif not a['admin_state_up']:
+        agents_disabled.append(a)
+
+if agents_down:
+    for a in agents_down:
+        messages.append("{} on {} is down".format(a['agent_type'], a['host']))
+        exit_state = STATE_CRITICAL
+
+if args.warn_disabled and agents_disabled:
+    for a in agents_disabled:
+        messages.append("{} on {} is {} and disabled"
+                        .format(a['agent_type'],
+                                a['host'],
+                                'alive' if a['alive'] else 'down'))
+    if exit_state != STATE_CRITICAL: exit_state = STATE_WARNING
+
+if len(messages) == 1:
+     print "Neutron agent status: {}".format(messages[0])
+else:
+    print "Neutron agent status {} total / {} down / {} disabled".format(len(agents['agents']),
+                                                                        len(agents_down),
+                                                                        len(agents_disabled))
+
+if len(messages) > 1: print "\n".join(messages)
+exit(exit_state)
diff --git a/sensu/files/checks/check_nova_services.sh b/sensu/files/checks/check_nova_services.sh
new file mode 100644
index 0000000..9038c99
--- /dev/null
+++ b/sensu/files/checks/check_nova_services.sh
@@ -0,0 +1,69 @@
+#!/bin/bash
+#check nova service-list on ctls
+
+while getopts ":u:p:t:h:" opt; do
+    case $opt in
+        u)
+            user=${OPTARG};;
+        p)
+            passwd=${OPTARG};;
+        t)
+            tenant=${OPTARG};;
+        h)
+            host=${OPTARG};;
+       \?)
+            echo "Invalid option";exit 1;;
+        : ) echo "Option -"$OPTARG" requires an argument." >&2
+            exit 1;;
+    esac
+done
+
+read -ra nova_state_down <<< $(nova --os-username $user --os-password $passwd --os-tenant-name $tenant --os-auth-url $host service-list | head -n -1 | tr -d "|" | awk '/'down'/ {print "Service " $1 " on " $2 " is DOWN" ";"}')
+
+EXITVAL=0
+
+if [[ -n ${nova_state_down[@]} ]]; then
+
+    read -ra console_test <<< ${nova_state_down[@]#nova-console}
+
+        if [ ${#nova_state_down[@]} -ne ${#console_test[@]} ]; then
+        EXITVAL=1
+        fi
+
+    read -ra consoleauth_test <<< ${nova_state_down[@]#nova-consoleauth}
+
+        if [ ${#nova_state_down[@]} -ne ${#consoleauth_test[@]} ]; then
+                EXITVAL=1
+        fi
+
+    read -ra cert_test <<< ${nova_state_down[@]#nova-cert}
+
+        if [ ${#nova_state_down[@]} -ne ${#cert_test[@]} ]; then
+                EXITVAL=1
+        fi
+
+    read -ra scheduler_test <<< ${nova_state_down[@]#nova-scheduler}
+
+        if [ ${#nova_state_down[@]} -ne ${#scheduler_test[@]} ]; then
+                EXITVAL=2
+        fi
+
+    read -ra conductor_test <<< ${nova_state_down[@]#nova-conductor}
+
+        if [ ${#nova_state_down[@]} -ne ${#conductor_test[@]} ]; then
+                EXITVAL=2
+        fi
+
+    read -ra compute_test <<< ${nova_state_down[@]#nova-compute}
+
+        if [ ${#nova_state_down[@]} -ne ${#compute_test[@]} ]; then
+                EXITVAL=2
+        fi
+
+fi
+
+if [ $EXITVAL != 0 ]; then
+        echo ${nova_state_down[@]}
+fi
+
+exit $EXITVAL
diff --git a/sensu/files/checks/check_pacemaker_actions b/sensu/files/checks/check_pacemaker_actions
new file mode 100644
index 0000000..0155308
--- /dev/null
+++ b/sensu/files/checks/check_pacemaker_actions
@@ -0,0 +1,38 @@
+#!/bin/bash
+#
+# title: check_pcmkactions - check for failed pacemaker actions
+# date created: Tue Jan 25 2011
+# last edit: Thu Jun 30 2011
+# author: Sascha Reimann
+# changelog: - crm_mon, awk & grep put into variables.
+
+# nagios returncodes:
+STATE_OK=0
+STATE_WARNING=1
+STATE_CRITICAL=2
+STATE_UNKNOWN=3
+
+crm_mon="/usr/sbin/crm_mon"
+awk="/usr/bin/awk"
+grep="/bin/grep"
+
+# check for failed actions and set $STATUS
+$crm_mon --one-shot | $grep --quiet "Failed"
+STATUS=$?
+
+# generate output:
+if [ ${STATUS} -eq 0 ]
+then
+DETAILS=$($crm_mon --one-shot | $awk '/Failed/ {f=1}f' | $grep --invert-match Failed)
+COUNT=$($crm_mon --one-shot | $awk '/Failed/ {f=1}f' | $grep --invert-match --count Failed)
+echo "CRITICAL: ${COUNT} failed action(s): ${DETAILS}"
+exit ${STATE_CRITICAL}
+elif [ ${STATUS} -eq 1 ]
+then
+echo "OK: no failed actions found"
+exit ${STATE_OK}
+else
+echo "UNKNOWN: returncode ${STATUS}"
+exit ${STATE_UNKNOWN}
+fi
+
diff --git a/sensu/files/checks/check_snmp_ibm_imm.sh b/sensu/files/checks/check_snmp_ibm_imm.sh
new file mode 100644
index 0000000..0d48122
--- /dev/null
+++ b/sensu/files/checks/check_snmp_ibm_imm.sh
@@ -0,0 +1,197 @@
+#!/bin/sh
+
+#set -x
+
+# Version 0.0.2 2010-08-24
+# Return 3 for unknown results.
+
+# Version 0.0.1 2010-05-21
+# Ulric Eriksson <ulric.eriksson@dgc.se>
+
+BASEOID=.1.3.6.1.4
+IMMOID=$BASEOID.1.2.3.51.3
+
+tempOID=$IMMOID.1.1
+tempsOID=$tempOID.1.0
+# Temperature sensor count
+tempIndexOID=$tempOID.2.1.1
+# Temperature sensor indexes
+tempNameOID=$tempOID.2.1.2
+# Names of temperature sensors
+tempTempOID=$tempOID.2.1.3
+tempFatalOID=$tempOID.2.1.5
+tempCriticalOID=$tempOID.2.1.6
+tempNoncriticalOID=$tempOID.2.1.7
+
+voltOID=$IMMOID.1.2
+voltsOID=$voltOID.1.0
+voltIndexOID=$voltOID.2.1.1
+voltNameOID=$voltOID.2.1.2
+voltVoltOID=$voltOID.2.1.3
+voltCritHighOID=$voltOID.2.1.6
+voltCritLowOID=$voltOID.2.1.7
+
+fanOID=$IMMOID.1.3
+fansOID=$fanOID.1.0
+fanIndexOID=$fanOID.2.1.1
+fanNameOID=$fanOID.2.1.2
+fanSpeedOID=$fanOID.2.1.3
+fanMaxSpeedOID=$fanOID.2.1.8
+
+healthStatOID=$IMMOID.1.4
+# 255 = Normal, 0 = Critical, 2 = Non-critical Error, 4 = System-level Error
+
+# 'label'=value[UOM];[warn];[crit];[min];[max]
+
+usage()
+{
+	echo "Usage: $0 -H host -C community -T health|temperature|voltage|fans"
+	exit 0
+}
+
+get_health()
+{
+	echo "$HEALTH"|grep "^$1."|head -1|sed -e 's,^.*: ,,'|tr -d '"'
+}
+
+get_temperature()
+{
+        echo "$TEMP"|grep "^$2.*$1 = "|head -1|sed -e 's,^.*: ,,'|tr -d '"'
+}
+
+get_voltage()
+{
+        echo "$VOLT"|grep "^$2.*$1 = "|head -1|sed -e 's,^.*: ,,'|tr -d '"'
+}
+
+get_fan()
+{
+        echo "$FANS"|grep "^$2.*$1 = "|head -1|sed -e 's,^.*: ,,'|tr -d '"'
+}
+
+if test "$1" = -h; then
+	usage
+fi
+
+while getopts "H:C:T:" o; do
+	case "$o" in
+	H )
+		HOST="$OPTARG"
+		;;
+	C )
+		COMMUNITY="$OPTARG"
+		;;
+	T )
+		TEST="$OPTARG"
+		;;
+	* )
+		usage
+		;;
+	esac
+done
+
+RESULT=
+STATUS=0	# OK
+
+case "$TEST" in
+health )
+	HEALTH=`snmpwalk -v 1 -c $COMMUNITY -On $HOST $healthStatOID`
+	healthStat=`get_health $healthStatOID`
+	case "$healthStat" in
+	0 )
+		RESULT="Health status: Critical"
+		STATUS=2	# Critical
+		;;
+	2 )
+		RESULT="Health status: Non-critical error"
+		STATUS=1
+		;;
+	4 )
+		RESULT="Health status: System level error"
+		STATUS=2
+		;;
+	255 )
+		RESULT="Health status: Normal"
+		;;
+	* )
+		RESULT="Health status: Unknown"
+		STATUS=3
+		;;
+	esac
+	;;
+temperature )
+	TEMP=`snmpwalk -v 1 -c $COMMUNITY -On $HOST $tempOID`
+	# Figure out which temperature indexes we have
+	temps=`echo "$TEMP"|
+	grep -F "$tempIndexOID."|
+	sed -e 's,^.*: ,,'`
+	if test -z "$temps"; then
+		RESULT="No temperatures"
+		STATUS=3
+	fi
+	for i in $temps; do
+		tempName=`get_temperature $i $tempNameOID`
+		tempTemp=`get_temperature $i $tempTempOID`
+		tempFatal=`get_temperature $i $tempFatalOID`
+		tempCritical=`get_temperature $i $tempCriticalOID`
+		tempNoncritical=`get_temperature $i $tempNoncriticalOID`
+		RESULT="$RESULT$tempName = $tempTemp
+"
+		if test "$tempTemp" -ge "$tempCritical"; then
+			STATUS=2
+		elif test "$tempTemp" -ge "$tempNoncritical"; then
+			STATUS=1
+		fi
+		PERFDATA="${PERFDATA}Temperature$i=$tempTemp;;;; "
+	done
+	;;
+voltage )
+	VOLT=`snmpwalk -v 1 -c $COMMUNITY -On $HOST $voltOID`
+	volts=`echo "$VOLT"|
+	grep -F "$voltIndexOID."|
+	sed -e 's,^.*: ,,'`
+	if test -z "$volts"; then
+		RESULT="No voltages"
+		STATUS=3
+	fi
+	for i in $volts; do
+		voltName=`get_voltage $i $voltNameOID`
+		voltVolt=`get_voltage $i $voltVoltOID`
+		voltCritHigh=`get_voltage $i $voltCritHighOID`
+		voltCritLow=`get_voltage $i $voltCritLowOID`
+		RESULT="$RESULT$voltName = $voltVolt
+"
+		if test "$voltCritLow" -gt 0 -a "$voltVolt" -le "$voltCritLow"; then
+			#echo "$voltVolt < $voltCritLow"
+			STATUS=2
+		elif test "$voltCritHigh" -gt 0 -a "$voltVolt" -ge "$voltCritHigh"; then
+			#echo "$voltVolt > $voltCritLow"
+			STATUS=2
+		fi
+		PERFDATA="${PERFDATA}Voltage$i=$voltVolt;;;; "
+	done
+	;;
+fans )
+	FANS=`snmpwalk -v 1 -c $COMMUNITY -On $HOST $fanOID`
+	fans=`echo "$FANS"|
+	grep -F "$fanIndexOID."|
+	sed -e 's,^.*: ,,'`
+	if test -z "$fans"; then
+		RESULT="No fans"
+		STATUS=3
+	fi
+	for i in $fans; do
+		fanName=`get_fan $i $fanNameOID`
+		fanSpeed=`get_fan $i $fanSpeedOID|tr -d 'h '`
+		RESULT="$RESULT$fanName = $fanSpeed
+"
+		PERFDATA="${PERFDATA}Fan$i=$fanSpeed;;;; "
+	done
+	;;
+* )
+	usage
+	;;
+esac
+
+echo "$RESULT|$PERFDATA"
+exit $STATUS
diff --git a/sensu/files/checks/check_storwize_v7000.sh b/sensu/files/checks/check_storwize_v7000.sh
new file mode 100644
index 0000000..dce5ffc
--- /dev/null
+++ b/sensu/files/checks/check_storwize_v7000.sh
@@ -0,0 +1,48 @@
+#!/bin/bash
+
+#check IBM v7000
+#usage: ./check_storwize_v7000.sh -p password -h host_ip -u user -i ignored_argument
+
+while getopts ":u:p:h:i:" opt; do
+    case $opt in
+        u)
+            USER=${OPTARG};;
+        p)
+            PASSWD=${OPTARG};;
+        h)
+            HOST=${OPTARG};;
+        i)
+            IGNORE=${OPTARG};;
+       \?)
+            echo "Invalid option";exit 1;;
+        : ) echo "Option -"$OPTARG" requires an argument." >&2
+            exit 1;;
+    esac
+done
+
+command -v sshpass >/dev/null 2>&1 || { echo "Missing program sshpass. Aborting." >&2; exit 1; }
+sshpass -p $PASSWD ssh $USER@$HOST -o StrictHostKeyChecking=no "lseventlog -message no" | grep alert > /etc/sensu/plugins/lsevents_$HOST.log
+
+declare -a LINES
+let i=0
+ERRCODES=()
+CRIT=0
+while IFS=$'\n' read -r line_data; do
+    LINES[i]="${line_data}"
+    VAR="${LINES[i++]}"
+    VAR=" ${VAR:100}|"
+    if [[ -n $IGNORE && $VAR == *"$IGNORE"* ]]; then
+        VAR=
+    fi
+    CRIT=$[CRIT+1]
+    ERRCODES+=$VAR
+done < /etc/sensu/plugins/lsevents_$HOST.log
+rm -rf /etc/sensu/plugins/lsevents_$HOST.log
+
+if [[ -z ${ERRCODES[@]} ]]; then
+        echo OK
+        exit 0
+else
+        echo CRIT:$CRIT - ${ERRCODES[@]}
+        exit 2
+fi
\ No newline at end of file
diff --git a/sensu/files/checks/check_storwize_v7000_err_finder.sh b/sensu/files/checks/check_storwize_v7000_err_finder.sh
new file mode 100755
index 0000000..56df328
--- /dev/null
+++ b/sensu/files/checks/check_storwize_v7000_err_finder.sh
@@ -0,0 +1,33 @@
+#!/bin/bash
+
+#check IBM v7000
+#usage: ./check_storwize_v7000_err_finder.sh -p password -h host_ip -u user
+
+while getopts ":u:p:h:" opt; do
+    case $opt in
+        u)
+            USER=${OPTARG};;
+        p)
+            PASSWD=${OPTARG};;
+        h)
+            HOST=${OPTARG};;
+       \?)
+            echo "Invalid option";exit 1;;
+        : ) echo "Option -"$OPTARG" requires an argument." >&2
+            exit 1;;
+    esac
+done
+
+command -v sshpass >/dev/null 2>&1 || { echo "Missing program sshpass. Aborting." >&2; exit 1; }
+
+ERRCODE=`sshpass -p "$PASSWD" ssh $USER@$HOST -o StrictHostKeyChecking=no "svctask finderr" | cut -d "[" -f2 | cut -d "]" -f1`
+
+if [[ ${ERRCODE[@]}="There are no unfixed errors" ]]; then
+	exit 0
+else
+	CONDITION=`cat ./svc_error_database | grep $ERRCODE`
+	echo "Storwize V7000 $HOST $CONDITION"
+	exit 2
+fi
+
+
diff --git a/sensu/files/checks/check_supervisor_proc.py b/sensu/files/checks/check_supervisor_proc.py
new file mode 100644
index 0000000..a13f00e
--- /dev/null
+++ b/sensu/files/checks/check_supervisor_proc.py
@@ -0,0 +1,62 @@
+#!/usr/bin/env python
+"""
+nagios plugin to monitor supervisor processes
+---------------------------------------------
+
+usage
+
+::
+
+    check_supervisor_proc.py -p PROCESS_NAME
+
+    check_supervisor_proc.py -p PROCESS_NAME -s unix:///tmp/supervisord_openstack.sock
+
+"""
+from optparse import OptionParser
+import os
+
+#nagios return codes
+UNKNOWN = -1
+OK = 0
+WARNING = 1
+CRITICAL = 2
+
+SUPERV_STAT_CHECK='sudo supervisorctl'
+
+#supervisor states, map state to desired warning level
+supervisor_states = {
+    'STOPPED': OK,
+    'RUNNING': OK,
+    'STOPPING': WARNING,
+    'STARTING': WARNING,
+    'EXITED': CRITICAL,
+    'BACKOFF': CRITICAL,
+    'FATAL': CRITICAL,
+    'UNKNOWN': CRITICAL
+    }
+
+def get_status(proc_name, socket):
+    try:
+        if socket != None:
+          status_output = os.popen('%s -s %s status %s' % (SUPERV_STAT_CHECK, socket, proc_name)).read()
+        else:
+          status_output = os.popen('%s status %s' % (SUPERV_STAT_CHECK, proc_name)).read()
+        proc_status = status_output.split()[1]
+        return (status_output, supervisor_states[proc_status])
+    except:
+        print "CRITICAL: Could not get status of %s" % proc_name
+        raise SystemExit, CRITICAL
+
+parser = OptionParser()
+parser.add_option('-p', '--processes-name', dest='proc_name',
+    help="Name of process as it appears in supervisorctl status")
+parser.add_option('-v', '--verbose', dest='verbose', action='store_true',
+    default=False)
+parser.add_option('-q', '--quiet', dest='quiet', action='store_false')
+parser.add_option('-s', '--socket', dest='socket', default=None)
+
+options, args = parser.parse_args()
+
+output = get_status(options.proc_name, options.socket)
+print output[0]
+raise SystemExit, output[1]
diff --git a/sensu/files/checks/check_tenant_vm.sh b/sensu/files/checks/check_tenant_vm.sh
new file mode 100644
index 0000000..05c21c8
--- /dev/null
+++ b/sensu/files/checks/check_tenant_vm.sh
@@ -0,0 +1,31 @@
+#!/bin/bash
+#check vm state in tenant
+
+while getopts ":u:p:t:h:" opt; do
+    case $opt in
+        u)
+            user=${OPTARG};;
+        p)
+            passwd=${OPTARG};;
+        t)
+            tenant=${OPTARG};;
+        h)
+            host=${OPTARG};;
+       \?)
+            echo "Invalid option";exit 1;;
+        : ) echo "Option -"$OPTARG" requires an argument." >&2
+            exit 1;;
+    esac
+done
+read -ra nova_vm_state <<< $(nova --os-username $user --os-password $passwd --os-tenant-name $tenant --os-auth-url $host list | head -n -1 | tr -d "|" | awk '/'ERROR'/ {print "VM: " $2 " ID: " $1 "  is in ERROR state" ";"}')
+
+EXITVAL=0
+
+if [[ -n ${nova_vm_state[@]} ]]; then
+    EXITVAL=1
+fi
+
+if [ $EXITVAL != 0 ]; then
+        echo "Tenant: $tenant ${nova_vm_state[@]}"
+fi
+exit $EXITVAL
diff --git a/sensu/files/checks/check_virsh_list.sh b/sensu/files/checks/check_virsh_list.sh
new file mode 100644
index 0000000..e7b559c
--- /dev/null
+++ b/sensu/files/checks/check_virsh_list.sh
@@ -0,0 +1,8 @@
+#!/bin/bash
+# Vlata Mikes - remote skript pro check kvm
+
+case $1 in
+    list) virsh list --all;;
+    dumpxml) virsh dumpxml $2;;
+    *) echo invalid option;exit 1;;
+esac
\ No newline at end of file
diff --git a/sensu/files/checks/check_vrouter.sh b/sensu/files/checks/check_vrouter.sh
new file mode 100644
index 0000000..483a389
--- /dev/null
+++ b/sensu/files/checks/check_vrouter.sh
@@ -0,0 +1,70 @@
+#!/bin/bash
+#
+# check vrouter status on compute nodes
+
+service=vrouter
+
+read -ra contrail_status <<< $(sudo supervisorctl -s unix:///tmp/supervisord_$service.sock status)
+
+check_ok=0
+state=RUNNING
+
+read -ra contrail_test <<< ${contrail_status[@]#contrail-$service-agent}
+#compare arrays
+if [ ${#contrail_status[@]} -ne ${#contrail_test[@]} ]; then
+        check_ok=1
+fi
+
+if [ check_ok=1 ]; then
+
+        read -ra contrail_test <<< ${contrail_status[@]#STARTING}
+
+        if [ ${#contrail_status[@]} -ne ${#contrail_test[@]} ]; then
+                state=STARTING
+        fi
+
+        read -ra contrail_test <<< ${contrail_status[@]#STOPPED}
+        if [ ${#contrail_status[@]} -ne ${#contrail_test[@]} ]; then
+                state=STOPPED
+        fi
+
+        read -ra contrail_test <<< ${contrail_status[@]#FATAL}
+        if [ ${#contrail_status[@]} -ne ${#contrail_test[@]} ]; then
+                state=FATAL
+        fi
+
+        read -ra contrail_test <<< ${contrail_status[@]#EXITED}
+        if [ ${#contrail_status[@]} -ne ${#contrail_test[@]} ]; then
+                state=FATAL
+        fi
+else
+        state=FATAL
+fi
+
+OK=0
+WARN=0
+CRIT=0
+NUM=0
+
+case "$state" in
+	RUNNING) OK=$(expr $OK + 1) ;;
+	STOPPED|STARTING) WARN=$(expr $WARN + 1) ;;
+	FATAL) CRIT=$(expr $CRIT + 1) ;;
+	*) CRIT=$(expr $CRIT + 1) ;;
+esac
+
+if [ "$NUM" -eq "$OK" ]; then
+	EXITVAL=0 #Status 0 = OK (green)
+fi
+
+if [ "$WARN" -gt 0 ]; then
+	EXITVAL=1 #Status 1 = WARNING (yellow)
+fi
+
+if [ "$CRIT" -gt 0 ]; then
+	EXITVAL=2 #Status 2 = CRITICAL (red)
+fi
+
+echo State of contrail-$service OK:$OK WARN:$WARN CRIT:$CRIT - $LIST
+
+exit $EXITVAL
diff --git a/sensu/files/checks/check_yum b/sensu/files/checks/check_yum
new file mode 100644
index 0000000..0554f6b
--- /dev/null
+++ b/sensu/files/checks/check_yum
@@ -0,0 +1,506 @@
+#!/usr/bin/python
+# coding=utf-8
+
+"""Nagios plugin to check the YUM package management system for package updates. Can optionally alert on any available updates as well as just security related updates."""
+
+__title__ = "check_yum"
+__version__ = "1.0.0"
+
+#Standard Nagios return codes
+OK = 0
+WARNING = 1
+CRITICAL = 2
+UNKNOWN = 3
+
+import os
+import re
+import sys
+import signal
+OLD_PYTHON = False
+try:
+	from subprocess import Popen, PIPE, STDOUT
+except ImportError:
+	OLD_PYTHON = True
+	import commands
+from optparse import OptionParser
+
+DEFAULT_TIMEOUT = 55
+
+
+def end(status, message, perfdata=""):
+	"""Exits the plugin with first arg as the return code and the second arg as the message to output."""
+	
+	if perfdata:
+		print "%s | %s" % (message, perfdata)
+	else:
+		print "%s" % message
+	
+	if status == OK:
+		sys.exit(OK)
+	elif status == WARNING:
+		sys.exit(WARNING)
+	elif status == CRITICAL:
+		sys.exit(CRITICAL)
+	else:
+		sys.exit(UNKNOWN)
+
+
+YUM = "/usr/bin/yum"
+
+def check_yum_usable():
+	"""Checks that the YUM program and path are correct and usable - that the program exists and is executable, otherwise exits with error."""
+	
+	if not os.path.exists(YUM):
+		end(UNKNOWN, "%s cannot be found" % YUM)
+	elif not os.path.isfile(YUM):
+		end(UNKNOWN, "%s is not a file" % YUM)
+	elif not os.access(YUM, os.X_OK):
+		end(UNKNOWN, "%s is not executable" % YUM)
+
+
+class YumTester:
+	"""Class to hold all portage test functions and state."""
+	
+	def __init__(self):
+		"""Initialize all object variables."""
+		
+		self.all_updates        = False
+		self.no_cache_update    = False
+		self.no_warn_on_lock    = False
+		self.no_warn_on_updates = False
+		self.enable_repo        = ""
+		self.disable_repo       = ""
+		self.timeout            = DEFAULT_TIMEOUT
+		self.verbosity          = 0
+		self.warn_on_any_update = False
+	
+	
+	def validate_all_variables(self):
+		"""Validates all object variables to make sure the environment is sane."""
+		
+		if self.timeout == None:
+			self.timeout = DEFAULT_TIMEOUT
+		try:
+			self.timeout = int(self.timeout)
+		except ValueError:
+			end(UNKNOWN, "Timeout must be an whole number, representing the timeout in seconds")
+		
+		if self.timeout < 1 or self.timeout > 3600:
+			end(UNKNOWN, "Timeout must be a number between 1 and 3600 seconds")
+		
+		if self.verbosity == None:
+			self.verbosity = 0
+		try:
+			self.verbosity = int(self.verbosity)
+			if self.verbosity < 0:
+				raise ValueError
+		except ValueError:
+			end(UNKNOWN, "Invalid verbosity type, must be positive numeric integer")
+	
+	
+	def run(self, cmd):
+		"""Runs a system command and returns an array of lines of the output."""
+		
+		if cmd == "" or cmd == None:
+			end(UNKNOWN, "Internal python error - no cmd supplied for run function")
+		
+		if self.no_cache_update:
+			cmd += " -C"
+		
+		if self.enable_repo:
+			for repo in self.enable_repo.split(","):
+				cmd += " --enablerepo=%s" % repo
+		if self.disable_repo:
+			for repo in self.disable_repo.split(","):
+				cmd += " --disablerepo=%s" % repo
+		
+		self.vprint(3, "running command: %s" % cmd)
+		
+		if OLD_PYTHON:
+			self.vprint(3, "subprocess not available, probably old python version, using shell instead")
+			returncode, stdout = commands.getstatusoutput(cmd)
+			if returncode >= 256:
+				returncode = returncode / 256
+		else:
+			try:
+				process = Popen( cmd.split(), stdin=PIPE, stdout=PIPE, stderr=STDOUT )
+			except OSError, error:
+				error = str(error)
+				if error == "No such file or directory":
+					end(UNKNOWN, "Cannot find utility '%s'" % cmd.split()[0])
+				end(UNKNOWN, "Error trying to run utility '%s' - %s" % (cmd.split()[0], error))
+			
+			output = process.communicate()
+			returncode = process.returncode
+			stdout = output[0]
+		
+		if stdout == None or stdout == "":
+			end(UNKNOWN, "No output from utility '%s'" % cmd.split()[0])
+		
+		self.vprint(3, "Returncode: '%s'\nOutput: '%s'" % (returncode, stdout))
+		output = str(stdout).split("\n")
+		self.check_returncode(returncode, output)
+		
+		return output
+	
+	
+	def check_returncode(self, returncode, output):
+		"""Takes the returncode and output (as an array of lines) of the YUM program execution and tests for failures, exits with an appropriate message if any are found."""
+		
+		if returncode == 0:
+			pass
+		elif returncode == 100:
+			#Updates Available
+			pass
+		elif returncode == 200:
+			if "lock" in output[-2] or "another copy is running" in output[-2]:
+				msg = "Cannot check for updates, another instance of YUM is running"
+				if self.no_warn_on_lock:
+					end(OK, msg)
+				else:
+					end(WARNING, msg)
+			else:
+				output = self.strip_output(output)
+				end(UNKNOWN, "%s" % output)
+		else:
+			if not 'Loading "security" plugin' in output or "Command line error: no such option: --security" in output:
+				end(UNKNOWN, "Security plugin for YUM is required. Try to 'yum install yum-security' and then re-run this plugin. Alternatively, to just alert on any update which does not require the security plugin, try --all-updates")
+			else:
+				output = self.strip_output(output)
+				end(UNKNOWN, "%s" % output)
+	
+	
+	def strip_output(self, output):
+		"""Cleans up the output from the plugin and returns it. Takes and returns an array of the lines of output and returns a single string."""
+		
+		self.vprint(3, "stripping output of 'Loading ... plugin' lines")
+		re_loading_plugin = re.compile("^Loading .+ plugin$")
+		output = [re_loading_plugin.sub("", line) for line in output]
+		output = " ".join(output).strip()
+		return output
+	
+	
+	def set_timeout(self):
+		"""Sets an alarm to time out the test."""
+		
+		if self.timeout == 1:
+			self.vprint(3, "setting plugin timeout to %s second" % self.timeout)
+		else:
+			self.vprint(3, "setting plugin timeout to %s seconds" % self.timeout)
+		
+		signal.signal(signal.SIGALRM, self.sighandler)
+		signal.alarm(self.timeout)
+	
+	
+	def sighandler(self, discarded, discarded2):
+		"""Function to be called by signal.alarm to kill the plugin."""
+		
+		#Nop for these variables
+		discarded = discarded2
+		discarded2 = discarded
+		
+		end(UNKNOWN, "YUM nagios plugin has self terminated after exceeding the timeout (%s seconds)" % self.timeout)
+	
+	
+	def get_updates(self):
+		"""Checks for updates and returns a tuple containing the number of security updates and the number of total updates."""
+		
+		self.vprint(2, "checking for any security updates")
+		
+		if self.all_updates:
+			number_security_updates, number_other_updates = self.get_all_updates()
+		else:
+			number_other_updates = self.get_security_updates()
+			number_security_updates = 0
+		
+		return number_security_updates, number_other_updates
+	
+	
+	def get_all_updates(self):
+		"""Gets all updates. Returns a single integer of the number of available updates."""
+		
+		cmd = "%s check-update" % YUM
+		
+		output = self.run(cmd)
+		
+		output2 = "\n".join(output).split("\n\n")
+		if self.verbosity >= 4 :
+			for section in output2:
+				print "\nSection:\n%s\n" % section
+		if len(output2) > 2 or not ( "Setting up repositories" in output2[0] or "Loaded plugins: " in output2[0] or re.search('Loading\s+".+"\s+plugin', output2[0]) ):
+			end(WARNING, "YUM output signature does not match current known format. Please make sure you have upgraded to the latest version of this plugin. If the problem persists, please contact the author for a fix")
+		if len(output2) == 1:
+			#There are no updates but we have passed the loading and setting up of repositories
+			number_packages = 0
+		else:
+			number_packages = len([x for x in output2[1].split("\n") if len(x.split()) > 1 ])
+		
+		try:
+			number_packages = int(number_packages)
+			if number_packages < 0:
+				raise ValueError
+		except ValueError:
+			end(UNKNOWN, "Error parsing package information, invalid package number, YUM output may have changed. Please make sure you have upgraded to the latest version of this plugin. If the problem persists, then please contact the author for a fix")
+		
+		#Extra layer of checks. This is a security plugin so it's preferable to fail on error rather than pass silently leaving you with an insecure system
+		count = 0
+		re_package_format = re.compile("^.+\.(i[3456]86|x86_64|noarch)\s+.+\s+.+$")
+		#This is to work around a YUM truncation issue effectively changing the package output format. Currently only very long kmod lines are seen to have caused this so we stick to what we know for safety and raise an unknown error on anything else for maximum security
+		#re_package_format_truncated = re.compile("^[\w-]+-kmod-\d[\d\.-]+.*\s+.+\s+.+$")
+		for line in output:
+			if re_package_format.match(line):
+				count += 1
+		if count != number_packages:
+			end(UNKNOWN, "Error parsing package information, inconsistent package count, YUM output may have changed. Please make sure you have upgraded to the latest version of this plugin. If the problem persists, then please contact the author for a fix")
+		
+		return number_packages
+	
+	
+	def get_security_updates(self):
+		"""Gets all updates, but differentiates between security and normal updates. Returns a tuple of the number of security and normal updates."""
+		
+		cmd = "%s --security check-update" % YUM
+		
+		output = self.run(cmd)
+		
+		re_security_summary_rhel5 = re.compile("Needed \d+ of \d+ packages, for security")
+		re_security_summary_rhel6 = re.compile("\d+ package\(s\) needed for security, out of \d+ available")
+		re_no_security_updates_available_rhel5 = re.compile("No packages needed, for security, \d+ available")
+		re_no_security_updates_available_rhel6 = re.compile("No packages needed for security; \d+ packages available")
+		summary_line_found = False
+		for line in output:
+			if re_no_security_updates_available_rhel5.match(line):
+				summary_line_found = True
+				number_security_updates = 0
+				number_total_updates = line.split()[5]
+				break
+			if re_no_security_updates_available_rhel6.match(line):
+				summary_line_found = True
+				number_security_updates = 0
+				number_total_updates = line.split()[5]
+				break
+			if re_security_summary_rhel5.match(line):
+				summary_line_found = True
+				number_security_updates = line.split()[1]
+				number_total_updates = line.split()[3]
+				break
+			if re_security_summary_rhel6.match(line):
+				summary_line_found = True
+				number_security_updates = line.split()[0]
+				number_total_updates = line.split()[7]
+				break
+		
+		if not summary_line_found:
+			end(WARNING, "Cannot find summary line in YUM output. Please make sure you have upgraded to the latest version of this plugin. If the problem persists, please contact the author for a fix")
+		
+		try:
+			number_security_updates = int(number_security_updates)
+			number_total_updates = int(number_total_updates)
+		except ValueError:
+			end(WARNING, "Error parsing package information, YUM output may have changed. Please make sure you have upgraded to the latest version of this plugin. If the problem persists, the please contact the author for a fix")
+		
+		number_other_updates = number_total_updates - number_security_updates
+		
+		if len(output) > number_total_updates + 25:
+			end(WARNING, "YUM output signature is larger than current known format, please make sure you have upgraded to the latest version of this plugin. If the problem persists, please contact the author for a fix")
+		
+		return number_security_updates, number_other_updates
+	
+	
+	def test_yum_updates(self):
+		"""Starts tests and controls logic flow."""
+		
+		check_yum_usable()
+		self.vprint(3, "%s - Version %s\n" % (__title__, __version__))
+		
+		self.validate_all_variables()
+		self.set_timeout()
+		
+		if self.all_updates:
+			return self.test_all_updates()
+		else:
+			return self.test_security_updates()
+	
+	
+	def test_all_updates(self):
+		"""Tests for all updates, and returns a tuple of the status code and output."""
+		
+		status = UNKNOWN
+		message = "code error - please contact author for a fix"
+		
+		number_updates = self.get_all_updates()
+		if number_updates == 0:
+			status = OK
+			message = "0 Updates Available"
+		else:
+			if self.no_warn_on_updates:
+				status = OK
+			else:
+				status = CRITICAL
+			if number_updates == 1:
+				message = "1 Update Available"
+			else:
+				message = "%s Updates Available" % number_updates
+		
+		return status, message
+	
+	
+	def test_security_updates(self):
+		"""Tests for security updates and returns a tuple of the status code and output."""
+		
+		status = UNKNOWN
+		message = "code error - please contact author for a fix"
+		
+		number_security_updates, number_other_updates = self.get_security_updates()
+		if number_security_updates == 0:
+			status = OK
+			message = "0 Security Updates Available"
+		else:
+			if self.no_warn_on_updates:
+				status = OK
+			else:
+				status = CRITICAL
+			if number_security_updates == 1:
+				message = "1 Security Update Available"
+			elif number_security_updates > 1:
+				message = "%s Security Updates Available" % number_security_updates
+		
+		if number_other_updates != 0:
+			if self.warn_on_any_update and status != CRITICAL:
+				if self.no_warn_on_updates:
+					status = OK
+				else:
+					status = WARNING
+			
+			if number_other_updates == 1:
+				message += ". 1 Non-Security Update Available"
+			else:
+				message += ". %s Non-Security Updates Available" % number_other_updates
+		
+		return status, message
+	
+	
+	def vprint(self, threshold, message):
+		"""Prints a message if the first arg is numerically greater than the verbosity level."""
+		
+		if self.verbosity >= threshold:
+			print "%s" % message
+
+
+def main():
+	"""Parses command line options and calls the test function."""
+	
+	tester = YumTester()
+	parser = OptionParser()
+	
+	parser.add_option("--all-updates",
+	                  action="store_true",
+	                  dest="all_updates",
+	                  help="Does not distinguish between security and non-security updates, but returns critical for any available update. This may be used if the YUM security plugin is absent or you want to maintain every single package at the latest version. You may want to use --warn-on-any-update instead of this option.")
+	
+	parser.add_option("--warn-on-any-update",
+	                  action="store_true",
+	                  dest="warn_on_any_update",
+	                  help="Warns if there are any (non-security) package updates available. By default only warns when security related updates are available. If --all-updates is used, then this option is redundant as --all-updates will return a critical result on any available update, whereas using this switch still allows you to differentiate between the severity of updates.")
+	
+	parser.add_option("-C", "--cache-only",
+	                  action="store_true",
+	                  dest="no_cache_update",
+	                  help="Run entirely from cache and do not update the cache when running YUM. Useful if you have 'yum makecache' cronned so that the nagios check itself doesn't have to do it, possibly speeding up execution (by 1-2 seconds in tests).")
+	
+	parser.add_option("--no-warn-on-lock",
+	                  action="store_true",
+	                  dest="no_warn_on_lock",
+	                  help="Return OK instead of WARNING when YUM is locked and fails to check for updates due to another instance running. This is not recommended from the security standpoint, but may be wanted to reduce the number of alerts that may intermittently pop up when someone is running YUM interactively for package management.")
+	
+	parser.add_option("--no-warn-on-updates",
+	                  action="store_true",
+	                  dest="no_warn_on_updates",
+	                  help="Return OK instead of WARNING even when updates are available. This is not recommended from the security standpoint, but may be wanted to disable alerts while the plugin output still shows the number of available updates.")
+	
+	parser.add_option("--enablerepo",
+	                  dest="repository_to_enable",
+	                  help="Explicitly enables a reposity when calling YUM. Can take a comma separated list of repositories. Note that enabling repositories can lead to unexpected results, for example when protected repositories are enabled.")
+	
+	parser.add_option("--disablerepo",
+	                  dest="repository_to_disable",
+	                  help="Explicitly disables a repository when calling YUM. Can take a comma separated list of repositories. Note that disabling repositories can lead to unexpected results, for example when protected repositories are disabled.")
+	
+	parser.add_option("-t", "--timeout",
+	                  dest="timeout",
+	                  help="Sets a timeout in seconds after which the plugin will exit (defaults to %s seconds)." % DEFAULT_TIMEOUT)
+	
+	parser.add_option("-v", "--verbose",
+	                  action="count",
+	                  dest="verbosity",
+	                  help="Verbose mode. Can be used multiple times to increase output. Use -vvv for debugging output. By default only one result line is printed as per Nagios standards.")
+	
+	parser.add_option("-V", "--version",
+	                  action="store_true",
+	                  dest="version",
+	                  help="Print version number and exit.")
+	
+	(options, args) = parser.parse_args()
+	
+	if args:
+		parser.print_help()
+		sys.exit(UNKNOWN)
+	
+	tester.all_updates        = options.all_updates
+	tester.no_cache_update    = options.no_cache_update
+	tester.no_warn_on_lock    = options.no_warn_on_lock
+	tester.no_warn_on_updates = options.no_warn_on_updates
+	tester.enable_repo        = options.repository_to_enable
+	tester.disable_repo       = options.repository_to_disable
+	tester.timeout            = options.timeout
+	tester.verbosity          = options.verbosity
+	tester.warn_on_any_update = options.warn_on_any_update
+	
+	if options.version:
+		print "%s - Version %s\n" % (__title__, __version__)
+		sys.exit(OK)
+	
+	result, output = tester.test_yum_updates()
+	end(result, output)
+
+
+if __name__ == "__main__":
+	try:
+		main()
+	except KeyboardInterrupt:
+		print "Caught Control-C..."
+		sys.exit(CRITICAL)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#Copyright © ?–?, Hari Sekhon <harisekhon@gmail.com>.
+#Copyright © 2012, Christoph Anton Mitterer <mail@christoph.anton.mitterer.name>.
+#All rights reserved.
+#
+#
+#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
+#of the License.
+#
+#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.
\ No newline at end of file
diff --git a/sensu/files/checks/check_yum.py b/sensu/files/checks/check_yum.py
new file mode 100644
index 0000000..0554f6b
--- /dev/null
+++ b/sensu/files/checks/check_yum.py
@@ -0,0 +1,506 @@
+#!/usr/bin/python
+# coding=utf-8
+
+"""Nagios plugin to check the YUM package management system for package updates. Can optionally alert on any available updates as well as just security related updates."""
+
+__title__ = "check_yum"
+__version__ = "1.0.0"
+
+#Standard Nagios return codes
+OK = 0
+WARNING = 1
+CRITICAL = 2
+UNKNOWN = 3
+
+import os
+import re
+import sys
+import signal
+OLD_PYTHON = False
+try:
+	from subprocess import Popen, PIPE, STDOUT
+except ImportError:
+	OLD_PYTHON = True
+	import commands
+from optparse import OptionParser
+
+DEFAULT_TIMEOUT = 55
+
+
+def end(status, message, perfdata=""):
+	"""Exits the plugin with first arg as the return code and the second arg as the message to output."""
+	
+	if perfdata:
+		print "%s | %s" % (message, perfdata)
+	else:
+		print "%s" % message
+	
+	if status == OK:
+		sys.exit(OK)
+	elif status == WARNING:
+		sys.exit(WARNING)
+	elif status == CRITICAL:
+		sys.exit(CRITICAL)
+	else:
+		sys.exit(UNKNOWN)
+
+
+YUM = "/usr/bin/yum"
+
+def check_yum_usable():
+	"""Checks that the YUM program and path are correct and usable - that the program exists and is executable, otherwise exits with error."""
+	
+	if not os.path.exists(YUM):
+		end(UNKNOWN, "%s cannot be found" % YUM)
+	elif not os.path.isfile(YUM):
+		end(UNKNOWN, "%s is not a file" % YUM)
+	elif not os.access(YUM, os.X_OK):
+		end(UNKNOWN, "%s is not executable" % YUM)
+
+
+class YumTester:
+	"""Class to hold all portage test functions and state."""
+	
+	def __init__(self):
+		"""Initialize all object variables."""
+		
+		self.all_updates        = False
+		self.no_cache_update    = False
+		self.no_warn_on_lock    = False
+		self.no_warn_on_updates = False
+		self.enable_repo        = ""
+		self.disable_repo       = ""
+		self.timeout            = DEFAULT_TIMEOUT
+		self.verbosity          = 0
+		self.warn_on_any_update = False
+	
+	
+	def validate_all_variables(self):
+		"""Validates all object variables to make sure the environment is sane."""
+		
+		if self.timeout == None:
+			self.timeout = DEFAULT_TIMEOUT
+		try:
+			self.timeout = int(self.timeout)
+		except ValueError:
+			end(UNKNOWN, "Timeout must be an whole number, representing the timeout in seconds")
+		
+		if self.timeout < 1 or self.timeout > 3600:
+			end(UNKNOWN, "Timeout must be a number between 1 and 3600 seconds")
+		
+		if self.verbosity == None:
+			self.verbosity = 0
+		try:
+			self.verbosity = int(self.verbosity)
+			if self.verbosity < 0:
+				raise ValueError
+		except ValueError:
+			end(UNKNOWN, "Invalid verbosity type, must be positive numeric integer")
+	
+	
+	def run(self, cmd):
+		"""Runs a system command and returns an array of lines of the output."""
+		
+		if cmd == "" or cmd == None:
+			end(UNKNOWN, "Internal python error - no cmd supplied for run function")
+		
+		if self.no_cache_update:
+			cmd += " -C"
+		
+		if self.enable_repo:
+			for repo in self.enable_repo.split(","):
+				cmd += " --enablerepo=%s" % repo
+		if self.disable_repo:
+			for repo in self.disable_repo.split(","):
+				cmd += " --disablerepo=%s" % repo
+		
+		self.vprint(3, "running command: %s" % cmd)
+		
+		if OLD_PYTHON:
+			self.vprint(3, "subprocess not available, probably old python version, using shell instead")
+			returncode, stdout = commands.getstatusoutput(cmd)
+			if returncode >= 256:
+				returncode = returncode / 256
+		else:
+			try:
+				process = Popen( cmd.split(), stdin=PIPE, stdout=PIPE, stderr=STDOUT )
+			except OSError, error:
+				error = str(error)
+				if error == "No such file or directory":
+					end(UNKNOWN, "Cannot find utility '%s'" % cmd.split()[0])
+				end(UNKNOWN, "Error trying to run utility '%s' - %s" % (cmd.split()[0], error))
+			
+			output = process.communicate()
+			returncode = process.returncode
+			stdout = output[0]
+		
+		if stdout == None or stdout == "":
+			end(UNKNOWN, "No output from utility '%s'" % cmd.split()[0])
+		
+		self.vprint(3, "Returncode: '%s'\nOutput: '%s'" % (returncode, stdout))
+		output = str(stdout).split("\n")
+		self.check_returncode(returncode, output)
+		
+		return output
+	
+	
+	def check_returncode(self, returncode, output):
+		"""Takes the returncode and output (as an array of lines) of the YUM program execution and tests for failures, exits with an appropriate message if any are found."""
+		
+		if returncode == 0:
+			pass
+		elif returncode == 100:
+			#Updates Available
+			pass
+		elif returncode == 200:
+			if "lock" in output[-2] or "another copy is running" in output[-2]:
+				msg = "Cannot check for updates, another instance of YUM is running"
+				if self.no_warn_on_lock:
+					end(OK, msg)
+				else:
+					end(WARNING, msg)
+			else:
+				output = self.strip_output(output)
+				end(UNKNOWN, "%s" % output)
+		else:
+			if not 'Loading "security" plugin' in output or "Command line error: no such option: --security" in output:
+				end(UNKNOWN, "Security plugin for YUM is required. Try to 'yum install yum-security' and then re-run this plugin. Alternatively, to just alert on any update which does not require the security plugin, try --all-updates")
+			else:
+				output = self.strip_output(output)
+				end(UNKNOWN, "%s" % output)
+	
+	
+	def strip_output(self, output):
+		"""Cleans up the output from the plugin and returns it. Takes and returns an array of the lines of output and returns a single string."""
+		
+		self.vprint(3, "stripping output of 'Loading ... plugin' lines")
+		re_loading_plugin = re.compile("^Loading .+ plugin$")
+		output = [re_loading_plugin.sub("", line) for line in output]
+		output = " ".join(output).strip()
+		return output
+	
+	
+	def set_timeout(self):
+		"""Sets an alarm to time out the test."""
+		
+		if self.timeout == 1:
+			self.vprint(3, "setting plugin timeout to %s second" % self.timeout)
+		else:
+			self.vprint(3, "setting plugin timeout to %s seconds" % self.timeout)
+		
+		signal.signal(signal.SIGALRM, self.sighandler)
+		signal.alarm(self.timeout)
+	
+	
+	def sighandler(self, discarded, discarded2):
+		"""Function to be called by signal.alarm to kill the plugin."""
+		
+		#Nop for these variables
+		discarded = discarded2
+		discarded2 = discarded
+		
+		end(UNKNOWN, "YUM nagios plugin has self terminated after exceeding the timeout (%s seconds)" % self.timeout)
+	
+	
+	def get_updates(self):
+		"""Checks for updates and returns a tuple containing the number of security updates and the number of total updates."""
+		
+		self.vprint(2, "checking for any security updates")
+		
+		if self.all_updates:
+			number_security_updates, number_other_updates = self.get_all_updates()
+		else:
+			number_other_updates = self.get_security_updates()
+			number_security_updates = 0
+		
+		return number_security_updates, number_other_updates
+	
+	
+	def get_all_updates(self):
+		"""Gets all updates. Returns a single integer of the number of available updates."""
+		
+		cmd = "%s check-update" % YUM
+		
+		output = self.run(cmd)
+		
+		output2 = "\n".join(output).split("\n\n")
+		if self.verbosity >= 4 :
+			for section in output2:
+				print "\nSection:\n%s\n" % section
+		if len(output2) > 2 or not ( "Setting up repositories" in output2[0] or "Loaded plugins: " in output2[0] or re.search('Loading\s+".+"\s+plugin', output2[0]) ):
+			end(WARNING, "YUM output signature does not match current known format. Please make sure you have upgraded to the latest version of this plugin. If the problem persists, please contact the author for a fix")
+		if len(output2) == 1:
+			#There are no updates but we have passed the loading and setting up of repositories
+			number_packages = 0
+		else:
+			number_packages = len([x for x in output2[1].split("\n") if len(x.split()) > 1 ])
+		
+		try:
+			number_packages = int(number_packages)
+			if number_packages < 0:
+				raise ValueError
+		except ValueError:
+			end(UNKNOWN, "Error parsing package information, invalid package number, YUM output may have changed. Please make sure you have upgraded to the latest version of this plugin. If the problem persists, then please contact the author for a fix")
+		
+		#Extra layer of checks. This is a security plugin so it's preferable to fail on error rather than pass silently leaving you with an insecure system
+		count = 0
+		re_package_format = re.compile("^.+\.(i[3456]86|x86_64|noarch)\s+.+\s+.+$")
+		#This is to work around a YUM truncation issue effectively changing the package output format. Currently only very long kmod lines are seen to have caused this so we stick to what we know for safety and raise an unknown error on anything else for maximum security
+		#re_package_format_truncated = re.compile("^[\w-]+-kmod-\d[\d\.-]+.*\s+.+\s+.+$")
+		for line in output:
+			if re_package_format.match(line):
+				count += 1
+		if count != number_packages:
+			end(UNKNOWN, "Error parsing package information, inconsistent package count, YUM output may have changed. Please make sure you have upgraded to the latest version of this plugin. If the problem persists, then please contact the author for a fix")
+		
+		return number_packages
+	
+	
+	def get_security_updates(self):
+		"""Gets all updates, but differentiates between security and normal updates. Returns a tuple of the number of security and normal updates."""
+		
+		cmd = "%s --security check-update" % YUM
+		
+		output = self.run(cmd)
+		
+		re_security_summary_rhel5 = re.compile("Needed \d+ of \d+ packages, for security")
+		re_security_summary_rhel6 = re.compile("\d+ package\(s\) needed for security, out of \d+ available")
+		re_no_security_updates_available_rhel5 = re.compile("No packages needed, for security, \d+ available")
+		re_no_security_updates_available_rhel6 = re.compile("No packages needed for security; \d+ packages available")
+		summary_line_found = False
+		for line in output:
+			if re_no_security_updates_available_rhel5.match(line):
+				summary_line_found = True
+				number_security_updates = 0
+				number_total_updates = line.split()[5]
+				break
+			if re_no_security_updates_available_rhel6.match(line):
+				summary_line_found = True
+				number_security_updates = 0
+				number_total_updates = line.split()[5]
+				break
+			if re_security_summary_rhel5.match(line):
+				summary_line_found = True
+				number_security_updates = line.split()[1]
+				number_total_updates = line.split()[3]
+				break
+			if re_security_summary_rhel6.match(line):
+				summary_line_found = True
+				number_security_updates = line.split()[0]
+				number_total_updates = line.split()[7]
+				break
+		
+		if not summary_line_found:
+			end(WARNING, "Cannot find summary line in YUM output. Please make sure you have upgraded to the latest version of this plugin. If the problem persists, please contact the author for a fix")
+		
+		try:
+			number_security_updates = int(number_security_updates)
+			number_total_updates = int(number_total_updates)
+		except ValueError:
+			end(WARNING, "Error parsing package information, YUM output may have changed. Please make sure you have upgraded to the latest version of this plugin. If the problem persists, the please contact the author for a fix")
+		
+		number_other_updates = number_total_updates - number_security_updates
+		
+		if len(output) > number_total_updates + 25:
+			end(WARNING, "YUM output signature is larger than current known format, please make sure you have upgraded to the latest version of this plugin. If the problem persists, please contact the author for a fix")
+		
+		return number_security_updates, number_other_updates
+	
+	
+	def test_yum_updates(self):
+		"""Starts tests and controls logic flow."""
+		
+		check_yum_usable()
+		self.vprint(3, "%s - Version %s\n" % (__title__, __version__))
+		
+		self.validate_all_variables()
+		self.set_timeout()
+		
+		if self.all_updates:
+			return self.test_all_updates()
+		else:
+			return self.test_security_updates()
+	
+	
+	def test_all_updates(self):
+		"""Tests for all updates, and returns a tuple of the status code and output."""
+		
+		status = UNKNOWN
+		message = "code error - please contact author for a fix"
+		
+		number_updates = self.get_all_updates()
+		if number_updates == 0:
+			status = OK
+			message = "0 Updates Available"
+		else:
+			if self.no_warn_on_updates:
+				status = OK
+			else:
+				status = CRITICAL
+			if number_updates == 1:
+				message = "1 Update Available"
+			else:
+				message = "%s Updates Available" % number_updates
+		
+		return status, message
+	
+	
+	def test_security_updates(self):
+		"""Tests for security updates and returns a tuple of the status code and output."""
+		
+		status = UNKNOWN
+		message = "code error - please contact author for a fix"
+		
+		number_security_updates, number_other_updates = self.get_security_updates()
+		if number_security_updates == 0:
+			status = OK
+			message = "0 Security Updates Available"
+		else:
+			if self.no_warn_on_updates:
+				status = OK
+			else:
+				status = CRITICAL
+			if number_security_updates == 1:
+				message = "1 Security Update Available"
+			elif number_security_updates > 1:
+				message = "%s Security Updates Available" % number_security_updates
+		
+		if number_other_updates != 0:
+			if self.warn_on_any_update and status != CRITICAL:
+				if self.no_warn_on_updates:
+					status = OK
+				else:
+					status = WARNING
+			
+			if number_other_updates == 1:
+				message += ". 1 Non-Security Update Available"
+			else:
+				message += ". %s Non-Security Updates Available" % number_other_updates
+		
+		return status, message
+	
+	
+	def vprint(self, threshold, message):
+		"""Prints a message if the first arg is numerically greater than the verbosity level."""
+		
+		if self.verbosity >= threshold:
+			print "%s" % message
+
+
+def main():
+	"""Parses command line options and calls the test function."""
+	
+	tester = YumTester()
+	parser = OptionParser()
+	
+	parser.add_option("--all-updates",
+	                  action="store_true",
+	                  dest="all_updates",
+	                  help="Does not distinguish between security and non-security updates, but returns critical for any available update. This may be used if the YUM security plugin is absent or you want to maintain every single package at the latest version. You may want to use --warn-on-any-update instead of this option.")
+	
+	parser.add_option("--warn-on-any-update",
+	                  action="store_true",
+	                  dest="warn_on_any_update",
+	                  help="Warns if there are any (non-security) package updates available. By default only warns when security related updates are available. If --all-updates is used, then this option is redundant as --all-updates will return a critical result on any available update, whereas using this switch still allows you to differentiate between the severity of updates.")
+	
+	parser.add_option("-C", "--cache-only",
+	                  action="store_true",
+	                  dest="no_cache_update",
+	                  help="Run entirely from cache and do not update the cache when running YUM. Useful if you have 'yum makecache' cronned so that the nagios check itself doesn't have to do it, possibly speeding up execution (by 1-2 seconds in tests).")
+	
+	parser.add_option("--no-warn-on-lock",
+	                  action="store_true",
+	                  dest="no_warn_on_lock",
+	                  help="Return OK instead of WARNING when YUM is locked and fails to check for updates due to another instance running. This is not recommended from the security standpoint, but may be wanted to reduce the number of alerts that may intermittently pop up when someone is running YUM interactively for package management.")
+	
+	parser.add_option("--no-warn-on-updates",
+	                  action="store_true",
+	                  dest="no_warn_on_updates",
+	                  help="Return OK instead of WARNING even when updates are available. This is not recommended from the security standpoint, but may be wanted to disable alerts while the plugin output still shows the number of available updates.")
+	
+	parser.add_option("--enablerepo",
+	                  dest="repository_to_enable",
+	                  help="Explicitly enables a reposity when calling YUM. Can take a comma separated list of repositories. Note that enabling repositories can lead to unexpected results, for example when protected repositories are enabled.")
+	
+	parser.add_option("--disablerepo",
+	                  dest="repository_to_disable",
+	                  help="Explicitly disables a repository when calling YUM. Can take a comma separated list of repositories. Note that disabling repositories can lead to unexpected results, for example when protected repositories are disabled.")
+	
+	parser.add_option("-t", "--timeout",
+	                  dest="timeout",
+	                  help="Sets a timeout in seconds after which the plugin will exit (defaults to %s seconds)." % DEFAULT_TIMEOUT)
+	
+	parser.add_option("-v", "--verbose",
+	                  action="count",
+	                  dest="verbosity",
+	                  help="Verbose mode. Can be used multiple times to increase output. Use -vvv for debugging output. By default only one result line is printed as per Nagios standards.")
+	
+	parser.add_option("-V", "--version",
+	                  action="store_true",
+	                  dest="version",
+	                  help="Print version number and exit.")
+	
+	(options, args) = parser.parse_args()
+	
+	if args:
+		parser.print_help()
+		sys.exit(UNKNOWN)
+	
+	tester.all_updates        = options.all_updates
+	tester.no_cache_update    = options.no_cache_update
+	tester.no_warn_on_lock    = options.no_warn_on_lock
+	tester.no_warn_on_updates = options.no_warn_on_updates
+	tester.enable_repo        = options.repository_to_enable
+	tester.disable_repo       = options.repository_to_disable
+	tester.timeout            = options.timeout
+	tester.verbosity          = options.verbosity
+	tester.warn_on_any_update = options.warn_on_any_update
+	
+	if options.version:
+		print "%s - Version %s\n" % (__title__, __version__)
+		sys.exit(OK)
+	
+	result, output = tester.test_yum_updates()
+	end(result, output)
+
+
+if __name__ == "__main__":
+	try:
+		main()
+	except KeyboardInterrupt:
+		print "Caught Control-C..."
+		sys.exit(CRITICAL)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#Copyright © ?–?, Hari Sekhon <harisekhon@gmail.com>.
+#Copyright © 2012, Christoph Anton Mitterer <mail@christoph.anton.mitterer.name>.
+#All rights reserved.
+#
+#
+#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
+#of the License.
+#
+#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.
\ No newline at end of file
diff --git a/sensu/files/checks/haproxy-metrics.rb b/sensu/files/checks/haproxy-metrics.rb
new file mode 100644
index 0000000..cfb41f6
--- /dev/null
+++ b/sensu/files/checks/haproxy-metrics.rb
@@ -0,0 +1,183 @@
+#! /usr/bin/env ruby
+#
+#   <script name>
+#
+# DESCRIPTION:
+#   If you are occassionally seeing "nil output" from this check, make sure you have
+#   sensu-plugin >= 0.1.7. This will provide a better error message.
+#
+# OUTPUT:
+#   metric data, etc
+#
+# PLATFORMS:
+#   Linux, Windows, BSD, Solaris, etc
+#
+# DEPENDENCIES:
+#   gem: sensu-plugin
+#   gem: <?>
+#
+# USAGE:
+#   example commands
+#
+# NOTES:
+#   #YELLOW
+#   backend pool single node stats
+#
+# LICENSE:
+#   Pete Shima <me@peteshima.com>, Joe Miller <https://github.com/joemiller>
+#   Released under the same terms as Sensu (the MIT license); see LICENSE
+#   for details.
+#
+
+require 'rubygems' if RUBY_VERSION < '1.9.0'
+require 'sensu-plugin/metric/cli'
+require 'net/http'
+require 'net/https'
+require 'socket'
+require 'csv'
+require 'uri'
+
+class HAProxyMetrics < Sensu::Plugin::Metric::CLI::Graphite
+  option :connection,
+         short: '-c HOSTNAME|SOCKETPATH',
+         long: '--connect HOSTNAME|SOCKETPATH',
+         description: 'HAproxy web stats hostname or path to stats socket',
+         required: true
+
+  option :port,
+         short: '-P PORT',
+         long: '--port PORT',
+         description: 'HAproxy web stats port',
+         default: '80'
+
+  option :path,
+         short: '-q STATUSPATH',
+         long: '--statspath STATUSPATH',
+         description: 'HAproxy web stats path (the / will be prepended to the STATUSPATH e.g stats)',
+         default: '/'
+
+  option :username,
+         short: '-u USERNAME',
+         long: '--user USERNAME',
+         description: 'HAproxy web stats username'
+
+  option :password,
+         short: '-p PASSWORD',
+         long: '--pass PASSWORD',
+         description: 'HAproxy web stats password'
+
+  option :scheme,
+         description: 'Metric naming scheme, text to prepend to metric',
+         short: '-s SCHEME',
+         long: '--scheme SCHEME',
+         default: "#{Socket.gethostname}.haproxy"
+
+  option :use_ssl,
+         description: 'Use SSL to connect to HAproxy web stats',
+         short: '-S',
+         long: '--use-ssl',
+         boolean: true,
+         default: false
+
+  option :backends,
+         description: 'comma-separated list of backends to fetch stats from. Default is all backends',
+         short: '-f BACKEND1[,BACKEND2]',
+         long: '--backends BACKEND1[,BACKEND2]',
+         proc: proc { |l| l.split(',') },
+         default: []  # an empty list means show all backends
+
+  option :server_metrics,
+         description: 'Add metrics for backend servers',
+         boolean: true,
+         long: '--server-metrics',
+         default: false
+
+  option :retries,
+         description: 'Number of times to retry fetching stats from haproxy before giving up.',
+         short: '-r RETRIES',
+         long: '--retries RETRIES',
+         default: 3,
+         proc: proc(&:to_i)
+
+  option :retry_interval,
+         description: 'Interval (seconds) between retries',
+         short: '-i SECONDS',
+         long: '--retry_interval SECONDS',
+         default: 1,
+         proc: proc(&:to_i)
+
+  def acquire_stats
+    uri = URI.parse(config[:connection])
+
+    if uri.is_a?(URI::Generic) && File.socket?(uri.path)
+      socket = UNIXSocket.new(config[:connection])
+      socket.puts('show stat')
+      out = socket.read
+      socket.close
+    else
+      res = Net::HTTP.start(config[:connection], config[:port], use_ssl: config[:use_ssl]) do |http|
+        req = Net::HTTP::Get.new("/#{config[:path]};csv;norefresh")
+        unless config[:username].nil?
+          req.basic_auth config[:username], config[:password]
+        end
+        http.request(req)
+      end
+      out = res.body
+    end
+    return out
+  rescue
+    return nil
+  end
+
+  def run
+    out = nil
+    1.upto(config[:retries]) do |_i|
+      out = acquire_stats
+      break unless out.to_s.length.zero?
+      sleep(config[:retry_interval])
+    end
+
+    if out.to_s.length.zero?
+      warning "Unable to fetch stats from haproxy after #{config[:retries]} attempts"
+    end
+
+    parsed = CSV.parse(out)
+    parsed.shift
+    parsed.each do |line|
+      if config[:backends].length > 0
+        next unless config[:backends].include? line[0]
+      end
+
+      if line[1] == 'BACKEND'
+        output "#{config[:scheme]}.#{line[0]}.session_current", line[4]
+        output "#{config[:scheme]}.#{line[0]}.session_total", line[7]
+        output "#{config[:scheme]}.#{line[0]}.bytes_in", line[8]
+        output "#{config[:scheme]}.#{line[0]}.bytes_out", line[9]
+        output "#{config[:scheme]}.#{line[0]}.connection_errors", line[13]
+        output "#{config[:scheme]}.#{line[0]}.warning_retries", line[15]
+        output "#{config[:scheme]}.#{line[0]}.warning_redispatched", line[16]
+        output "#{config[:scheme]}.#{line[0]}.response_1xx", line[39]
+        output "#{config[:scheme]}.#{line[0]}.response_2xx", line[40]
+        output "#{config[:scheme]}.#{line[0]}.response_3xx", line[41]
+        output "#{config[:scheme]}.#{line[0]}.response_4xx", line[42]
+        output "#{config[:scheme]}.#{line[0]}.response_5xx", line[43]
+        output "#{config[:scheme]}.#{line[0]}.response_other", line[44]
+        unless line[46].nil?
+          output "#{config[:scheme]}.#{line[0]}.requests_per_second", line[46]
+        end
+        unless line[47].nil?
+          output "#{config[:scheme]}.#{line[0]}.requests_per_second_max", line[47]
+        end
+        output "#{config[:scheme]}.#{line[0]}.queue_time", line[58]
+        output "#{config[:scheme]}.#{line[0]}.connect_time", line[59]
+        output "#{config[:scheme]}.#{line[0]}.response_time", line[60]
+        output "#{config[:scheme]}.#{line[0]}.average_time", line[61]
+      elsif config[:server_metrics]
+        output "#{config[:scheme]}.#{line[0]}.#{line[1]}.session_total", line[7]
+      end
+
+    end
+
+    ok
+  end
+end
diff --git a/sensu/files/checks/mysql-replication-status.rb b/sensu/files/checks/mysql-replication-status.rb
new file mode 100644
index 0000000..2b7b0b0
--- /dev/null
+++ b/sensu/files/checks/mysql-replication-status.rb
@@ -0,0 +1,190 @@
+#! /usr/bin/env ruby
+#
+#   <script name>
+#
+# DESCRIPTION:
+#   what is this thing supposed to do, monitor?  How do alerts or
+#   alarms work?
+#
+# OUTPUT:
+#   plain text, metric data, etc
+#
+# PLATFORMS:
+#   Linux, Windows, BSD, Solaris, etc
+#
+# DEPENDENCIES:
+#   gem: sensu-plugin
+#   gem: <?>
+#
+# USAGE:
+#   example commands
+#
+# NOTES:
+#   Does it behave differently on specific platforms, specific use cases, etc
+#
+# LICENSE:
+#   <your name>  <your email>
+#   Released under the same terms as Sensu (the MIT license); see LICENSE
+#   for details.
+#
+
+# !/usr/bin/env ruby
+#
+# MySQL Replication Status (modded from disk)
+# ===
+#
+# Copyright 2011 Sonian, Inc <chefs@sonian.net>
+# Updated by Oluwaseun Obajobi 2014 to accept ini argument
+#
+# Released under the same terms as Sensu (the MIT license); see LICENSE
+# for details.
+#
+# USING INI ARGUMENT
+# This was implemented to load mysql credentials without parsing the username/password.
+# The ini file should be readable by the sensu user/group.
+# Ref: http://eric.lubow.org/2009/ruby/parsing-ini-files-with-ruby/
+#
+#   EXAMPLE
+#     mysql-alive.rb -h db01 --ini '/etc/sensu/my.cnf'
+#
+#   MY.CNF INI FORMAT
+#   [client]
+#   user=sensu
+#   password="abcd1234"
+#
+
+require 'rubygems' if RUBY_VERSION < '1.9.0'
+require 'sensu-plugin/check/cli'
+require 'mysql'
+require 'inifile'
+
+class CheckMysqlReplicationStatus < Sensu::Plugin::Check::CLI
+  option :host,
+         short: '-h',
+         long: '--host=VALUE',
+         description: 'Database host'
+
+  option :port,
+         short: '-P',
+         long: '--port=VALUE',
+         description: 'Database port',
+         default: 3306,
+         # #YELLOW
+         proc: lambda { |s| s.to_i } # rubocop:disable Lambda
+
+  option :socket,
+         short: '-s SOCKET',
+         long: '--socket SOCKET',
+         description: 'Socket to use'
+
+  option :user,
+         short: '-u',
+         long: '--username=VALUE',
+         description: 'Database username'
+
+  option :pass,
+         short: '-p',
+         long: '--password=VALUE',
+         description: 'Database password'
+
+  option :ini,
+         short: '-i',
+         long: '--ini VALUE',
+         description: 'My.cnf ini file'
+
+  option :warn,
+         short: '-w',
+         long: '--warning=VALUE',
+         description: 'Warning threshold for replication lag',
+         default: 900,
+         # #YELLOW
+         proc: lambda { |s| s.to_i }  # rubocop:disable Lambda
+
+  option :crit,
+         short: '-c',
+         long: '--critical=VALUE',
+         description: 'Critical threshold for replication lag',
+         default: 1800,
+         # #YELLOW
+         proc: lambda { |s| s.to_i }  # rubocop:disable Lambda
+
+  option :help,
+         short: '-h',
+         long: '--help',
+         description: 'Check MySQL replication status',
+         on: :tail,
+         boolean: true,
+         show_options: true,
+         exit: 0
+
+  def run
+    if config[:ini]
+      ini = IniFile.load(config[:ini])
+      section = ini['client']
+      db_user = section['user']
+      db_pass = section['password']
+    else
+      db_user = config[:user]
+      db_pass = config[:pass]
+    end
+    db_host = config[:host]
+
+    if [db_host, db_user, db_pass].any?(&:nil?)
+      unknown 'Must specify host, user, password'
+    end
+
+    begin
+      db = Mysql.new(db_host, db_user, db_pass, nil, config[:port], config[:socket])
+      results = db.query 'show slave status'
+
+      unless results.nil?
+        results.each_hash do |row|
+          # #YELLOW
+          # rubocop:disable all
+          warn "couldn't detect replication status" unless
+            %w(Slave_IO_State Slave_IO_Running Slave_SQL_Running Last_IO_Error Last_SQL_Error Seconds_Behind_Master).all? do |key|
+              row.key? key
+            end
+
+          # rubocop: enable all
+          slave_running = %w(Slave_IO_Running Slave_SQL_Running).all? do |key|
+            row[key] =~ /Yes/
+          end
+
+          output = 'Slave not running!'
+          output += ' STATES:'
+          output += " Slave_IO_Running=#{row['Slave_IO_Running']}"
+          output += ", Slave_SQL_Running=#{row['Slave_SQL_Running']}"
+          output += ", LAST ERROR: #{row['Last_SQL_Error']}"
+
+          critical output unless slave_running
+
+          replication_delay = row['Seconds_Behind_Master'].to_i
+
+          message = "replication delayed by #{replication_delay}"
+
+          if replication_delay > config[:warn] &&
+              replication_delay <= config[:crit]
+            warning message
+          elsif replication_delay >= config[:crit]
+            critical message
+          else
+            ok "slave running: #{slave_running}, #{message}"
+          end
+
+        end
+        ok 'show slave status was nil. This server is not a slave.'
+      end
+
+    rescue Mysql::Error => e
+      errstr = "Error code: #{e.errno} Error message: #{e.error}"
+      critical "#{errstr} SQLSTATE: #{e.sqlstate}" if e.respond_to?('sqlstate')
+
+    rescue => e
+      critical e
+
+    ensure
+      db.close if db
+    end
+  end
+end
diff --git a/sensu/files/checks/rabbitmq-amqp-alive.rb b/sensu/files/checks/rabbitmq-amqp-alive.rb
new file mode 100644
index 0000000..c8476ca
--- /dev/null
+++ b/sensu/files/checks/rabbitmq-amqp-alive.rb
@@ -0,0 +1,97 @@
+#!/usr/bin/env ruby
+#  encoding: UTF-8
+#
+# RabbitMQ check amqp alive plugin
+# ===
+#
+# DESCRIPTION:
+# This plugin checks if RabbitMQ server is alive using the REST API
+#
+# PLATFORMS:
+#   Linux, BSD, Solaris
+#
+# DEPENDENCIES:
+#   RabbitMQ rabbitmq_management plugin
+#   gem: sensu-plugin
+#   gem: bunny
+#
+# LICENSE:
+# Copyright 2013 Milos Gajdos
+#
+# Released under the same terms as Sensu (the MIT license); see LICENSE
+# for details.
+
+require 'sensu-plugin/check/cli'
+require 'bunny'
+
+# main plugin class
+class CheckRabbitAMQPAlive < Sensu::Plugin::Check::CLI
+  option :host,
+         description: 'RabbitMQ host',
+         short: '-w',
+         long: '--host HOST',
+         default: 'localhost'
+
+  option :vhost,
+         description: 'RabbitMQ vhost',
+         short: '-v',
+         long: '--vhost VHOST',
+         default: '%2F'
+
+  option :username,
+         description: 'RabbitMQ username',
+         short: '-u',
+         long: '--username USERNAME',
+         default: 'guest'
+
+  option :password,
+         description: 'RabbitMQ password',
+         short: '-p',
+         long: '--password PASSWORD',
+         default: 'guest'
+
+  option :port,
+         description: 'RabbitMQ AMQP port',
+         short: '-P',
+         long: '--port PORT',
+         default: '5672'
+
+  option :ssl,
+         description: 'Enable SSL for connection to RabbitMQ',
+         long: '--ssl',
+         boolean: true,
+         default: false
+
+  def run
+    res = vhost_alive?
+
+    if res['status'] == 'ok'
+      ok res['message']
+    elsif res['status'] == 'critical'
+      critical res['message']
+    else
+      unknown res['message']
+    end
+  end
+
+  def vhost_alive?
+    host     = config[:host]
+    port     = config[:port]
+    username = config[:username]
+    password = config[:password]
+    vhost    = config[:vhost]
+    ssl      = config[:ssl]
+
+    begin
+      conn = Bunny.new("amqp#{ssl ? 's' : ''}://#{username}:#{password}@#{host}:#{port}/#{vhost}")
+      conn.start
+      { 'status' => 'ok', 'message' => 'RabbitMQ server is alive' }
+    rescue Bunny::PossibleAuthenticationFailureError
+      { 'status' => 'critical', 'message' => 'Possible authentication failure' }
+    rescue Bunny::TCPConnectionFailed
+      { 'status' => 'critical', 'message' => 'TCP connection refused' }
+    rescue => e
+      { 'status' => 'unknown', 'message' => e.message }
+    end
+  end
+end
diff --git a/sensu/files/checks/rabbitmq-overview-metrics.rb b/sensu/files/checks/rabbitmq-overview-metrics.rb
new file mode 100644
index 0000000..b190073
--- /dev/null
+++ b/sensu/files/checks/rabbitmq-overview-metrics.rb
@@ -0,0 +1,146 @@
+#!/usr/bin/env ruby
+#  encoding: UTF-8
+#
+# RabbitMQ Overview Metrics
+# ===
+#
+# DESCRIPTION:
+# RabbitMQ 'overview' stats are similar to what is shown on the main page
+# of the rabbitmq_management web UI. Example:
+#
+#   $ rabbitmq-queue-metrics.rb
+#    host.rabbitmq.queue_totals.messages.count 0 1344186404
+#    host.rabbitmq.queue_totals.messages.rate  0.0 1344186404
+#    host.rabbitmq.queue_totals.messages_unacknowledged.count  0 1344186404
+#    host.rabbitmq.queue_totals.messages_unacknowledged.rate 0.0 1344186404
+#    host.rabbitmq.queue_totals.messages_ready.count 0 1344186404
+#    host.rabbitmq.queue_totals.messages_ready.rate  0.0 1344186404
+#    host.rabbitmq.message_stats.publish.count 4605755 1344186404
+#    host.rabbitmq.message_stats.publish.rate  17.4130186829638  1344186404
+#    host.rabbitmq.message_stats.deliver_no_ack.count  6661111 1344186404
+#    host.rabbitmq.message_stats.deliver_no_ack.rate 24.6867565643405  1344186404
+#    host.rabbitmq.message_stats.deliver_get.count 6661111 1344186404
+#    host.rabbitmq.message_stats.deliver_get.rate  24.6867565643405  1344186404#
+#
+# PLATFORMS:
+#   Linux, BSD, Solaris
+#
+# DEPENDENCIES:
+#   RabbitMQ rabbitmq_management plugin
+#   gem: sensu-plugin
+#   gem: carrot-top
+#
+# LICENSE:
+# Copyright 2012 Joe Miller - https://github.com/joemiller
+#
+# Released under the same terms as Sensu (the MIT license); see LICENSE
+# for details.
+
+require 'sensu-plugin/metric/cli'
+require 'socket'
+require 'carrot-top'
+
+# main plugin class
+class RabbitMQMetrics < Sensu::Plugin::Metric::CLI::Graphite
+  option :host,
+         description: 'RabbitMQ management API host',
+         long: '--host HOST',
+         default: 'localhost'
+
+  option :port,
+         description: 'RabbitMQ management API port',
+         long: '--port PORT',
+         proc: proc(&:to_i),
+         default: 15_672
+
+  option :user,
+         description: 'RabbitMQ management API user',
+         long: '--user USER',
+         default: 'guest'
+
+  option :password,
+         description: 'RabbitMQ management API password',
+         long: '--password PASSWORD',
+         default: 'guest'
+
+  option :scheme,
+         description: 'Metric naming scheme, text to prepend to $queue_name.$metric',
+         long: '--scheme SCHEME',
+         default: "#{Socket.gethostname}.rabbitmq"
+
+  option :ssl,
+         description: 'Enable SSL for connection to the API',
+         long: '--ssl',
+         boolean: true,
+         default: false
+
+  def acquire_rabbitmq_info
+    begin
+      rabbitmq_info = CarrotTop.new(
+        host: config[:host],
+        port: config[:port],
+        user: config[:user],
+        password: config[:password],
+        ssl: config[:ssl]
+      )
+    rescue
+      warning 'could not get rabbitmq info'
+    end
+    rabbitmq_info
+  end
+
+  def run
+    timestamp = Time.now.to_i
+
+    rabbitmq = acquire_rabbitmq_info
+    overview = rabbitmq.overview
+
+    # overview['queue_totals']['messages']
+    if overview.key?('queue_totals') && !overview['queue_totals'].empty?
+      output "#{config[:scheme]}.queue_totals.messages.count", overview['queue_totals']['messages'], timestamp
+      output "#{config[:scheme]}.queue_totals.messages.rate", overview['queue_totals']['messages_details']['rate'], timestamp
+
+      # overview['queue_totals']['messages_unacknowledged']
+      output "#{config[:scheme]}.queue_totals.messages_unacknowledged.count", overview['queue_totals']['messages_unacknowledged'], timestamp
+      output "#{config[:scheme]}.queue_totals.messages_unacknowledged.rate", overview['queue_totals']['messages_unacknowledged_details']['rate'], timestamp
+
+      # overview['queue_totals']['messages_ready']
+      output "#{config[:scheme]}.queue_totals.messages_ready.count", overview['queue_totals']['messages_ready'], timestamp
+      output "#{config[:scheme]}.queue_totals.messages_ready.rate", overview['queue_totals']['messages_ready_details']['rate'], timestamp
+    end
+
+    if overview.key?('message_stats') && !overview['message_stats'].empty?
+      # overview['message_stats']['publish']
+      if overview['message_stats'].include?('publish')
+        output "#{config[:scheme]}.message_stats.publish.count", overview['message_stats']['publish'], timestamp
+      end
+      if overview['message_stats'].include?('publish_details') &&
+         overview['message_stats']['publish_details'].include?('rate')
+        output "#{config[:scheme]}.message_stats.publish.rate", overview['message_stats']['publish_details']['rate'], timestamp
+      end
+
+      # overview['message_stats']['deliver_no_ack']
+      if overview['message_stats'].include?('deliver_no_ack')
+        output "#{config[:scheme]}.message_stats.deliver_no_ack.count", overview['message_stats']['deliver_no_ack'], timestamp
+      end
+      if overview['message_stats'].include?('deliver_no_ack_details') &&
+         overview['message_stats']['deliver_no_ack_details'].include?('rate')
+        output "#{config[:scheme]}.message_stats.deliver_no_ack.rate", overview['message_stats']['deliver_no_ack_details']['rate'], timestamp
+      end
+
+      # overview['message_stats']['deliver_get']
+      if overview['message_stats'].include?('deliver_get')
+        output "#{config[:scheme]}.message_stats.deliver_get.count", overview['message_stats']['deliver_get'], timestamp
+      end
+      if overview['message_stats'].include?('deliver_get_details') &&
+         overview['message_stats']['deliver_get_details'].include?('rate')
+        output "#{config[:scheme]}.message_stats.deliver_get.rate", overview['message_stats']['deliver_get_details']['rate'], timestamp
+      end
+    end
+    # overview[object_totals]
+    overview['object_totals'].each do |metric, value|
+      output "#{config[:scheme]}.global_counts.#{metric}", value, timestamp
+    end
+    ok
+  end
+end
diff --git a/sensu/files/checks/rabbitmq-queue-metrics.rb b/sensu/files/checks/rabbitmq-queue-metrics.rb
new file mode 100644
index 0000000..6f097af
--- /dev/null
+++ b/sensu/files/checks/rabbitmq-queue-metrics.rb
@@ -0,0 +1,108 @@
+#!/usr/bin/env ruby
+#  encoding: UTF-8
+#
+# RabbitMQ Queue Metrics
+# ===
+#
+# DESCRIPTION:
+# This plugin checks gathers the following per queue rabbitmq metrics:
+#   - message count
+#   - average egress rate
+#   - "drain time" metric, which is the time a queue will take to reach 0 based on the egress rate
+#   - consumer count
+#
+# PLATFORMS:
+#   Linux, BSD, Solaris
+#
+# DEPENDENCIES:
+#   RabbitMQ rabbitmq_management plugin
+#   gem: sensu-plugin
+#   gem: carrot-top
+#
+# LICENSE:
+# Copyright 2011 Sonian, Inc <chefs@sonian.net>
+# Copyright 2015 Tim Smith <tim@cozy.co> and Cozy Services Ltd.
+#
+# Released under the same terms as Sensu (the MIT license); see LICENSE
+# for details.
+
+require 'sensu-plugin/metric/cli'
+require 'socket'
+require 'carrot-top'
+
+# main plugin class
+class RabbitMQMetrics < Sensu::Plugin::Metric::CLI::Graphite
+  option :host,
+         description: 'RabbitMQ management API host',
+         long: '--host HOST',
+         default: 'localhost'
+
+  option :port,
+         description: 'RabbitMQ management API port',
+         long: '--port PORT',
+         proc: proc(&:to_i),
+         default: 15_672
+
+  option :user,
+         description: 'RabbitMQ management API user',
+         long: '--user USER',
+         default: 'guest'
+
+  option :password,
+         description: 'RabbitMQ management API password',
+         long: '--password PASSWORD',
+         default: 'guest'
+
+  option :scheme,
+         description: 'Metric naming scheme, text to prepend to $queue_name.$metric',
+         long: '--scheme SCHEME',
+         default: "#{Socket.gethostname}.rabbitmq"
+
+  option :filter,
+         description: 'Regular expression for filtering queues',
+         long: '--filter REGEX'
+
+  option :ssl,
+         description: 'Enable SSL for connection to the API',
+         long: '--ssl',
+         boolean: true,
+         default: false
+
+  def acquire_rabbitmq_queues
+    begin
+      rabbitmq_info = CarrotTop.new(
+        host: config[:host],
+        port: config[:port],
+        user: config[:user],
+        password: config[:password],
+        ssl: config[:ssl]
+      )
+    rescue
+      warning 'could not get rabbitmq queue info'
+    end
+    rabbitmq_info.queues
+  end
+
+  def run
+    timestamp = Time.now.to_i
+    acquire_rabbitmq_queues.each do |queue|
+      if config[:filter]
+        next unless queue['name'].match(config[:filter])
+      end
+
+      # calculate and output time till the queue is drained in drain metrics
+      drain_time = queue['messages'] / queue['backing_queue_status']['avg_egress_rate']
+      drain_time = 0 if drain_time.nan? # 0 rate with 0 messages is 0 time to drain
+      output([config[:scheme], queue['name'], 'drain_time'].join('.'), drain_time.to_i, timestamp)
+
+      %w(messages consumers).each do |metric|
+        output([config[:scheme], queue['name'], metric].join('.'), queue[metric], timestamp)
+      end
+
+      # fetch the average egress rate of the queue
+      rate = format('%.4f', queue['backing_queue_status']['avg_egress_rate'])
+      output([config[:scheme], queue['name'], 'avg_egress_rate'].join('.'), rate, timestamp)
+    end
+    ok
+  end
+end
diff --git a/sensu/files/checks/svc_error_database b/sensu/files/checks/svc_error_database
new file mode 100644
index 0000000..c86b6aa
--- /dev/null
+++ b/sensu/files/checks/svc_error_database
@@ -0,0 +1,335 @@
+An automatic system recovery has started. All configuration commands are blocked.	1001
+The error event log is full.	1002
+"The following causes are possible:
+The node is missing.
+The node is no longer a functional member of the system."	1196
+A node has been missing for 30 minutes.	1195
+The software install process has failed.	2010
+The software upgrade package delivery has failed.	2010
+Unable to connect to the SMTP (email) server	2600
+Unable to send mail through the SMTP (email) server	2601
+The Metro Mirror or Global Mirror feature capacity is not set.	3030
+The FlashCopy® feature capacity is not set.	3031
+The Virtualization feature has exceeded the amount that is licensed.	3032
+The FlashCopy feature has exceeded the amount that is licensed.	3032
+The Metro Mirror or Global Mirror feature has exceeded the amount that is licensed.	3032
+The usage for the thin-provisioned volume is not licensed.	3033
+The value set for the virtualization feature capacity is not valid.	3029
+A physical disk FlashCopy feature license is required.	3035
+A physical disk Metro Mirror and Global Mirror feature license is required.	3036
+A virtualization feature license is required.	3025
+Automatic recovery of offline node failed.	1194
+Unable to send email to any of the configured email servers.	3081
+The external virtualization feature license limit was exceeded.	3032
+Unable to connect to LDAP server.	2251
+The LDAP configuration is not valid.	2250
+The limit for the compression feature license was exceeded.	3032
+The limit for the compression feature license was exceeded.	3032
+Unable to connect to LDAP server that has been automatically configured.	2256
+Invalid LDAP configuration for automatically configured server.	2255
+A licensable feature's trial-timer has reached 0. The feature has now been deactivated.	3082
+A trial of a licensable feature will expire in 5 days.	3083
+A trial of a licensable feature will expire in 10 days.	3084
+A trial of a licensable feature will expire in 15 days.	3085
+A trial of a licensable feature will expire in 45 days.	3086
+Easy Tier feature license limit exceeded.	3032
+FlashCopy feature license limit exceeded.	3032
+External virtualization feature license limit exceeded.	3032
+Remote copy feature license limit exceeded.	3032
+The node ran out of base event sources. As a result, the node has stopped and exited the system.	2030
+The number of device logins has reduced.	1630
+A software error has occurred.	2030
+The block size is invalid, the capacity or LUN identity has changed during the managed disk initialization.	1660
+The managed disk is excluded because of excessive errors.	1310
+The remote port is excluded for a managed disk and node.	1220
+The local port is excluded.	1210
+The login is excluded.	1230
+The local port is excluded.	1211
+A timeout has occurred as a result of excessive processing time.	1340
+An error recovery procedure has occurred.	1370
+A managed disk I/O error has occurred.	1310
+The managed disk error count threshold has exceeded.	1310
+There are too many devices presented to the clustered system.	1200
+There are too many managed disks presented to the cluster (system).	1200
+There are too many LUNs presented to a node.	1200
+There are too many drives presented to a cluster (system).	1200
+A disk I/O medium error has occurred.	1320
+A suitable MDisk or drive for use as a quorum disk was not found.	1330
+The quorum disk is not available.	1335
+A controller configuration is not supported.	1625
+A login transport fault has occurred.	1360
+"A managed disk error recovery procedure (ERP) has occurred. The node or controller reported the following:
+Sense
+Key
+Code
+Qualifier"	1370
+One or more MDisks on a controller are degraded.	1623
+The controller configuration limits failover.	1625
+The controller configuration uses the RDAC mode; this is not supported.	1624
+Persistent unsupported controller configuration.	1695
+The controller system device is only connected to the node through a single initiator port.	1627
+The controller system device is only connected to the node through a single target port.	1627
+The controller system device is only connected to the clustered system nodes through a single target port.	1627
+The controller system device is only connected to the clustered system nodes through half of the expected target ports.	1627
+The controller system device has disconnected all target ports to the clustered system nodes.	1627
+A flash drive failed. A rebuild is required.	1201
+A flash drive is offline as a result of a drive hardware error.	1205
+A flash drive is reporting a predictive failure analysis (PFA).	1215
+A flash drive is reporting too many errors.	1215
+An unrecognized SAS device.	1665
+SAS error counts exceeded the warning thresholds.	1216
+SAS errors exceeded critical thresholds.	1216
+The drive initialization failed because of an unknown block size or a block size that is not valid; an unknown capacity or a capacity that is not valid; or was not able to set the required mode pages.	1661
+A flash drive is offline due to excessive errors.	1311
+A flash drive exceeded the warning temperature threshold.	1217
+A flash drive exceeded the offline temperature threshold.	1218
+A drive exceeded the warning temperature threshold.	1217
+Drive medium error.	1321
+Controller indicates that it does not support descriptor sense for LUNs that are greater than 2 TBs.	1625
+Too many enclosures were presented to a cluster (system).	1200
+The flash drive format was corrupted.	1204
+The block size for the flash drive was incorrect.	1204
+Too many controller target ports were presented to the cluster (system).	1200
+Too many target ports were presented to the clustered system from a single controller.	1200
+The drive is offline as a result of a drive hardware error.	1680
+The drive is reporting predictive failure analysis (PFA) errors.	1680
+The drive is reporting too many errors.	1680
+The drive format is corrupted.	1206
+The block size for the drive was incorrect.	1206
+The drive is offline due to excessive errors.	1680
+The error counts for the SAS drive exceeded the warning thresholds.	1285
+The SAS device was not recognized.	1666
+The SAS enclosure was not recognized.	1666
+The SAS device was not able to be identified.	1666
+There were excessive medium errors on the drive.	1680
+There were excessive overall timeout errors on the drive.	1680
+There were excessive times when the drive stopped.	1680
+A drive failed validation testing.	1680
+There were excessive medium errors on the flash drive.	1215
+There were excessive overall timeout errors on the flash drive.	1204
+Login excluded.	1231
+Drive failed.	1687
+The drive initialization failed because of an unknown block size or a block size that is not valid; an unknown capacity or a capacity that is not valid; or was not able to set the required mode pages.	1680
+A drive is reporting excessive errors.	1685
+There are too many drives presented to a cluster (system).	1200
+Reserved SAS port has devices attached.	1669
+Drive firmware download cancelled because of system changes	3090
+Drive firmware download cancelled because of a drive download problem	3090
+There are too many medium errors on the managed disk.	1610
+A managed disk group is offline.	1620
+There are insufficient virtual extents.	2030
+The managed disk has bad blocks. On an external controller, this can only be a copied medium error.	1840
+The system failed to create a bad block because MDisk already has the maximum number of allowed bad blocks.	1226
+The system failed to create a bad block because the clustered system already has the maximum number of allowed bad blocks.	1225
+The trigger prepare command has failed because of a cache flush failure.	1900
+The mapping is stopped because of the error that is indicated in the data.	1910
+The mapping is stopped because of a clustered system or complete I/O group failure, and the current state of the relationship could not be recovered.	1895
+One or more power supply unit fans have failed.	1124
+A fan is operating outside the expected range.	1126
+There was a fan status communications failure.	1126
+The power supply unit is not installed.	1128
+The power supply unit has indicated an input power failure.	1138
+The power supply unity has indicated an output failure.	1126
+The power supply unit has failed.	1124
+There is no communication with the power supply unit.	1148
+The model type for this enclosure is not valid.	1124
+The power supply unit type is unknown to this product.	1124
+The power supply unit serial number is not valid.	1124
+The canister temperature is at the warning level.	1098
+The canister temperature is at the critical level.	1095
+The SAS cable was excluded because of a missing device.	1260
+A SAS cable was excluded because too many change events were caused.	1260
+A SAS cable was excluded.	1255
+A SAS cable is operating at a reduced speed.	1260
+A SAS cable was excluded because frames were dropped.	1260
+A SAS cable was excluded because the enclosure discovery timed out.	1260
+A SAS cable is not present.	1265
+A canister was removed from the system.	1036
+A canister has been in a degraded state for too long and cannot be recovered.	1034
+A canister is encountering communication problems.	1038
+The canister VPD is not valid.	1032
+The canister has experienced too many resets.	1032
+The drive slot is causing the network to be unstable.	1686
+The drive slot is not running at 6 Gbps	1686
+The drive slot is dropping frames.	1686
+The drive is visible through only one SAS port.	1686
+The drive power control is not functional.	1008
+The drive slot contains a device that is not responding to queries.	1685
+The managed enclosure is not visible from any node canisters.	1042
+The electronics in the enclosure has failed.	1694
+The electronics in the enclosure has experienced a critical failure.	1008
+The SAS network has too many errors.	1048
+The SAS network has too many errors.	1048
+The firmware update for the enclosure component has failed.	3015
+More than one initiator port was detected on the same strand.	1005
+The order of the enclosures is different on each strand.	1005
+Multiple canisters are connected to a single canister port.	1005
+Canister 1 is connected to canister 2.	1005
+An enclosure is connected to more than one I/O group.	1005
+A managed enclosure is connected to the wrong I/O group.	1005
+An enclosure is connected to more than one chain.	1005
+Too many canisters are connected to a strand.	1005
+The canister is connected to the wrong port.	1005
+A SAS cable is excluded because of single port active drives.	1260
+More than one canister was detected at the same hop count.	1005
+The node location is not able to be detected.	1031
+An enclosure display cannot be updated.	1694
+There is an enclosure battery fault.	1118
+An enclosure battery is missing.	1112
+An enclosure battery is nearing end of life.	1114
+An enclosure battery is at end of life.	1113
+An enclosure battery conditioning is required but not possible.	1131
+There was an enclosure battery communications error.	1116
+A SAS port is active, but no enclosures can be detected.	1005
+There is a connectivity problem between a canister and an enclosure.	1036
+The FRU identity of the enclosure is not valid.	1008
+A new enclosure FRU was detected and needs to be configured.	1041
+The internal device on a node canister was excluded because of too many change events.	1034
+The internal connector on the node canister was excluded as the cause of single ported drives.	1034
+The canister temperature sensor cannot be read.	1034
+The enclosure contains both a node canister and an expansion canister.	1037
+The discovery failed to complete.	1048
+The VPD for the enclosure cannot be read.	1048
+There are too many self-initiated resets on the enclosure.	1048
+The slots are powered off.	1048
+The expansion or control enclosure temperature is at the critical level.	 
+The relationship is stopped because of a clustered system or complete I/O group failure, and the current state of the mapping could not be recovered.	1700
+A Metro Mirror or Global Mirror relationship or consistency group exists within a clustered system, but its partnership has been deleted.	3080
+A Global Mirror relationship has stopped because of a persistent I/O error.	1920
+A remote copy has stopped because of a persistent I/O error.	1915
+Remote copy has stopped.	1720
+There are too many clustered system partnerships. The number of partnerships has been reduced.	1710
+There are too many clustered system partnerships. The system has been excluded.	1710
+Background copy process for the Remote Copy was blocked.	1960
+The Global Mirror secondary volume is offline. The relationship has pinned hardened write data for this volume.	1925
+The Global Mirror secondary volume is offline due to missing IO group partner node. The relationship has pinned hardened write data for this volume but the node containing the required data is currently offline.	1730
+Global Mirror performance is likely to be impacted. A large amount of pinned data for the offline volumes has reduced the resource available to the global mirror secondary disks.	1925
+The thin-provisioned volume copy is offline because there is insufficient space.	1865
+The thin-provisioned volume copy is offline because the metadata is corrupt.	1862
+The thin-provisioned volume copy is offline because the repair has failed.	1860
+The compressed volume copy is offline because there is insufficient space.	1865
+The compressed volume copy is offline because the metadata is corrupt.	1862
+The compressed volume copy is offline because the repair has failed.	1860
+The compressed volume copy has bad blocks.	1850
+Unable to mirror medium error during volume copy synchronization	1950
+The mirrored volume is offline because the data cannot be synchronized.	1870
+The repair process for the mirrored disk has stopped because there is a difference between the copies.	1600
+Unrecognized node error.	1083
+Detected memory size does not match the expected memory size.	1022
+The WWNN that is stored on the service controller and the WWNN that is stored on the drive do not match.	1192
+Unable to detect any Fibre Channel adapter.	1016
+The system board processor has failed.	1020
+The internal disk file system of the node is damaged.	1187
+Unable to update BIOS settings.	1027
+Unable to update the service processor firmware for the system board.	1020
+The ambient temperature is too high while the system is starting.	1182
+Cannot form clustered system due to lack of resources.	1192
+Duplicate WWNN detected on the SAN.	1192
+A node is unable to communicate with other nodes.	1192
+The node hardware does not meet minimum requirements.	1183
+Too many software failures.	1188
+The node software is damaged.	1187
+The clustered system data cannot be read.	1030
+The clustered system data was not saved when power was lost.	1194
+Unable to read the service controller ID.	1044
+Node held in service state.	1189
+Node canister has the incorrect model for the enclosure.	3020
+Detected hardware is not a valid configuration.	1198
+Detected hardware needs activation.	1199
+The control canister temperature is at the critical level.	528
+The control canister battery is too cold, and at the critical level.	653
+The control canister battery is too hot, and at the critical level.	654
+The ambient temperature of the canister is close to the point where it stops performing I/O and enters a service state. The canister is currently continuing to operate.	768
+The temperature of the CPU in the canister is close to the point where the canister stops performing I/O and enters service state.	769
+There was a PCIe link failure between canisters.	1006
+The PCIe link is degraded between canisters.	1052
+The PCIe link for the CPU is degraded.	1034
+The Fibre Channel ports are not operational.	1060
+Clustered system path failure.	1550
+The SAN is not correctly zoned. As a result, more than 512 ports on the SAN have logged into one Flex System V7000 Storage Node port.	1800
+There are fewer Fibre Channel ports operational than are configured.	1061
+One or more Fibre Channel ports are running at a speed that is lower than the last saved speed.	1065
+A duplicate Fibre Channel frame has been detected, which indicates that there is an issue with the Fibre Channel fabric. Other Fibre Channel errors might also be generated.	1203
+Incorrect canister position.	1192
+No enclosure identity; cannot get status from partner.	1192
+Incorrect enclosure type.	1192
+No enclosure identity and partner does match.	1192
+No enclosure identity and partner does not match.	1192
+No enclosure identity and no state on partner.	1192
+No enclosure identity and no node state.	1192
+Clustered system identity is different on the enclosure and the node.	1023
+Cannot read enclosure identity.	1036
+Detected memory size does not match the expected memory size.	1032
+Enclosure VPD is inconsistent	1008
+The system board service processor has failed.	1034
+The internal disk file system of the node is damaged.	1187
+Unable to update the service processor firmware of the system board.	1034
+Ambient temperature is too high during system startup.	1098
+The internal PCIe switch of the node canister failed.	1034
+Cannot form clustered system due to lack of resources.	1192
+Duplicate WWNN detected on the SAN.	1133
+The node hardware does not meet the minimum requirements.	1034
+The internal drive of the node is failing.	1032
+The node software is inconsistent.	1187
+The clustered system data cannot be read.	1187
+The clustered system data was not saved when power was lost.	1194
+The canister battery is missing.	1153
+The canister battery has failed.	1154
+The canister battery’s temperature is too low.	1156
+The canister battery’s temperature is too high	1157
+The canister battery communications fault.	1158
+The canister battery has insufficient charge.	1184
+FC adapter missing.	1045
+FC adapter failed.	1046
+FC adapter PCI error.	1046
+FC adapter degraded.	1045
+Fewer Fibre Channel ports operational.	1061
+Fewer Fibre Channel IO ports operational.	1450
+SAS adapter missing.	1045
+SAS adapter failed.	1046
+SAS adapter PCI error.	1046
+SAS adapter degraded.	1046
+Ethernet adapter missing.	1045
+Ethernet adapter failed.	1046
+Ethernet adapter PCI error.	1046
+Ethernet adapter degraded.	1046
+Fewer Ethernet ports operational.	1401
+Bus adapter missing.	1032
+Bus adapter failed.	1032
+Bus adapter PCI error.	1032
+Bus adapter degraded.	1032
+Inter-canister PCIe link failure.	1006
+Ambient temperature warning.	1094
+CPU temperature warning.	1093
+Detected hardware is not a valid configuration.	1198
+Detected hardware needs activation.	1199
+Fabric too large.	1800
+Unable to determine the vital product data (VPD) for an FRU. This is probably because a new FRU has been installed and the software does not recognize that FRU. The clustered system continues to operate; however, you must upgrade the software to fix this warning.	2040
+The node warm started after a software error.	2030
+A connection to a configured remote system has been lost because of a connectivity problem.	1715
+A connection to a configured remote system has been lost because of too many minor errors.	1716
+The internal disk for a node has failed.	1030
+The hard disk is full and cannot capture any more output.	2030
+One of the two power supply units in the node has failed.	1096
+One of the two power supply units in the node cannot be detected.	1096
+One of the two power supply units in the node is without power.	1097
+Degraded PCIe lanes on a high-speed SAS adapter.	1121
+A PCI bus error occurred on a high-speed SAS adapter.	1121
+A high-speed SAS adapter requires a PCI bus reset.	1122
+Vital product data (VPD) is corrupt on high-speed SAS adapter.	1121
+A high-speed SAS controller is missing.	1032
+Degraded PCIe lanes on a high-speed SAS adapter.	1032
+A PCI bus error occurred on a high-speed SAS adapter.	1032
+A high-speed SAS adapter requires a PCI bus reset.	1034
+The limit on the number of clustered system secure shell (SSH) sessions has been reached.	2500
+Unable to access the Network Time Protocol (NTP) network time server.	2700
+An Ethernet port failure has occurred.	1401
+A server error has occurred.	2100
+An array MDisk has deconfigured members and has lost redundancy.	1689
+An array MDisk is corrupt because of lost metadata.	1240
+An array MDisk has taken a spare member that is not an exact match to the array goals.	1692
+An array has members that are located in a different I/O group.	1688
+An array MDisk is no longer protected by an appropriate number of suitable spares.	1690
+An array MDisk is offline. The metadata for the inflight writes is on a missing node.	1243
+An array MDisk is offline. Metadata on the missing node contains needed state information.	1243
+
diff --git a/sensu/files/client.json b/sensu/files/client.json
new file mode 100644
index 0000000..89324b6
--- /dev/null
+++ b/sensu/files/client.json
@@ -0,0 +1,71 @@
+{%- from "linux/map.jinja" import system with context -%}
+{%- from "linux/map.jinja" import network with context -%}
+{%- from "sensu/map.jinja" import client with context -%}
+{
+  "client": {
+    "name": "{{ system.name }}.{{ system.domain }}",
+    "hostname": "{{ system.name }}",
+    "fqdn": "{{ system.name }}.{{ system.domain }}",
+    "cluster": "{{ pillar.linux.system.cluster }}",
+    "graphite_name": "{{ system.name|replace('.', '_') }}_{{ system.domain|replace('.', '_') }}",
+    "address": "{% if grains.ipv4[0] == '127.0.0.1' %}{{ grains.ipv4[1] }}{% else %}{{ grains.ipv4[0] }}{% endif %}",
+    {%- if pillar.get('mysql', {}).server is defined %}
+    {%- if pillar.mysql.server.enabled is defined %}
+    {%- from "mysql/map.jinja" import server with context %}
+    "mysql": {
+      "user": "{{ server.admin.user }}",
+      "password": "{{ server.admin.password }}",
+      "host": "{{ server.bind.address }}",
+      "port": "{{ server.bind.port }}"
+    },
+    {%- endif %}
+    {%- endif %}
+    {%- if pillar.get('galera', {}).cluster is defined %}
+    {%- from "mysql/map.jinja" import server with context %}
+    "mysql": {
+      "user": "{{ server.admin.user }}",
+      "password": "{{ server.admin.password }}",
+      "host": "{{ server.bind.address }}",
+      "port": "{{ server.bind.port }}"
+    },
+    {%- endif %}
+    {%- if pillar.get('keystone', {}).client is defined %}
+    {%- if pillar.keystone.client.enabled %}
+    {%- from "keystone/map.jinja" import client with context %}
+    "openstack": {
+      "tenant": "{{ client.server.tenant }}",
+      "user": "{{ client.server.user }}",
+      "password": "{{ client.server.password }}",
+      "host": "{{ client.server.host }}",
+      "port": "{{ client.server.public_port }}"
+    },
+    {%- endif %}
+    {%- endif %}
+    "keepalive": {
+      "thresholds": {
+        "warning": {{ client.get('keepalive_warning', '120') }},
+        "critical": {{ client.get('keepalive_critical', '180') }}
+      },
+      "handler": "default"
+    },
+    "subscriptions": [
+      {% for key in grains.roles %}
+      "local-{{ key|replace('.', '-') }}",
+      {%- endfor %}
+      {%- if pillar.sensu.server is defined %}
+      "remote-internet",
+      "remote-network",
+      {%- endif %}
+      "local-{{ grains.os|lower }}-system",
+      {%- if grains.os != grains.os_family %}
+      "local-{{ grains.os_family|lower }}-system",
+      {%- endif %}
+      {%- if pillar.linux is defined %}
+      "{{ pillar.linux.system.name|replace('.', '-') }}-{{ pillar.linux.system.domain|replace('.', '-') }}",
+      {%- else %}
+      "{{ pillar.system.name|replace('.', '-') }}",
+      {%- endif %}
+      "local-common"
+    ]
+  }
+}
\ No newline at end of file
diff --git a/sensu/files/handlers/default.json b/sensu/files/handlers/default.json
new file mode 100644
index 0000000..1475f33
--- /dev/null
+++ b/sensu/files/handlers/default.json
@@ -0,0 +1,17 @@
+{%- set handler = pillar.sensu.server.handler[handler_name] %}
+{
+  "handlers": {
+    "default": {
+      "type": "set",
+      "handlers": [
+        {% for set in handler.set %}"{{ set }}"{% if not loop.last %}, {% endif %}{% endfor %}
+      ],
+      "severities": [
+        "ok",
+        "critical",
+        "warning",
+        "unknown"
+      ]
+    }
+  }
+}
diff --git a/sensu/files/handlers/flapjack.json b/sensu/files/handlers/flapjack.json
new file mode 100644
index 0000000..4dd6c46
--- /dev/null
+++ b/sensu/files/handlers/flapjack.json
@@ -0,0 +1,14 @@
+{%- set handler = pillar.sensu.server.handler[handler_name] %}
+{
+  "handlers": {
+    "flapjack": {
+      "host": "{{ handler.get('host', 'localhost') }}",
+      "port": {{ handler.get('port', '6379') }},
+      "db": "{{ handler.get('number', '0') }}",
+      "severities": [
+        "ok",
+        "critical"
+      ]
+    }
+  }
+}
diff --git a/sensu/files/handlers/graphite.json b/sensu/files/handlers/graphite.json
new file mode 100644
index 0000000..5b0fa7f
--- /dev/null
+++ b/sensu/files/handlers/graphite.json
@@ -0,0 +1,17 @@
+{
+  "handlers": {
+    "graphite": {
+      "type": "amqp",
+      "exchange": {
+        "type": "topic",
+        "name": "metrics_break_it",
+        "durable": "true"
+      },
+      "mutator": "only_check_output",
+      "severities": [
+        "ok",
+        "critical"
+      ]
+    }
+  }
+}
\ No newline at end of file
diff --git a/sensu/files/handlers/graphite_event.json b/sensu/files/handlers/graphite_event.json
new file mode 100644
index 0000000..693fc58
--- /dev/null
+++ b/sensu/files/handlers/graphite_event.json
@@ -0,0 +1,9 @@
+{
+  "graphite_event": {
+    "server_uri": "https://graphite.example.com:443/events/",
+    "tags": [
+      "custom_tag_a",
+      "custom_tag_b"
+    ]
+  }
+}
diff --git a/sensu/files/handlers/handler_flapjack.json b/sensu/files/handlers/handler_flapjack.json
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/sensu/files/handlers/handler_flapjack.json
diff --git a/sensu/files/handlers/handler_mailer.json b/sensu/files/handlers/handler_mailer.json
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/sensu/files/handlers/handler_mailer.json
diff --git a/sensu/files/handlers/logstash.json b/sensu/files/handlers/logstash.json
new file mode 100644
index 0000000..810b3f8
--- /dev/null
+++ b/sensu/files/handlers/logstash.json
@@ -0,0 +1,14 @@
+{
+  "handlers": {
+    "logstash": {
+      "server": "redis.example.tld",
+      "port": 6379,
+      "list": "logstash",
+      "type": "sensu-logstash"
+      "severities": [
+        "ok",
+        "critical"
+      ]
+    }
+  }
+}
\ No newline at end of file
diff --git a/sensu/files/handlers/mail.json b/sensu/files/handlers/mail.json
new file mode 100644
index 0000000..921ead1
--- /dev/null
+++ b/sensu/files/handlers/mail.json
@@ -0,0 +1,34 @@
+{%- set handler = pillar.sensu.server.handler[handler_name] %}
+{%- if handler_setting == "handler" %}
+{
+  "handlers": {
+    "mail": {
+      "type": "pipe",
+      "command": "/etc/sensu/handlers/mail.py"
+    }
+  }
+}
+{%- endif %}
+{%- if handler_setting == "config" %}
+{
+  "mail": {
+    {%- if handler.user is defined %}
+    "user": "{{ handler.user }}",
+    {%- endif %}
+    {%- if handler.password is defined %}
+    "password": "{{ handler.password }}",
+    {%- endif %}
+    {%- if handler.authentication is defined %}
+    "authentication": "{{ handler.authentication }}",
+    {%- endif %}
+    {%- if handler.get('encryption', 'none') == 'ssl' %}
+    "encryption": "{{ handler.get('encryption') }}",
+    {%- endif %}
+    "subject": "Sensu Alert",
+    "from": "sensu@{{ handler.get('domain', 'example.org') }}",
+    "to": "{{ handler.mail_to }}",
+    "host": "{{ handler.get('host', 'localhost') }}",
+    "port": "{{ handler.get('port', '25') }}"
+  }
+}
+{%- endif %}
diff --git a/sensu/files/handlers/mailer.json b/sensu/files/handlers/mailer.json
new file mode 100644
index 0000000..3c95de0
--- /dev/null
+++ b/sensu/files/handlers/mailer.json
@@ -0,0 +1,35 @@
+{%- set handler = pillar.sensu.server.handler[handler_name] %}
+{%- if handler_setting == "handler" %}
+{
+  "handlers": {
+    "mailer": {
+      "type": "pipe",
+      "command": "/etc/sensu/handlers/mailer.rb"
+    }
+  }
+}
+{%- endif %}
+{%- if handler_setting == "config" %}
+{
+  "mailer": {
+    "admin_gui": "http://admin.example.com:8080/",
+    "mail_from": "sensu@{{ handler.get('domain', 'example.org') }}",
+    "mail_to": "{{ handler.mail_to }}",
+    "smtp_address": "{{ handler.get('host', 'localhost') }}",
+    "smtp_port": "{{ handler.get('port', '25') }}",
+    "smtp_domain": "{{ handler.get('domain', 'example.org') }}"
+    {%- if handler.user is defined %}
+    ,"smtp_username": "{{ handler.user }}"
+    {%- endif %}
+    {%- if handler.password is defined %}
+    ,"smtp_password": "{{ handler.password }}"
+    {%- endif %}
+    {%- if handler.authentication is defined %}
+    ,"smtp_authentication": "{{ handler.authentication }}"
+    {%- endif %}
+    {%- if handler.get('encryption', 'none') == 'ssl' %}
+    ,"smtp_enable_starttls_auto": true
+    {%- endif %}
+  }
+}
+{%- endif %}
diff --git a/sensu/files/handlers/sccd.json b/sensu/files/handlers/sccd.json
new file mode 100644
index 0000000..edfac2b
--- /dev/null
+++ b/sensu/files/handlers/sccd.json
@@ -0,0 +1,45 @@
+{%- for handler in pillar.sensu.server.handlers %}
+{%- if handler.name == handler_name %}
+{%- if handler_setting == "handler" %}
+{
+  "handlers": {
+    "sccd": {
+      "type": "pipe",
+      {%- if handler.mutator is defined %}
+      "mutator": "{{ handler.mutator }}",
+      {%- endif %}
+      "command": "/etc/sensu/handlers/sccd.py"
+    }
+  }
+}
+{%- endif %}
+{%- if handler_setting == "config" %}
+{
+  "sccd": {
+    {%- if handler.mail_user is defined %}
+    "mail_user": "{{ handler.mail_user }}",
+    {%- endif %}
+    {%- if handler.mail_password is defined %}
+    "mail_password": "{{ handler.mail_password }}",
+    {%- endif %}
+    {%- if handler.mail_authentication is defined %}
+    "mail_authentication": "{{ handler.mail_authentication }}",
+    {%- endif %}
+    {%- if handler.get('mail_encryption', 'none') == 'ssl' %}
+    "mail_encryption": "{{ handler.get('mail_encryption') }}",
+    {%- endif %}
+    "mail_subject": "SCCD Incident",
+    "mail_from": "{{ handler.mail_user }}",
+    "mail_host": "{{ handler.get('mail_host', 'localhost') }}",
+    "mail_port": "{{ handler.get('mail_port', '25') }}",
+    {%- if handler.kedb_host is defined %}
+    "kedb_host": "{{ handler.get('kedb_host', 'localhost') }}",
+    "kedb_port": "{{ handler.get('kedb_port', '6754') }}",
+    {%- endif %}
+    "sccd_email": "{{ handler.sccd_email }}",
+    "sccd_site": "{{ handler.sccd_site }}"
+  }
+}
+{%- endif %}
+{%- endif %}
+{%- endfor %}
diff --git a/sensu/files/handlers/slack.json b/sensu/files/handlers/slack.json
new file mode 100644
index 0000000..2ec633c
--- /dev/null
+++ b/sensu/files/handlers/slack.json
@@ -0,0 +1,38 @@
+{%- set handler = pillar.sensu.server.handler[handler_name] %}
+{%- if handler_setting == "handler" %}
+{
+  "handlers": {
+    "slack": {
+      "type": "pipe",
+      {%- if handler.mutator is defined %}
+      "mutator": "{{ handler.mutator }}",
+      {%- endif %}
+      "command": "/etc/sensu/handlers/slack.rb",
+      "severities": [
+        "ok",
+        "critical",
+        "warning",
+        "unknown"
+      ]
+    }
+  }
+}
+{%- endif %}
+{%- if handler_setting == "config" %}
+{
+  "slack": {
+    "webhook_url": "{{ handler.webhook_url }}",
+    "channel": "{{ handler.channel }}",
+    "markdown_enabled": false
+  }
+}
+{%- endif %}
+{#
+    "message_prefix": "optional prefix - can be used for mentions",
+    "surround": "optional - can be used for bold(*), italics(_), code(`) and preformatted(```)",
+    "bot_name": "optional bot name, defaults to slack defined",
+    "proxy_addr": "optional - your proxy address for http proxy, like squid, i.e. 192.168.10.100",
+    "proxy_port": "optional - should be port used by proxy, i.e. 3128",
+  }
+}
+#}
diff --git a/sensu/files/handlers/statsd.json b/sensu/files/handlers/statsd.json
new file mode 100644
index 0000000..6eeca0a
--- /dev/null
+++ b/sensu/files/handlers/statsd.json
@@ -0,0 +1,29 @@
+{%- set handler = pillar.sensu.server.handler[handler_name] %}
+{%- if handler_setting == "handler" %}
+{
+  "handlers": {
+    "statsd": {
+      "type": "pipe",
+      {%- if handler.mutator is defined %}
+      "mutator": "{{ handler.mutator }}",
+      {%- endif %}
+      "command": "/etc/sensu/handlers/statsd.py",
+      "severities": [
+        "ok",
+        "critical",
+        "warning",
+        "unknown"
+      ]
+    }
+  }
+}
+{%- endif %}
+{%- if handler_setting == "config" %}
+{
+  "statsd": {
+    "host": "{{ handler.get('host', 'localhost') }}",
+    "port": "{{ handler.get('port', '8125') }}",
+    "prefix": "{{ handler.get('prefix', 'mon') }}"
+  }
+}
+{%- endif %}
diff --git a/sensu/files/handlers/stdout.json b/sensu/files/handlers/stdout.json
new file mode 100644
index 0000000..e87e21c
--- /dev/null
+++ b/sensu/files/handlers/stdout.json
@@ -0,0 +1,8 @@
+{
+  "handlers": {
+    "stdout": {
+      "type": "pipe",
+      "command": "cat"
+    }
+  }
+}
\ No newline at end of file
diff --git a/sensu/files/mutator.json b/sensu/files/mutator.json
new file mode 100644
index 0000000..9f212ca
--- /dev/null
+++ b/sensu/files/mutator.json
@@ -0,0 +1,11 @@
+{%- for mutator in pillar.sensu.server.mutators %}
+{%- if mutator_name == mutator.name %}
+{
+  "mutators": {
+    "{{ mutator.name }}": {
+      "command": "{{ mutator.command }}"
+    }
+  }
+}
+{%- endif %}
+{%- endfor %}
diff --git a/sensu/files/plugins/handlers/notification/flapjack.rb b/sensu/files/plugins/handlers/notification/flapjack.rb
new file mode 100644
index 0000000..43f5e2d
--- /dev/null
+++ b/sensu/files/plugins/handlers/notification/flapjack.rb
@@ -0,0 +1,84 @@
+# Sends events to Flapjack for notification routing. See http://flapjack.io/
+#
+# This extension requires Flapjack >= 0.8.7
+#
+# In order for Flapjack to keep its entities up to date, it is necssary to set
+# metric to "true" for each check that is using the flapjack handler extension.
+#
+# Here is an example of what the Sensu configuration for flapjack should
+# look like, assuming your Flapjack's redis service is running on the
+# same machine as the Sensu server:
+#
+# {
+#   "flapjack": {
+#      "host": "localhost",
+#      "port": 6379,
+#      "db": "0"
+#   }
+# }
+#
+# Copyright 2014 Jive Software and contributors.
+#
+# Released under the same terms as Sensu (the MIT license); see LICENSE for details.
+
+module Sensu
+  module Extension
+    class Flapjack < Handler
+      def name
+        'flapjack'
+      end
+
+      def description
+        'sends sensu events to the flapjack redis queue'
+      end
+
+      def options
+        return @options if @options
+        @options = {
+          :host    => '127.0.0.1',
+          :port    => 6379,
+          :channel => 'events',
+          :db      => 0
+        }
+        if @settings[:flapjack].is_a?(Hash)
+          @options.merge!(@settings[:flapjack])
+        end
+        @options
+      end
+
+      def post_init
+        @redis = Sensu::Redis.connect(options)
+        @redis.on_error do |error|
+          @logger.warn('Flapjack Redis instance not available on ' + options[:host])
+        end
+      end
+
+      def run(event_data)
+        event = Oj.load(event_data)
+        client = event[:client]
+        check = event[:check]
+        tags = []
+        tags << client[:environment] unless client[:environment].nil?
+        unless check[:subscribers].nil? || check[:subscribers].empty?
+          tags.concat(client[:subscriptions] - (client[:subscriptions] - check[:subscribers]))
+        else
+          tags.concat(client[:subscriptions])
+        end
+        details = ['Address:' + client[:address]]
+        details << 'Tags:' + tags.join(',')
+        flapjack_event = {
+          :entity  => client[:name],
+          :check   => check[:name],
+          :type    => 'service',
+          :state   => Sensu::SEVERITIES[check[:status]] || 'unknown',
+          :summary => check[:output],
+          :details => details.join(' '),
+          :time    => check[:executed],
+          :tags    => tags
+        }
+        @redis.lpush(options[:channel], Oj.dump(flapjack_event))
+        yield 'sent an event to the flapjack redis queue', 0
+      end
+    end
+  end
+end
diff --git a/sensu/files/plugins/handlers/notification/graphite_event.rb b/sensu/files/plugins/handlers/notification/graphite_event.rb
new file mode 100644
index 0000000..03d0bfc
--- /dev/null
+++ b/sensu/files/plugins/handlers/notification/graphite_event.rb
@@ -0,0 +1,79 @@
+#!/usr/bin/env ruby
+#
+# Sensu - Graphite Event Handler
+#
+# This handler takes events and POSTs them to a graphite events URI.
+#
+# For configuration see: graphite_event.json
+#
+# See here for more details:
+#
+# * https://code.launchpad.net/~lucio.torre/graphite/add-events/+merge/69142
+#
+# Author: Rob Wilson <roobert@gmail.com>
+#
+# Released under the same terms as Sensu (the MIT license); see LICENSE
+# for details
+
+require 'rubygems' if RUBY_VERSION < '1.9.0'
+require 'sensu-handler'
+require 'net/http'
+require 'net/https'
+require 'uri'
+require 'json'
+
+class GraphiteEvent < Sensu::Handler
+  def post_event(uri, body)
+    uri          = URI.parse(uri)
+    req          = Net::HTTP::Post.new(uri.path)
+    sock         = Net::HTTP.new(uri.host, uri.port)
+    sock.use_ssl = true
+    req.body     = body
+
+    req.basic_auth(uri.user, uri.password) if uri.user
+
+    sock.start { |http| http.request(req) }
+  end
+
+  def event_status
+    case @event['check']['status']
+    when 0
+      'ok'
+    when 1
+      'warning'
+    when 2
+      'critical'
+    else
+      'unknown'
+    end
+  end
+
+  def handle
+    tags = [
+      'sensu',
+      'event',
+      event_status,
+      @event['client']['name'],
+      @event['check']['name']
+    ]
+
+    tags += settings['graphite_event']['tags'] if settings['graphite_event']['tags']
+
+    body = {
+      'what' => 'sensu_event',
+      'tags' => tags.join(','),
+      'data' => event_status,
+      'when' => Time.now.to_i
+    }
+
+    uri = settings['graphite_event']['server_uri']
+
+    begin
+      post_event(uri, body.to_json)
+    rescue => e
+      bail "failed to send event to #{uri}: #{e}"
+    end
+
+    puts "sent event to graphite: #{body.to_json}"
+  end
+end
diff --git a/sensu/files/plugins/handlers/notification/kedb.py b/sensu/files/plugins/handlers/notification/kedb.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/sensu/files/plugins/handlers/notification/kedb.py
diff --git a/sensu/files/plugins/handlers/notification/logstash.rb b/sensu/files/plugins/handlers/notification/logstash.rb
new file mode 100644
index 0000000..07c49dd
--- /dev/null
+++ b/sensu/files/plugins/handlers/notification/logstash.rb
@@ -0,0 +1,59 @@
+#!/usr/bin/env ruby
+#
+# Sensu Logstash Handler
+#
+# Heavily inspried (er, copied from) the GELF Handler writeen by
+# Joe Miller.
+#
+# Designed to take sensu events, transform them into logstah JSON events
+# and ship them to a redis server for logstash to index.  This also
+# generates a tag with either 'sensu-ALERT' or 'sensu-RECOVERY' so that
+# searching inside of logstash can be a little easier.
+#
+# Written by Zach Dunn -- @SillySophist or http://github.com/zadunn
+#
+# Released under the same terms as Sensu (the MIT license); see LICENSE
+# for details.
+
+require 'rubygems' if RUBY_VERSION < '1.9.0'
+require 'sensu-handler'
+require 'redis'
+require 'json'
+require 'socket'
+require 'time'
+
+class LogstashHandler < Sensu::Handler
+
+  def event_name
+    @event['client']['name'] + '/' + @event['check']['name']
+  end
+
+  def action_to_string
+    @event['action'].eql?('resolve') ? "RESOLVE" : "ALERT"
+  end
+
+  def handle
+    redis = Redis.new(:host => settings['logstash']['server'], :port => settings['logstash']['port'])
+    time = Time.now.utc.iso8601
+    logstash_msg = {
+      :@timestamp => time,
+      :@version => 1,
+      :source => ::Socket.gethostname,
+      :tags => ["sensu-#{action_to_string}"],
+      :message => @event['check']['output'],
+      :host          => @event['client']['name'],
+      :timestamp     => @event['check']['issued'],
+      :address       => @event['client']['address'],
+      :check_name    => @event['check']['name'],
+      :command       => @event['check']['command'],
+      :status        => @event['check']['status'],
+      :flapping      => @event['check']['flapping'],
+      :occurrences   => @event['occurrences'],
+      :flapping      => @event['check']['flapping'],
+      :occurrences   => @event['occurrences'],
+      :action        => @event['action']
+    }
+    logstash_msg[:type] = settings['logstash']['type'] if settings['logstash'].has_key?('type')
+    redis.lpush(settings['logstash']['list'], logstash_msg.to_json)
+  end
+end
diff --git a/sensu/files/plugins/handlers/notification/mail.py b/sensu/files/plugins/handlers/notification/mail.py
new file mode 100644
index 0000000..2c43a3b
--- /dev/null
+++ b/sensu/files/plugins/handlers/notification/mail.py
@@ -0,0 +1,69 @@
+#!/usr/bin/env python
+import sys
+import smtplib
+from optparse import OptionParser
+import email
+from email.mime.text import MIMEText
+import json
+from datetime import datetime
+try:
+    from sensu import Handler
+except ImportError:
+    print('You must have the sensu Python module i.e.: pip install sensu')
+    sys.exit(1)
+
+class MailHandler(Handler):
+    def handle(self):
+        subj = self.settings.get('mail', {}).get('subject', 'Sensu Alert')
+        to = self.settings.get('mail', {}).get('to', 'root@localhost')
+        from_addr = self.settings.get('mail', {}).get('from', 'sensu@localhost')
+        host = self.settings.get('mail', {}).get('host', 'localhost')
+        port = self.settings.get('mail', {}).get('port', 25)
+        user = self.settings.get('mail', {}).get('user', None)
+        password = self.settings.get('mail', {}).get('password', None)
+        self.send(subj, to, from_addr, host, port, user, password)
+
+    def send(self, subj=None, to_addr=None, from_addr=None, host='localhost',
+        port=25, user=None, password=None):
+        # attempt to parse sensu message
+        try:
+            data = self.event
+            client_host = data.get('client', {}).get('name')
+            check_name = data.get('check', {}).get('name')
+            check_action = data.get('action')
+            timestamp = data.get('check', {}).get('issued')
+            check_date = datetime.fromtimestamp(int(timestamp)).strftime('%Y-%m-%d %H:%M:%S')
+            parts = (
+                'Date: {0}'.format(check_date),
+                'Host: {0}'.format(client_host),
+                'Address: {0}'.format(data.get('client', {}).get('address')),
+                'Action: {0}'.format(check_action),
+                'Name: {0}'.format(check_name),
+                'Command: {0}'.format(data.get('check', {}).get('command')),
+                'Output: {0}'.format(data.get('check', {}).get('output')),
+            )
+            text = '\n'.join(parts)
+            subj = '{0} [{1}: {2} ({3})]'.format(subj, client_host, check_name, check_action)
+        except Exception, e:
+            text = str(e)
+        msg = MIMEText(text)
+        msg['Subject'] = subj
+        msg['To'] = to_addr
+        msg['From'] = from_addr
+        msg['Date'] = email.utils.formatdate(time.time(), localtime=True)
+        #s = smtplib.SMTP(host, int(port))
+
+        if self.settings.get('mail', {}).get('encryption', None) == 'ssl':
+            s = smtplib.SMTP_SSL(host, int(port))
+        else:
+            s = smtplib.SMTP(host, int(port))
+        s.set_debuglevel(True)
+        if user:
+            s.login(user, password)
+
+        s.sendmail(from_addr, [to_addr], msg.as_string())
+        s.quit()
+
+if __name__=='__main__':
+    m = MailHandler()
+    sys.exit(0)
diff --git a/sensu/files/plugins/handlers/notification/mailer.rb b/sensu/files/plugins/handlers/notification/mailer.rb
new file mode 100644
index 0000000..c591186
--- /dev/null
+++ b/sensu/files/plugins/handlers/notification/mailer.rb
@@ -0,0 +1,105 @@
+#!/usr/bin/env ruby
+#
+# Sensu Handler: mailer
+#
+# This handler formats alerts as mails and sends them off to a pre-defined recipient.
+#
+# Copyright 2012 Pal-Kristian Hamre (https://github.com/pkhamre | http://twitter.com/pkhamre)
+#
+# Released under the same terms as Sensu (the MIT license); see LICENSE
+# for details.
+
+require 'rubygems' if RUBY_VERSION < '1.9.0'
+require 'sensu-handler'
+gem 'mail', '~> 2.5.4'
+require 'mail'
+require 'timeout'
+
+# patch to fix Exim delivery_method: https://github.com/mikel/mail/pull/546
+module ::Mail
+  class Exim < Sendmail
+    def self.call(path, arguments, destinations, encoded_message)
+      popen "#{path} #{arguments}" do |io|
+        io.puts encoded_message.to_lf
+        io.flush
+      end
+    end
+  end
+end
+
+class Mailer < Sensu::Handler
+  def short_name
+    @event['client']['name'] + '/' + @event['check']['name']
+  end
+
+  def action_to_string
+   @event['action'].eql?('resolve') ? "RESOLVED" : "ALERT"
+  end
+
+  def handle
+    admin_gui = settings['mailer']['admin_gui'] || 'http://localhost:8080/'
+    mail_to = settings['mailer']['mail_to']
+    mail_from =  settings['mailer']['mail_from']
+
+    delivery_method = settings['mailer']['delivery_method'] || 'smtp'
+    smtp_address = settings['mailer']['smtp_address'] || 'localhost'
+    smtp_port = settings['mailer']['smtp_port'] || '25'
+    smtp_domain = settings['mailer']['smtp_domain'] || 'localhost.localdomain'
+
+    smtp_username = settings['mailer']['smtp_username'] || nil
+    smtp_password = settings['mailer']['smtp_password'] || nil
+    smtp_authentication = settings['mailer']['smtp_authentication'] || :plain
+    smtp_enable_starttls_auto = settings['mailer']['smtp_enable_starttls_auto'] == "false" ? false : true
+
+    playbook = "Playbook:  #{@event['check']['playbook']}" if @event['check']['playbook']
+    body = <<-BODY.gsub(/^\s+/, '')
+            #{@event['check']['output']}
+            Admin GUI: #{admin_gui}
+            Host: #{@event['client']['name']}
+            Timestamp: #{Time.at(@event['check']['issued'])}
+            Address:  #{@event['client']['address']}
+            Check Name:  #{@event['check']['name']}
+            Command:  #{@event['check']['command']}
+            Status:  #{@event['check']['status']}
+            Occurrences:  #{@event['occurrences']}
+            #{playbook}
+          BODY
+    subject = "#{action_to_string} - #{short_name}: #{@event['check']['notification']}"
+
+    Mail.defaults do
+      delivery_options = {
+        :address    => smtp_address,
+        :port       => smtp_port,
+        :domain     => smtp_domain,
+        :openssl_verify_mode => 'none',
+        :enable_starttls_auto => smtp_enable_starttls_auto
+      }
+
+      unless smtp_username.nil?
+        auth_options = {
+          :user_name        => smtp_username,
+          :password         => smtp_password,
+          :authentication   => smtp_authentication
+        }
+        delivery_options.merge! auth_options
+      end
+
+      delivery_method delivery_method.intern, delivery_options
+    end
+
+    begin
+      timeout 10 do
+        Mail.deliver do
+          to      mail_to
+          from    mail_from
+          subject subject
+          body    body
+        end
+
+        puts 'mail -- sent alert for ' + short_name + ' to ' + mail_to.to_s
+      end
+    rescue Timeout::Error
+      puts 'mail -- timed out while attempting to ' + @event['action'] + ' an incident -- ' + short_name
+    end
+  end
+end
diff --git a/sensu/files/plugins/handlers/notification/sccd.py b/sensu/files/plugins/handlers/notification/sccd.py
new file mode 100644
index 0000000..a41aebb
--- /dev/null
+++ b/sensu/files/plugins/handlers/notification/sccd.py
@@ -0,0 +1,111 @@
+#!/usr/bin/env python
+
+import sys
+import smtplib
+import requests
+import json
+from optparse import OptionParser
+from email.mime.text import MIMEText
+from datetime import datetime
+
+try:
+    from sensu import Handler
+except ImportError:
+    print('You must have the sensu Python module i.e.: pip install sensu')
+    sys.exit(1)
+
+class SccdHandler(Handler):
+
+    def handle(self):
+        mail_subj = self.settings.get('sccd', {}).get('mail_subject', 'Sensu Alert')
+        mail_to = self.settings.get('sccd', {}).get('sccd_email', 'root@localhost')
+        mail_from_addr = self.settings.get('sccd', {}).get('mail_user', 'sensu@localhost')
+        mail_host = self.settings.get('sccd', {}).get('mail_host', 'localhost')
+        mail_port = self.settings.get('sccd', {}).get('mail_port', 25)
+        mail_user = self.settings.get('sccd', {}).get('mail_user', None)
+        mail_password = self.settings.get('sccd', {}).get('mail_password', None)
+        print 'SENSU_EVENT=========================='
+        print self.event
+        self.check_kedb()
+        if self.event.get('occurences') < 2 and self.event.get('action') == 'create':
+            self.send_mail(mail_subj, mail_to, mail_from_addr, mail_host, mail_port, mail_user, mail_password)
+        else:
+            if self.event.get('action') != 'create':
+                self.send_mail(mail_subj, mail_to, mail_from_addr, mail_host, mail_port, mail_user, mail_password)            
+
+    def check_kedb(self):
+        host = self.settings.get('sccd', {}).get('kedb_host', 'localhost')
+        port = self.settings.get('sccd', {}).get('kedb_port', 25)
+        url = 'http://%s:%s/handle/' % (host, port)
+        print 'URL============================='
+        print url
+        payload = {
+            'event': self.event,
+        }
+        print 'PAYLOAD============================='
+        print payload
+        response = requests.post(url, data=json.dumps(payload))
+        print 'RESPONSE============================='
+        print response
+        print 'RESPONSE-DATA=========================='
+        self.event = response.json()
+        print self.event
+#        return data
+
+    def send_mail(self, subj=None, to_addr=None, from_addr=None, host='localhost',
+        port=25, user=None, password=None):
+        # attempt to parse sensu message
+        try:
+            data = self.event
+            client_host = data.get('client', {}).get('name')
+            check_name = data.get('check', {}).get('name')
+            check_action = data.get('action')
+            timestamp = data.get('check', {}).get('issued')
+            check_date = datetime.fromtimestamp(int(timestamp)).strftime('%Y-%m-%d %H:%M:%S')
+            if data.get('known_error'):
+                template_id = 'CL-%s-%s' % (data.get('level'), data.get('severity'))
+                applies_to = 'incident'
+            else:
+                template_id = 'CL-L2-INT'
+                applies_to = 'incident'
+            parts = (
+                '<MAXIMOEMAILCONTENT>',
+                '  <LSNRACTION>%s</LSNRACTION>' % check_action.upper(),
+                '  <LSNRAPPLIESTO>%s</LSNRAPPLIESTO>' % applies_to.upper(),
+                '  <TICKETID><![CDATA[&AUTOKEY&]]></TICKETID>',
+                '  <CLASS>%s</CLASS>' % applies_to.upper(),
+                '  <DESCRIPTION>%s @ %s</DESCRIPTION>' % (check_name, client_host),
+                '  <DESCRIPTION_LONGDESCRIPTION>%s: %s</DESCRIPTION_LONGDESCRIPTION>' % (check_date, data.get('check', {}).get('output')),
+                '  <TEMPLATEID>%s</TEMPLATEID>' % template_id.upper(),
+                '  <SITEID>%s</SITEID>' % self.settings.get('sccd', {}).get('sccd_site', 'default_site'),
+                '</MAXIMOEMAILCONTENT>',
+            )
+            text = '\n'.join(parts)
+            subj = '{0} [{1}: {2} ({3})]'.format(subj, client_host, check_name, check_action)
+        except Exception, e:
+            text = str(e)
+
+        print 'TEXT============================='
+        print text
+
+        msg = MIMEText(text)
+        msg['Subject'] = subj
+        msg['To'] = to_addr
+        msg['From'] = from_addr
+
+        if self.settings.get('sccd', {}).get('mail_encryption', None) == 'ssl':
+            s = smtplib.SMTP_SSL(host, int(port))
+        else:
+            s = smtplib.SMTP(host, int(port))
+        s.set_debuglevel(True)
+
+        if user:
+            s.login(user, password)
+
+        s.sendmail(from_addr, [to_addr], msg.as_string())
+        print s
+        s.quit()
+
+if __name__=='__main__':
+    m = SccdHandler()
+    sys.exit(0)
diff --git a/sensu/files/plugins/handlers/notification/slack.rb b/sensu/files/plugins/handlers/notification/slack.rb
new file mode 100644
index 0000000..b80c7d0
--- /dev/null
+++ b/sensu/files/plugins/handlers/notification/slack.rb
@@ -0,0 +1,132 @@
+#!/usr/bin/env ruby
+
+# Copyright 2014 Dan Shultz and contributors.
+#
+# Released under the same terms as Sensu (the MIT license); see LICENSE
+# for details.
+#
+# In order to use this plugin, you must first configure an incoming webhook
+# integration in slack. You can create the required webhook by visiting
+# https://{your team}.slack.com/services/new/incoming-webhook
+#
+# After you configure your webhook, you'll need the webhook URL from the integration.
+
+require 'sensu-handler'
+require 'json'
+
+class Slack < Sensu::Handler
+  option :json_config,
+         description: 'Configuration name',
+         short: '-j JSONCONFIG',
+         long: '--json JSONCONFIG',
+         default: 'slack'
+
+  def slack_webhook_url
+    get_setting('webhook_url')
+  end
+
+  def slack_channel
+    get_setting('channel')
+  end
+
+  def slack_proxy_addr
+    get_setting('proxy_addr')
+  end
+
+  def slack_proxy_port
+    get_setting('proxy_port')
+  end
+
+  def slack_message_prefix
+    get_setting('message_prefix')
+  end
+
+  def slack_bot_name
+    get_setting('bot_name')
+  end
+
+  def slack_surround
+    get_setting('surround')
+  end
+
+  def markdown_enabled
+    get_setting('markdown_enabled') || true
+  end
+
+  def incident_key
+    @event['client']['name'] + '/' + @event['check']['name']
+  end
+
+  def get_setting(name)
+    settings[config[:json_config]][name]
+  end
+
+  def handle
+    description = @event['check']['notification'] || build_description
+    post_data("*Check*\n#{incident_key}\n\n*Description*\n#{description}")
+  end
+
+  def build_description
+    [
+      @event['check']['output'].strip,
+      @event['client']['address'],
+      @event['client']['subscriptions'].join(',')
+    ].join(' : ')
+  end
+
+  def post_data(notice)
+    uri = URI(slack_webhook_url)
+
+    if (defined?(slack_proxy_addr)).nil?
+      http = Net::HTTP.new(uri.host, uri.port)
+    else
+      http = Net::HTTP::Proxy(slack_proxy_addr, slack_proxy_port).new(uri.host, uri.port)
+    end
+
+    http.use_ssl = true
+
+    req = Net::HTTP::Post.new("#{uri.path}?#{uri.query}")
+    text = slack_surround ? slack_surround + notice + slack_surround : notice
+    req.body = payload(text).to_json
+
+    response = http.request(req)
+    verify_response(response)
+  end
+
+  def verify_response(response)
+    case response
+    when Net::HTTPSuccess
+      true
+    else
+      fail response.error!
+    end
+  end
+
+  def payload(notice)
+    {
+      icon_url: 'http://sensuapp.org/img/sensu_logo_large-c92d73db.png',
+      attachments: [{
+        text: [slack_message_prefix, notice].compact.join(' '),
+        color: color
+      }]
+    }.tap do |payload|
+      payload[:channel] = slack_channel if slack_channel
+      payload[:username] = slack_bot_name if slack_bot_name
+      payload[:attachments][0][:mrkdwn_in] = %w(text) if markdown_enabled
+    end
+  end
+
+  def color
+    color = {
+      0 => '#36a64f',
+      1 => '#FFCC00',
+      2 => '#FF0000',
+      3 => '#6600CC'
+    }
+    color.fetch(check_status.to_i)
+  end
+
+  def check_status
+    @event['check']['status']
+  end
+end
diff --git a/sensu/files/plugins/handlers/notification/statsd.py b/sensu/files/plugins/handlers/notification/statsd.py
new file mode 100644
index 0000000..1eec960
--- /dev/null
+++ b/sensu/files/plugins/handlers/notification/statsd.py
@@ -0,0 +1,41 @@
+#!/usr/bin/env python
+import sys
+import smtplib
+from optparse import OptionParser
+from email.mime.text import MIMEText
+import json
+from datetime import datetime
+try:
+    from sensu import Handler
+except ImportError:
+    print('You must have the sensu Python module i.e.: pip install sensu')
+    sys.exit(1)
+
+try:
+    import statsd
+except ImportError:
+    print('You must have the Statsd Python module i.e.: \
+        pip install python-statsd==1.6.0')
+    sys.exit(1)
+
+
+class StatsdHandler(Handler):
+
+    def handle(self):
+        statsd_connection = statsd.Connection(
+            host=self.settings.get('statsd').get('host', '127.0.0.1'),
+            port=self.settings.get('statsd').get('port', 8125),
+            sample_rate=self.settings.get('statsd').get('sample_rate', 1),
+        )
+        meter = statsd.Gauge(
+            self.settings.get('statsd').get('prefix', 'sensu'),
+            statsd_connection)
+
+        key = '{}.{}'.format(self.event['client']['name'].replace(
+            '.', '_'), self.event['check']['name'].replace('.', '_'))
+
+        meter.send(key, self.event['check']['status'])
+
+if __name__ == '__main__':
+    m = StatsdHandler()
+    sys.exit(0)
diff --git a/sensu/files/plugins/mutators/kedb.py b/sensu/files/plugins/mutators/kedb.py
new file mode 100644
index 0000000..0039013
--- /dev/null
+++ b/sensu/files/plugins/mutators/kedb.py
@@ -0,0 +1,40 @@
+#!/usr/bin/env python
+
+import sys
+import requests
+import json
+
+event = json.load(sys.stdin)
+
+#if event.get('occurences') == 1:
+
+host = event.get('kedb_host', 'localhost')
+port = event.get('kedb_port', 6754)
+url = 'http://%s:%s/handle/' % (host, port)
+#print 'URL============================='
+#print url
+payload = {
+    'event': event,
+}
+
+file = open("/tmp/payload", "w")
+file.write(json.dumps(payload))
+file.close
+
+#print 'PAYLOAD============================='
+#print payload
+response = requests.post(url, data=json.dumps(payload))
+#print 'RESPONSE============================='
+#print response
+#print 'RESPONSE-DATA=========================='
+
+file = open("/tmp/payload_response", "w")
+file.write(json.dumps(response.json()))
+file.close
+
+if response.status_code == 200:
+    event = response.json()
+
+print json.dumps(event)
+
+sys.exit(0)
diff --git a/sensu/files/profile b/sensu/files/profile
new file mode 100644
index 0000000..3c8fa4c
--- /dev/null
+++ b/sensu/files/profile
@@ -0,0 +1,6 @@
+export PATH=$PATH:/usr/sensu
+{% if grains.osarch == 'amd64' %}
+export PATH=$PATH:/usr/lib64/nagios/plugins
+{% else %}
+export PATH=$PATH:/usr/lib/nagios/plugins
+{% endif %}
\ No newline at end of file
diff --git a/sensu/files/rabbitmq.json b/sensu/files/rabbitmq.json
new file mode 100644
index 0000000..c35ff1d
--- /dev/null
+++ b/sensu/files/rabbitmq.json
@@ -0,0 +1,21 @@
+{%- from "sensu/map.jinja" import server with context %}
+{%- from "sensu/map.jinja" import client with context %}
+{
+  {%- if pillar.sensu.server is defined %}
+  "rabbitmq": {
+    "host": "{{ server.message_queue.host }}",
+    "port": {{ server.message_queue.port }},
+    "user": "{{ server.message_queue.user }}",
+    "password": "{{ server.message_queue.password }}",
+    "vhost": "{{ server.message_queue.virtual_host }}"
+  }
+  {%- else %}
+  "rabbitmq": {
+    "host": "{{ client.message_queue.host }}",
+    "port": {{ client.message_queue.port }},
+    "user": "{{ client.message_queue.user }}",
+    "password": "{{ client.message_queue.password }}",
+    "vhost": "{{ client.message_queue.virtual_host }}"
+  }
+  {%- endif %}
+}
\ No newline at end of file
diff --git a/sensu/files/redis.json b/sensu/files/redis.json
new file mode 100644
index 0000000..5fbc088
--- /dev/null
+++ b/sensu/files/redis.json
@@ -0,0 +1,7 @@
+{%- from "sensu/map.jinja" import server with context -%}
+{
+  "redis": {
+    "host": "{{ server.database.host }}",
+    "port": {{ server.database.port }}
+  }
+}
\ No newline at end of file
diff --git a/sensu/files/sensu.conf b/sensu/files/sensu.conf
new file mode 100644
index 0000000..d9ce274
--- /dev/null
+++ b/sensu/files/sensu.conf
@@ -0,0 +1,25 @@
+{%- from "nginx/map.jinja" import server with context -%}
+local_sensu_server_proc:
+  command: "PATH=$PATH:/usr/lib64/nagios/plugins:/usr/lib/nagios/plugins check_procs -C sensu-server -u sensu -c 1:1"
+  interval: 60
+  occurrences: 1
+  subscribers:
+  - local-sensu-server
+local_sensu_api_proc:
+  command: "PATH=$PATH:/usr/lib64/nagios/plugins:/usr/lib/nagios/plugins check_procs -C sensu-api -u sensu -c 1:1"
+  interval: 60
+  occurrences: 1
+  subscribers:
+  - local-sensu-server
+local_sensu_client_proc:
+  command: "PATH=$PATH:/usr/lib64/nagios/plugins:/usr/lib/nagios/plugins check_procs -C sensu-client -u sensu -c 1:1"
+  interval: 60
+  occurrences: 1
+  subscribers:
+  - local-sensu-client
+local_sensu_dashboard_proc:
+  command: "PATH=$PATH:/usr/lib64/nagios/plugins:/usr/lib/nagios/plugins check_procs -C uchiwa -u uchiwa -c 1:1"
+  interval: 60
+  occurrences: 1
+  subscribers:
+  - local-sensu-dashboard
\ No newline at end of file
diff --git a/sensu/files/sudoer b/sensu/files/sudoer
new file mode 100644
index 0000000..68be5a0
--- /dev/null
+++ b/sensu/files/sudoer
@@ -0,0 +1,5 @@
+
+sensu ALL=(ALL) NOPASSWD: /usr/bin/contrail-status
+sensu ALL=(ALL) NOPASSWD: /etc/sensu/plugins/check_supervisor_proc.py
+sensu ALL=(ALL) NOPASSWD: /usr/bin/supervisorctl
+#
\ No newline at end of file
diff --git a/sensu/files/uchiwa.json b/sensu/files/uchiwa.json
new file mode 100644
index 0000000..54a2011
--- /dev/null
+++ b/sensu/files/uchiwa.json
@@ -0,0 +1,20 @@
+{%- from "sensu/map.jinja" import dashboard with context -%}
+{
+  "sensu": [
+    {
+      "name": "Sensu",
+      "host": "localhost",
+      "ssl": false,
+      "port": 4567,
+      "path": "",
+      "timeout": 5000
+    }
+  ],
+  "uchiwa": {
+    "host": "{{ dashboard.bind.address }}",
+    "port": {{ dashboard.bind.port }},
+    "user": "{{ dashboard.admin.username }}",
+    "pass": "{{ dashboard.admin.password }}",
+    "refresh": 5
+  }
+}
\ No newline at end of file
diff --git a/sensu/init.sls b/sensu/init.sls
new file mode 100644
index 0000000..d1122d4
--- /dev/null
+++ b/sensu/init.sls
@@ -0,0 +1,13 @@
+
+{%- if pillar.sensu is defined %}
+include:
+{%- if pillar.sensu.server is defined %}
+- sensu.server
+{%- endif %}
+{%- if pillar.sensu.client is defined %}
+- sensu.client
+{%- endif %}
+{%- if pillar.sensu.dashboard is defined %}
+- sensu.dashboard
+{%- endif %}
+{%- endif %}
diff --git a/sensu/map.jinja b/sensu/map.jinja
new file mode 100644
index 0000000..4f3a550
--- /dev/null
+++ b/sensu/map.jinja
@@ -0,0 +1,60 @@
+{% set services = [
+  'billometer',
+  'cinder',
+  'ceilometer',
+  'gitlab',
+  'glance',
+  'haproxy',
+  'heat',
+  'horizon',
+  'kedb',
+  'keystone',
+  'linux',
+  'memcached',
+  'mysql',
+  'nginx',
+  'nova',
+  'ntp',
+  'opencontrail',
+  'openssh',
+  'postgresql',
+  'rabbitmq',
+  'salt',
+  'sensu',
+  'supervisor',
+] %}
+
+{% set server = salt['grains.filter_by']({
+    'Debian': {
+        'pkgs': ['sensu', 'python-pip'],
+        'supported_services': services,
+        'mine_checks': True,
+    },
+    'RedHat': {
+        'pkgs': ['sensu'],
+        'supported_services': services,
+        'mine_checks': True,
+    },
+}, merge=salt['pillar.get']('sensu:server')) %}
+
+{% set client = salt['grains.filter_by']({
+    'Debian': {
+        'pkgs': ['sensu', 'nagios-plugins-basic', 'curl'],
+        'supported_services': services,
+        'plugin': {}
+    },
+    'RedHat': {
+        'pkgs': ['sensu', 'nagios-plugins-ping', 'nagios-plugins-procs', 'nagios-plugins-load', 'nagios-plugins-swap', 'nagios-plugins-ntp', 'nagios-plugins-http', 'nagios-plugins-disk', 'net-snmp-utils', 'pynag'],
+        'supported_services': services,
+        'plugin': {}
+    },
+}, merge=salt['pillar.get']('sensu:client')) %}
+
+{% set dashboard = salt['grains.filter_by']({
+    'Debian': {
+        'pkgs': ['uchiwa',],
+    },
+    'RedHat': {
+        'pkgs': ['uchiwa'],
+    },
+}, merge=salt['pillar.get']('sensu:dashboard')) %}
diff --git a/sensu/server.sls b/sensu/server.sls
new file mode 100644
index 0000000..c4d5663
--- /dev/null
+++ b/sensu/server.sls
@@ -0,0 +1,152 @@
+{%- from "sensu/map.jinja" import server with context %}
+{%- if server.enabled %}
+
+include:
+- sensu._common
+
+sensu_server_packages:
+  pkg.installed:
+  - names: {{ server.pkgs }}
+  - require_in:
+    - file: /etc/sensu
+
+sensu_server_pip:
+  pip.installed:
+  - name: sensu
+  - require:
+    - pkg: sensu_server_packages
+
+{%- if server.mine_checks %}
+
+{%- set client_checks = {} %}
+
+{%- for node_name, node_grains in salt['mine.get']('*', 'grains.items').iteritems() %}
+
+{%- set rowloop = loop %}
+
+{%- if node_grains.get('sensu_checks', {}) is not none %}
+
+{%- for check_name, check in node_grains.get('sensu_checks', {}).iteritems() %}
+
+/etc/sensu/conf.d/check_{{ check_name }}.json_{{ rowloop.index }}-{{ loop.index }}:
+  file.managed:
+  - name: /etc/sensu/conf.d/check_{{ check_name }}.json
+  - source: salt://sensu/files/check.json
+  - template: jinja
+  - defaults:
+    check_name: "{{ check_name }}"
+    check: {{ check|yaml }}
+  - require:
+    - pkg: sensu_server_packages
+  - watch_in:
+    - service: service_sensu_server
+    - service: service_sensu_api
+
+{%- endfor %}
+
+{%- endif %}
+
+{%- endfor %}
+
+{%- endif %}
+
+{%- for check in server.get('checks', []) %}
+
+/etc/sensu/conf.d/check_{{ check.name }}.json:
+  file.managed:
+  - source: salt://sensu/files/check_manual.json
+  - template: jinja
+  - defaults:
+    check_name: "{{ check.name }}"
+  - require:
+    - pkg: sensu_server_packages
+  - watch_in:
+    - service: service_sensu_server
+    - service: service_sensu_api
+
+{%- endfor %}
+
+{%- for mutator in server.get('mutators', []) %}
+
+/etc/sensu/conf.d/mutator_{{ mutator.name }}.json:
+  file.managed:
+  - source: salt://sensu/files/mutator.json
+  - template: jinja
+  - defaults:
+    mutator_name: "{{ mutator.name }}"
+  - require:
+    - file: /etc/sensu/config.json
+    - pkg: sensu_packages
+  - watch_in:
+    - service: service_sensu_server
+    - service: service_sensu_api
+
+{%- endfor %}
+
+{%- for handler_name, handler in server.get('handler', {}).iteritems() %}
+
+{%- if handler_name in ['default', 'flapjack', 'mail', 'sccd', 'stdout', 'statsd', 'slack']  %}
+
+{%- include "sensu/server/_handler_"+handler_name+".sls" %}
+
+{%- endif %}
+
+{%- endfor %}
+
+/etc/sensu/conf.d/api.json:
+  file.managed:
+  - source: salt://sensu/files/api.json
+  - template: jinja
+  - mode: 644
+  - require:
+    - file: /etc/sensu
+  - watch_in:
+    - service: service_sensu_server
+    - service: service_sensu_api
+
+/etc/sensu/conf.d/redis.json:
+  file.managed:
+  - source: salt://sensu/files/redis.json
+  - template: jinja
+  - mode: 644
+  - require:
+    - file: /etc/sensu
+  - watch_in:
+    - service: service_sensu_server
+    - service: service_sensu_api
+
+service_sensu_server:
+  service.running:
+  - name: sensu-server
+  - enable: true
+
+service_sensu_api:
+  service.running:
+  - name: sensu-api
+  - enable: true
+
+/srv/sensu/handlers:
+  file.recurse:
+  - clean: true
+  - source: salt://sensu/files/plugins/handlers
+  - user: sensu
+  - group: sensu
+  - file_mode: 755
+  - dir_mode: 755
+  - makedirs: true
+  - require:
+    - file: /srv/sensu
+
+/srv/sensu/mutators:
+  file.recurse:
+  - clean: true
+  - source: salt://sensu/files/plugins/mutators
+  - user: sensu
+  - group: sensu
+  - file_mode: 755
+  - dir_mode: 755
+  - makedirs: true
+  - require:
+    - file: /srv/sensu
+
+{%- endif %}
\ No newline at end of file
diff --git a/sensu/server/_handler_default.sls b/sensu/server/_handler_default.sls
new file mode 100644
index 0000000..b298507
--- /dev/null
+++ b/sensu/server/_handler_default.sls
@@ -0,0 +1,10 @@
+
+/etc/sensu/conf.d/handler_{{ handler_name }}.json:
+  file.managed:
+  - source: salt://sensu/files/handlers/{{ handler_name }}.json
+  - template: jinja
+  - defaults:
+    handler_name: "{{ handler_name }}"
+  - watch_in:
+    - service: service_sensu_server
+    - service: service_sensu_api
diff --git a/sensu/server/_handler_flapjack.sls b/sensu/server/_handler_flapjack.sls
new file mode 100644
index 0000000..42c6288
--- /dev/null
+++ b/sensu/server/_handler_flapjack.sls
@@ -0,0 +1,19 @@
+
+/etc/sensu/conf.d/flapjack.json:
+  file.managed:
+  - source: salt://sensu/files/handlers/{{ handler_name }}.json
+  - template: jinja
+  - defaults:
+    handler_name: "{{ handler_name }}"
+  - watch_in:
+    - service: service_sensu_server
+    - service: service_sensu_api
+
+/etc/sensu/extensions/handlers/flapjack.rb:
+  file.managed:
+  - source: salt://sensu/files/plugins/handlers/flapjack.rb
+  - mode: 660
+  - user: sensu
+  - watch_in:
+    - service: service_sensu_server
+    - service: service_sensu_api
diff --git a/sensu/server/_handler_mail.sls b/sensu/server/_handler_mail.sls
new file mode 100644
index 0000000..cbe98f8
--- /dev/null
+++ b/sensu/server/_handler_mail.sls
@@ -0,0 +1,31 @@
+
+/etc/sensu/conf.d/mail.json:
+  file.managed:
+  - source: salt://sensu/files/handlers/mail.json
+  - template: jinja
+  - defaults:
+    handler_name: "{{ handler_name }}"
+    handler_setting: "config"
+  - watch_in:
+    - service: service_sensu_server
+    - service: service_sensu_api
+
+/etc/sensu/conf.d/handler_mail.json:
+  file.managed:
+  - source: salt://sensu/files/handlers/mail.json
+  - template: jinja
+  - defaults:
+    handler_name: "{{ handler_name }}"
+    handler_setting: "handler"
+  - watch_in:
+    - service: service_sensu_server
+    - service: service_sensu_api
+
+/etc/sensu/handlers/mail.py:
+  file.managed:
+  - source: salt://sensu/files/plugins/handlers/notification/mail.py
+  - mode: 700
+  - user: sensu
+  - watch_in:
+    - service: service_sensu_server
+    - service: service_sensu_api
\ No newline at end of file
diff --git a/sensu/server/_handler_sccd.sls b/sensu/server/_handler_sccd.sls
new file mode 100644
index 0000000..7a6441c
--- /dev/null
+++ b/sensu/server/_handler_sccd.sls
@@ -0,0 +1,31 @@
+
+/etc/sensu/conf.d/sccd.json:
+  file.managed:
+  - source: salt://sensu/files/handlers/sccd.json
+  - template: jinja
+  - defaults:
+    handler_name: "{{ handler_name }}"
+    handler_setting: "config"
+  - watch_in:
+    - service: service_sensu_server
+    - service: service_sensu_api
+
+/etc/sensu/conf.d/handler_sccd.json:
+  file.managed:
+  - source: salt://sensu/files/handlers/sccd.json
+  - template: jinja
+  - defaults:
+    handler_name: "{{ handler_name }}"
+    handler_setting: "handler"
+  - watch_in:
+    - service: service_sensu_server
+    - service: service_sensu_api
+
+/etc/sensu/handlers/sccd.py:
+  file.managed:
+  - source: salt://sensu/files/plugins/handlers/notification/sccd.py
+  - mode: 700
+  - user: sensu
+  - watch_in:
+    - service: service_sensu_server
+    - service: service_sensu_api
\ No newline at end of file
diff --git a/sensu/server/_handler_slack.sls b/sensu/server/_handler_slack.sls
new file mode 100644
index 0000000..994e2d6
--- /dev/null
+++ b/sensu/server/_handler_slack.sls
@@ -0,0 +1,31 @@
+
+/etc/sensu/conf.d/slack.json:
+  file.managed:
+  - source: salt://sensu/files/handlers/slack.json
+  - template: jinja
+  - defaults:
+    handler_name: "{{ handler_name }}"
+    handler_setting: "config"
+  - watch_in:
+    - service: service_sensu_server
+    - service: service_sensu_api
+
+/etc/sensu/conf.d/handler_slack.json:
+  file.managed:
+  - source: salt://sensu/files/handlers/slack.json
+  - template: jinja
+  - defaults:
+    handler_name: "{{ handler_name }}"
+    handler_setting: "handler"
+  - watch_in:
+    - service: service_sensu_server
+    - service: service_sensu_api
+
+/etc/sensu/handlers/slack.rb:
+  file.managed:
+  - source: salt://sensu/files/plugins/handlers/notification/slack.rb
+  - mode: 700
+  - user: sensu
+  - watch_in:
+    - service: service_sensu_server
+    - service: service_sensu_api
\ No newline at end of file
diff --git a/sensu/server/_handler_statsd.sls b/sensu/server/_handler_statsd.sls
new file mode 100644
index 0000000..8412d5a
--- /dev/null
+++ b/sensu/server/_handler_statsd.sls
@@ -0,0 +1,37 @@
+
+python-statsd:
+  pip.installed:
+    - name: python-statsd == 1.6.0
+
+/etc/sensu/conf.d/statsd.json:
+  file.managed:
+  - source: salt://sensu/files/handlers/statsd.json
+  - template: jinja
+  - defaults:
+    handler_name: "{{ handler_name }}"
+    handler_setting: "config"
+  - watch_in:
+    - service: service_sensu_server
+    - service: service_sensu_api
+  - require:
+    - pip: python-statsd
+
+/etc/sensu/conf.d/handler_statsd.json:
+  file.managed:
+  - source: salt://sensu/files/handlers/statsd.json
+  - template: jinja
+  - defaults:
+    handler_name: "{{ handler_name }}"
+    handler_setting: "handler"
+  - watch_in:
+    - service: service_sensu_server
+    - service: service_sensu_api
+
+/etc/sensu/handlers/statsd_handler.py:
+  file.managed:
+  - source: salt://sensu/files/plugins/handlers/notification/statsd.py
+  - mode: 700
+  - user: sensu
+  - watch_in:
+    - service: service_sensu_server
+    - service: service_sensu_api
\ No newline at end of file
diff --git a/sensu/server/_handler_stdout.sls b/sensu/server/_handler_stdout.sls
new file mode 100644
index 0000000..1371cb3
--- /dev/null
+++ b/sensu/server/_handler_stdout.sls
@@ -0,0 +1,11 @@
+
+/etc/sensu/conf.d/handler_stdout.json:
+  file.managed:
+  - source: salt://sensu/files/handlers/stdout.json
+  - template: jinja
+  - defaults:
+    handler_name: "{{ handler_name }}"
+    handler_setting: "handler"
+  - watch_in:
+    - service: service_sensu_server
+    - service: service_sensu_api
