aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rwxr-xr-xinclude/config.pm.dist28
-rwxr-xr-xinclude/nms.pm2
-rw-r--r--include/nms/util.pm33
-rwxr-xr-xinclude/nms/web.pm33
4 files changed, 63 insertions, 33 deletions
diff --git a/include/config.pm.dist b/include/config.pm.dist
index cce82df..a1db01a 100755
--- a/include/config.pm.dist
+++ b/include/config.pm.dist
@@ -10,8 +10,32 @@ our $db_host = "gerald.tg15.gathering.org";
our $db_username = "nms";
our $db_password = "<removed>";
-# NMS hash used for public NMS obfuscation of interface names
-our $nms_hash = "<removed>";
+# NMS: What SNMP objects to fetch.
+# Some basics
+our @snmp_objects = [
+['ifIndex'],
+['sysName'],
+['sysDescr'],
+['ifHighSpeed'],
+['ifType'],
+['ifName'],
+['ifDescr'],
+['ifAlias'],
+['ifOperStatus'],
+['ifAdminStatus'],
+['ifLastChange'],
+['ifHCInOctets'],
+['ifHCOutOctets'],
+['ifInDiscards'],
+['ifOutDiscards'],
+['ifInErrors'],
+['ifOutErrors'],
+['ifInUnknownProtos'],
+['ifOutQLen'],
+['1.3.6.1.4.1.2636.3.1.13.1.7.7.1.0']
+];
+# Max SNMP polls to fire off at the same time.
+our $snmp_max = 20;
# DHCP-servers
our $dhcp_server1 = "185.12.59.66"; # primary
diff --git a/include/nms.pm b/include/nms.pm
index 6a9598e..2ec922b 100755
--- a/include/nms.pm
+++ b/include/nms.pm
@@ -26,7 +26,7 @@ sub db_connect {
my $dbh = DBI->connect($connstr,
$nms::config::db_username,
- $nms::config::db_password)
+ $nms::config::db_password, {AutoCommit => 0})
or die "Couldn't connect to database";
return $dbh;
}
diff --git a/include/nms/util.pm b/include/nms/util.pm
index c97572b..79598d7 100644
--- a/include/nms/util.pm
+++ b/include/nms/util.pm
@@ -18,6 +18,7 @@ sub parse_switch {
'mgtmt4' => "$mgtmt4",
'mgtmt6' => "$mgtmt6",
'lolid' => "$lolid",
+ 'ip' => "$mgtmt4",
'distro' => "$distro"
);
%{$ret{'placement'}} = guess_placement($switch);
@@ -62,13 +63,13 @@ sub guess_placement {
my ($e, $s) = ($1, $2);
$src = "main";
- $x = int(232 + (($e-1)/2) * 31.1);
+ $x = int(292 + (($e-1)/2) * 31.1);
$y = undef;
- $x += 14 if ($e >= 17);
- $x += 14 if ($e >= 29);
- $x += 14 if ($e >= 45);
- $x += 14 if ($e >= 63);
+ $x += 14 if ($e >= 13);
+ $x += 14 if ($e >= 25);
+ $x += 14 if ($e >= 41);
+ $x += 14 if ($e >= 59);
if ($s > 2) {
$y = 405 - 120 * ($s-2);
@@ -83,17 +84,18 @@ sub guess_placement {
$y += 45 if $name eq "e1-4";
$y += 20 if $name eq "e3-4";
$y += 15 if $name eq "e5-4";
- $yy -= 25 if $name eq "e11-1";
+ $yy -= 25 if $name eq "e7-1";
+ $y += 10 if $name eq "e5-2";
+ $yy -= 25 if $name eq "e5-2";
+ $y += 20 if ($e >= 81 and $s == 2);
+ $yy -= 20 if ($e >= 79 and $s == 1);
+ $yy -= 30 if ($e >= 81 and $s == 1);
- #$yy -= 14 if $name eq "e77-1";
- #$yy -= 28 if $name eq "e79-1";
- #$yy -= 15 if $name eq "e81-1";
- #$yy -= 56 if $name eq "e83-1";
} elsif ($name =~ /^sw(\d+)-creativia$/) {
my ($s) = ($1);
$src = "creativia";
$x = 1535;
- $y = int(130 + 32.2 * $s);
+ $y = int(160 + 32.2 * $s);
$yy = $y + 20;
if ($s == 1) {
$xx = $x + 70;
@@ -108,14 +110,11 @@ sub guess_placement {
} elsif ($name =~ /^crew(\d+)-(\d+)$/) {
my ($s, $n) = ($1, $2);
$src = "crew";
- $x = 1023 + 45 * $n;
- $y = int(329 + 20.5 * $s);
- $xx = $x + 45;
+ $x = 550 + 65 * $n;
+ $y = int(759 + 20.5 * $s);
+ $xx = $x + 65;
$yy = $y + 14;
- if ($s == 1 && $n == 1) {
- $xx += 25;
- }
} else {
# Fallback to have _some_ position
$src = "random";
diff --git a/include/nms/web.pm b/include/nms/web.pm
index ddc1be0..2a5e132 100755
--- a/include/nms/web.pm
+++ b/include/nms/web.pm
@@ -7,8 +7,9 @@ use DBI;
use Data::Dumper;
use JSON;
use nms;
-use Digest::SHA qw(sha512_base64);
-use FreezeThaw qw(freeze);
+use Digest::SHA;
+use FreezeThaw;
+use URI::Escape;
package nms::web;
use base 'Exporter';
@@ -51,39 +52,45 @@ sub db_safe_quote {
# returns a valid $when statement
# Also sets cache-control headers if time is overridden
+# This can be called explicitly to override the window of time we evaluate.
+# Normally up to 15 minutes old data will be returned, but for some API
+# endpoints it is better to return no data than old data (e.g.: ping).
sub setwhen {
- my $when;
$now = "now()";
+ my $window = '15m';
+ if (@_ == 1) {
+ $window = $_[0];
+ }
if (defined($get_params{'now'})) {
$now = db_safe_quote('now') . "::timestamp ";
$cc{'max-age'} = "3600";
}
- if (defined($get_params{'offset'})) {
- $now = "(" . $now . " - " . db_safe_quote('offset') . "::interval)";
- }
- $when = " time > " . $now . " - '5m'::interval and time < " . $now . " ";
- return $when;
+ $when = " time > " . $now . " - '".$window."'::interval and time < " . $now . " ";
}
sub finalize_output {
my $query;
my $hash = Digest::SHA::sha512_base64(FreezeThaw::freeze(%json));
- $query = $dbh->prepare ('select ' . $now . ' as time;');
+ $dbh->commit;
+ $query = $dbh->prepare('select to_char(' . $now . ', \'YYYY-MM-DD"T"HH24:MI:SS\') as time;');
$query->execute();
$json{'time'} = $query->fetchrow_hashref()->{'time'};
$json{'hash'} = $hash;
+
printcc;
-
+
+ print "Etag: $hash\n";
print "Content-Type: text/jso; charset=utf-8\n\n";
print JSON::XS::encode_json(\%json);
print "\n";
}
sub populate_params {
- foreach my $hdr (split("&",$ENV{'QUERY_STRING'} || "")) {
+ my $querystring = $ENV{'QUERY_STRING'} || "";
+ foreach my $hdr (split("&",$querystring)) {
my ($key, $value) = split("=",$hdr,"2");
- $get_params{$key} = $value;
+ $get_params{$key} = URI::Escape::uri_unescape($value);
}
}
@@ -93,6 +100,6 @@ BEGIN {
$dbh = nms::db_connect();
populate_params();
- $when = setwhen();
+ setwhen();
}
1;