projects
/
mirror
/
dsa-nagios.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
[project @ peter@palfrader.org-20090329124344-ga6zcabja5hugi5y]
[mirror/dsa-nagios.git]
/
dsa-nagios-nrpe-config
/
dsa-check-dabackup
diff --git
a/dsa-nagios-nrpe-config/dsa-check-dabackup
b/dsa-nagios-nrpe-config/dsa-check-dabackup
index
d33b8ae
..
f400023
100755
(executable)
--- a/
dsa-nagios-nrpe-config/dsa-check-dabackup
+++ b/
dsa-nagios-nrpe-config/dsa-check-dabackup
@@
-30,7
+30,8
@@
use Getopt::Long;
use Fcntl qw(:seek);
my $DABACKUP_CONF = '/etc/da-backup.conf';
use Fcntl qw(:seek);
my $DABACKUP_CONF = '/etc/da-backup.conf';
-my $MAX_AGE = 24*60*60;
+my $MAX_AGE = 30*60*60;
+my $TOO_FRESH = 5*60;
my %CODE = (
'UNDEF' => -1,
'OK' => 0,
my %CODE = (
'UNDEF' => -1,
'OK' => 0,
@@
-45,11
+46,12
@@
$SIG{__DIE__ } = sub() {
my $EXITCODE = 'UNDEF';
my $EXITCODE = 'UNDEF';
-my
@
MESSAGE = ();
+my
%
MESSAGE = ();
-sub problem($$) {
- my ($code, $msg) = @_;
- push @MESSAGE, $msg;
+sub problem($$$) {
+ my ($code, $msg, $resource) = @_;
+ $MESSAGE{$msg} = [] unless defined $MESSAGE{$msg};
+ push @{$MESSAGE{$msg}}, $resource;
$EXITCODE = ($CODE{$code} > $CODE{$EXITCODE}) ? $code : $EXITCODE;
};
$EXITCODE = ($CODE{$code} > $CODE{$EXITCODE}) ? $code : $EXITCODE;
};
@@
-111,24
+113,37
@@
opendir(DIR, $logdir) or die ("Cannot opendir $logdir: $!\n");
my %logfiles = map {$_ => 1} grep { !/^\./ && !/\.[0-9]+(\.gz)?$/} readdir(DIR);
closedir(DIR);
my %logfiles = map {$_ => 1} grep { !/^\./ && !/\.[0-9]+(\.gz)?$/} readdir(DIR);
closedir(DIR);
+if (scalar keys %conffiles == 0) {
+ print "WARNING: da-backup installed but no backups configured\n";
+ exit $CODE{'WARNING'};
+};
+
for my $f (keys %conffiles) {
unless (exists $logfiles{$f}) {
for my $f (keys %conffiles) {
unless (exists $logfiles{$f}) {
- problem('WARNING',
"$f has no log"
);
+ problem('WARNING',
'no log', $f
);
}
}
}
}
-problem('WARNING', 'da-backup installed but no backups configured') if (scalar keys %conffiles == 0);
FILE:
for my $f (sort {$a cmp $b} keys %logfiles) {
unless (exists $conffiles{$f}) {
FILE:
for my $f (sort {$a cmp $b} keys %logfiles) {
unless (exists $conffiles{$f}) {
- problem('WARNING',
"log $f has no config"
);
+ problem('WARNING',
'no config', $f
);
next;
}
my @stat = stat("$logdir/$f") or die ("Cannot stat $logdir/$f: $!\n");
my $age = time - $stat[10];
next;
}
my @stat = stat("$logdir/$f") or die ("Cannot stat $logdir/$f: $!\n");
my $age = time - $stat[10];
+
+ if ($age < $TOO_FRESH) { # File is too new, let's use the old one
+ if (-e "$logdir/$f.0") {
+ $f .= ".0";
+ my @stat = stat("$logdir/$f") or die ("Cannot stat $logdir/$f: $!\n");
+ $age = time - $stat[10];
+ };
+ };
+
if ($age < 0) {
if ($age < 0) {
- problem('WARNING',
"%f is from the future"
);
+ problem('WARNING',
'future timestamp', $f
);
next;
} elsif ($age > $MAX_AGE) {
my $hage;
next;
} elsif ($age > $MAX_AGE) {
my $hage;
@@
-138,7
+153,7
@@
for my $f (sort {$a cmp $b} keys %logfiles) {
} else {
$hage = sprintf("%d hours", $age / 3600);
};
} else {
$hage = sprintf("%d hours", $age / 3600);
};
- problem('WARNING',
"$f is $hage old
");
+ problem('WARNING',
'old', "$f ($hage)
");
next;
};
next;
};
@@
-149,15
+164,16
@@
for my $f (sort {$a cmp $b} keys %logfiles) {
while (<FH>) {
chomp;
if (/^sent\s+\d+\s+bytes\s+received\s+\d+\s+bytes\s+[\d\.]+\s+bytes\/sec$/) {
while (<FH>) {
chomp;
if (/^sent\s+\d+\s+bytes\s+received\s+\d+\s+bytes\s+[\d\.]+\s+bytes\/sec$/) {
- problem('OK',
"$f probably ok"
);
+ problem('OK',
'probably ok', $f
);
close(FH);
next FILE;
};
$last2 = $last;
$last = $_;
};
close(FH);
next FILE;
};
$last2 = $last;
$last = $_;
};
- problem('CRITICAL',
"$f failed
($last2 $last)");
+ problem('CRITICAL',
'FAILED', "$f
($last2 $last)");
};
};
-print $EXITCODE,": ", join("; ", @MESSAGE), "\n";
+my $msg = join("; ", map {"$_: ".join(', ', @{$MESSAGE{$_}}) } (sort {$a cmp $b} keys %MESSAGE));
+print $EXITCODE, ": ", $msg, "\n";
exit $CODE{$EXITCODE};
exit $CODE{$EXITCODE};