aboutsummaryrefslogtreecommitdiff
path: root/cmd/web/static/main.js
diff options
context:
space:
mode:
Diffstat (limited to 'cmd/web/static/main.js')
-rw-r--r--cmd/web/static/main.js84
1 files changed, 84 insertions, 0 deletions
diff --git a/cmd/web/static/main.js b/cmd/web/static/main.js
new file mode 100644
index 0000000..55edf0c
--- /dev/null
+++ b/cmd/web/static/main.js
@@ -0,0 +1,84 @@
+// pretty print duration when given in seconds
+function formatDuration(dur) {
+ var out = "";
+
+ var hours = 0;
+ var minutes = 0;
+
+ if(dur > (60*60)){
+ hours = Math.trunc(dur/(60*60))
+ out = out + hours + " hours "
+ }
+
+ if(dur > 60){
+ minutes = Math.trunc((dur-(hours*60*60))/60)
+ out = out + minutes + " minutes "
+ }
+
+ seconds = Math.trunc(dur - ( (hours*60*60) + (minutes*60) ))
+ out = out + seconds + " seconds "
+
+ return out;
+}
+
+function setStatus(stat) {
+ var elem = document.getElementById("installBar");
+ var msg = document.getElementById("message");
+
+ // console.log(stat)
+
+ if(stat.Running) {
+ percent = Math.round((stat.Transferred/stat.Size)*10000)/100;
+
+ var t = Date.parse(stat.Start);
+ // var n = Date.now();
+ var elapsed = Date.now() - t;
+ var trans = (stat.Transferred/1024/1024);
+
+ console.log(trans)
+ console.log(elapsed / 1000)
+
+ var rate = Math.round(trans / (elapsed / 1000))
+
+ elem.style.width = percent + "%";
+ elem.innerHTML = percent + "%";
+ elem.style.display = "";
+
+ // in seconds
+ var eta = Math.round(((stat.Size - trans)/1024/1024) / rate);
+
+ msg.innerHTML = "Installing: " + stat.Url
+ + "\nRate: " + rate + "mb/s"
+ + "\nEta: " + formatDuration(eta);
+ msg.style.display = "";
+ }
+
+ if(!stat.Running && stat.Transferred >= 50 && stat.Error == null) {
+ elem.style.width = 100 + "%";
+ elem.innerHTML = 100 + "%";
+ msg.innerHTML = "Completed install for: " + stat.Url;
+ elem.style.display = "";
+ msg.style.display = "";
+ }
+
+ if(stat.Error != null) {
+ msg.innerHTML = "Errors encountered while installing from: \n\n"
+ + stat.Url + "\n\n" +
+ JSON.stringify(stat.Error, undefined, 2);
+ elem.style.display = "hidden";
+ msg.style.display = "";
+ }
+}
+
+function updateStatus() {
+window.fetch('/status')
+ .then(function(response){
+ return response.json();
+ }).then(function(json){
+ return setStatus(json);
+ });
+}
+
+document.addEventListener("DOMContentLoaded",function(){
+ setInterval(updateStatus, 750);
+});