aboutsummaryrefslogtreecommitdiffstats
path: root/collectors/snmpfetchng.pl
diff options
context:
space:
mode:
Diffstat (limited to 'collectors/snmpfetchng.pl')
-rwxr-xr-xcollectors/snmpfetchng.pl75
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;