6 my $host = shift @ARGV || die "usage: INFLUX=http://127.0.0.1:8086/write?db=snmp COMMUNITY=snmp-community $0 host";
7 my $community = $ENV{COMMUNITY} || 'public';
8 my $influx = $ENV{INFLUX} || 'http://127.0.0.1:8086/write?db=snmp';
10 use Data::Dump qw(dump);
11 sub XXX { warn "XXX ",scalar @_, Data::Dump::dump(@_) };
13 my ($sec,$min,$hour,$dd,$mm,$yyyy) = localtime(time); $mm++;
17 warn "# time $yyyy-$mm-$dd $hour:$min:$sec $time\n";
18 $time = timelocal($sec,$min,$hour,$dd,$mm-1,$yyyy) * 1000_000_000;
22 # FIXME add -A to pull interfaces if they go up and down
25 my $cmd = qq{ifstat -s '$community@#$host' -b -n -t 1};
27 open(my $ifstat, '-|', $cmd);
29 my $first_skipped = 0;
34 open($curl, '|-', qq( curl -i -XPOST $influx --data-binary \@- ));
36 open($curl, '|-', 'cat');
51 s/(\w) (in|out)/$1_$2/g;
53 if ( $v[0] eq 'Time' ) {
56 } elsif ( $v[0] eq 'HH:MM:SS' ) {
58 @direction = map { s/\W+/_/g; s/^K//; $_ } @v;
59 } elsif ( $v[0] =~ m/^(\d\d):(\d\d):(\d\d)/ ) {
60 next unless $first_skipped++;
62 $hour = $1; $min = $2; $sec = $3; update_time;
67 foreach my $i ( 0 .. $#if ) {
72 $vlan = ",vlan=$1" if $port =~ m/if(\d\d\d\d\d\d)/;
74 print $curl "ifstat,host=$host,port=$port$vlan ",
75 $direction[$i*2], "=", $v[$i*2+1] * 1024, ",",
76 $direction[$i*2+1], "=", $v[$i*2+2] * 1024,
84 warn "# $host ", $curl->tell, " total=$total\n";