aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKristian Lyngstøl <kly@kly.no>2017-04-20 12:09:09 +0200
committerGitHub <noreply@github.com>2017-04-20 12:09:09 +0200
commit50b648bf3814e8e7e288965dc8fae987392efd55 (patch)
treeb7b99ba2d97139826eb5491367b84b3e9b849fef
parenta86fa790950906f0d0f32d2b3d2069fb11d34c98 (diff)
parent10f6ab7d5b9f5c9abcdfcd66104b24c3ff47133c (diff)
Merge pull request #155 from msbone/master
Added a basic search results page and search on tags
-rw-r--r--web/index.html2
-rw-r--r--web/js/nms-info-box.js40
-rw-r--r--web/js/nms-search.js45
3 files changed, 76 insertions, 11 deletions
diff --git a/web/index.html b/web/index.html
index 04fc71e..028d338 100644
--- a/web/index.html
+++ b/web/index.html
@@ -86,7 +86,7 @@
<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>
- <button id="searchbox-submit" class="btn btn-default" type="button" onclick="nmsInfoBox.showWindow('switchInfo',document.getElementById('searchbox').value);">Go!</button>
+ <button id="searchbox-submit" class="btn btn-default" type="button" onclick="nmsSearch.runSearch();">Go!</button>
</span>
</div>
</div>
diff --git a/web/js/nms-info-box.js b/web/js/nms-info-box.js
index b902a69..66b81b9 100644
--- a/web/js/nms-info-box.js
+++ b/web/js/nms-info-box.js
@@ -76,6 +76,16 @@ var nmsInfoBox = nmsInfoBox || {
}
}
},
+ {
+ 'id': 'searchResults',
+ 'title': 'Search Results',
+ 'views': {
+ 'initial': {
+ 'name': 'Search Results',
+ 'panels': ['searchResults']
+ }
+ }
+ },
{
'id': 'inventoryListing',
'title': 'Inventory listing',
@@ -723,6 +733,36 @@ var searchHelpPanel = function() {
};
nmsInfoBox.addPanelType("searchHelp",searchHelpPanel);
+
+/*
+ * Panel type: Search Results
+ *
+ * Show the search results
+ *
+ */
+var searchResultsPanel = function() {
+ var searchPage = 0;
+ nmsInfoPanel.call(this,"searchResults");
+ this.refresh = function(reason) {
+ var collator = new Intl.Collator(undefined, {numeric: true, sensitivity: 'base'});
+ var switches = nmsSearch.matches.sort(collator.compare);
+ var table = document.createElement('table');
+ table.className = "table table-condensed";
+ table.id = "searchResults-table"
+ for (var sw in switches) {
+ var row = table.insertRow(sw);
+ var cell1 = row.insertCell(0);
+ var cell2 = row.insertCell(1);
+ var cell3 = row.insertCell(2);
+ cell1.innerHTML = "<a href='#' onclick='nmsInfoBox.showWindow(\"switchInfo\",\""+switches[sw]+"\");'>"+switches[sw]+ '</a>';
+ cell2.innerHTML = nmsData.switches["switches"][switches[sw]].distro_name;
+ cell3.innerHTML = handlers[0].getInfo(switches[sw]).why;
+ }
+ this._render(table);
+ }
+};
+nmsInfoBox.addPanelType("searchResults",searchResultsPanel);
+
/*
* Panel type: Add switch
*
diff --git a/web/js/nms-search.js b/web/js/nms-search.js
index f435c81..0726bb4 100644
--- a/web/js/nms-search.js
+++ b/web/js/nms-search.js
@@ -15,6 +15,8 @@ nmsSearch.helpText = [
'IP search: Start typing an IP and any switch with that IP registered either as management IP or part of its subnet will be identified',
'SNMP search: Type anything found in the "sysDescr" SNMP OID to hilight a switch matching that. Practical examples include version numbers for firmware (e.g.: "JUNOS 12." vs "JUNOS 14.").'];
+nmsSearch.matches = [];
+
/*
* Test if the search expression "id" matches the switch "sw"
*
@@ -81,6 +83,13 @@ nmsSearch.searchTest = function(id, sw) {
}
} catch (e) {}
try {
+ for (var x in nmsData.switches.switches[sw]['tags']) {
+ if(re.test(nmsData.switches.switches[sw]['tags'][x])){
+ return true;
+ }
+ }
+ } catch (e) {}
+ try {
for (var x in nmsData.snmp.snmp[sw].misc.entPhysicalSerialNum) {
if (nmsData.snmp.snmp[sw].misc.entPhysicalSerialNum[x] == null) {
continue;
@@ -142,7 +151,7 @@ nmsSearch._disableTimer = function() {
nmsSearch.search = function() {
var el = document.getElementById("searchbox");
var id = false;
- var matches = [];
+ nmsSearch.matches = [];
if (el) {
id = el.value.toLowerCase();
}
@@ -150,7 +159,7 @@ nmsSearch.search = function() {
nmsMap.enableHighlights();
for(var sw in nmsData.switches.switches) {
if (nmsSearch.searchTest(id,sw)) {
- matches.push(sw);
+ nmsSearch.matches.push(sw);
nmsMap.setSwitchHighlight(sw,true);
} else {
nmsMap.setSwitchHighlight(sw,false);
@@ -161,10 +170,29 @@ nmsSearch.search = function() {
nmsSearch._disableTimer();
nmsMap.disableHighlights();
}
- if(matches.length == 1) {
- document.getElementById("searchbox-submit").classList.add("btn-primary");
- document.getElementById("searchbox").dataset.match = matches[0];
- } else {
+ if(nmsSearch.matches.length == 0) {
+ document.getElementById("searchbox-submit").classList.remove("btn-success");
+ document.getElementById("searchbox-submit").classList.remove("btn-primary");
+ }
+ else if(nmsSearch.matches.length == 1) {
+ document.getElementById("searchbox-submit").classList.add("btn-success");
+ document.getElementById("searchbox-submit").classList.remove("btn-primary");
+ }
+ else {
+ document.getElementById("searchbox-submit").classList.add("btn-primary");
+ document.getElementById("searchbox-submit").classList.remove("btn-success");
+ }
+
+};
+
+nmsSearch.runSearch = function() {
+ if(nmsSearch.matches.length == 1) {
+ nmsInfoBox.showWindow("switchInfo",nmsSearch.matches[0]);
+ }
+ else if(nmsSearch.matches.length > 1) {
+ nmsInfoBox.showWindow('searchResults',nmsSearch.matches.length);
+ }
+ else {
document.getElementById("searchbox-submit").classList.remove("btn-primary");
document.getElementById("searchbox").dataset.match = '';
}
@@ -173,10 +201,7 @@ nmsSearch.search = function() {
nmsSearch._searchKeyListener = function(e) {
switch (e.keyCode) {
case 13:
- var sw = document.getElementById("searchbox").dataset.match;
- if(sw != '') {
- nmsInfoBox.showWindow("switchInfo",sw);
- }
+ nmsSearch.runSearch();
break;
case 27:
nmsSearch.reset();