83c0c151eb49307a120c9d7ac289788f89d05198
[oweals/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' }, _('Leasetime 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' }, _('Leasetime 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 });