I would like you guys to consider a freeze exception for an RC bug fix in libnagios-object-perl. The patch adds support for Nagios 3, the version in Lenny. I'd also like to include a few documentation/minor changes with it.
My sponser told me to ask before he uploaded it, so I have attached an
interdiff with the patches taken out, and attached them separately
(for readability).
Here's the changelog:
libnagios-object-perl (0.14-2) UNRELEASED; urgency=low
.
[ Ryan Niebur ]
* New maintainer (Closes: #501941)
* bump standards version to 3.8.0
- added a README.source
- use the Homepage field
* nothing is compiled. no need for CFLAGS.
* Build distclean
- no need to run make clean, there is no makefile.
* use quilt
* don't install the scripts and their documentation. It seems that
the old package didn't have the scripts even though if I build it
from source it does. so, for now, just don't include it.
* Work with Nagios 3, the version in Debian Lenny. Patch from
http://rt.cpan.org/Public/Bug/Display.html?id=33125, thanks
TOMDAAE. (Closes: #503900)
* Added patch to use correct path to status.dat in man pages
* fix short description
* add whatis descriptions to man pages
* add Vcs-{Browser,Svn} fields
* Removed accidental inclusion of work in progress code in the man
page
.
[ Damyan Ivanov ]
* debian/watch: use dist-based URL.
* debian/control: use dist-based Homepage
Thanks!
Ryan
--
_________________________
Ryan Niebur
[EMAIL PROTECTED]
diff -u libnagios-object-perl-0.14/debian/watch libnagios-object-perl-0.14/debian/watch --- libnagios-object-perl-0.14/debian/watch +++ libnagios-object-perl-0.14/debian/watch @@ -3 +3 @@ -http://search.cpan.org/CPAN/authors/id/T/TO/TOBEYA/Nagios-Object-(.*).tar.gz +http://search.cpan.org/dist/Nagios-Object/ .*/Nagios-Object-v?(\d[\d_.]+)\.(?:tar(?:\.gz|\.bz2)?|tgz|zip) diff -u libnagios-object-perl-0.14/debian/control libnagios-object-perl-0.14/debian/control --- libnagios-object-perl-0.14/debian/control +++ libnagios-object-perl-0.14/debian/control @@ -1,15 +1,19 @@ Source: libnagios-object-perl Section: perl Priority: optional -Maintainer: Thierry Randrianiriana <[EMAIL PROTECTED]> -Build-Depends: debhelper (>= 5) +Maintainer: Debian Perl Group <[EMAIL PROTECTED]> +Uploaders: Ryan Niebur <[EMAIL PROTECTED]> +Build-Depends: debhelper (>= 5), quilt Build-Depends-Indep: perl (>= 5.8.0-7), libmodule-build-perl, libtest-exception-perl -Standards-Version: 3.7.2 +Standards-Version: 3.8.0 +Vcs-Svn: svn://svn.debian.org/pkg-perl/trunk/libnagios-object-perl/ +Vcs-Browser: http://svn.debian.org/viewsvn/pkg-perl/trunk/libnagios-object-perl/ +Homepage: http://search.cpan.org/dist/Nagios-Object/ Package: libnagios-object-perl Architecture: all Depends: ${perl:Depends}, ${misc:Depends} -Description: Parse and represent Nagios configuration as objects in Perl +Description: Perl module to parse and represent Nagios configuration as objects Nagios::Object is a group of modules for parsing a Nagios configuration and representing it as objects in perl. Inheriting from templates is supported, encoraged, and kept intact within the perl representation(s). @@ -23,2 +26,0 @@ - . - Homepage: http://search.cpan.org/~tobeya/Nagios-Object/ diff -u libnagios-object-perl-0.14/debian/rules libnagios-object-perl-0.14/debian/rules --- libnagios-object-perl-0.14/debian/rules +++ libnagios-object-perl-0.14/debian/rules @@ -4,6 +4,8 @@ # Uncomment this to turn on verbose mode. #export DH_VERBOSE=1 +include /usr/share/quilt/quilt.make + PACKAGE=$(shell dh_listpackages) ifndef PERL @@ -15,19 +17,11 @@ endif TMP =`pwd`/debian/$(PACKAGE) -CFLAGS = -Wall -g - -ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS))) - CFLAGS += -O0 -else - CFLAGS += -O2 -endif - configure: configure-stamp -configure-stamp: +configure-stamp: $(QUILT_STAMPFN) dh_testdir - $(PERL) Build.PL --installdirs vendor destdir=$(TMP) + $(PERL) Build.PL --installdirs vendor destdir=$(TMP) --install_path script=temp --install_path bin=temp --install_path bindoc=temp touch configure-stamp build: build-stamp @@ -39,12 +33,11 @@ touch $@ -clean: +clean: unpatch dh_testdir dh_testroot + [ ! -f Build ] || ./Build distclean rm -rf build-stamp Build _build blib - - -$(MAKE) clean dh_clean configure-stamp build-stamp install: build @@ -54,6 +47,7 @@ dh_installdirs ./Build install PREFIX=$(TMP)/usr + rm -fr $(TMP)/temp # Build architecture-dependent files here. binary-arch:; diff -u libnagios-object-perl-0.14/debian/changelog libnagios-object-perl-0.14/debian/changelog --- libnagios-object-perl-0.14/debian/changelog +++ libnagios-object-perl-0.14/debian/changelog @@ -1,3 +1,33 @@ +libnagios-object-perl (0.14-2) UNRELEASED; urgency=low + + [ Ryan Niebur ] + * New maintainer (Closes: #501941) + * bump standards version to 3.8.0 + - added a README.source + - use the Homepage field + * nothing is compiled. no need for CFLAGS. + * Build distclean + - no need to run make clean, there is no makefile. + * use quilt + * don't install the scripts and their documentation. It seems that + the old package didn't have the scripts even though if I build it + from source it does. so, for now, just don't include it. + * Work with Nagios 3, the version in Debian Lenny. Patch from + http://rt.cpan.org/Public/Bug/Display.html?id=33125, thanks + TOMDAAE. (Closes: #503900) + * Added patch to use correct path to status.dat in man pages + * fix short description + * add whatis descriptions to man pages + * add Vcs-{Browser,Svn} fields + * Removed accidental inclusion of work in progress code in the man + page + + [ Damyan Ivanov ] + * debian/watch: use dist-based URL. + * debian/control: use dist-based Homepage + + -- Ryan Niebur <[EMAIL PROTECTED]> Fri, 31 Oct 2008 01:31:18 -0700 + libnagios-object-perl (0.14-1) unstable; urgency=low * New upstream release only in patch2: unchanged: --- libnagios-object-perl-0.14.orig/debian/README.source +++ libnagios-object-perl-0.14/debian/README.source @@ -0,0 +1,3 @@ +This debian package uses quilt to manage changes to the upstream +sources. To get the sources that will be built, run "quilt push +-a". For more information see /usr/share/doc/quilt/README.source . only in patch2: unchanged: --- libnagios-object-perl-0.14.orig/debian/patches/series +++ libnagios-object-perl-0.14/debian/patches/series @@ -0,0 +1,5 @@ +mention-version-3-in-man-pages +work-with-nagios-3 +use-correct-path-to-status.dat +add-useful-whatis-entry-for-manpages +fix-accidental-inclusion-of-wip-code-in-manpage
--- a/lib/Nagios/Config.pm +++ b/lib/Nagios/Config.pm @@ -58,6 +58,7 @@ my $cf = Nagios::Config->new( Filename => $configfile ); my $cf = Nagios::Config->new( Filename => $configfile, Version => 1 ); my $cf = Nagios::Config->new( Filename => $configfile, Version => 2 ); + my $cf = Nagios::Config->new( Filename => $configfile, Version => 3 ); =cut --- a/lib/Nagios/Object/Config.pm +++ b/lib/Nagios/Object/Config.pm @@ -41,6 +41,7 @@ Create a new configuration object. If Version is not specified, the already weak validation will be weakened further to allow mixing of Nagios 1.0 and 2.0 configurations. For now, the minor numbers of Version are ignored. Do not specify any letters as in '2.0a1'. +Currently only the features present in Nagios 2 are supported for Nagios 3. To enable regular expression matching, use either the "regexp_matching" or "true_regexp_matching" arguments to new(). See enable_regexp_matching() and enable_true_regexp_matching() below.
--- a/lib/Nagios/Config.pm +++ b/lib/Nagios/Config.pm @@ -29,7 +29,7 @@ =head1 NAME -Nagios::Config +Nagios::Config - Parser for the Nagios::Object set of perl modules =head1 DESCRIPTION --- a/lib/Nagios/Object.pm +++ b/lib/Nagios/Object.pm @@ -309,7 +309,7 @@ =head1 NAME -Nagios::Object +Nagios::Object - Creates perl objects to represent Nagios objects =head1 DESCRIPTION --- a/lib/Nagios/Object/Config.pm +++ b/lib/Nagios/Object/Config.pm @@ -26,7 +26,7 @@ =head1 NAME -Nagios::Object::Config +Nagios::Object::Config - Perl objects to represent Nagios configuration =head1 DESCRIPTION --- a/lib/Nagios/StatusLog.pm +++ b/lib/Nagios/StatusLog.pm @@ -84,7 +84,7 @@ =head1 NAME -Nagios::StatusLog, Nagios::(Service|Host|Program)::Status +Nagios::StatusLog, Nagios::(Service|Host|Program)::Status - Perl objects to represent the Nagios status file =head1 DESCRIPTION
use-correct-path-to-status.dat
Description: Netscape Proxy Auto Config
--- a/lib/Nagios/Object/Config.pm
+++ b/lib/Nagios/Object/Config.pm
@@ -138,7 +138,9 @@
=cut
-=item COMMENTED OUT NEW PARSER WORK IN PROGRESS
+=begin comment
+
+# COMMENTED OUT NEW PARSER WORK IN PROGRESS
# this is the new one I'm working on to improve speed and flexibility
sub parse2 {
@@ -203,6 +205,8 @@
}
}
+=end comment
+
=cut
# TODO: add checks for undefined values where prohibited in %nagios_setup
--- a/lib/Nagios/StatusLog.pm
+++ b/lib/Nagios/StatusLog.pm
@@ -28,18 +28,36 @@
Service => [qw(
host_name description status current_attempt state_type last_check
next_check check_type checks_enabled accept_passive_service_checks
event_handler_enabled last_state_change problem_has_been_acknowledged
last_hard_state time_ok time_unknown time_warning time_critical
last_notification current_notification_number notifications_enabled latency
execution_time flap_detection_enabled is_flapping percent_state_change
scheduled_downtime_depth failure_prediction_enabled process_performance_data
obsess_over_service plugin_output
service_description modified_attributes check_command
event_handler has_been_checked should_be_scheduled check_execution_time
check_latency current_state max_attempts last_hard_state_change last_time_ok
last_time_warning last_time_unknown last_time_critical performance_data
next_notification no_more_notifications active_checks_enabled
passive_checks_enabled acknowledgement_type last_update
+ check_interval check_options check_period current_event_id
current_notification_id current_problem_id last_event_id last_problem_id
long_plugin_output notification_period retry_interval
)],
Host => [qw(
host_name status last_check last_state_change
problem_has_been_acknowledged time_up time_down time_unreachable
last_notification current_notification_number notifications_enabled
event_handler_enabled checks_enabled flap_detection_enabled is_flapping
percent_state_change scheduled_downtime_depth failure_prediction_enabled
process_performance_data plugin_output
modified_attributes check_command event_handler has_been_checked
should_be_scheduled check_execution_time check_latency current_state
last_hard_state check_type performance_data next_check current_attempt
max_attempts state_type last_hard_state_change last_time_up last_time_down
last_time_unreachable next_notification no_more_notifications
acknowledgement_type active_checks_enabled passive_checks_enabled
obsess_over_host last_update
+ check_interval check_options check_period current_event_id
current_notification_id current_problem_id last_event_id last_problem_id
long_plugin_output notification_period retry_interval
)],
Program => [qw(
program_start nagios_pid daemon_mode last_command_check
last_log_rotation enable_notifications execute_service_checks
accept_passive_service_checks enable_event_handlers obsess_over_services
enable_flap_detection enable_failure_prediction process_performance_data
modified_host_attributes modified_service_attributes
active_service_checks_enabled passive_service_checks_enabled
active_host_checks_enabled passive_host_checks_enabled obsess_over_hosts
check_service_freshness check_host_freshness global_host_event_handler
global_service_event_handler
+ active_ondemand_host_check_stats
active_ondemand_service_check_stats active_scheduled_host_check_stats
active_scheduled_service_check_stats cached_host_check_stats
cached_service_check_stats external_command_stats
high_external_command_buffer_slots next_comment_id next_downtime_id
next_event_id next_notification_id next_problem_id parallel_host_check_stats
passive_host_check_stats passive_service_check_stats serial_host_check_stats
total_external_command_buffer_slots used_external_command_buffer_slots
)],
- Info => [qw( created version )]
+ Contact => [qw(
+ contact_name modified_attributes modified_host_attributes
modified_service_attributes host_notification_period
service_notification_period last_host_notification last_service_notification
host_notifications_enabled service_notifications_enabled
+ )],
+ Servicecomment => [qw(
+ host_name service_description entry_type comment_id source
persistent entry_time expires expire_time author comment_data
+ )],
+ Hostcomment => [qw(
+ host_name entry_type comment_id source persistent entry_time
expires expire_time author comment_data
+ )],
+ Servicedowntime => [qw(
+ host_name service_description downtime_id entry_time start_time
end_time triggered_by fixed duration author comment
+ )],
+ Hostdowntime => [qw(
+ host_name downtime_id entry_time start_time end_time triggered_by
fixed duration author comment
+ )],
+ Info => [qw( created version )]
);
GENESIS: {
@@ -72,7 +90,8 @@
Reads the Nagios status log and returns ::Status objects that can
be used to get status information about a host. For Nagios version 2.x logs,
-pass in the Version => 2.0 parameter to new().
+pass in the Version => 2.0 parameter to new(). And similarly, pass in the
+Version => 3.0 parameter to new() for Nagios version 3.x logs.
my $log = Nagios::StatusLog->new(
Filename => "/var/opt/nagios/status.log",
@@ -89,6 +108,12 @@
Version => 2.0
);
+ # for Nagios v3.0
+ my $log = Nagios::StatusLog->new(
+ Filename => "/var/opt/nagios/status.dat",
+ Version => 3.0
+ );
+
=head1 METHODS
=over 4
@@ -123,12 +148,17 @@
}
my $self = bless( {
- LOGFILE => $logfile,
- VERSION => $version,
- INFO => {},
- PROGRAM => {},
- HOST => {},
- SERVICE => {}
+ LOGFILE => $logfile,
+ VERSION => $version,
+ INFO => {},
+ CONTACT => {},
+ PROGRAM => {},
+ HOST => {},
+ HOSTCOMMENT => {},
+ HOSTDOWNTIME => {},
+ SERVICE => {},
+ SERVICECOMMENT => {},
+ SERVICEDOWNTIME => {}
}, $type );
$self->update();
@@ -144,7 +174,9 @@
sub update {
my $self = shift;
- if ( $self->{VERSION} >= 2 ) {
+ if ( $self->{VERSION} >= 3 ) {
+ return $self->update_v3( @_ );
+ } elsif ( $self->{VERSION} >= 2 && $self->{VERSION} < 3 ) {
return $self->update_v2( @_ );
}
return $self->update_v1( @_ );
@@ -298,6 +330,97 @@
1;
}
+sub update_v3 ($) {
+ my $self = shift;
+
+ # be compatible with StatusLog which makes sure that references
+ # held in client code remain valid during update (also prevents
+ # some memory leaks)
+ sub _copy3 {
+ my( $from, $to ) = @_;
+ foreach my $key ( keys %$from ) {
+ $to->{$key} = $from->{$key};
+ }
+ }
+
+ my %handlers = (
+ hoststatus => sub {
+ my $item = shift;
+ my $host = $item->{host_name};
+ if ( !exists $self->{HOST}{$host} ) {
+ $self->{HOST}{$host} = {};
+ }
+ _copy3( $item, $self->{HOST}{$host} );
+ },
+ servicestatus => sub {
+ my $item = shift;
+ my $host = $item->{host_name};
+ my $svc = $item->{service_description};
+
+ if ( !exists $self->{SERVICE}{$host}{$svc} ) {
+ $self->{SERVICE}{$host}{$svc} = {};
+ }
+ _copy3( $item, $self->{SERVICE}{$host}{$svc} );
+ },
+ info => sub {
+ _copy3( shift, $self->{INFO} );
+ },
+ programstatus => sub {
+ _copy3( shift, $self->{PROGRAM} );
+ },
+ contactstatus => sub {
+ _copy3( shift, $self->{CONTACT} );
+ },
+ servicecomment => sub {
+ _copy3( shift, $self->{SERVICECOMMENT} );
+ },
+ hostcomment => sub {
+ _copy3( shift, $self->{HOSTCOMMENT} );
+ },
+ servicedowntime => sub {
+ _copy3( shift, $self->{SERVICEDOWNTIME} );
+ },
+ hostdowntime => sub {
+ _copy3( shift, $self->{HOSTDOWNTIME} );
+ }
+
+ );
+
+ my $log_fh = gensym;
+ open( $log_fh, "<$self->{LOGFILE}" )
+ || croak "could not open file $self->{LOGFILE} for reading: $!";
+
+ # change the first line of the RE to this:
+ #
(info|programstatus|hoststatus|servicestatus|contactstatus|servicecomment|hostcomment|servicedowntime|hostdowntime)
\s* {(
+ # to make it a bit more careful, but it has a measurable cost on runtime
+ my $entry_re = qr/
+ # capture the type into $1
+ (\w+) \s*
+ # capture all of the text between the brackets into $2
+ {( .*? )}
+ # match the last bracket only if followed by another definition
+ (?=(?: \s*
(?:info|programstatus|hoststatus|servicestatus|contacstatus|servicecomment|hostcomment|servicedowntime|hostdowntime)
\s* { | \Z) )
+ # capture remaining text (1-2 lines) into $3 for re-processing
+ (.*)$
+ /xs;
+
+ my $entry = '';
+ while ( my $line = <$log_fh> ) {
+ next if ( $line =~ /^\s*#/ );
+ $entry .= $line;
+ if ( $entry =~ m/$entry_re/ ) {
+ ( my $type, my $text, $entry ) = ( $1, $2, $3 );
+ $text =~ s/[\r\n]+\s*/\n/g; # clean up whitespace and newlines
+ my %item = map { split /\s*=\s*/, $_, 2 } split /\n/, $text;
+ $handlers{$type}->( \%item );
+ }
+ }
+
+ close( $log_fh );
+
+ 1;
+}
+
sub list_tags {
my $type = ref($_[0]) ? ref($_[0]) : $_[0];
my $listref = ${"$type\::tags"};
signature.asc
Description: Digital signature

