aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xweb/api/read/oplog22
-rwxr-xr-xweb/api/write/oplog22
-rw-r--r--web/index.html40
-rw-r--r--web/js/nms-oplog.js65
-rw-r--r--web/js/nms.js2
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();