// string, object, function(object) function post(url, data, callback) { console.log("POST " + url + JSON.stringify(data)) var xhr = new XMLHttpRequest(); xhr.open("POST", url, true); xhr.setRequestHeader("Content-type", "application/json"); xhr.onreadystatechange = function () { if (xhr.readyState == 4 && xhr.status == 200) { var json = JSON.parse(xhr.responseText); callback(json); } } xhr.send(JSON.stringify(data)); } // callback(err, json) function getJSON(url, callback) { var xhr = new XMLHttpRequest(); xhr.open('GET', url, true); xhr.responseType = 'json'; xhr.onload = function() { var status = xhr.status; if (status == 200) { callback(null, xhr.response); } else { callback(status); } }; // triggers if connection is refused xhr.onerror = function(e){ callback(e); }; xhr.send(); }; // function to sort arrays of objects after a keys value function sortByKey(array, key) { return array.sort(function(a, b) { var x = Number(a[key]); var y = Number(b[key]); return ((x < y) ? 1 : ((x > y) ? -1 : 0)); }); } function getParameterByName(name, url) { if (!url) url = window.location.href; name = name.replace(/[\[\]]/g, "\\$&"); var regex = new RegExp("[?&]" + name + "(=([^]*)|&|#|$)"), results = regex.exec(url); if (!results) return null; if (!results[2]) return ''; return decodeURIComponent(results[2].replace(/\+/g, " ")); } /// code below here // update the online indicator dot setInterval(function(){ getJSON("/api/slaves", function(err, slaveData){ if(err){ document.querySelector("#onlineIndicator").style.backgroundColor = "yellow"; // compare with Math.floor(x/100000) allows us to check if they are within 10s of each other } else if(Math.floor(slaveData[getParameterByName("slaveID")].time/100000) == Math.floor(Date.now()/100000)){ document.querySelector("#onlineIndicator").style.backgroundColor = "green"; } else { document.querySelector("#onlineIndicator").style.backgroundColor = "red"; } }); }, 1000); function populateSlaveInfo(){ let slaveID = getParameterByName("slaveID"); if(!slaveID){ throw "We need slaveID! GIVE US SLAVEID! ALL HAIL OUR NEW OVERLORDS!" } getJSON("/api/slaves", function(err, slaveData){ /* {"-1530507550":{ "time":"1495475926375", "rconPort":"8714", "rconPassword":"hidden", "serverPort":"14345", "unique":"-1530507550", "publicIP":"localhost", "mods":[ { "modName":"clusterio_1.0.0.zip", "hash":"341feb6c60918c83f7f3a6a14a4a308aef18dda6" },{ "modName":"clusterio_1.0.1.zip", "hash":"aee7a4b67ece19bddf236312fe408a5d4b67248d" },{ "modName":"clusterio_1.1.0.zip", "hash":"18e2f7e402d716e3dd1c1458b7fab2d0bb29eccf" }], "playerCount":"0", "instanceName":"t", "mac":"44-85-00-D2-7E-D6"} } */ let slave = slaveData[slaveID]; let HTML = "
Last seen: "+moment(Number(slave.time)).fromNow()+"
" HTML += "Online players: "+slave.playerCount+"
" HTML += "