diff options
-rwxr-xr-x | web/api/read/oplog | 22 | ||||
-rwxr-xr-x | web/api/write/oplog | 22 | ||||
-rw-r--r-- | web/index.html | 40 | ||||
-rw-r--r-- | web/js/nms-oplog.js | 65 | ||||
-rw-r--r-- | web/js/nms.js | 2 |
5 files changed, 148 insertions, 3 deletions
diff --git a/web/api/read/oplog b/web/api/read/oplog new file mode 100755 index 0000000..d56890a --- /dev/null +++ b/web/api/read/oplog @@ -0,0 +1,22 @@ +#! /usr/bin/perl +# vim:ts=8:sw=8 + +use lib '/opt/gondul/include'; +use nms::web; +use strict; +use warnings; + +my $query = $nms::web::dbh->prepare('select id,time as timestamp,extract(hour from time) as h, extract(minute from time) as m,systems,username,log from oplog order by id desc;'); +$query->execute(); +while (my $ref = $query->fetchrow_hashref()) { + my %meh; + $meh{'time'} = $ref->{'h'} . ":" . $ref->{'m'}; + $meh{'log'} = $ref->{'log'}; + $meh{'username'} = $ref->{'username'}; + $meh{'id'} = $ref->{'id'}; + $meh{'systems'} = $ref->{'systems'}; + $meh{'timestamp'} = $ref->{'timestamp'}; + push @{$nms::web::json{'oplog'}},\%meh; +} + +nms::web::finalize_output(); diff --git a/web/api/write/oplog b/web/api/write/oplog new file mode 100755 index 0000000..736ba2b --- /dev/null +++ b/web/api/write/oplog @@ -0,0 +1,22 @@ +#! /usr/bin/perl +# vim:ts=8:sw=8 +use lib '/opt/gondul/include'; +use utf8; +use nms::web qw($dbh db_safe_quote get_input finalize_output); +use strict; +use warnings; + +my $in = get_input(); +my %tmp = %{JSON::XS::decode_json($in)}; + +my $user = $ENV{'REMOTE_USER'} || "undefined"; + +my $q = $nms::web::dbh->prepare("INSERT INTO oplog (username, systems, log) values (?,?,?);"); +$q->execute($user, $tmp{'systems'}, $tmp{'log'}); + +$nms::web::cc{'max-age'} = '0'; +$nms::web::cc{'stale-while-revalidate'} = '0'; +$nms::web::json{'state'} = 'ok'; + +print "X-ban: /api/read/oplog\n"; +finalize_output(); diff --git a/web/index.html b/web/index.html index 9362418..0bd7ade 100644 --- a/web/index.html +++ b/web/index.html @@ -62,6 +62,14 @@ color: white; text-shadow: 4px 4px 5px black; } + .logbook { + background-color: rgba(255,255,255,0.7); + color: black; + } + .nightmode .logbook { + background-color: rgba(0,0,0,0.7); + color: white; + } .tvmode #topCanvas { display: none; } @@ -74,6 +82,9 @@ #admin { display: none; } + #oplog { + display: none; + } .vertical div.map-mode-legend { top: -10px; right: 30px; @@ -104,6 +115,7 @@ <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='oplog-link' class="gondul-is-private"><a href="#" onclick="nmsUi.setActive('oplog');">Oplog</a></li> <li class="dropdown"> <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">Menu <span class="caret"></span> @@ -153,9 +165,16 @@ </div> </li> </ul> - <ul class="nav navbar-nav navbar-right"> - <li><p id="speed" class="navbar-text" title="Client port speed / Total port speed"></p></li> - </ul> + <div class="navbar-form navbar-right gondul-is-private"> + <div class="form-group"> + <input id="logbox-id" type="text" class="form-control" oninput='var x = document.getElementById("searchbox"); var y = document.getElementById("logbox-id"); x.value = y.value; x.oninput();' placeholder="System(s)" /> + </div> + <div class="form-group"> + <input id="logbox" type="text" class="form-control" placeholder="Log" /> + </div> + <button id="logbox-submit" class="btn btn-default" type="button" onclick="nmsOplog.commit();">Log</button> + </div> + </div><!--/.nav-collapse --> </div> </nav> @@ -165,6 +184,14 @@ <div class="row-fluid" id="admin-row"> </div> </div> + <div class="container-fluid" id="oplog"> + <div class="row-fluid" id="oplog-row"> + <div id="oplog-parent" class="logbook"> + <table id="oplog-table" class="table table-condensed"> + </table> + </div> + </div> + </div> <div class="container-fluid" id="map"> <div class="row-fluid"> @@ -320,6 +347,12 @@ <canvas id="inputCanvas" width="1920" height="1032" style="position: absolute; z-index: 60; cursor: pointer;" onmousedown="nmsMap.canvasClick(event)"> </canvas> <canvas id="hiddenCanvas" width="1000" height="10" style="display: none; position: absolute; z-index: 1000 "></canvas> + <div class="logbook gondul-is-private" style="position: absolute; right: 10px; width: 20%; z-index: 70; float: right;"> + <div id="oplog-parent-mini" class="logbook" style="border-color: transparent;"> + <table id="oplog-table-mini" class="table table-condensed"> + </table> + </div> + </div> <div style="display:none;"><img id="source" src="img/tg16-salkart-clean-big.png" ></div> </div> @@ -334,6 +367,7 @@ <script type="text/javascript" src="js/nms-map-handlers.js"></script> <script type="text/javascript" src="js/nms-ui.js"></script> <script type="text/javascript" src="js/nms-admin-pane.js"></script> + <script type="text/javascript" src="js/nms-oplog.js"></script> <script src="js/jquery.datetimepicker.full.js" type="text/javascript"></script> <script type="text/javascript"> initNMS(); diff --git a/web/js/nms-oplog.js b/web/js/nms-oplog.js new file mode 100644 index 0000000..91782e7 --- /dev/null +++ b/web/js/nms-oplog.js @@ -0,0 +1,65 @@ +"use strict"; + +var nmsOplog = nmsOplog || { + +} + +nmsOplog.init = function() { + nmsData.addHandler("oplog", "nmsOplogHandler", nmsOplog.updateComments); +} + +nmsOplog.commit = function() { + var s = document.getElementById('logbox-id').value; + var d = document.getElementById('logbox').value; + + var myData = {"systems": s, "log": d}; + myData = JSON.stringify(myData); + $.ajax({ + type: "POST", + url: "/api/write/oplog", + dataType: "text", + data:myData, + success: function (data, textStatus, jqXHR) { + nmsData.invalidate("oplog"); + } + }); + document.getElementById('logbox-id').value = ""; + document.getElementById('logbox').value = ""; + +} + +nmsOplog.updateComments = function() { + nmsOplog._updateComments(5,"-mini","time"); + nmsOplog._updateComments(0,"","timestamp"); +} +nmsOplog._updateComments = function(limit,prefix,timefield) { + var table = document.createElement("table"); + var tr; + var td1; + var td2; + var td3; + table.className = "table"; + table.classList.add("table"); + table.classList.add("table-condensed"); + var i = 0; + for (var v in nmsData['oplog']['oplog']) { + tr = table.insertRow(-1); + tr.className = + td1 = tr.insertCell(0); + td2 = tr.insertCell(1); + td3 = tr.insertCell(2); + td1.innerHTML = nmsData['oplog']['oplog'][v][timefield]; + td2.innerHTML = nmsData['oplog']['oplog'][v]['username']; + td3.innerHTML = nmsData['oplog']['oplog'][v]['log']; + if (++i == limit) + break; + } + try { + var old = document.getElementById("oplog-table" + prefix); + old.parentElement.removeChild(old); + } catch(e) {} + var par = document.getElementById("oplog-parent" + prefix); + table.id = "oplog-table" + prefix; + par.appendChild(table); +}; + diff --git a/web/js/nms.js b/web/js/nms.js index 4092782..8eb1f3d 100644 --- a/web/js/nms.js +++ b/web/js/nms.js @@ -612,6 +612,8 @@ function initNMS() { nmsData.registerSource("snmp","/api/read/snmp"); nmsData.registerSource("comments", "/api/read/comments"); nmsData.registerSource("smanagement","/api/read/switches-management"); + nmsData.registerSource("oplog", "/api/read/oplog"); + nmsOplog.init(); } restoreSettings(); |