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, options)

TODO:

  • advanced management for exceptions throws by the socket

  • adding support to http