aboutsummaryrefslogtreecommitdiffstats
path: root/web
diff options
context:
space:
mode:
Diffstat (limited to 'web')
-rwxr-xr-xweb/api/public/distro-tree (renamed from web/api/read/distro-tree)0
-rwxr-xr-xweb/api/public/switch-state59
-rwxr-xr-xweb/api/read/distro-management31
-rwxr-xr-xweb/api/read/oplog4
-rwxr-xr-xweb/api/read/switches-management4
-rw-r--r--web/css/nms.css1
-rw-r--r--web/img/tg17-clean.pngbin0 -> 168087 bytes
-rw-r--r--web/img/tg17-salkart-full.pngbin0 -> 127041 bytes
-rw-r--r--web/index.html16
-rw-r--r--web/js/nms-info-box.js17
-rw-r--r--web/js/nms-map-handlers.js160
-rw-r--r--web/js/nms-map.js2
-rw-r--r--web/js/nms-oplog.js5
-rw-r--r--web/js/nms-search.js16
-rw-r--r--web/js/nms.js10
15 files changed, 272 insertions, 53 deletions
diff --git a/web/api/read/distro-tree b/web/api/public/distro-tree
index 5d93e1b..5d93e1b 100755
--- a/web/api/read/distro-tree
+++ b/web/api/public/distro-tree
diff --git a/web/api/public/switch-state b/web/api/public/switch-state
index 8e98205..77350c7 100755
--- a/web/api/public/switch-state
+++ b/web/api/public/switch-state
@@ -25,6 +25,8 @@ while ( my $ref = $q->fetchrow_hashref() ) {
my %data = %{JSON::XS::decode_json($ref->{'data'})};
+ $json{'switches'}{$sysname}{'clients'}{'live'} = 0;
+ $json{'then'}{$sysname}{'clients'}{'live'} = 0;
for my $porti (keys %{$data{'ports'}}) {
if (defined($port) and $port ne "" and $port ne $porti) {
next;
@@ -40,13 +42,26 @@ while ( my $ref = $q->fetchrow_hashref() ) {
$json{'switches'}{$sysname}{ifs}{$smallport}{'ifAlias'} = $port{'ifAlias'};
}
if ($data{'ports'}{$porti}{'ifType'} ne "propVirtual" and
- $data{'ports'}{$porti}{'ifAlias'} =~ m/trunk/i) {
- $json{'switches'}{$sysname}{'uplinks'}{'ifHCInOctets'} += $port{'ifHCInOctets'};
- $json{'switches'}{$sysname}{'uplinks'}{'ifHCOutOctets'} += $port{'ifHCOutOctets'};
- if ($port{'ifOperStatus'} eq "up") {
- $json{'switches'}{$sysname}{'uplinks'}{'live'} += 1;
+ $data{'ports'}{$porti}{'ifAlias'} =~ m/LAG member/i) {
+ if ($port{'ifAdminStatus'} eq "up") {
+ $json{'switches'}{$sysname}{'uplinks'}{'ifHCInOctets'} += $port{'ifHCInOctets'};
+ $json{'switches'}{$sysname}{'uplinks'}{'ifHCOutOctets'} += $port{'ifHCOutOctets'};
+ if ($port{'ifOperStatus'} eq "up") {
+ $json{'switches'}{$sysname}{'uplinks'}{'live'} += 1;
+ }
+ $json{'switches'}{$sysname}{'uplinks'}{'total'} += 1;
+ }
+ }
+ if ($data{'ports'}{$porti}{'ifType'} ne "propVirtual" and
+ $data{'ports'}{$porti}{'ifAlias'} =~ m/Clients/i) {
+ if ($port{'ifAdminStatus'} eq "up") {
+ $json{'switches'}{$sysname}{'clients'}{'ifHCInOctets'} += $port{'ifHCInOctets'};
+ $json{'switches'}{$sysname}{'clients'}{'ifHCOutOctets'} += $port{'ifHCOutOctets'};
+ if ($port{'ifOperStatus'} eq "up") {
+ $json{'switches'}{$sysname}{'clients'}{'live'} += 1;
+ }
+ $json{'switches'}{$sysname}{'clients'}{'total'} += 1;
}
- $json{'switches'}{$sysname}{'uplinks'}{'total'} += 1;
}
$json{'switches'}{$sysname}{ifs}{$smallport}{'ifHCInOctets'} += $port{'ifHCInOctets'} || 0;
$json{'switches'}{$sysname}{ifs}{$smallport}{'ifHCOutOctets'} += $port{'ifHCOutOctets'} || 0;
@@ -58,6 +73,9 @@ while ( my $ref = $q->fetchrow_hashref() ) {
}
$json{'switches'}{$sysname}{totals}{'total'} += 1;
}
+
+ $json{'switches'}{$sysname}{vcp}{jnxVirtualChassisPortInOctets} = $data{'vcp'}{'jnxVirtualChassisPortInOctets'};
+ $json{'switches'}{$sysname}{vcp}{jnxVirtualChassisPortOutOctets} = $data{'vcp'}{'jnxVirtualChassisPortOutOctets'};
$json{'switches'}{$sysname}{'temp'} = $data{'misc'}{'jnxOperatingTemp'}{'7.1.0.0'} || $data{'misc'}{'ciscoEnvMonTemperatureStatusValue'}{'1011'} || $data{'misc'}{'ciscoEnvMonTemperatureStatusValue'}{'1008'};
$json{'switches'}{$sysname}{'time'} = $ref->{'time'};
}
@@ -85,19 +103,32 @@ while ( my $ref = $q2->fetchrow_hashref() ) {
if ($porti =~ m/\.0$/) {
next;
}
- if ($data{'ports'}{$porti}{'ifAlias'} =~ m/client/) {
+ if ($data{'ports'}{$porti}{'ifAlias'} =~ m/client/i) {
$smallport =~ s/[0-9-].*$//;
} else {
$json{'then'}{$sysname}{ifs}{$smallport}{'ifAlias'} = $port{'ifAlias'};
}
if ($data{'ports'}{$porti}{'ifType'} ne "propVirtual" and
- $data{'ports'}{$porti}{'ifAlias'} =~ m/trunk/i) {
- $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;
+ $data{'ports'}{$porti}{'ifAlias'} =~ m/LAG member/i) {
+ if ($port{'ifAdminStatus'} eq "up") {
+ $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;
+ }
+ }
+ if ($data{'ports'}{$porti}{'ifType'} ne "propVirtual" and
+ $data{'ports'}{$porti}{'ifAlias'} =~ m/Clients/i) {
+ if ($port{'ifAdminStatus'} eq "up") {
+ $json{'then'}{$sysname}{'clients'}{'ifHCInOctets'} += $port{'ifHCInOctets'};
+ $json{'then'}{$sysname}{'clients'}{'ifHCOutOctets'} += $port{'ifHCOutOctets'};
+ if ($port{'ifOperStatus'} eq "up") {
+ $json{'then'}{$sysname}{'clients'}{'live'} += 1;
+ }
+ $json{'then'}{$sysname}{'clients'}{'total'} += 1;
}
- $json{'then'}{$sysname}{'uplinks'}{'total'} += 1;
}
$json{'then'}{$sysname}{ifs}{$smallport}{'ifHCInOctets'} += $port{'ifHCInOctets'} || 0;
@@ -110,6 +141,8 @@ while ( my $ref = $q2->fetchrow_hashref() ) {
}
$json{'then'}{$sysname}{totals}{'total'} += 1;
}
+ $json{'then'}{$sysname}{vcp}{jnxVirtualChassisPortInOctets} = $data{'vcp'}{'jnxVirtualChassisPortInOctets'};
+ $json{'then'}{$sysname}{vcp}{jnxVirtualChassisPortOutOctets} = $data{'vcp'}{'jnxVirtualChassisPortOutOctets'};
$json{'then'}{$sysname}{'temp'} = $data{'misc'}{'jnxOperatingTemp'}{'7.1.0.0'} || $data{'misc'}{'ciscoEnvMonTemperatureStatusValue'}{'1011'} || $data{'misc'}{'ciscoEnvMonTemperatureStatusValue'}{'1008'};
$json{'then'}{$sysname}{'time'} = $ref->{'time'};
}
diff --git a/web/api/read/distro-management b/web/api/read/distro-management
new file mode 100755
index 0000000..2aa3273
--- /dev/null
+++ b/web/api/read/distro-management
@@ -0,0 +1,31 @@
+#! /usr/bin/perl
+# vim:ts=8:sw=8
+
+use CGI qw(fatalsToBrowser);
+use DBI;
+use lib '/opt/gondul/include';
+use nms;
+use nms::web;
+use strict;
+use warnings;
+use Data::Dumper;
+
+my $target = $ENV{REQUEST_URI};
+$target =~ s/$ENV{SCRIPT_NAME}//;
+$target =~ s/^\///;
+my ($switch, $port) = split(/\//,$target,2);
+my $q2;
+
+$nms::web::cc{'max-age'} = "5";
+$nms::web::cc{'stale-while-revalidate'} = "30";
+
+$q2 = $nms::web::dbh->prepare('SELECT distro_name,sysname,subnet4,subnet6,traffic_vlan,distro_phy_port FROM switches WHERE placement is not null AND distro_name is not null AND distro_phy_port is not null');
+
+$q2->execute();
+while (my $ref = $q2->fetchrow_hashref()) {
+ my $sysname = $ref->{'sysname'};
+ my $distro = $ref->{'distro_name'};
+ $nms::web::json{'distros'}{$distro}{$sysname} = $ref;
+}
+
+finalize_output();
diff --git a/web/api/read/oplog b/web/api/read/oplog
index 92511bb..fb187ea 100755
--- a/web/api/read/oplog
+++ b/web/api/read/oplog
@@ -16,6 +16,10 @@ while (my $ref = $query->fetchrow_hashref()) {
$meh{'id'} = $ref->{'id'};
$meh{'systems'} = $ref->{'systems'};
$meh{'timestamp'} = $ref->{'timestamp'};
+ $meh{'timestamp'} =~ s/ /T/;
+ $meh{'timestamp'} =~ s/\+00$/Z/;
+ $meh{'timestamp'} =~ s/\+(\d\d)$/+\1:00/;
+
push @{$nms::web::json{'oplog'}},\%meh;
}
diff --git a/web/api/read/switches-management b/web/api/read/switches-management
index 425262e..9d8bc53 100755
--- a/web/api/read/switches-management
+++ b/web/api/read/switches-management
@@ -20,9 +20,9 @@ $nms::web::cc{'max-age'} = "5";
$nms::web::cc{'stale-while-revalidate'} = "30";
if (!defined($switch)) {
- $q2 = $nms::web::dbh->prepare('select sysname,mgmt_v4_addr,subnet4,subnet6,mgmt_v6_addr,mgmt_v4_gw,mgmt_v6_gw,mgmt_vlan,traffic_vlan,poll_frequency,last_updated,distro_name,distro_phy_port,community from switches where placement is not null');
+ $q2 = $nms::web::dbh->prepare('select sysname,host(mgmt_v4_addr) as mgmt_v4_addr,subnet4,subnet6,host(mgmt_v6_addr) as mgmt_v6_addr,host(mgmt_v4_gw) as mgmt_v4_gw,host(mgmt_v6_gw) as mgmt_v6_gw,mgmt_vlan,traffic_vlan,poll_frequency,last_updated,distro_name,distro_phy_port,community from switches where placement is not null');
} else {
- $q2 = $nms::web::dbh->prepare('select sysname,mgmt_v4_addr,subnet4,subnet6,mgmt_v6_addr,mgmt_v4_gw,mgmt_v6_gw,mgmt_vlan,traffic_vlan,poll_frequency,last_updated,distro_name,distro_phy_port,community from switches where placement is not null and sysname = ' . $nms::web::dbh->quote($switch) . ';');
+ $q2 = $nms::web::dbh->prepare('select sysname,host(mgmt_v4_addr) as mgmt_v4_addr,subnet4,subnet6,host(mgmt_v6_addr) as mgmt_v6_addr,host(mgmt_v4_gw) as mgmt_v4_gw,host(mgmt_v6_gw) as mgmt_v6_gw,mgmt_vlan,traffic_vlan,poll_frequency,last_updated,distro_name,distro_phy_port,community from switches where placement is not null and sysname = ' . $nms::web::dbh->quote($switch) . ';');
}
$q2->execute();
diff --git a/web/css/nms.css b/web/css/nms.css
index 17f4ff9..9c783af 100644
--- a/web/css/nms.css
+++ b/web/css/nms.css
@@ -127,4 +127,5 @@ div.map-mode-legend button {
.graph {
max-width: 100%;
width: 100%;
+ height: 240px;
}
diff --git a/web/img/tg17-clean.png b/web/img/tg17-clean.png
new file mode 100644
index 0000000..3701b77
--- /dev/null
+++ b/web/img/tg17-clean.png
Binary files differ
diff --git a/web/img/tg17-salkart-full.png b/web/img/tg17-salkart-full.png
new file mode 100644
index 0000000..a7e90b9
--- /dev/null
+++ b/web/img/tg17-salkart-full.png
Binary files differ
diff --git a/web/index.html b/web/index.html
index 3b8e7a5..375b46b 100644
--- a/web/index.html
+++ b/web/index.html
@@ -37,12 +37,12 @@
<div id="navbar" class="navbar-collapse collapse">
<p class="navbar-text"><span class="glyphicon glyphicon-heart" id="heartbeat" aria-hidden="true"></span></p>
<ul class="nav navbar-nav">
- <li id='map-link' class="active"><a href="#" onclick="nmsUi.setActive('map');">Map<span class="sr-only">(current)</span></a></li>
- <li id='admin-link' class="gondul-is-private"><a href="#" onclick="nmsUi.setActive('admin');nmsAdmin.updateConfigPane();">Admin</a></li>
- <li id='template-link' class="gondul-is-private"><a href="#" onclick="nmsUi.setActive('template');">Templates</a></li>
- <li id='oplog-link' class="gondul-is-private"><a href="#" onclick="nmsUi.setActive('oplog');">Oplog</a></li>
+ <li id='map-link' class="active"><a href="#" onclick="nmsUi.setActive('map');" title="Map">M<span class="sr-only">(current)</span></a></li>
+ <li id='admin-link' class="gondul-is-private"><a href="#" onclick="nmsUi.setActive('admin');nmsAdmin.updateConfigPane();" title="Admin">A</a></li>
+ <li id='template-link' class="gondul-is-private"><a href="#" onclick="nmsUi.setActive('template');" title="Template">T</a></li>
+ <li id='oplog-link' class="gondul-is-private"><a href="#" onclick="nmsUi.setActive('oplog');" title="Oplog">O</a></li>
<li class="dropdown">
- <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">Menu
+ <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false" title="Menu">M
<span class="caret"></span>
</a>
<ul class="dropdown-menu" role="menu">
@@ -82,7 +82,7 @@
</li>
<div class="navbar-form navbar-left">
<div class="input-group input-group-sm">
- <input id="searchbox" type="text" class="form-control" placeholder="Filter" oninput="nmsSearch.search()" />
+ <input id="searchbox" type="text" class="form-control" size="8" placeholder="Filter" oninput="nmsSearch.search()" />
<span class="input-group-btn">
<button id="searchbox-x" class="btn btn-default" type="button" onclick="nmsSearch.reset();">X</button>
<button id="searchbox-help" class="btn btn-default" type="button" onclick="nmsInfoBox.showWindow('searchHelp');">?</button>
@@ -92,7 +92,7 @@
</div>
<p class="navbar-text" id="dhcp-summary">(...)</p>
<div class="navbar-text" id="navbar-graph-div">
- <img id="navbar-graph" title="Blue: Average latency. Green: Total traffic. Time frame: last 60 minutes."/>
+ <img id="navbar-graph" style="display:none" title="Blue: Average latency. Green: Total traffic. Time frame: last 60 minutes."/>
</div>
</li>
</ul>
@@ -317,7 +317,7 @@
</div>
</div>
- <div style="display:none;"><img id="source" src="img/tg16-salkart-clean-big.png" ></div>
+ <div style="display:none;"><img id="source" src="img/tg17-clean.png" ></div>
</div>
</div><!--/.fluid-container-->
<script src="js/jquery.min.js" type="text/javascript"></script>
diff --git a/web/js/nms-info-box.js b/web/js/nms-info-box.js
index 6e3f31c..cd84ec0 100644
--- a/web/js/nms-info-box.js
+++ b/web/js/nms-info-box.js
@@ -882,10 +882,23 @@ var inventoryListingPanel = function() {
value = nmsData.snmp.snmp[sw]["misc"]["sysDescr"][0];
break;
case 'jnxBoxSerialNo':
+ if(testTree(nmsData,["snmp","snmp",sw,"misc","entPhysicalSerialNum"])) {
+ for (var x in nmsData.snmp.snmp[sw]["misc"]["entPhysicalSerialNum"]) {
+ value = "misc" + x + ":" + nmsData.snmp.snmp[sw]["misc"]["entPhysicalSerialNum"][x];
+ resultArray.push([sw, value]);
+ }
+ }
+ if (testTree(nmsData,["snmp","snmp",sw,"misc","jnxVirtualChassisMemberSerialnumber"])) {
+ for (var x in nmsData.snmp.snmp[sw]["misc"]["jnxVirtualChassisMemberSerialnumber"]) {
+ value = "member " + x + ":" + nmsData.snmp.snmp[sw]["misc"]["jnxVirtualChassisMemberSerialnumber"][x];
+ resultArray.push([sw, value]);
+ }
+ }
value = nmsData.snmp.snmp[sw]["misc"]["jnxBoxSerialNo"][0];
break;
}
- } catch (e) {}
+ } catch (e) {console.log("sw: " + sw); console.log(e);}
+
resultArray.push([sw, value]);
}
@@ -1062,7 +1075,7 @@ var switchCommentsPanel = function () {
var tmp = (date.getYear() + 1900) + "-" + (month < 10 ? "0": "") + month + "-" + (day < 10 ? "0" : "") + day + " " + date.toTimeString().replace(/:\d\d .*$/,"");
td1.textContent = tmp;
td1.classList.add("left");
- td2.textContent = "[" + logs[v]['username'] + "] " + logs[v]['log'];
+ td2.textContent = logs[v]['systems'] + "[" + logs[v]['username'] + "] " + logs[v]['log'];
}
domObj.appendChild(table);
this._render(domObj);
diff --git a/web/js/nms-map-handlers.js b/web/js/nms-map-handlers.js
index 42785ff..03f5c9e 100644
--- a/web/js/nms-map-handlers.js
+++ b/web/js/nms-map-handlers.js
@@ -68,6 +68,7 @@ var handler_snmp = {
var handler_cpu = {
init:cpuInit,
+ getInfo:cpuInfo,
tag:"cpu",
name:"CPU utilization"
};
@@ -84,6 +85,11 @@ var handler_mgmt = {
tag:"mgmt",
name:"Management info"
};
+var handler_snmpup = {
+ getInfo:snmpUpInfo,
+ tag:"snmpup",
+ name:"SNMP Uplink state"
+};
var handlerInfo = function(tag,desc) {
/*
@@ -126,7 +132,8 @@ var handlers = [
handler_traffic_tot,
handler_dhcp,
handler_snmp,
- handler_cpu
+ handler_cpu,
+ handler_snmpup
];
function uplinkInfo(sw)
@@ -136,31 +143,56 @@ function uplinkInfo(sw)
ret.score = 0;
var u = 0;
var t = 0;
+ var known_t = 0;
if (testTree(nmsData,['switchstate','switches',sw,'uplinks','live'])) {
u = parseInt(nmsData.switchstate.switches[sw].uplinks.live);
t = parseInt(nmsData.switchstate.switches[sw].uplinks.total);
+ known_t = t;
ret.data[0].value = u + " / " + t;
ret.data[0].description = "Uplinks (live/configured)";
if (nmsData.switches.switches[sw].subnet4 == undefined ||
nmsData.switches.switches[sw].subnet4 == null) {
- if (u == t) {
- ret.score = 0
- ret.why = "All uplinks up";
- } else if (u == 1) {
- ret.score = 800;
- ret.why = "Only 1 of " + t + " uplinks alive";
- } else {
- ret.score = 650;
- ret.why = u + " of " + t + " uplinks alive";
- }
+ if (tagged(sw,'3up')) {
+ known_t = 3;
+ } else if (tagged(sw,'2up')) {
+ known_t = 2;
+ } else if (tagged(sw, '1up')) {
+ known_t = 1;
+ } else if (tagged(sw,'4up')) {
+ known_t = 4;
+ }
+ if (known_t != t) {
+ ret.data[0].value += "(Overridden: " + known_t + ")";
+ }
+
+ if (u == known_t) {
+ ret.score = 0;
+ ret.why = "All uplinks up";
+ } else if (u == 1) {
+ ret.score = 800;
+ ret.why = "Only 1 of " + known_t + " uplinks alive";
+ } else if (u < known_t) {
+ ret.score = 450;
+ ret.why = u + " of " + known_t + " uplinks alive";
+ } else if (u > known_t) {
+ ret.score = 350;
+ ret.why = u + " of " + known_t + " uplinks alive";
+ }
}
}
+ if (testTree(nmsData,['switchstate','switches',sw,'clients','live'])) {
+ var tu = parseInt(nmsData.switchstate.switches[sw].clients.live);
+ var tt = parseInt(nmsData.switchstate.switches[sw].clients.total);
+ ret.data[1] = {};
+ ret.data[1].value = (tu) + " / " + (tt);
+ ret.data[1].description = "Client ports (live/total)";
+ }
if (testTree(nmsData,['switchstate','switches',sw,'totals','live'])) {
var tu = parseInt(nmsData.switchstate.switches[sw].totals.live);
var tt = parseInt(nmsData.switchstate.switches[sw].totals.total);
- ret.data[1] = {};
- ret.data[1].value = (tu-u) + " / " + (tt-t);
- ret.data[1].description = "Non-uplink ports (live/total)";
+ ret.data[2] = {};
+ ret.data[2].value = (tu-u) + " / " + (tt-t);
+ ret.data[2].description = "Non-uplink ports (live/total)";
}
return ret;
}
@@ -422,7 +454,7 @@ function pingInfo(sw)
ret.why = "Latency";
ret.score = parseInt(v4 > v6 ? v4 : v6);
}
- if (nmsData.ping.switches[sw].age4 > 5 || nmsData.ping.switches[sw].age6 > 5) {
+ if (nmsData.ping.switches[sw].age4 > 10 || nmsData.ping.switches[sw].age6 > 10) {
ret.why = "Old ping";
ret.score = 900;
}
@@ -431,6 +463,31 @@ function pingInfo(sw)
ret.why = "No ping replies";
ret.score = 999;
}
+
+ if (testTree(nmsData,['smanagement','switches',sw])) {
+ try {
+ var distro = nmsData['smanagement']['switches'][sw]['distro_name'];
+ var phy = nmsData['smanagement']['switches'][sw]['distro_phy_port'];
+ if (!(distro == "" || phy == "" || distro == undefined || phy == undefined)) {
+ if (testTree(nmsData,['snmp','snmp',distro, 'ports',phy,'ifOperStatus'])) {
+ var x = nmsData['snmp']['snmp'][distro]['ports'][phy]['ifOperStatus'];
+ var ping = parseFloat(nmsData["ping"]["switches"][sw]["latency4"]);
+ var ping6 = parseFloat(nmsData["ping"]["switches"][sw]["latency6"]);
+ if (x == "up") {
+ ret.data[3] = {};
+ ret.data[3].description = "Distro-port";
+ ret.data[3].value = "Distro port is live";
+ if (isNaN(ping) && isNaN(ping6)) {
+ ret.score = 850;
+ ret.why = "Distro port is alive, but no IPv4/IPv6 ping. ROLLBACK!";
+ }
+ }
+ }
+ }
+ } catch(e) {
+ console.log("lol");
+ }
+ }
return ret;
}
@@ -478,14 +535,19 @@ function dhcpUpdater()
function dhcpInfo(sw) {
var ret = new handlerInfo("dhcp","DHCP state");
ret.why = "No DHCP data";
- ret.data[0].description = "DHCP age (seconds)";
+ ret.data[0].description = "DHCP age";
if (testTree(nmsData,['dhcp','dhcp',sw])) {
var now = nmsData.dhcp.time;
var then = nmsData.dhcp.dhcp[sw];
var diff = now - then;
- ret.data[0].value = diff;
+ var divider = 6;
+ if(tagged(sw,'slowdhcp')) {
+ divider = 12;
+ }
+
+ ret.data[0].value = secondsToTime(diff);
ret.why = "DHCP freshness";
- ret.score = diff/4> 500 ? 500 : parseInt(diff/4);
+ ret.score = diff/divider> 350 ? 350 : parseInt(diff/divider);
} else {
ret.data[0].value = "No DHCP data";
if (testTree(nmsData,['smanagement','switches',sw])) {
@@ -495,7 +557,7 @@ function dhcpInfo(sw) {
ret.score = 0;
ret.why = "No subnet registered";
} else {
- ret.score = 500;
+ ret.score = 350;
ret.why = "No DHCP data";
}
} else {
@@ -509,9 +571,10 @@ function dhcpInfo(sw) {
ret.data[1].description = "DHCP clients";
}
if (testTree(nmsData,['switches','switches',sw, 'tags'])) {
- if (nmsData.switches.switches[sw].tags.includes('ignoredhcp')) {
+ if (tagged(sw,'ignoredhcp')) {
ret.score = 0;
ret.why += "(Ignored)";
+ ret.data[0].value += "(Ignored)";
}
}
return ret;
@@ -630,6 +693,7 @@ function snmpInfo(sw) {
return ret;
}
+
function snmpInit() {
nmsData.addHandler("snmp", "mapHandler", snmpUpdater);
@@ -641,6 +705,59 @@ function snmpInit() {
snmpUpdater();
}
+function snmpUpInfo(sw) {
+ var ret = new handlerInfo("snmpup","SNMP uplink data");
+ ret.why = "No SNMP data";
+ ret.score = 0;
+
+ if (testTree(nmsData,['snmp','snmp',sw, 'ports'])) {
+ var total_up = 0;
+ var seen_up = 0;
+ for (var port in nmsData.snmp.snmp[sw].ports) {
+ var x = nmsData.snmp.snmp[sw].ports[port];
+ if (x["ifAlias"].match(/Uplink/i) && x["ifOperStatus"] == "up") {
+ total_up += parseInt(x["ifHighSpeed"]);
+ }
+ if (x["ifAlias"].match(/LAG Member/i) && x["ifOperStatus"] == "up") {
+ seen_up += parseInt(x["ifHighSpeed"]);
+ }
+ }
+ ret.data[0].value = "LAG member speed and total speed is " + seen_up;
+ if (total_up != seen_up) {
+ ret.score = 500;
+ ret.why = "LAG member (ge/xt/etc) speed is " + seen_up + " but logical (ae) is " + total_up;
+ ret.data[0].value = ret.why;
+ }
+ }
+ return ret;
+}
+
+function cpuInfo(sw) {
+ var ret = new handlerInfo("cpu","CPU utilization");
+ ret.why = "No CPU info";
+ ret.score = 0;
+
+ if (testTree(nmsData,['snmp','snmp',sw, 'misc','jnxOperatingCPU'])) {
+ var cpu = 0;
+ for (var u in nmsData.snmp.snmp[sw].misc.jnxOperatingCPU) {
+ var local = nmsData.snmp.snmp[sw].misc['jnxOperatingCPU'][u];
+ cpu = Math.max(nmsData.snmp.snmp[sw].misc.jnxOperatingCPU[u],cpu);
+ }
+ if (cpu < 30) {
+ ret.score = 0;
+ } else if (cpu < 50) {
+ ret.score = 100;
+ } else if (cpu < 95) {
+ ret.score = cpu * 2;
+ } else {
+ ret.score = cpu * 4;
+ }
+ ret.why = "CPU utilization: " + cpu + "%";
+ ret.data[0].value = cpu + "%";
+ }
+ return ret;
+}
+
function cpuUpdater() {
for (var sw in nmsData.switches.switches) {
try {
@@ -686,6 +803,9 @@ function mgmtInfo(sw) {
}, {
value: mg.subnet6 || "N/A",
description: "Subnet (v6)"
+ }, {
+ value: mg.distro_name || "N/A",
+ description: "Distro"
}];
if ((mg.mgmt_v4_addr == undefined || mg.mgmt_v4_addr == "") && (mg.mgmt_v6_addr == undefined || mg.mgmt_v6_addr == "")) {
ret.why = "No IPv4 or IPv6 mamagement IP";
diff --git a/web/js/nms-map.js b/web/js/nms-map.js
index 5669acb..1ebcf92 100644
--- a/web/js/nms-map.js
+++ b/web/js/nms-map.js
@@ -38,7 +38,7 @@ var nmsMap = nmsMap || {
textMargin: 4,
xMargin: 10,
yMargin: 20,
- fontSize: 15,
+ fontSize: 14,
fontFace: "sans-serif"
},
scale: 1,
diff --git a/web/js/nms-oplog.js b/web/js/nms-oplog.js
index c418e33..7ac11c4 100644
--- a/web/js/nms-oplog.js
+++ b/web/js/nms-oplog.js
@@ -59,7 +59,7 @@ nmsOplog.commit = function() {
}
nmsOplog.updateComments = function() {
- nmsOplog._updateComments(3,"-mini","time",100);
+ nmsOplog._updateComments(10,"-mini","time",100);
nmsOplog._updateComments(0,"","timestamp");
}
@@ -89,6 +89,9 @@ nmsOplog._updateComments = function(limit,prefix,timefield,cutoff) {
table.classList.add("table-condensed");
var i = 0;
for (var v in nmsData['oplog']['oplog']) {
+ if (cutoff && nmsData.oplog.oplog[v]['username'] == "system") {
+ continue;
+ }
tr = table.insertRow(-1);
td1 = tr.insertCell(0);
td2 = tr.insertCell(1);
diff --git a/web/js/nms-search.js b/web/js/nms-search.js
index 7528a82..41e5397 100644
--- a/web/js/nms-search.js
+++ b/web/js/nms-search.js
@@ -105,6 +105,22 @@ nmsSearch.searchTest = function(id, sw) {
}
}
} catch (e) {}
+ try {
+ for (var x in nmsData.snmp.snmp[sw].misc.jnxBoxSerialNo) {
+ if (nmsData.snmp.snmp[sw].misc.jnxBoxSerialNo[x] == null) {
+ continue;
+ }
+ if (nmsData.snmp.snmp[sw].misc.jnxBoxSerialNo[x] == undefined) {
+ continue;
+ }
+ if (nmsData.snmp.snmp[sw].misc.jnxBoxSerialNo[x] == "") {
+ continue;
+ }
+ if (re.test(nmsData.snmp.snmp[sw].misc.jnxBoxSerialNo[x])) {
+ return true;
+ }
+ }
+ } catch (e) {}
if (re.test(nmsData.snmp.snmp[sw].misc.sysDescr[0])) {
return true;
}
diff --git a/web/js/nms.js b/web/js/nms.js
index 362aebc..8f98c75 100644
--- a/web/js/nms.js
+++ b/web/js/nms.js
@@ -395,8 +395,8 @@ function initNMS() {
nmsData.registerSource("snmp","/api/read/snmp");
nmsData.registerSource("smanagement","/api/read/switches-management");
nmsData.registerSource("oplog", "/api/read/oplog");
- setInterval(nmsUpdateNavbarGraph, 10000);
- nmsUpdateNavbarGraph();
+ // setInterval(nmsUpdateNavbarGraph, 30000);
+ // nmsUpdateNavbarGraph();
nmsOplog.init();
}
@@ -624,11 +624,9 @@ function restoreSettings()
*/
function nmsUpdateNavbarGraph() {
var img = document.getElementById("navbar-graph");
- var w = Math.floor(window.innerWidth / 4);
- if (window.innerWidth > 2300)
- w += 400;
+ var w = 200;
- img.src = "/render/?target=movingAverage(averageSeries(ping.*.ipv4),%225min%22)&target=secondYAxis(averageSeries(perSecond(snmp.*.ports.*.{ifHCInOctets,ifHCOutOctets})))&bgcolor=%23ffffff00&width=" + w + "&height=20&format=svg&from=-60min&until=now&graphOnly=true&somerandomthing=" + Math.floor(new Date().getTime() / 10000);
+ img.src = "/render/?target=movingAverage(averageSeries(ping.*.*.ipv4),%225min%22)&target=secondYAxis(averageSeries(perSecond(snmp.*.*.ports.*.{ifHCInOctets,ifHCOutOctets})))&bgcolor=%23ffffff00&width=" + w + "&height=20&format=svg&from=-30min&until=now&graphOnly=true";
}
/*
* Test if the entire path specified in the arrary "ar" exists under the