function timeSince(obj) { last = new Date(Number(obj)); var seconds = Math.floor((new Date() - last) / 1000); interval = Math.floor(seconds / 3600); out = ""; if (interval > 24) return "at " + last.toUTCString().substr(4); 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 == 2 ? "yellow" : (msg.status == 0 ? "red" : "grey"))); device_status.prop("title", msg.status == 1 ? "Online and in VPN mode" : (msg.status == 2 ? "Online and in local mode" : (msg.status == 0 ? "Offline" : "No information available"))); 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.name ? (" (" + msg.network.name + ")") : "")); }; 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 askdeletewifi(wifi_id) { if (confirm("Are you sure you want to delete this WiFi?")) window.location.href = "/wifi/" + wifi_id + "/delete"; }; function askdeleteuser(user_id) { if (confirm("Are you sure you want to delete this User?")) window.location.href = "/users/" + user_id + "/delete"; }; function askdeletenet(network_id) { if (confirm("Are you sure you want to delete this Network?")) window.location.href = "/networks/" + network_id + "/delete"; }; function askdeleteorga(organization_id) { if (confirm("Are you sure you want to delete this Organization? Any associated Networks, WiFis, Devices and Users will also be deleted irreversibly!")) window.location.href = "/organizations/" + organization_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 might take a minute or two. You may close this page and click the download button again later when the file has been generated or if your browser stops trying to load the file."); }; function showdevices() { $("#devicespart").show(); $("#wifipart").hide(); $("#userpart").hide(); $("#netpart").hide(); $("#orgapart").hide(); $("#linkdevices").css("font-weight", "bold"); $("#linkwifi").css("font-weight", "normal"); $("#linkusers").css("font-weight", "normal"); $("#linknets").css("font-weight", "normal"); $("#linkorgas").css("font-weight", "normal"); window.history.pushState("", "", "/devices/"); }; function showwifi() { $("#devicespart").hide(); $("#wifipart").show(); $("#userpart").hide(); $("#netpart").hide(); $("#orgapart").hide(); $("#linkdevices").css("font-weight", "normal"); $("#linkwifi").css("font-weight", "bold"); $("#linkusers").css("font-weight", "normal"); $("#linknets").css("font-weight", "normal"); $("#linkorgas").css("font-weight", "normal"); window.history.pushState("", "", "/wifi/"); }; function showusers() { $("#devicespart").hide(); $("#wifipart").hide(); $("#userpart").show(); $("#netpart").hide(); $("#orgapart").hide(); $("#linkdevices").css("font-weight", "normal"); $("#linkwifi").css("font-weight", "normal"); $("#linkusers").css("font-weight", "bold"); $("#linknets").css("font-weight", "normal"); $("#linkorgas").css("font-weight", "normal"); window.history.pushState("", "", "/users/"); }; function shownets() { $("#devicespart").hide(); $("#wifipart").hide(); $("#userpart").hide(); $("#netpart").show(); $("#orgapart").hide(); $("#linkdevices").css("font-weight", "normal"); $("#linkwifi").css("font-weight", "normal"); $("#linkusers").css("font-weight", "normal"); $("#linknets").css("font-weight", "bold"); $("#linkorgas").css("font-weight", "normal"); window.history.pushState("", "", "/networks/"); }; function showorgas() { $("#devicespart").hide(); $("#wifipart").hide(); $("#userpart").hide(); $("#netpart").hide(); $("#orgapart").show(); $("#linkdevices").css("font-weight", "normal"); $("#linkwifi").css("font-weight", "normal"); $("#linkusers").css("font-weight", "normal"); $("#linknets").css("font-weight", "normal"); $("#linkorgas").css("font-weight", "bold"); window.history.pushState("", "", "/organizations/"); }; var page = document.location.pathname.substring(1, document.location.pathname.lastIndexOf('/')); if (page == "users") showusers(); else if (page == "wifi") showwifi(); else if (page == "networks") shownets(); else if (page == "organizations") showorgas(); else showdevices(); $("div[id$='-indicator']").each(function() { device_id = this.id.split("-")[0]; updateStatus(device_id); setInterval(updateStatus, 10000, device_id); });