Net-SNMP-Util

 view release on metacpan or  search on metacpan

examples/realifmon.pl  view on Meta::CPAN


# make session
my ($ses, $err) = Net::SNMP->session(
    -hostname  => $host,
    -version   => "2",
    -community => ($opt{c} || "public")
);
die "[ERROR] $err\n" unless defined $ses;

# main loop
my (%pdata, %cdata);  # flag, previous and current octets data
my $first = 1;
while ( 1 ){
    %cdata = ();
    (my $ret, $err) = snmpwalk(
        snmp => $ses,
        oids => {
            sysUpTime => '1.3.6.1.2.1.1.3',
            ifTable => [
                '1.3.6.1.2.1.31.1.1.1.1',  # [0] ifName
                '1.3.6.1.2.1.2.2.1.7',     # [1] ifAdminStatus
                '1.3.6.1.2.1.2.2.1.8',     # [2] ifOperStatus
                '1.3.6.1.2.1.31.1.1.1.6',  # [3] ifHCInOctets
                '1.3.6.1.2.1.31.1.1.1.10', # [4] ifHCOutOctets
                '1.3.6.1.2.1.31.1.1.1.15', # [5] ifHighSpeed
            ] },
        -mycallback => sub {
            my ($s, $host, $key, $val) = @_;
            return 1 if $key ne 'ifTable';
            my $name = $val->[0][1];
            return 0 if ( $regexp && $name !~ /$regexp/ );
            # storing current octets data
            $cdata{$name}{t} = time;
            $cdata{$name}{i} = $val->[3][1];
            $cdata{$name}{o} = $val->[4][1];
            return 1;
        }
    );
    die "[ERROR] $err\n" unless $ret;

    # header
    $console->Cls();
    $console->Cursor(0, 0);

    printf "%s, up %s - %s\n\n",

examples/realifmon.pl  view on Meta::CPAN

    {
        my ($name, $astat, $ostat, $bw)
            = map { $iftable->[$_]{$i} } qw( 0 1 2 5 );
        if ( $first ){
            printf "%-30s (%-10d) %2d %2d %10.1f %10s %10s\n",
                $name, $i, $astat, $ostat, $bw/1000, '-', '-';
            next;   # skip first
        }

        # calculate (k)bps
        my $td = $cdata{$name}{t} - $pdata{$name}{t};
        my ($inbps, $outbps) = map {
            my $delta = $cdata{$name}{$_} - $pdata{$name}{$_};
            $delta<0? 0: $delta / $td / 1000; # Kbps
        } qw( i o );

        printf "%-30s (%-10d) %2d %2d %10.1f %10.1f %10.1f\n",
            $name, $i, $astat, $ostat, map { $_/1000 } ($bw, $inbps, $outbps);
    }

    %pdata = %cdata;
    $first = 0;
    sleep $wait;
}

__END__


=head1 EXAMPLES

Simply way to check host with specifying community name is;

lib/Net/SNMP/Util.pm  view on Meta::CPAN


    # make session
    my ($ses, $err) = Net::SNMP->session(
        -hostname  => $host,
        -version   => "2",
        -community => ($opt{c} || "public")
    );
    die "[ERROR] $err\n" unless defined $ses;

    # main loop
    my (%pdata, %cdata);  # flag, previous and current octets data
    my $first = 1;
    while ( 1 ){
        %cdata = ();
        (my $ret, $err) = snmpwalk(
            snmp => $ses,
            oids => {
                sysUpTime => '1.3.6.1.2.1.1.3',
                ifTable => [
                    '1.3.6.1.2.1.31.1.1.1.1',  # [0] ifName
                    '1.3.6.1.2.1.2.2.1.7',     # [1] ifAdminStatus
                    '1.3.6.1.2.1.2.2.1.8',     # [2] ifOperStatus
                    '1.3.6.1.2.1.31.1.1.1.6',  # [3] ifHCInOctets
                    '1.3.6.1.2.1.31.1.1.1.10', # [4] ifHCOutOctets
                    '1.3.6.1.2.1.31.1.1.1.15', # [5] ifHighSpeed
                ] },
            -mycallback => sub {
                my ($s, $host, $key, $val) = @_;
                return 1 if $key ne 'ifTable';
                my $name = $val->[0][1];
                return 0 if ( $regexp && $name !~ /$regexp/ );
                # storing current octets data
                $cdata{$name}{t} = time;
                $cdata{$name}{i} = $val->[3][1];
                $cdata{$name}{o} = $val->[4][1];
                return 1;
            }
        );
        die "[ERROR] $err\n" unless $ret;

        # header
        $console->Cls();
        $console->Cursor(0, 0);

        printf "%s, up %s - %s\n\n",

lib/Net/SNMP/Util.pm  view on Meta::CPAN

        {
            my ($name, $astat, $ostat, $bw)
                = map { $iftable->[$_]{$i} } qw( 0 1 2 5 );
            if ( $first ){
                printf "%-30s (%-10d) %2d %2d %10.1f %10s %10s\n",
                    $name, $i, $astat, $ostat, $bw/1000, '-', '-';
                next;   # skip first
            }

            # calculate (k)bps
            my $td = $cdata{$name}{t} - $pdata{$name}{t};
            my ($inbps, $outbps) = map {
                my $delta = $cdata{$name}{$_} - $pdata{$name}{$_};
                $delta<0? 0: $delta / $td / 1000; # Kbps
            } qw( i o );

            printf "%-30s (%-10d) %2d %2d %10.1f %10.1f %10.1f\n",
                $name, $i, $astat, $ostat, map { $_/1000 } ($bw, $inbps, $outbps);
        }

        %pdata = %cdata;
        $first = 0;
        sleep $wait;
    }

    __END__


=head2 3. Tiny MRTG with RRDTool (SNMPv2c)

With installing Tobias Oetiker's RRDTool and RRD::Simple, this sample will do



( run in 0.861 second using v1.01-cache-2.11-cpan-454fe037f31 )