/usr/share/munin/plugins/yum is in munin-node 1.4.6-3ubuntu3.
This file is owned by root:root, with mode 0o755.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 | #!/usr/bin/perl -w
# -*- perl -*-
# vim: ft=perl
=head1 NAME
yum - Plugin for monitoring pending package upgrades with yum
=head1 USAGE
This plugin needs to be called with the 'update' argument
from cron to work as intended.
=head1 AUTHOR
Copyright 2006 Dagfinn Ilmari Mannsåker <ilmari@lonres.com>
=head1 LICENSE
Unknown license
=head1 MAGIC MARKERS
#%# family=auto
#%# capabilities=autoconf
=cut
use strict;
use Munin::Common::Defaults;
my $statefile = "$Munin::Common::Defaults::MUNIN_PLUGSTATE/yum.state";
sub update {
if (-l $statefile) {
die "$statefile is a symlink, not touching.\n";
}
open my $state, '>', $statefile
or die "Can't open $statefile for writing: $!\n";
open my $yum, '-|', 'yum list updates'
or die "Can't run 'yum list updates': $!";
# Skip header crap
while (<$yum>) {
last if /^Updated/;
}
while (<$yum>) {
next unless /^(\S+)\.\S+\s+\S+\s+\S+/;
print $state "$1\n";
}
close $yum or die "Error running 'yum list updates': $!\n";
close $state or die "Error writing $statefile: $!\n";
}
sub autoconf {
my $ret = system('yum --version >/dev/null 2>/dev/null');
if ($ret == 0) {
print "yes\n";
exit 0;
}
else {
print "no\n";
exit 0;
}
}
sub config {
print "graph_title Pending packages\n";
print "graph no\n";
print "pending.label pending\n";
print "pending.warning 0:0\n";
}
sub report {
my @packages;
open my $state, '<', $statefile
or die "Can't open $statefile for reading: $!
Please read 'munindoc yum' to understand why if the file does not exist.\n";
chomp(@packages = <$state>);
close $state;
print 'pending.value ', scalar(@packages), "\n";
print 'pending.extinfo ', join(' ', @packages), "\n"
if @packages;
}
if ($ARGV[0]) {
my $arg = $ARGV[0];
my %funcs = (
update => \&update,
config => \&config,
autoconf => \&autoconf,
);
if (exists $funcs{$arg}) {
$funcs{$arg}->();
} else {
die "Unknown argument '$arg'\n";
}
} else {
report();
}
|