100 lines
2.9 KiB
JavaScript
100 lines
2.9 KiB
JavaScript
"use strict";
|
|
var repeat;
|
|
|
|
moment.relativeTimeThreshold('m', 120);
|
|
|
|
function escapeHTML(html) {
|
|
return document.createElement('div').appendChild(document.createTextNode(html)).parentNode.innerHTML;
|
|
}
|
|
|
|
|
|
function makeTable(str, arr)
|
|
{
|
|
var table=d3.select(str);
|
|
table.html("");
|
|
var thead=table.append("thead");
|
|
var tbody=table.append("tbody");
|
|
|
|
var rows=tbody.selectAll("tr").
|
|
data(arr).
|
|
enter().
|
|
append("tr");
|
|
|
|
var columns= ["id", "last-seen", "latitude", "longitude", "owner", "remark", "serialno", "hwversion", "swversion", "mods", "githash", "uptime", "clockdriftns", "clockacc", "freqacc", "h", "acc", "satellites"];
|
|
|
|
// append the header row
|
|
thead.append("tr")
|
|
.selectAll("th")
|
|
.data(columns)
|
|
.enter()
|
|
.append("th")
|
|
.text(function(d) {
|
|
return d;
|
|
});
|
|
|
|
var cells = rows.selectAll("td").
|
|
data(function(row) {
|
|
return columns.map(function(column) {
|
|
var ret={};
|
|
ret.align = "right";
|
|
ret.color = null;
|
|
if(column == "id") {
|
|
ret.value='<a href="observer.html?observer='+row[column]+'">'+row[column]+"</a>";
|
|
}
|
|
else if(column == "last-seen") {
|
|
ret.value = moment(1000*row["last-seen"]).fromNow();
|
|
let lastSeen = moment(1000*row["last-seen"]);
|
|
let age = (moment() - lastSeen);
|
|
// console.log(age.valueOf()/1000);
|
|
if(age.valueOf() / 60000 > 5)
|
|
ret.color = "red";
|
|
|
|
}
|
|
else if(column == "satellites") {
|
|
ret.value = 0;
|
|
Object.keys(row["svs"]).forEach(function(d) {ret.value = ret.value +1 });
|
|
}
|
|
else {
|
|
ret.value = escapeHTML(row[column]);
|
|
}
|
|
return ret;
|
|
})}).
|
|
enter().append("td").html(function(d) {
|
|
return d.value;
|
|
|
|
}).attr("align", d=> d.align).style("background-color", d=> d.color);
|
|
|
|
}
|
|
|
|
var sats={};
|
|
var lastseen=null;
|
|
function update()
|
|
{
|
|
var seconds = 2;
|
|
clearTimeout(repeat);
|
|
repeat=setTimeout(update, 5000.0*seconds);
|
|
|
|
if(lastseen != null)
|
|
d3.select("#freshness").html(lastseen.fromNow());
|
|
d3.json("./global.json", function(d) {
|
|
lastseen = moment(1000*d["last-seen"]);
|
|
d3.select("#freshness").html(lastseen.fromNow());
|
|
});
|
|
|
|
|
|
d3.queue(1).defer(d3.json, "./svs.json").defer(d3.json, "./observers.json").awaitAll(ready);
|
|
|
|
function ready(error, results) {
|
|
var arr=[];
|
|
Object.keys(results[1]).forEach(function(e) {
|
|
arr.push(results[1][e]);
|
|
});
|
|
makeTable("#galileo", arr, results[0]);
|
|
};
|
|
|
|
}
|
|
|
|
repeat=update();
|
|
|
|
|