aboutsummaryrefslogtreecommitdiff
path: root/cmd/web/static/main.js
blob: 55edf0cec4bd1a14865a8768de86848a18107913 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
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);
});