5 var callLuciDHCPLeases = rpc.declare({
7 method: 'getDHCPLeases',
11 return L.Class.extend({
12 title: _('Active DHCP Leases'),
16 L.resolveDefault(callLuciDHCPLeases(), {}),
17 network.getHostHints()
21 render: function(data) {
22 var leases = Array.isArray(data[0].dhcp_leases) ? data[0].dhcp_leases : [],
23 leases6 = Array.isArray(data[0].dhcp6_leases) ? data[0].dhcp6_leases : [],
24 machints = data[1].getMACHints(false);
26 var table = E('div', { 'class': 'table' }, [
27 E('div', { 'class': 'tr table-titles' }, [
28 E('div', { 'class': 'th' }, _('Hostname')),
29 E('div', { 'class': 'th' }, _('IPv4-Address')),
30 E('div', { 'class': 'th' }, _('MAC-Address')),
31 E('div', { 'class': 'th' }, _('Leasetime remaining'))
35 cbi_update_table(table, leases.map(function(lease) {
38 if (lease.expires === false)
39 exp = E('em', _('unlimited'));
40 else if (lease.expires <= 0)
41 exp = E('em', _('expired'));
43 exp = '%t'.format(lease.expires);
46 lease.hostname || '-',
51 }), E('em', _('There are no active leases')));
53 var table6 = E('div', { 'class': 'table' }, [
54 E('div', { 'class': 'tr table-titles' }, [
55 E('div', { 'class': 'th' }, _('Host')),
56 E('div', { 'class': 'th' }, _('IPv6-Address')),
57 E('div', { 'class': 'th' }, _('DUID')),
58 E('div', { 'class': 'th' }, _('Leasetime remaining'))
62 cbi_update_table(table6, leases6.map(function(lease) {
65 if (lease.expires === false)
66 exp = E('em', _('unlimited'));
67 else if (lease.expires <= 0)
68 exp = E('em', _('expired'));
70 exp = '%t'.format(lease.expires);
72 var hint = lease.macaddr ? machints.filter(function(h) { return h[0] == lease.macaddr })[0] : null,
75 if (hint && lease.hostname && lease.hostname != hint[1] && lease.ip6addr != hint[1])
76 host = '%s (%s)'.format(lease.hostname, hint[1]);
77 else if (lease.hostname)
78 host = lease.hostname;
84 lease.ip6addrs ? lease.ip6addrs.join(' ') : lease.ip6addr,
88 }), E('em', _('There are no active leases')));
92 E('h3', _('Active DHCPv6 Leases')),