#! /usr/bin/perl use strict ; use warnings ; package Probe::Who ; use base 'Probe' ; # users_busy int who busy # users_uniq int who uniq sub ITEMS { [ { name => 'users_busy' , kind => 'int' , args => [ qw(busy) ] } , { name => 'users_uniq' , kind => 'int' , args => [ qw(uniq) ] } ] ; } ; sub main { my $self = shift ; my $itms = shift ; # items to probe : [ item, ... ] my $clnt = shift ; # main::CLIENT my $prog = Util::find_bin ( 'who' ) ; my ( $err, $xit, $sig, @lines ) = Probe::Util::run_prog ( $prog ) ; if ( $err ) { $_ -> perr ( $err ) for @$itms ; } else { chomp @lines ; my %uniq = () ; for my $line ( @lines ) { $uniq { ( split ' ', $line ) [ 0 ] } ++ ; } for my $item ( @$itms ) { my $name = $item -> name ; if ( $name eq 'users_busy' ) { $item -> set_val ( scalar @lines ) ; } elsif ( $name eq 'users_uniq' ) { $item -> set_val ( scalar keys %uniq ) ; } } } } 1 ;