diff --git a/html/scripts/hbmon.js b/html/scripts/hbmon.js
new file mode 100644
index 0000000..1ef37b4
--- /dev/null
+++ b/html/scripts/hbmon.js
@@ -0,0 +1,79 @@
+ var sock = null;
+ var ellog = null;
+
+ window.onload = function() {
+ var wsuri;
+
+ ellog = document.getElementById('log');
+
+ bridge_table = document.getElementById('bridge');
+ main_table = document.getElementById('main');
+ masters_table = document.getElementById('masters');
+ opb_table = document.getElementById('opb');
+ peers_table = document.getElementById('peers');
+
+ wsuri = "ws://" + window.location.hostname + ":9000";
+
+ if ("WebSocket" in window) {
+ sock = new WebSocket(wsuri);
+ } else if ("MozWebSocket" in window) {
+ sock = new MozWebSocket(wsuri);
+ } else {
+ if (ellog != null) {
+ log("Browser does not support WebSocket!");}
+ }
+
+ if (sock) {
+ sock.onopen = function() {
+ if (ellog != null) {
+ log("Connected to " + wsuri);}
+ }
+ sock.onclose = function(e) {
+ if (ellog != null) {
+ log("Connection closed (wasClean = " + e.wasClean + ", code = " + e.code + ", reason = '" + e.reason + "')");}
+ sock = null;
+ bridge_table.innerHTML = "";
+ main_table.innerHTML = "";
+ masters_table.innerHTML = "";
+ opb_table.innerHTML = "";
+ peers_table.innerHTML = "";
+ }
+ sock.onmessage = function(e) {
+ var opcode = e.data.slice(0,1);
+ var message = e.data.slice(1);
+ if (opcode == "b") {
+ Bmsg(message);
+ } else if (opcode == "c") {
+ Cmsg(message);
+ } else if (opcode == "i") {
+ Imsg(message);
+ } else if (opcode == "o") {
+ Omsg(message);
+ } else if (opcode == "p") {
+ Pmsg(message);
+ } else if (opcode == "l") {
+ if (ellog != null) {
+ log(message);}
+ } else if (opcode == "q") {
+ log(message);
+ bridge_table.innerHTML = "";
+ main_table.innerHTML = "";
+ masters_table.innerHTML = "";
+ opb_table.innerHTML = "";
+ peers_table.innerHTML = "";
+ } else {
+ log("Unknown Message Received: " + message);
+ }
+ }
+ }
+ };
+
+ function Bmsg(_msg) {bridge_table.innerHTML = _msg;};
+ function Cmsg(_msg) {masters_table.innerHTML = _msg;};
+ function Imsg(_msg) {main_table.innerHTML = _msg;};
+ function Omsg(_msg) {opb_table.innerHTML = _msg;};
+ function Pmsg(_msg) {peers_table.innerHTML = _msg;};
+
+ function log(_msg) {
+ ellog.innerHTML += _msg + '\n';
+ ellog.scrollTop = ellog.scrollHeight;};