b1068f0e360e52c5b2411e2306f20434069698df
[project/luci.git] / modules / luci-mod-status / htdocs / luci-static / resources / view / status / include / 40_dhcp.js
1 'use strict';
2 'require rpc';
3 'require network';
4
5 var callLuciDHCPLeases = rpc.declare({
6 object: 'luci-rpc',
7 method: 'getDHCPLeases',
8 expect: { '': {} }
9 });
10
11 return L.Class.extend({
12 title: _('Active DHCP Leases'),
13
14 load: function() {
15 return Promise.all([
16 L.resolveDefault(callLuciDHCPLeases(), {}),
17 network.getHostHints()
18 ]);
19 },
20
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);
25
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' }, _('Lease time remaining'))
32 ])
33 ]);
34
35 cbi_update_table(table, leases.map(function(lease) {
36 var exp;
37
38 if (lease.expires === false)
39 exp = E('em', _('unlimited'));
40 else if (lease.expires <= 0)
41 exp = E('em', _('expired'));
42 else
43 exp = '%t'.format(lease.expires);
44
45 return [
46 lease.hostname || '-',
47 lease.ipaddr,
48 lease.macaddr,
49 exp
50 ];
51 }), E('em', _('There are no active leases')));
52
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' }, _('Lease time remaining'))
59 ])
60 ]);
61
62 cbi_update_table(table6, leases6.map(function(lease) {
63 var exp;
64
65 if (lease.expires === false)
66 exp = E('em', _('unlimited'));
67 else if (lease.expires <= 0)
68 exp = E('em', _('expired'));
69 else
70 exp = '%t'.format(lease.expires);
71
72 var hint = lease.macaddr ? machints.filter(function(h) { return h[0] == lease.macaddr })[0] : null,
73 host = null;
74
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;
79 else if (hint)
80 host = hint[1];
81
82 return [
83 host || '-',
84 lease.ip6addrs ? lease.ip6addrs.join(' ') : lease.ip6addr,
85 lease.duid,
86 exp
87 ];
88 }), E('em', _('There are no active leases')));
89
90 return E([
91 table,
92 E('h3', _('Active DHCPv6 Leases')),
93 table6
94 ]);
95 }
96 });