#! /usr/bin/perl use strict ; use warnings ; package Probe::Tw_cli ; use base 'Probe' ; # raid_3w_status int tw_cli sub ITEMS { [ { name => 'raid_3w_status' , kind => 'int' , args => [ qw(NotOpt 0) ] } ] ; } ; sub main { my $self = shift ; my $itms = shift ; # items to probe : [ item, ... ] my $clnt = shift ; # main::CLIENT my $prog = Util::find_bin ( 'tw_cli' ) ; my @prog = ( $prog, qw(show) ) ; my ( $err, $xit, $sig, @lines ) = Probe::Util::run_prog ( @prog ) ; if ( $err ) { $_ -> perr ( $err ) for @$itms ; } elsif ( @lines < 4 ) { $_ -> perr ( "less than 4 lines" ) for @$itms ; } else { chomp @lines ; for my $item ( @$itms ) { my $name = $item -> name ; my $args = $item -> args ; my $cnt = 0 ; my ( $clas, $targ ) = @$args ; shift @lines ; my %cols = map { ( $_, $cnt ++ ) ; } split ' ', shift @lines ; shift @lines ; pop @lines ; my $col = $cols { $clas } ; unless ( defined $col ) { $item -> perr ( "no col [$clas]" ) ; } else { my $val = 0 ; for my $line ( @lines ) { my $tmp = ( split ' ', $line ) [ $col ] ; if ( defined $tmp ) { $val = $tmp if $tmp > $val ; } else { $item -> perr ( "bad line [$line]" ) ; } } $item -> set_val ( $val - $targ ) ; } } } } 1 ;