luci-mod-admin-full: unify DHCP lease status code
authorJo-Philipp Wich <jo@mein.io>
Thu, 28 Jun 2018 07:39:34 +0000 (09:39 +0200)
committerJo-Philipp Wich <jo@mein.io>
Thu, 28 Jun 2018 07:42:17 +0000 (09:42 +0200)
Merge the DHCP lease status code of the status overview and DHCP/DNS pages
into a single shared partial template.

Also remove some redundant markup on the index page and wireless assoc list
templates.

Signed-off-by: Jo-Philipp Wich <jo@mein.io>
modules/luci-mod-admin-full/luasrc/view/admin_network/lease_status.htm
modules/luci-mod-admin-full/luasrc/view/admin_network/wifi_assoclist.htm
modules/luci-mod-admin-full/luasrc/view/admin_status/index.htm

index a1b2c8454dd5dd25f23988ff1c4cf76691fe8ffa..8fbbdc94777cac6b4006534fea1c00938278339a 100644 (file)
@@ -1,27 +1,11 @@
 <script type="text/javascript">//<![CDATA[
-       function duid2mac(duid) {
-               // DUID-LLT / Ethernet
-               if (duid.length === 28 && duid.substr(0, 8) === '00010001')
-                       return duid.substr(16).replace(/(..)(?=..)/g, '$1:').toUpperCase();
-
-               // DUID-LL / Ethernet
-               if (duid.length === 20 && duid.substr(0, 8) === '00030001')
-                       return duid.substr(8).replace(/(..)(?=..)/g, '$1:').toUpperCase();
-
-               return null;
-       }
-
-       var hosts = <%=luci.http.write_json(luci.sys.net.host_hints())%>;
-
        XHR.poll(5, '<%=url('admin/network/dhcplease_status')%>', null,
                function(x, st)
                {
                        var tb = document.getElementById('lease_status_table');
                        if (st && st[0] && tb)
                        {
-                               /* clear all rows */
-                               while (tb.firstElementChild !== tb.lastElementChild)
-                                       tb.removeChild(tb.lastElementChild);
+                               var rows = [];
 
                                for (var i = 0; i < st[0].length; i++)
                                {
                                        else
                                                timestr = String.format('%t', st[0][i].expires);
 
-                                       tb.appendChild(E('<div class="tr cbi-rowstyle-%d">'.format((i % 2) + 1), [
-                                               E('<div class="td">', st[0][i].hostname || '?'),
-                                               E('<div class="td">', st[0][i].ipaddr),
-                                               E('<div class="td">', st[0][i].macaddr),
-                                               E('<div class="td">', timestr)
-                                       ]));
+                                       rows.push([
+                                               st[0][i].hostname || '?',
+                                               st[0][i].ipaddr,
+                                               st[0][i].macaddr,
+                                               timestr
+                                       ]);
                                }
 
-                               if (tb.firstElementChild === tb.lastElementChild)
-                                       tb.appendChild(E('<div class="tr"><div class="td"><em><br /><%:There are no active leases.%></em></div></div>'));
+                               cbi_update_table(tb, rows, '<em><%:There are no active leases.%></em>');
                        }
 
                        var tb6 = document.getElementById('lease6_status_table');
@@ -51,9 +34,7 @@
                        {
                                tb6.parentNode.style.display = 'block';
 
-                               /* clear all rows */
-                               while (tb6.firstElementChild !== tb6.lastElementChild)
-                                       tb6.removeChild(tb6.lastElementChild);
+                               var rows = [];
 
                                for (var i = 0; i < st[1].length; i++)
                                {
                                        else
                                                timestr = String.format('%t', st[1][i].expires);
 
-                                       var host = hosts[duid2mac(st[1][i].duid)],
-                                           name = st[1][i].hostname,
-                                           hint = null;
-
-                                       if (!name) {
-                                               if (host)
-                                                       hint = host.name || host.ipv4 || host.ipv6;
-                                       }
-                                       else {
-                                               if (host && host.name && st[1][i].hostname != host.name)
-                                                       hint = host.name;
-                                       }
+                                       var name = st[1][i].hostname,
+                                           hint = st[1][i].host_hint;
 
-                                       tb6.appendChild(E('<div class="tr cbi-rowstyle-%d">'.format((i % 2) + 1), [
-                                               E('<div class="td nowrap">', hint ? '%h (%h)'.format(name || '?', hint) : (name || '?')),
-                                               E('<div class="td">', st[1][i].ip6addr),
-                                               E('<div class="td">', st[1][i].duid),
-                                               E('<div class="td">', timestr)
-                                       ]));
+                                       rows.push([
+                                               hint ? '%h (%h)'.format(name || '?', hint) : (name || '?'),
+                                               st[1][i].ip6addr,
+                                               st[1][i].duid,
+                                               timestr
+                                       ]);
                                }
 
-                               if (tb6.firstElementChild === tb6.lastElementChild)
-                                       tb6.appendChild(E('<div class="tr"><div class="td"><em><br /><%:There are no active leases.%></em></div></div>'));
+                               cbi_update_table(tb6, rows, '<em><%:There are no active leases.%></em>');
                        }
                }
        );
 //]]></script>
 
-<fieldset class="cbi-section">
-       <legend><%:Active DHCP Leases%></legend>
+<div class="cbi-section">
+       <h3><%:Active DHCP Leases%></h3>
        <div class="table" id="lease_status_table">
-               <div class="tr">
+               <div class="tr table-titles">
                        <div class="th"><%:Hostname%></div>
                        <div class="th"><%:IPv4-Address%></div>
                        <div class="th"><%:MAC-Address%></div>
                        <div class="th"><%:Leasetime remaining%></div>
                </div>
-               <div class="tr">
-                       <div class="td" colspan="4"><em><br /><%:Collecting data...%></em></div>
+               <div class="tr placeholder">
+                       <div class="td"><em><%:Collecting data...%></em></div>
                </div>
        </div>
-</fieldset>
+</div>
 
-<fieldset class="cbi-section" style="display:none">
-       <legend><%:Active DHCPv6 Leases%></legend>
+<div class="cbi-section" style="display:none">
+       <h3><%:Active DHCPv6 Leases%></h3>
        <div class="table" id="lease6_status_table">
-               <div class="tr">
+               <div class="tr table-titles">
                        <div class="th"><%:Host%></div>
                        <div class="th"><%:IPv6-Address%></div>
                        <div class="th"><%:DUID%></div>
                        <div class="th"><%:Leasetime remaining%></div>
                </div>
-               <div class="tr">
-                       <div class="td" colspan="4"><em><br /><%:Collecting data...%></em></div>
+               <div class="tr placeholder">
+                       <div class="td"><em><%:Collecting data...%></em></div>
                </div>
        </div>
-</fieldset>
+</div>
index f3e2313ee6ad69e3af90584129bfae1d6f76d173..b6f84c0607f3ec61859732cd22027b62f019db5a 100644 (file)
        );
 //]]></script>
 
-<div class="cbi-section-node">
-       <div class="table" id="wifi_assoclist_table">
-               <div class="tr table-titles">
-                       <div class="th nowrap"><%:Network%></div>
-                       <div class="th hide-xs"><%:MAC-Address%></div>
-                       <div class="th nowrap"><%:Host%></div>
-                       <div class="th nowrap"><%:Signal%> / <%:Noise%></div>
-                       <div class="th nowrap"><%:RX Rate%> / <%:TX Rate%></div>
-               </div>
-               <div class="tr placeholder">
-                       <div class="td"><em><%:Collecting data...%></em></div>
-               </div>
+<div class="table" id="wifi_assoclist_table">
+       <div class="tr table-titles">
+               <div class="th nowrap"><%:Network%></div>
+               <div class="th hide-xs"><%:MAC-Address%></div>
+               <div class="th nowrap"><%:Host%></div>
+               <div class="th nowrap"><%:Signal%> / <%:Noise%></div>
+               <div class="th nowrap"><%:RX Rate%> / <%:TX Rate%></div>
+       </div>
+       <div class="tr placeholder">
+               <div class="td"><em><%:Collecting data...%></em></div>
        </div>
 </div>
index 6083a8a2c538c2db4470b2b7581a2dd3f7a5b4ca..9aee30b5f9968ed536cf059dac5776fa45a7426f 100644 (file)
@@ -53,8 +53,6 @@
                        swap       = swapinfo,
                        connmax    = conn_max,
                        conncount  = conn_count,
-                       leases     = stat.dhcp_leases(),
-                       leases6    = stat.dhcp6_leases(),
                        wifinets   = stat.wifi_networks()
                }
 
                luci.http.prepare_content("application/json")
                luci.http.write_json(rv)
 
-               return
-       elseif luci.http.formvalue("hosts") == "1" then
-               luci.http.prepare_content("application/json")
-               luci.http.write_json(luci.sys.net.host_hints())
-
                return
        end
 -%>
                );
        }
 
-       function duid2mac(duid) {
-               // DUID-LLT / Ethernet
-               if (duid.length === 28 && duid.substr(0, 8) === '00010001')
-                       return duid.substr(16).replace(/(..)(?=..)/g, '$1:').toUpperCase();
-
-               // DUID-LL / Ethernet
-               if (duid.length === 20 && duid.substr(0, 8) === '00030001')
-                       return duid.substr(8).replace(/(..)(?=..)/g, '$1:').toUpperCase();
-
-               return null;
-       }
-
-       var npoll = 1;
-       var hosts = <%=luci.http.write_json(luci.sys.net.host_hints())%>;
-
-       function updateHosts() {
-               XHR.get('<%=REQUEST_URI%>', { hosts: 1 }, function(x, data) {
-                       hosts = data;
-               });
-       }
-
        function labelList(items, offset) {
                var rv = [ ];
 
        XHR.poll(5, '<%=REQUEST_URI%>', { status: 1 },
                function(x, info)
                {
-                       if (!(npoll++ % 5))
-                               updateHosts();
-
                        var us = document.getElementById('upstream_status_table');
 
                        while (us.lastElementChild)
                                );
                        <% end %>
 
-                       <% if has_dhcp then %>
-                       var ls = document.getElementById('lease_status_table');
-                       if (ls)
-                       {
-                               var rows = [];
-
-                               for (var i = 0; i < info.leases.length; i++)
-                               {
-                                       var timestr;
-
-                                       if (info.leases[i].expires === false)
-                                               timestr = '<em><%:unlimited%></em>';
-                                       else if (info.leases[i].expires <= 0)
-                                               timestr = '<em><%:expired%></em>';
-                                       else
-                                               timestr = String.format('%t', info.leases[i].expires);
-
-                                       rows.push([
-                                               info.leases[i].hostname ? info.leases[i].hostname : '?',
-                                               info.leases[i].ipaddr,
-                                               info.leases[i].macaddr,
-                                               timestr
-                                       ]);
-                               }
-
-                               cbi_update_table(ls, rows, '<em><%:There are no active leases.%></em>');
-                       }
-
-                       var ls6 = document.getElementById('lease6_status_table');
-                       if (ls6 && info.leases6)
-                       {
-                               ls6.parentNode.parentNode.style.display = 'block';
-
-                               var rows = [];
-
-                               for (var i = 0; i < info.leases6.length; i++)
-                               {
-                                       var timestr;
-
-                                       if (info.leases6[i].expires === false)
-                                               timestr = '<em><%:unlimited%></em>';
-                                       else if (info.leases6[i].expires <= 0)
-                                               timestr = '<em><%:expired%></em>';
-                                       else
-                                               timestr = String.format('%t', info.leases6[i].expires);
-
-                                       var host = hosts[duid2mac(info.leases6[i].duid)],
-                                           name = info.leases6[i].hostname,
-                                           hint = null;
-
-                                       if (!name) {
-                                               if (host)
-                                                       hint = host.name || host.ipv4 || host.ipv6;
-                                       }
-                                       else {
-                                               if (host && host.name && info.leases6[i].hostname != host.name)
-                                                       hint = host.name;
-                                       }
-
-                                       rows.push([
-                                               hint ? '%h (%h)'.format(name || '?', hint) : (name || '?'),
-                                               info.leases6[i].ip6addr,
-                                               info.leases6[i].duid,
-                                               timestr
-                                       ]);
-                               }
-
-                               cbi_update_table(ls6, rows, '<em><%:There are no active leases.%></em>');
-                       }
-                       <% end %>
-
                        <% if has_wifi then %>
                        var ws = document.getElementById('wifi_status_table');
                        if (ws)
        </div>
 </div>
 
-<% if has_dhcp then %>
-<div class="cbi-section">
-       <h3><%:DHCP Leases%></h3>
-
-       <div class="cbi-section-node">
-               <div class="table" id="lease_status_table">
-                       <div class="tr table-titles">
-                               <div class="th"><%:Hostname%></div>
-                               <div class="th"><%:IPv4-Address%></div>
-                               <div class="th"><%:MAC-Address%></div>
-                               <div class="th"><%:Leasetime remaining%></div>
-                       </div>
-                       <div class="tr cbi-section-table-row">
-                               <div class="td" colspan="4"><em><br /><%:Collecting data...%></em></div>
-                       </div>
-               </div>
-       </div>
-</div>
-
-<div class="cbi-section" style="display:none">
-       <h3><%:DHCPv6 Leases%></h3>
-
-       <div class="cbi-section-node">
-               <div class="table" id="lease6_status_table">
-                       <div class="tr table-titles">
-                               <div class="th"><%:Host%></div>
-                               <div class="th"><%:IPv6-Address%></div>
-                               <div class="th"><%:DUID%></div>
-                               <div class="th"><%:Leasetime remaining%></div>
-                       </div>
-                       <div class="tr cbi-section-table-row">
-                               <div class="td" colspan="4"><em><br /><%:Collecting data...%></em></div>
-                       </div>
-               </div>
-       </div>
-</div>
-<% end %>
+<%
+       if has_dhcp then
+               include("admin_network/lease_status")
+       end
+%>
 
 <% if has_dsl then %>
 <div class="cbi-section">
        <h3><%:DSL%></h3>
 
-       <div class="cbi-section-node">
-               <div class="table" width="100%">
-                       <div class="tr">
-                               <div class="td left" width="33%" style="vertical-align:top"><%:DSL Status%></div>
-                               <div class="td">
-                                       <div class="table">
-                                               <div class="tr">
-                                                       <div class="td" id="dsl_i" style="width:16px; text-align:center; padding:3px"><img src="<%=resource%>/icons/ethernet_disabled.png" /><br /><small>?</small></div>
-                                                       <div class="td left" id="dsl_s" style="vertical-align:middle; padding: 3px"><em><%:Collecting data...%></em></div>
-                                               </div>
+       <div class="table" width="100%">
+               <div class="tr">
+                       <div class="td left" width="33%" style="vertical-align:top"><%:DSL Status%></div>
+                       <div class="td">
+                               <div class="table">
+                                       <div class="tr">
+                                               <div class="td" id="dsl_i" style="width:16px; text-align:center; padding:3px"><img src="<%=resource%>/icons/ethernet_disabled.png" /><br /><small>?</small></div>
+                                               <div class="td left" id="dsl_s" style="vertical-align:middle; padding: 3px"><em><%:Collecting data...%></em></div>
                                        </div>
                                </div>
                        </div>