diff options
Diffstat (limited to 'collectors/snmpfetchng.pl')
-rwxr-xr-x | collectors/snmpfetchng.pl | 75 |
1 files changed, 29 insertions, 46 deletions
diff --git a/collectors/snmpfetchng.pl b/collectors/snmpfetchng.pl index 9c06f4a..02b75b8 100755 --- a/collectors/snmpfetchng.pl +++ b/collectors/snmpfetchng.pl @@ -4,9 +4,10 @@ use warnings; use DBI; use POSIX; #use Time::HiRes qw(time); +use lib '/opt/gondul/include'; +use FixedSNMP; use SNMP; use Data::Dumper; -use lib '/opt/gondul/include'; use nms qw(convert_mac convert_decimal); use IO::Socket::IP; use Scalar::Util qw(looks_like_number); @@ -32,7 +33,7 @@ EOF # Borrowed from snmpfetch.pl our $qswitch = $dbh->prepare(<<"EOF") SELECT - sysname,switch,host(mgmt_v4_addr) as ip,host(mgmt_v6_addr) as ip2,community, + sysname,switch,host(mgmt_v6_addr) as ip2,host(mgmt_v4_addr) as ip,community, DATE_TRUNC('second', now() - last_updated - poll_frequency) AS overdue FROM switches @@ -103,7 +104,7 @@ sub inner_loop } } mylog( "Polling " . @switches . " switches: $poll_todo"); - SNMP::MainLoop(6); + SNMP::MainLoop(5); } sub callback{ @@ -115,6 +116,7 @@ sub callback{ my @nicids; my $total = 0; my %tree2; + my @influx_tree = (); for my $ret (@top) { for my $var (@{$ret}) { @@ -162,65 +164,45 @@ sub callback{ for my $nic (@nicids) { $tree2{'ports'}{$tree{$nic}{'ifName'}} = $tree{$nic}; my $tmp_field = ''; - for my $tmp_key (keys $tree{$nic}) { + for my $tmp_key (keys %{$tree{$nic}}) { if(looks_like_number($tree{$nic}{$tmp_key})) { $tmp_field = $tree{$nic}{$tmp_key}; } else { $tmp_field = '"'.$tree{$nic}{$tmp_key}.'"'; } - - my $cv = AE::cv; - $influx->write( - database => $nms::config::influx_database, - data => [ + push (@influx_tree, { measurement => 'ports', tags => { switch => $switch{'sysname'}, - interface => $tree{$nic}{'ifName'}, + interface => $tree{$nic}{'ifName'}, }, fields => { $tmp_key => $tmp_field }, - }], - on_success => $cv, - on_error => sub { - $cv->croak("Failed to write data: @_"); - } - ); - $cv->recv; + }); } delete $tree{$nic}; } + for my $iid (keys %tree) { my $tmp_field = ''; for my $key (keys %{$tree{$iid}}) { $tree2{'misc'}{$key}{$iid} = $tree{$iid}{$key}; - if(looks_like_number($tree{$iid}{$key})) { + if(looks_like_number($tree{$iid}{$key})) { $tmp_field = $tree{$iid}{$key}; } else { $tmp_field = '"'.$tree{$iid}{$key}.'"'; } - my $cv = AE::cv; - $influx->write( - database => $nms::config::influx_database, - data => [ + push (@influx_tree, { measurement => 'snmp', tags => { switch => $switch{'sysname'}, }, fields => { $key => $tmp_field }, - }], - on_success => $cv, - on_error => sub { - $cv->croak("Failed to write data: @_"); - } - ); - $cv->recv; - - + }); } } if ($total > 0) { @@ -230,21 +212,22 @@ sub callback{ or die "Couldn't unlock switch"; $dbh->commit; if ($total > 0) { - my $cv = AE::cv; - $influx->write( - database => $nms::config::influx_database, - data => [ - { - measurement => 'snmp', - tags => { - switch => $switch{'sysname'}, - }, - fields => { 'execution_time' => (time - $switch{'start'}) }, - }], - on_success => $cv, - on_error => sub { - $cv->croak("Failed to write data: @_"); - } + push (@influx_tree, + { + measurement => 'snmp', + tags => { + switch => $switch{'sysname'}, + }, + fields => { 'execution_time' => (time - $switch{'start'}) }, + }); + my $cv = AE::cv; + $influx->write( + database => $nms::config::influx_database, + data => [@influx_tree], + on_success => $cv, + on_error => sub { + $cv->croak("Failed to write data: @_"); + } ); $cv->recv; |