Description
This gem provides support to Nagios MkLiveStatus through an API. The library have the following functionality :
-
check query validity
-
parse query from string
-
create query
-
request mklivestatus with query
See this link for more detail about the MkLiveStatus.
Installation
In order to use the gem, you have to install it into your rubygem environment.
gem install nagios_maklivestatus
To integrate it in your applications, it can be done just by adding the two following lines :
require 'rubygems'
require 'nagios_mklivestatus'
Your reading to use the library
User Guide
Configuration
The configuration is made through the following command:
nagmk-ruby-config
This command is defined like this:
nagmk-ruby-config [-h|--help] [-p|--path PATH] [-r|--remove] [-o|--options NAME=VALUE] [-u|--unset NAME][-s|--show]
arguments : -h|--help help
-p|--path PATH path to the nagios mklivestatus socket by default
-r|--remove remove the path from the config file
-o|--options NAME=VALUE add option to the configuration
-u|--unset NAME remove option from the configuration file.
-s|--show show configuration
Client
The client is the executable file that use the gem in order to execute the query.
nagmk-ruby <query>
The client can take the query from 3 sources:
- from argument
-
simply puts your query as argument into the command line “<query>” and with n for new line
- from file
-
with the -f option you can define a path to the file containing the query
- from pipe
-
echo -e “<query>” | nagmk-ruby
The client command is defined like this:
nagmk-ruby [-h|--help] -p|--path PATH [-o|--options NAME=VALUE] {[-f|--file FILE]|query}
arguments : -h|--help help
-p|--path PATH redefine path to the nagios mklivestatus socket
-o|--options NAME=VALUE add or override option to the request
-f|--file FILE file containing the query
query the nagios query to execute
Developper Guide
Logging System
The logger use the default logger class of ruby : Logger. The logger can be initiate and changed through the same way:
require 'nagios_mklivestatus'
## changing nagios logging
# options
log_opts = { #logger options used to override default options
:name => STDOUT, # name of the logger like in Logger.new(name)
:level => Logger::ERROR, # logger level logger.level = Logger::ERROR
# used if defined or not nil
:shift_age => nil, # shift age of the logger like in Logger.new(name, shift_age)
# used if defined or not nil and if shift_age is defined
:shift_size => nil # shift size of the logger like in Logger.new(name, shift_age, shift_size)
}
# change log setting
Nagios::MkLiveStatus.init({:log=>log_opts})
Creating Query
Creating a query can be made in multiples ways using :
-
API
-
Helper
-
Parser
Next, we will show you how to use those methods to create query.
API
Query
Look at the following code :
require 'nagios_mklivestatus'
##
# create the query
#
query = Nagios::MkLiveStatus::Query.new
# add GET hosts
query.get "hosts"
# add Columns: host_name groups
query.addColumn "host_name"
query.addColumn "groups"
# add Filter: (see below)
query.addFilter "<filter_expr>"
# add Stats: (see below)
query.addStats "<stat_expr>"
Only the two first are required in order to create a correct MkLiveStatus Query.
Filter
The filter expression which can be added to query are defined like this :
require 'nagios_mklivestatus'
#both line are equals
filter1 = Nagios::MkLiveStatus::Filter::Attr.new("host_name", Nagios::MkLiveStatus::Filter::Attr::EQUAL, "<name>")
filter2 = Nagios::MkLiveStatus::Filter::Attr.new("host_name", "=", "<name>")
#filter and, or and negate
filter_and = Nagios::MkLiveStatus::Filter::And.new(filter1, filter2)
filter_or = Nagios::MkLiveStatus::Filter::Or.new(filter1, filter2)
filter_neg = Nagios::MkLiveStatus::Filter::Negate.new(filter2)
Stats
The stats expression which can be added to the query are defined like this:
require 'nagios_mklivestatus'
#both line are equals: host_name = <name>
stats1 = Nagios::MkLiveStatus::Stats::Attr.new("host_name", Nagios::MkLiveStatus::Stats::Attr::EQUAL, "<name>")
stats2 = Nagios::MkLiveStatus::Stats::Attr.new("host_name", "=", "<name>")
#both line are equals Stats: sum host_name
stats1 = Nagios::MkLiveStatus::Stats::Attr.new("host_name", nil, nil, Nagios::MkLiveStatus::Stats::Attr::SUM)
stats2 = Nagios::MkLiveStatus::Stats::Attr.new("host_name", nil, nil,"sum")
#stats and, or
stats_and = Nagios::MkLiveStatus::Stats::And.new(stats1, stats2)
stats_or = Nagios::MkLiveStatus::Stats::Or.new(stats1, stats2)
Please refer to the corresponding class for more details on expressions.
Helper
An helper exists containing the query, filter and stats creation. This helper also contains comparator operator and deviation in sub modules.
require 'nagios_mklivestatus'
include Nagios::MkLiveStatus::QueryHelper
# query helper : create a query
query = nagmk_query
query.get "host"
query.addColumn "host_name"
# query helper : create filter
filter = nagmk_filter("host_name", Comparator::EQUAL, "<name>")
query.addFilter filter
# query helper : create filter from string
filter = nagmk_filter_from_str("host_name = <name>")
See the Nagios::MkLiveStatus::QueryHelper for more methods.
Parser
The Nagios::MkLiveStatus::Parser is a module that provides a string parser in order to create the query:
require 'nagios_mklivestatus'
include Nagios::MkLiveStatus::Parser
query_str = <nagios_query>
query = nagmk_parse(query_str)
Making Request
Once you have the query you can send it to the Nagios MkLiveStatus Server using the Request Object
require 'nagios_mklivestatus'
##
# creating request
# path can be tcp://<host>:<port> or <path>
mklive_req = Nagios::MkLiveStatus::Request.new(path)
##
# common options:
# :limit : limit the number of results
# :output : output format
# :user : authenticated user
#
# see the class for more
results = mklive_req.query(query, )
TODO:
-
advanced management for exceptions throws by the socket
-
adding support to http