Nagios::Object - Creates perl objects to represent Nagios objects
This module contains the code for creating perl objects to represent any of the
Nagios objects. All of the perl classes are auto-generated at compile-time, so
it's pretty trivial to add new attributes or even entire objects. The
following is a list of currently supported classes:
Nagios::TimePeriod
Nagios::Command
Nagios::Contact
Nagios::ContactGroup
Nagios::Host
Nagios::Service
Nagios::HostGroup
Nagios::ServiceEscalation
Nagios::HostDependency
Nagios::HostEscalation
Nagios::HostGroupEscalation
Nagios::ServiceDependency
-- next two are for status.dat in Nagios 2.x
Nagios::Info
Nagios::Program
use Nagios::Object;
my $generic_host = Nagios::Host->new(
register => 0,
parents => undef,
check_command => $some_command,
max_check_attempts => 3,
checks_enabled => 1,
event_handler => $some_command,
event_handler_enabled => 0,
low_flap_threshold => 0,
high_flap_threshold => 0,
flap_detection_enabled => 0,
process_perf_data => 1,
retain_status_information => 1,
retain_nonstatus_information => 1,
notification_interval => $timeperiod,
notification_options => [qw(d u r)],
notifications_enabled => 1,
stalking_options => [qw(o d u)]
);
# this will automatically 'use' $generic_host
my $localhost = $generic_host->new(
host_name => "localhost",
alias => "Loopback",
address => "127.0.0.1"
);
my $hostname = $localhost->host_name();
printf "max check attempts for $hostname is %s.\n",
$localhost->max_check_attempts;
$localhost->set_event_handler(
Nagios::Command->new(
command_name => "new_event_handler",
command_line => "/bin/true"
)
);
- new()
- Create a new object of one of the types listed above.
Calling new() on an existing object will use the LHS
object as the template for the object being created. This is mainly
useful for creating objects without involving Nagios::Object::Config
(like in the test suite).
Nagios::Host->new( ... );
- dump()
- Output a Nagios define { } block from an object. This is still
EXPERIMENTAL, but may eventually be robust enough to use for a
configuration GUI. Passing in a single true argument will tell it to
flatten the object inheritance on dump.
print $object->dump();
print $object->dump(1); # flatten
- name()
- This method is common to all classes created by this module. It should
always return the textual name for an object. It is used internally by the
Nagios::Object modules to allow polymorphism (which is what makes this
module so compact). This is the only way to retrieve the name of a
template, since they are identified by their "name" field.
my $svc_desc = $service->name;
my $hostname = $host->name;
Which is just short for:
my $svc_desc = $service->service_description;
my $hostname = $service->host_name;
- register()
- Returns true/undef to indicate whether the calling object is registerable
or not.
if ( $object->register ) { print $object->name, " is registerable." }
- has_attribute()
- Returns true/undef to indicate whether the calling object has the
attribute specified as the only argument.
# check to see if $object has attribute "command_line"
die if ( !$object->has_attribute("command_line") );
- list_attributes()
- Returns a list of valid attributes for the calling object.
my @host_attributes = $host->list_attributes();
- attribute_type()
- Returns the type of data expected by the object's set_ method for the
given attribute. For some fields like notification_options, it may return
"char_flag."
For "name" attributes, it will simply return
whatever %setup_data contains.
This method needs some TLC ...
my $type = $host->attribute_type("notification_period");
- attribute_is_list()
- Returns true if the attribute is supposed to be a list (ARRAYREF).
if ( $object->attribute_is_list("members") ) {
$object->set_members( [$member] );
} else {
$object->set_members( $member );
}
Al Tobey <tobeya@cpan.org>
Thank you to the fine people of #perl on freenode.net for helping
me with some hairy code and silly optimizations.