Permalink
Cannot retrieve contributors at this time
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
sensu-plugins-mysql/bin/check-mysql-alive.rb
Go to fileThis commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
executable file
104 lines (92 sloc)
2.61 KB
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env ruby | |
# frozen_string_literal: false | |
# | |
# MySQL Alive Plugin | |
# === | |
# | |
# This plugin attempts to login to mysql with provided credentials. | |
# | |
# Copyright 2011 Joe Crim <josephcrim@gmail.com> | |
# Updated by Lewis Preson 2012 to accept a database parameter | |
# 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' | |
# mysql-alive.rb -h db01 --ini '/etc/sensu/my.cnf' --ini-section customsection | |
# | |
# MY.CNF INI FORMAT | |
# [client] | |
# user=sensu | |
# password="abcd1234" | |
# | |
# [customsection] | |
# user=user | |
# password="password" | |
# | |
require 'sensu-plugin/check/cli' | |
require 'mysql' | |
require 'inifile' | |
class CheckMySQL < Sensu::Plugin::Check::CLI | |
option :user, | |
description: 'MySQL User', | |
short: '-u USER', | |
long: '--user USER' | |
option :password, | |
description: 'MySQL Password', | |
short: '-p PASS', | |
long: '--password PASS' | |
option :ini, | |
description: 'My.cnf ini file', | |
short: '-i VALUE', | |
long: '--ini VALUE' | |
option :ini_section, | |
description: 'Section in my.cnf ini file', | |
long: '--ini-section VALUE', | |
default: 'client' | |
option :hostname, | |
description: 'Hostname to login to', | |
short: '-h HOST', | |
long: '--hostname HOST' | |
option :database, | |
description: 'Database schema to connect to', | |
short: '-d DATABASE', | |
long: '--database DATABASE', | |
default: 'test' | |
option :port, | |
description: 'Port to connect to', | |
short: '-P PORT', | |
long: '--port PORT', | |
default: '3306' | |
option :socket, | |
description: 'Socket to use', | |
short: '-s SOCKET', | |
long: '--socket SOCKET' | |
def run | |
if config[:ini] | |
ini = IniFile.load(config[:ini]) | |
section = ini[config[:ini_section]] | |
db_user = section['user'] | |
db_pass = section['password'] | |
else | |
db_user = config[:user] | |
db_pass = config[:password] | |
end | |
begin | |
db = Mysql.real_connect(config[:hostname], db_user, db_pass, config[:database], config[:port].to_i, config[:socket]) | |
info = db.get_server_info | |
ok "Server version: #{info}" | |
rescue Mysql::Error => e | |
critical "Error message: #{e.error}" | |
ensure | |
db&.close | |
end | |
end | |
end |