add new checks smtp,imap,apache
diff --git a/sensu/files/checks/check-smtp.rb b/sensu/files/checks/check-smtp.rb
new file mode 100755
index 0000000..1be35e3
--- /dev/null
+++ b/sensu/files/checks/check-smtp.rb
@@ -0,0 +1,75 @@
+#!/usr/bin/env ruby
+#
+# check-smtp
+#
+# DESCRIPTION:
+# Check SMTP connection to a server
+#
+# OUTPUT:
+# plain text
+#
+# PLATFORMS:
+# Linux
+#
+# DEPENDENCIES:
+# gem: sensu-plugin
+#
+# USAGE:
+# check-smtp -h HOST [-p PORT] [-H HELO ]
+#
+# NOTES:
+#
+# LICENSE:
+# Oasiswork <dev@oasiswork.fr>
+# Released under the same terms as Sensu (the MIT license); see LICENSE
+# for details.
+#
+# AUTHORS:
+# Nicolas BRISAC <nbrisac@oasiswork.fr>
+
+require 'sensu-plugin/check/cli'
+require 'net/smtp'
+
+class CheckSMTP < Sensu::Plugin::Check::CLI
+ option :host,
+ short: '-h HOST',
+ description: 'SMTP host to connect to',
+ required: true
+
+ option :port,
+ short: '-p PORT',
+ description: 'SMTP port to connect to',
+ default: 25
+
+ option :tls,
+ long: '--tls',
+ description: 'Enable STARTTLS',
+ boolean: true
+
+ option :tls_verify,
+ long: '--verify-peer-cert',
+ description: 'Verify peer certificate during TLS session',
+ boolean: true
+
+ def run
+ smtp = Net::SMTP.new(config[:host], config[:port])
+ ctx = OpenSSL::SSL::SSLContext.new
+ if config[:tls_verify]
+ ctx.verify_mode = OpenSSL::SSL::VERIFY_PEER
+ else
+ ctx.verify_mode = OpenSSL::SSL::VERIFY_NONE
+ end
+
+ begin
+ if config[:tls]
+ smtp.enable_starttls(ctx)
+ end
+ smtp.start(Socket.gethostname)
+ smtp.finish()
+ rescue Exception => e
+ critical "Connection failed: #{e.message}"
+ end
+
+ ok
+ end
+end
diff --git a/sensu/files/checks/check_apache2.sh b/sensu/files/checks/check_apache2.sh
new file mode 100755
index 0000000..7723e8e
--- /dev/null
+++ b/sensu/files/checks/check_apache2.sh
@@ -0,0 +1,294 @@
+#!/bin/sh
+
+# 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 2 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, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+PROGNAME=`basename $0`
+VERSION="Version 1.3,"
+AUTHOR="2009, Mike Adolphs (http://www.matejunkie.com/)"
+
+print_version() {
+ echo "$VERSION $AUTHOR"
+}
+
+print_help() {
+ print_version $PROGNAME $VERSION
+ echo ""
+ echo "Description:"
+ echo "$PROGNAME is a Nagios plugin to check the Apache's server status."
+ echo "It monitors requests per second, bytes per second/request, "
+ echo "amount of busy/idle workers and its CPU load."
+ echo ""
+ echo "Example call:"
+ echo "./$PROGNAME -H localhost -P 80 -t 3 -b /usr/sbin -p /var/run \\"
+ echo "-n apache2.pid -s status_page [-S] [-R] [-wr] 100 [-cr] 250"
+ echo ""
+ echo "Options:"
+ echo " -H|--hostname)"
+ echo " Sets the hostname. Default is: localhost"
+ echo " -P|--port)"
+ echo " Sets the port. Default is: 80"
+ echo " -t|--timeout)"
+ echo " Sets a timeout within the server's status page must've been"
+ echo " accessed. Otherwise the check will go into an error state."
+ echo " Default is: 3"
+ echo " -b|--binary-path)"
+ echo " Sets the path to the apache binary. Used for getting Apache's"
+ echo " CPU load. Default is: /usr/sbin"
+ echo " -p|--pid-path)"
+ echo " Path to Apache's pid file. Default is: /var/run"
+ echo " -n|--pid-name)"
+ echo " Name of Apache's pid file. Default is: apache2.pid"
+ echo " -s|--status-page)"
+ echo " Defines the name of the status page. Default is: server-status"
+ echo " -R|--remote-server)"
+ echo " Disabled the pid check so that remote Apaches can be queried."
+ echo " Default is: off"
+ echo " -S|--secure)"
+ echo " Enables HTTPS (no certificate check though). Default is: off"
+ echo " -wr|--warning-req)"
+ echo " Sets a warning level for requests per second. Default is: off"
+ echo " -cr|--critical-req)"
+ echo " Sets a critical level for requests per second. Default is: off"
+ exit $ST_UK
+}
+
+ST_OK=0
+ST_WR=1
+ST_CR=2
+ST_UK=3
+
+hostname="localhost"
+port=80
+remote_srv=0
+path_binary="/usr/sbin"
+path_pid="/var/run"
+name_pid="apache2.pid"
+status_page="server-status"
+timeout=3
+secure=0
+running=0
+
+wcdiff_req=0
+wclvls_req=0
+
+while test -n "$1"; do
+ case "$1" in
+ --help|-h)
+ print_help
+ exit $ST_UK
+ ;;
+ --version|-v)
+ print_version $PROGNAME $VERSION
+ exit $ST_UK
+ ;;
+ --hostname|-H)
+ hostname=$2
+ shift
+ ;;
+ --port|-P)
+ port=$2
+ shift
+ ;;
+ --timeout|-t)
+ timeout=$2
+ shift
+ ;;
+ --remote-server|-R)
+ remote_srv=1
+ ;;
+ --binary_path|-b)
+ path_binary=$2
+ shift
+ ;;
+ --pid_path|-p)
+ path_pid=$2
+ shift
+ ;;
+ --pid_name|-n)
+ name_pid=$2
+ shift
+ ;;
+ --status-page|-s)
+ status_page=$2
+ shift
+ ;;
+ --secure|-S)
+ secure=1
+ ;;
+ --warning-req|-wr)
+ warn_req=$2
+ shift
+ ;;
+ --critical-req|-cr)
+ crit_req=$2
+ shift
+ ;;
+ *)
+ echo "Unknown argument: $1"
+ print_help
+ exit $ST_UK
+ ;;
+ esac
+ shift
+done
+
+# check functions
+val_wcdiff_req() {
+ if [ ! -z "$warn_req" -a ! -z "$crit_req" ]
+ then
+ wclvls_req=1
+
+ if [ ${warn_req} -gt ${crit_req} ]
+ then
+ wcdiff_req=1
+ fi
+ elif [ ! -z "$warn_req" -a -z "$crit_req" ]
+ then
+ wcdiff_req=2
+ elif [ -z "$warn_req" -a ! -z "$crit_req" ]
+ then
+ wcdiff_req=3
+ fi
+}
+
+check_pid() {
+ if [ -f "$path_pid/$name_pid" ]
+ then
+ retval=0
+ else
+ retval=1
+ fi
+}
+
+check_processes() {
+ if [ $1 -lt 1 ]
+ then
+ echo "UNKNOWN - Your Apache server seems not to run. Is your Nagios \
+privileged to run 'ps ax' and is the Apache2 binary really located in \
+$path_binary?"
+ exit $ST_UK
+ fi
+}
+
+check_output() {
+ stat_output=`stat -c %s ${output_dir}/server-status`
+ if [ "$stat_output" = 0 ]
+ then
+ echo "UNKNOWN - Local copy of server-status is empty. Are we \
+allowed to access http://${hostname}:${port}/server-status?"
+ exit $ST_UK
+ fi
+}
+
+# get functions
+get_status() {
+ if [ "$secure" = 1 ]
+ then
+ server_status1=`wget -qO- --no-check-certificate -t 3 \
+-T ${timeout} https://${hostname}:${port}/${status_page}?auto`
+ sleep 1
+ server_status2=`wget -qO- --no-check-certificate -t 3 \
+-T ${timeout} https://${hostname}:${port}/${status_page}?auto`
+ else
+ server_status1=`wget -qO- -t 3 -T ${timeout} \
+http://${hostname}:${port}/${status_page}?auto`
+ sleep 1
+ server_status2=`wget -qO- -t 3 -T ${timeout} \
+http://${hostname}:${port}/${status_page}?auto`
+ fi
+}
+
+get_vals() {
+ cpu_load="$(cpu_load=0; ps -Ao pcpu,args | grep "$path_binary/apache2" \
+| awk '{print $1}' | while read line
+ do
+ cpu_load=`echo "scale=3; $cpu_load + $line" | bc -l`
+ echo $cpu_load
+ done)"
+ cpu_load=`echo $cpu_load | awk '{print $NF}' | sed 's/^\./0./'`
+
+ tmp1_req_psec=`echo ${server_status1} | awk '{print $3}'`
+ tmp2_req_psec=`echo ${server_status2} | awk '{print $3}'`
+ req_psec=`echo "scale=2; ${tmp2_req_psec} - ${tmp1_req_psec}" | bc -l \
+| sed 's/^\./0./'`
+
+ bytes_psec=`echo ${server_status1} | awk '{print $14}' | sed 's/^\./0./'`
+ bytes_preq=`echo ${server_status1} | awk '{print $16}' | sed 's/^\./0./'`
+ wkrs_busy=`echo ${server_status1} | awk '{print $18}' | sed 's/^\./0./'`
+ wkrs_idle=`echo ${server_status1} | awk '{print $20}' | sed 's/^\./0./'`
+}
+
+do_output() {
+ output="Apache serves $req_psec Requests per second with an average CPU \
+utilization of $cpu_load%. Busy workers: $wkrs_busy, idle: $wkrs_idle"
+}
+
+do_perfdata() {
+ perfdata="'cpu_load'=$cpu_load 'req_psec'=$req_psec \
+'bytes_psec'=$bytes_psec 'bytes_preq'=$bytes_preq 'workers_busy'=$wkrs_busy \
+'workers_idle'=$wkrs_idle"
+}
+
+# Let's go
+val_wcdiff_req
+
+if [ "$wcdiff_req" = 1 ]
+then
+ echo "Please adjust your warning/critical thresholds. The warning must \
+be lower than the critical level!"
+ exit $ST_UK
+elif [ "$wcdiff_req" = 2 ]
+then
+ echo "Please also set a critical value when you want to use \
+warning/critical thresholds!"
+ exit $ST_UK
+elif [ "$wcdiff_req" = 3 ]
+then
+ echo "Please also set a warning value when you want to use \
+warning/critical thresholds!"
+ exit $ST_UK
+else
+ if [ "$remote_srv" = 0 ]
+ then
+ running=`check_pid`
+ check_pid $running
+ fi
+
+ get_status
+ get_vals
+
+ do_output
+ do_perfdata
+
+ if [ ${wclvls_req} = 1 ]
+ then
+ if [ ${req_psec} -ge ${warn_req} -a ${req_psec} -lt ${crit_req} ]
+ then
+ echo "WARNING - ${output} | ${perfdata}"
+ exit $ST_WR
+ elif [ ${req_psec} -ge ${crit_req} ]
+ then
+ echo "CRITICAL - ${output} | ${perfdata}"
+ exit $ST_CR
+ else
+ echo "OK - ${output} | ${perfdata}"
+ exit $ST_OK
+ fi
+ else
+ echo "OK - ${output} | ${perfdata}"
+ exit $ST_OK
+ fi
+
+fi
diff --git a/sensu/files/checks/check_imap b/sensu/files/checks/check_imap
new file mode 100755
index 0000000..23f20f6
--- /dev/null
+++ b/sensu/files/checks/check_imap
@@ -0,0 +1,49 @@
+#!/usr/bin/python3
+import imaplib
+from argparse import ArgumentParser
+from sys import argv,exit
+from socket import error,timeout
+from time import time
+
+parse = ArgumentParser(description='IMAP plugin for Nagios')
+parse.add_argument('-host', help='Host')
+parse.add_argument('-c', help='Critical (float)')
+parse.add_argument('-p', help='Port')
+parse.add_argument('-ssl', help='Ssl On')
+parse.add_argument('-w', help='Warning (float)')
+args = parse.parse_args()
+
+def main(host,warning,critical,encrypt=None,port=None):
+ t = time()
+ if encrypt==1:
+ if port==None:
+ c = imaplib.IMAP4_SSL(host=host)
+ else:
+ c = imaplib.IMAP4_SSL(host=host,port=int(port))
+ else:
+ if port==None:
+ c = imaplib.IMAP4(host=host)
+ else:
+ c = imaplib.IMAP4_SSL(host=host,port=int(port))
+ c.PROTOCOL_VERSION
+ c.shutdown()
+ tout = time()-t
+ if tout>=critical:
+ print("IMAP CRITICAL: %f" %tout)
+ exit(2)
+ elif tout>=warning:
+ print("IMAP WARNING: %f" %tout)
+ exit(1)
+ else:
+ print("IMAP OK: %f" %tout)
+ exit(0)
+
+timeout = 10
+try:
+ print(main(args.host,float(args.w),float(args.c),args.ssl,args.p))
+except error:
+ print("Socket Error.")
+ exit(3)
+except TypeError:
+ print("Syntax Error.")
+ exit(3)