summaryrefslogtreecommitdiffhomepage
path: root/applications/luci-app-yggdrasil/htdocs/luci-static/resources/view/yggdrasil/status.js
diff options
context:
space:
mode:
Diffstat (limited to 'applications/luci-app-yggdrasil/htdocs/luci-static/resources/view/yggdrasil/status.js')
-rw-r--r--applications/luci-app-yggdrasil/htdocs/luci-static/resources/view/yggdrasil/status.js113
1 files changed, 113 insertions, 0 deletions
diff --git a/applications/luci-app-yggdrasil/htdocs/luci-static/resources/view/yggdrasil/status.js b/applications/luci-app-yggdrasil/htdocs/luci-static/resources/view/yggdrasil/status.js
new file mode 100644
index 0000000000..3fb6c1f7fa
--- /dev/null
+++ b/applications/luci-app-yggdrasil/htdocs/luci-static/resources/view/yggdrasil/status.js
@@ -0,0 +1,113 @@
+'use strict';
+'require fs';
+'require form';
+
+function init_view() {
+ var view = document.createElement("div");
+ var self_info = document.createElement("div"); self_info.setAttribute("class", "table");
+
+ var table_data = {
+ "IPv6 address": "self-address",
+ "IPv6 subnet": "self-subnet",
+ "Coords": "self-coords",
+ "Public key": "self-boxpubkey",
+ "Build name": "self-buildname",
+ "Build version": "self-version"
+ };
+
+ Object.keys(table_data).forEach(function(k) {
+ var tr = document.createElement("div");
+ tr.setAttribute("class", "tr");
+ var td1 = document.createElement("div"); td1.setAttribute("class", "td left");
+ td1.textContent = k;
+ var td2 = document.createElement("div"); td2.setAttribute("class", "td left");
+ td2.id = table_data[k];
+
+ tr.appendChild(td1); tr.appendChild(td2); self_info.appendChild(tr);
+ });
+
+ var info_title = document.createElement("h2"); info_title.innerText = _("Yggdrasil node status");
+ view.appendChild(info_title);
+ view.appendChild(self_info);
+ var peering_title = document.createElement("h3"); peering_title.innerText = _("Active peers");
+ view.appendChild(peering_title);
+
+ var peerings = document.createElement("table");
+ peerings.setAttribute("class", "table"); peerings.id = "yggdrasil-peerings";
+ var tr = document.createElement("tr");
+ tr.setAttribute("class", "tr table-titles");
+ ["Endpoint", "Address", "Proto", "Uptime", "Received", "Transmitted"].forEach(function(t) {
+ var th = document.createElement("th"); th.setAttribute("class", "th nowrap left");
+ th.innerText = t;
+ tr.appendChild(th);
+ });
+ peerings.appendChild(tr);
+ view.appendChild(peerings);
+ return view;
+}
+
+function update_active_peers() {
+ fs.exec("/usr/sbin/yggdrasilctl", ["-json", "getPeers"]).then(function(res){
+ if (res && res.code === 0) {
+ var peers = JSON.parse(res.stdout.trim())["peers"];
+ var table = document.querySelector('#yggdrasil-peerings');
+ while (table.rows.length > 1) { table.deleteRow(1); }
+ Object.keys(peers).forEach(function(address) {
+ var row = table.insertRow(-1);
+ row.insertCell(-1).textContent = peers[address].endpoint;
+ row.insertCell(-1).textContent = address;
+ row.insertCell(-1).textContent = peers[address].proto;
+ row.insertCell(-1).textContent = '%t'.format(peers[address].uptime);
+ row.insertCell(-1).textContent = '%1024.2mB'.format(peers[address].bytes_recvd);
+ row.insertCell(-1).textContent = '%1024.2mB'.format(peers[address].bytes_sent);
+ });
+ }
+ });
+}
+
+return L.view.extend({
+ load: function() {
+ return Promise.all([
+ L.resolveDefault(fs.stat("/usr/sbin/yggdrasilctl"), null),
+ L.resolveDefault(fs.exec("/usr/sbin/yggdrasilctl", ["-json", "getSelf"]), null),
+ L.resolveDefault(fs.exec("/usr/sbin/yggdrasilctl", ["-json", "getPeers"]), null)
+ ]);
+ },
+ render: function(info) {
+ var view = init_view();
+
+ if (info[0] && info[1] && info[1].code === 0) {
+ var obj = JSON.parse(info[1].stdout.trim())["self"];
+ var peers = JSON.parse(info[2].stdout.trim())["peers"];
+
+ var address = Object.keys(obj)[0];
+ var r = obj[address];
+ view.querySelector('#self-address').innerText = address;
+ view.querySelector('#self-subnet').innerText = r.subnet;
+ view.querySelector('#self-coords').innerText = r.coords;
+ view.querySelector('#self-boxpubkey').innerText = r.box_pub_key;
+ view.querySelector('#self-buildname').innerText = r.build_name;
+ view.querySelector('#self-version').innerText = r.build_version;
+
+ var table = view.querySelector('#yggdrasil-peerings');
+ Object.keys(peers).forEach(function(address) {
+ var row = table.insertRow(-1);
+ row.insertCell(-1).textContent = peers[address].endpoint;
+ row.insertCell(-1).textContent = address;
+ row.insertCell(-1).textContent = peers[address].proto;
+ row.insertCell(-1).textContent = '%t'.format(peers[address].uptime);
+ row.insertCell(-1).textContent = '%1024.2mB'.format(peers[address].bytes_recvd);
+ row.insertCell(-1).textContent = '%1024.2mB'.format(peers[address].bytes_sent);
+
+ });
+ setInterval(update_active_peers, 5000);
+ } else {
+ view.innerHTML = "<h2>Yggdrasil is not running</h2>";
+ }
+ return view;
+ },
+
+ handleSaveApply: null,
+ handleSave: null,
+ handleReset: null
+});