#! /usr/bin/perl use strict ; use warnings ; package Probe::Os_packman ; use base 'Probe' ; sub ITEMS { [ { name => 'os_packs' , kind => 'int' , args => [] } ] } ; sub main { my $self = shift ; my $itms = shift ; # items to probe : [ item, ... ] my $clnt = shift ; # main::CLIENT my $path = $self -> path ; my $DIST = $Util::DISTRIB ; my $APT = '/usr/lib/update-notifier/apt-check' ; my $YUM = '/usr/bin/yum' ; my @PMAN = ( $DIST eq 'ubuntu' # ? ( $APT, qw(-qq list --upgradable) ) ? ( $APT ) : ( $YUM, qw(-q check-update) ) ) ; # if ( $DIST eq 'ubuntu' ) # { system "apt-get -qq update" ; } for my $item ( @$itms ) { my $args = $item -> args ; my $name = $item -> name ; OBB::TT ( " item name %s DIST %s", $name, $DIST ) ; if ( $name eq 'os_packs' ) { my $res = Probe::Util::run_prog ( @PMAN ) ; my $err = $res -> err ; my $xit = $res -> xit ; OBB::TT ( " err %s xit %s", $err, $xit ) ; if ( $DIST eq 'ubuntu' ) { my $lines = $res -> lines ; OBB::TT ( " LINE %s", $_ ) for @$lines ; unless ( @$lines == 1 ) { $item -> perr ( "no lines" ) ; } elsif ( $lines -> [ 0 ] =~ /^(\d+);\d+$/ ) { $item -> perr ( "bad format" ) ; } else { $item -> set_val ( $1 ) ; } } else { if ( $xit == 0 ) { $item -> set_val ( 0 ) ; } elsif ( $xit == 100 ) { $item -> set_val ( 1 ) ; } elsif ( $xit == 1 ) { $item -> perr ( "check failed ; $err" ) ; } else { $item -> perr ( "unknown exit ; $xit" ) ; } } } } } 1 ;