diff options
Diffstat (limited to 'collectors')
-rwxr-xr-x | collectors/dhcptail.pl | 2 | ||||
-rwxr-xr-x | collectors/ping.pl | 85 | ||||
-rwxr-xr-x | collectors/snmpfetchng.pl | 75 |
3 files changed, 71 insertions, 91 deletions
diff --git a/collectors/dhcptail.pl b/collectors/dhcptail.pl index 5fd8cf0..5f117b9 100755 --- a/collectors/dhcptail.pl +++ b/collectors/dhcptail.pl @@ -27,7 +27,7 @@ my %months = ( my $realtime = 0; my ($dbh, $q,$check); $dbh = nms::db_connect(); -$q = $dbh->prepare("INSERT INTO dhcp (dhcp_server,switch,time,ip,mac) VALUES($nms::config::dhcp_id,(SELECT switch FROM switches WHERE ?::inet << subnet4 and deleted = false ORDER BY sysname LIMIT 1),?,?,?)"); +$q = $dbh->prepare("INSERT INTO dhcp (dhcp_server,network,time,ip,mac) VALUES($nms::config::dhcp_id,(SELECT network FROM networks WHERE ?::inet << subnet4 ORDER BY name LIMIT 1),?,?,?)"); $check = $dbh->prepare("SELECT max(time)::timestamp - ?::timestamp < '0s'::interval as doit FROM dhcp where dhcp_server = $nms::config::dhcp_id;"); open(SYSLOG, "tail -n 9999999 -F /var/log/messages |") or die "Unable to tail syslog: $!"; diff --git a/collectors/ping.pl b/collectors/ping.pl index 82c5c42..e8fcbdd 100755 --- a/collectors/ping.pl +++ b/collectors/ping.pl @@ -29,6 +29,9 @@ while (1) { if ($elapsed < $target) { sleep($target - ($now - $last)); } + + my @influx_tree = (); + $last = time(); # ping loopbacks my $ping = Net::Oping->new; @@ -82,27 +85,18 @@ while (1) { $latency //= "\\N"; $dbh->pg_putcopydata("$switch\t$latency\n"); if($latency ne "\\N") { - my $cv = AE::cv; - $influx->write( - database => $nms::config::influx_database, - data => [ - { - measurement => 'ping', - tags => { - switch => $sysname, - ip => $ip, - version => 'v4' - }, - fields => { - latency => $latency, - }, - }], - on_success => $cv, - on_error => sub { - $cv->croak("Failed to write data: @_"); - } - ); - $cv->recv; + push (@influx_tree, + { + measurement => 'ping', + tags => { + switch => $sysname, + ip => $ip, + version => 'v4' + }, + fields => { + latency => $latency, + }, + }); } } @@ -120,29 +114,20 @@ while (1) { $latency //= "\\N"; $dbh->pg_putcopydata("$switch\t$latency\n"); - if($latency ne "\\N") { - my $cv = AE::cv; - $influx->write( - database => $nms::config::influx_database, - data => [ - { - measurement => 'ping', - tags => { - switch => $sysname, - ip => $ip, - version => 'v6' - }, - fields => { - latency => $latency, - }, - }], - on_success => $cv, - on_error => sub { - $cv->croak("Failed to write data: @_"); - } - ); - $cv->recv; - } + if($latency ne "\\N") { + push (@influx_tree, + { + measurement => 'ping', + tags => { + switch => $sysname, + ip => $ip, + version => 'v6' + }, + fields => { + latency => $latency, + }, + }); + } } $dbh->pg_putcopyend(); @@ -172,4 +157,16 @@ while (1) { $dbh->pg_putcopyend(); } $dbh->commit; + + 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; + } 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; |