function timeSince(obj) { last = new Date(obj) var seconds = Math.floor((new Date() - last) / 1000); interval = Math.floor(seconds / 3600); out = ""; if (interval > 24) return "at " + last.toDateString().substr(4) + " " + last.toLocaleTimeString(); if (interval > 1) out = interval + " hours "; interval = Math.floor(seconds / 60); if (seconds < 120) out = seconds + " seconds " else if (interval > 1 && interval < 120) out = out + interval + " minutes "; return out + "ago" } function styleStatus(msg, device) { device_status = $("#" + device + "-indicator"); device_ip = $("#" + device + "-ip"); device_network = $("#" + device + "-network"); device_name = $("#" + device + "-name"); device_id = $("#" + device + "-id"); device_status.css("color", msg.status == 1 ? "green" : (msg.status == 0 ? ((new Date(msg.lastbeat) < new Date(msg.time) && (new Date() - new Date(msg.lastbeat) < 60)) ? "yellow" : "red") : "grey")); if (msg.hasOwnProperty("ip")) { device_ip.text(msg.ip + (msg.status == 1 ? "" :" (" + timeSince(msg.time) + ")")); }; if (msg.hasOwnProperty("network")) { device_network.text(msg.network.intip + " (" + msg.network.commonname + ")"); }; if (msg.hasOwnProperty("reboot")) { device_id.css("font-style", msg.reboot == 1 ? "italic" : "normal") }; if (msg.hasOwnProperty("update")) { device_id.css("font-weight", msg.update == 1 ? "bold" : "normal") }; if (msg.hasOwnProperty("name")) { device_name.text(msg.name); }; }; function updateStatus(device_id) { $.getJSON( "/devices/" + device_id + "/ping/", function(json) { styleStatus(json, device_id); }); }; function askdelete(device_id) { if (confirm("Are you sure you want to delete this device?")) window.location.href = "/devices/" + device_id + "/delete"; }; function askreboot(device_id) { if (confirm("Are you sure you want to reboot this device?")) window.location.href = "/devices/" + device_id + "/reboot"; }; function downloadnotice() { alert("Your file is being prepared. This will take a minute, please be patient and do not leave this page. The download will start automatically."); };