From 0289b604314f2edf88ed7abbe47a8118c2e04716 Mon Sep 17 00:00:00 2001 From: peusterm Date: Wed, 11 Jan 2017 19:16:28 +0100 Subject: [PATCH] initial dashboard files --- dashboard/css/main.css | 40 +++++++++++++++++ dashboard/img/SONATA_new.png | Bin 0 -> 30447 bytes dashboard/index.html | 76 ++++++++++++++++++++++++++++++++ dashboard/js/main.js | 83 +++++++++++++++++++++++++++++++++++ 4 files changed, 199 insertions(+) create mode 100644 dashboard/css/main.css create mode 100644 dashboard/img/SONATA_new.png create mode 100644 dashboard/index.html create mode 100644 dashboard/js/main.js diff --git a/dashboard/css/main.css b/dashboard/css/main.css new file mode 100644 index 0000000..bbcdc59 --- /dev/null +++ b/dashboard/css/main.css @@ -0,0 +1,40 @@ +body { + margin: 16px; + height: 100%; +} + +#logo { + height: 90px; + text-align: right; +} + +#content { +} + +#input_filter { + width: 100px; +} + + +.tbl-timestamp { + font-size: 10px; + color: #2b669a; +} + +.tbl-message { + font-size: 14px; +} + +.tbl-address { + font-size: 14px; + vertical-align: middle; +} + +.tbl-cat { + font-size: 14px; + vertical-align: middle; +} + +.unitbutton { + cursor: pointer; +} diff --git a/dashboard/img/SONATA_new.png b/dashboard/img/SONATA_new.png new file mode 100644 index 0000000000000000000000000000000000000000..8fd99f47618c42a2d8003b2d442556d2f655566d GIT binary patch literal 30447 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 z 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 literal 0 HcmV?d00001 diff --git a/dashboard/index.html b/dashboard/index.html new file mode 100644 index 0000000..4ef59b6 --- /dev/null +++ b/dashboard/index.html @@ -0,0 +1,76 @@ + + + + + + + MeDICINE Dashboard + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+
+ +
Messages 0Lateness: -
+ + +
+
+ +
+ + + + + + + diff --git a/dashboard/js/main.js b/dashboard/js/main.js new file mode 100644 index 0000000..928adf7 --- /dev/null +++ b/dashboard/js/main.js @@ -0,0 +1,83 @@ +var API_HOST = "http://127.0.0.1:5001"; +var ERROR_ALERT = true; +var TIMESTAMP = 0; + + + +function updateMessageTable(msg_list) { + +} + +function updateMessageCount(msg_list) { + $("#lbl_msg_count").text(msg_list.length); +} + +function fetchMessages() { + +} + + +function autoFetchMessages() { + fetchMessages(); + // do periodic update + if(AUTO_REFRESH) + setTimeout(autoFetchMessages, AUTO_REFRESH_INTERVAL); +} + +function updateLateness() { + lateness = (Date.now() - LAST_UPDATE_TIMESTAMP) / 1000; + $("#lbl_lateness").text("Lateness: " + Number(lateness).toPrecision(3) + "s") + setTimeout(updateLateness, LATENESS_UPDATE_INTERVAL) +} + +function errorAjaxConnection() +{ + // only do once + if(!ERROR_ALERT) + { + ERROR_ALERT = true; + // show message + bootbox.alert("ERROR!\nAPI request failed.\n\n Please check the backend connection.", function() { + // callback + ERROR_ALERT = false; + }); + } +} + +function change_auto_refresh(event) +{ + console.debug("trigger btn_auto_refresh"); + AUTO_REFRESH = !AUTO_REFRESH; + if(AUTO_REFRESH) { + $("#btn_autorefresh").addClass("active"); + autoFetchMessages(); + } + else { + $("#btn_autorefresh").removeClass("active"); + } +} + + +$(document).ready(function(){ + console.info("document ready"); + // setup global connection error handling + $.ajaxSetup({ + "error": errorAjaxConnection + }); + + // add listeners + //TODO + + // activate message fetching + autoFetchMessages(); + LAST_UPDATE_TIMESTAMP = Date.now(); + updateLateness(); + + + // refresh on window focus + $(window).focus(function () { + // TODO observe if this works well + fetchMessages(); + }); + +}); -- 2.25.1