Repository
Munin (2.0)
Last change
2012-08-29
Family
auto
Capabilities
Keywords
Language
Perl
License
GPL-2.0-only
Authors

yum

Example graph: month

Name

yum - Plugin for monitoring pending package upgrades with yum

Usage

This plugin needs to be called with the ‘update’ argument from cron to work as intended.

Author

Copyright 2006 Dagfinn Ilmari Mannsåker ilmari@lonres.com

License

GPLv2

Magic Markers

#%# family=auto
#%# capabilities=autoconf
#!@@PERL@@ -w
# -*- perl -*-
# vim: ft=perl : sw=4 : ts=4 : et

=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

GPLv2

=head1 MAGIC MARKERS

 #%# family=auto
 #%# capabilities=autoconf

=cut

use strict;

my $statefile = "$ENV{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 {
    if (system('yum --version >/dev/null 2>/dev/null') != 0) {
        print "no (Could not run yum)\n";
    }
    elsif (! -r $statefile) {
        print "no (Could not find statefile.  Please read 'munindoc yum')\n";
    }
    else {
        print "yes\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();
}