aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKristian Lyngstol <kly@kly@.no>2016-03-22 23:27:32 +0100
committerKristian Lyngstol <kly@kly@.no>2016-03-22 23:27:32 +0100
commit348d197899f37e535feefd5055ae8ef553a71bdf (patch)
tree235807273cdfe6582e1080f62ee5e2a11dac4110
parent068baf7c5de1c4bf3a9b12a5eb8c88057178b19d (diff)
NMS: "Dirty" hack to get switches.then in switch-state
-rwxr-xr-xinclude/nms/web.pm7
-rwxr-xr-xweb/nms.gathering.org/api/public/switch-state39
2 files changed, 45 insertions, 1 deletions
diff --git a/include/nms/web.pm b/include/nms/web.pm
index b36d692..c9f7236 100755
--- a/include/nms/web.pm
+++ b/include/nms/web.pm
@@ -58,13 +58,18 @@ sub db_safe_quote {
sub setwhen {
$now = "now()";
my $window = '15m';
- if (@_ == 1) {
+ my $offset = '0s';
+ if (@_ > 0) {
$window = $_[0];
}
+ if (@_ > 1) {
+ $offset = $_[1];
+ }
if (defined($get_params{'now'})) {
$now = db_safe_quote('now') . "::timestamp ";
$cc{'max-age'} = "3600";
}
+ $now = "(" . $now . " - '" . $offset . "'::interval)";
$when = " time > " . $now . " - '".$window."'::interval and time < " . $now . " ";
}
diff --git a/web/nms.gathering.org/api/public/switch-state b/web/nms.gathering.org/api/public/switch-state
index 7fa6ff5..32cf9a6 100755
--- a/web/nms.gathering.org/api/public/switch-state
+++ b/web/nms.gathering.org/api/public/switch-state
@@ -46,6 +46,45 @@ while ( my $ref = $q->fetchrow_hashref() ) {
$json{'switches'}{$sysname}{'time'} = $ref->{'time'};
}
+nms::web::setwhen('15m','10m');
+my $q2 = $nms::web::dbh->prepare('select sysname,extract(epoch from date_trunc(\'second\',time)) as time,data from snmp natural join switches where id in (select max(id) from snmp where '
+ . $nms::web::when . 'group by switch);');
+
+$q2->execute();
+while ( my $ref = $q2->fetchrow_hashref() ) {
+ my $sysname = $ref->{'sysname'};
+
+ my %data = %{JSON::XS::decode_json($ref->{'data'})};
+
+ for my $porti (keys %{$data{'ports'}}) {
+ my %port = %{$data{'ports'}{$porti}};
+ my $smallport = $porti;
+ if (not $smallport =~ m/^ae/) {
+ $smallport =~ s/[0-9-].*$//;
+ } else {
+ $json{'then'}{$sysname}{ifs}{$smallport}{'ifAlias'} = $port{'ifAlias'};
+ }
+ if ($porti =~ /ge-0\/0\/4[4-7]$/) {
+ $json{'then'}{$sysname}{'uplinks'}{'ifHCInOctets'} += $port{'ifHCInOctets'};
+ $json{'then'}{$sysname}{'uplinks'}{'ifHCOutOctets'} += $port{'ifHCOutOctets'};
+ if ($port{'ifOperStatus'} eq "up") {
+ $json{'then'}{$sysname}{'uplinks'}{'live'} += 1;
+ }
+ $json{'then'}{$sysname}{'uplinks'}{'total'} += 1;
+ }
+
+ $json{'then'}{$sysname}{ifs}{$smallport}{'ifHCInOctets'} += $port{'ifHCInOctets'};
+ $json{'then'}{$sysname}{ifs}{$smallport}{'ifHCOutOctets'} += $port{'ifHCOutOctets'};
+ $json{'then'}{$sysname}{totals}{'ifHCInOctets'} += $port{'ifHCInOctets'};
+ $json{'then'}{$sysname}{totals}{'ifHCOutOctets'} += $port{'ifHCOutOctets'};
+ if ($port{'ifOperStatus'} eq "up") {
+ $json{'then'}{$sysname}{ifs}{$smallport}{'live'} += 1;
+ $json{'then'}{$sysname}{totals}{'live'} += 1;
+ }
+ $json{'then'}{$sysname}{totals}{'total'} += 1;
+ }
+ $json{'then'}{$sysname}{'time'} = $ref->{'time'};
+}
$nms::web::cc{'max-age'} = "5";
$nms::web::cc{'stale-while-revalidate'} = "30";
finalize_output();