modules/admin-full: live status, validation for dhcp leases
[project/luci.git] / modules / admin-full / luasrc / view / admin_network / lease_status.htm
diff --git a/modules/admin-full/luasrc/view/admin_network/lease_status.htm b/modules/admin-full/luasrc/view/admin_network/lease_status.htm
new file mode 100644 (file)
index 0000000..9555d14
--- /dev/null
@@ -0,0 +1,97 @@
+<script type="text/javascript"><![CDATA[
+       var stxhr = new XHR();
+       (function() {
+               stxhr.get('<%=luci.dispatcher.build_url("admin", "network", "dhcplease_status")%>', null,
+                       function(x)
+                       {
+                               var st = x.responseText ? eval('(' + x.responseText + ')') : null;
+                               var tb = document.getElementById('lease_status_table');
+
+                               if (st && tb)
+                               {
+                                       /* clear all rows */
+                                       while( tb.rows.length > 1 )
+                                               tb.rows[1].parentNode.removeChild(tb.rows[1]);
+
+                                       for( var i = 0; i < st.length; i++ )
+                                       {
+                                               var timestr;
+
+                                               if (st[i].expires <= 0)
+                                               {
+                                                       timestr = '<em><%:expired%></em>';
+                                               }
+                                               else
+                                               {
+                                                       var d = 0;
+                                                       var h = 0;
+                                                       var m = 0;
+                                                       var s = st[i].expires;
+
+                                                       if (s > 60) {
+                                                               m = Math.floor(s / 60);
+                                                               s = (s % 60);
+                                                       }
+
+                                                       if (m > 60) {
+                                                               h = Math.floor(m / 60);
+                                                               m = (m % 60);
+                                                       }
+
+                                                       if (h > 24) {
+                                                               d = Math.floor(h / 24);
+                                                               h = (h % 24);
+                                                       }
+
+                                                       timestr = (d > 0)
+                                                               ? String.format('%dd %dh %dm %ds', d, h, m, s)
+                                                               : String.format('%dh %dm %ds', h, m, s);
+                                               }
+
+                                               var tr = document.createElement('tr');
+                                                       tr.className = 'cbi-section-table-row cbi-rowstyle-' + ((i % 2) + 1);
+
+                                               tr.innerHTML = String.format(
+                                                       '<td class="cbi-section-table-cell">%s</td>' +
+                                                       '<td class="cbi-section-table-cell">%s</td>' +
+                                                       '<td class="cbi-section-table-cell">%s</td>' +
+                                                       '<td class="cbi-section-table-cell">%s</td>',
+                                                               st[i].hostname ? st[i].hostname : '?',
+                                                               st[i].ipaddr,
+                                                               st[i].macaddr,
+                                                               timestr
+                                               );
+
+                                               tb.rows[0].parentNode.appendChild(tr);
+                                       }
+
+                                       if( tb.rows.length == 1 )
+                                       {
+                                               var tr = document.createElement('tr');
+                                                       tr.className = 'cbi-section-table-row';
+                                                       tr.innerHTML = '<td colspan="5"><em><br /><%:There are no active leases.%></em></td>';
+
+                                               tb.rows[0].parentNode.appendChild(tr);
+                                       }
+                               }
+                       }
+               )
+
+               window.setTimeout(arguments.callee, 5000);
+       })();
+]]></script>
+
+<fieldset class="cbi-section">
+       <legend><%:Active Leases%></legend>
+       <table class="cbi-section-table" id="lease_status_table">
+               <tr class="cbi-section-table-titles">
+                       <th class="cbi-section-table-cell"><%:Hostname%></th>
+                       <th class="cbi-section-table-cell"><%:IPv4-Address%></th>
+                       <th class="cbi-section-table-cell"><%:MAC-Address%></th>
+                       <th class="cbi-section-table-cell"><%:Leasetime remaining%></th>
+               </tr>
+               <tr class="cbi-section-table-row">
+                       <td colspan="5"><em><br /><%:Collecting data...%></em></td>
+               </tr>
+       </table>
+</fieldset>