treewide: import utility classes explicitly
[oweals/luci.git] / modules / luci-mod-status / htdocs / luci-static / resources / view / status / include / 40_dhcp.js
1 'use strict';
2 'require baseclass';
3 'require rpc';
4 'require network';
5
6 var callLuciDHCPLeases = rpc.declare({
7         object: 'luci-rpc',
8         method: 'getDHCPLeases',
9         expect: { '': {} }
10 });
11
12 return baseclass.extend({
13         title: '',
14
15         load: function() {
16                 return Promise.all([
17                         L.resolveDefault(callLuciDHCPLeases(), {}),
18                         network.getHostHints()
19                 ]);
20         },
21
22         renderLeases: function(data) {
23                 var leases = Array.isArray(data[0].dhcp_leases) ? data[0].dhcp_leases : [],
24                     leases6 = Array.isArray(data[0].dhcp6_leases) ? data[0].dhcp6_leases : [],
25                     machints = data[1].getMACHints(false);
26
27                 var table = E('div', { 'class': 'table' }, [
28                         E('div', { 'class': 'tr table-titles' }, [
29                                 E('div', { 'class': 'th' }, _('Hostname')),
30                                 E('div', { 'class': 'th' }, _('IPv4-Address')),
31                                 E('div', { 'class': 'th' }, _('MAC-Address')),
32                                 E('div', { 'class': 'th' }, _('Leasetime remaining'))
33                         ])
34                 ]);
35
36                 cbi_update_table(table, leases.map(function(lease) {
37                         var exp;
38
39                         if (lease.expires === false)
40                                 exp = E('em', _('unlimited'));
41                         else if (lease.expires <= 0)
42                                 exp = E('em', _('expired'));
43                         else
44                                 exp = '%t'.format(lease.expires);
45
46                         return [
47                                 lease.hostname || '-',
48                                 lease.ipaddr,
49                                 lease.macaddr,
50                                 exp
51                         ];
52                 }), E('em', _('There are no active leases')));
53
54                 var table6 = E('div', { 'class': 'table' }, [
55                         E('div', { 'class': 'tr table-titles' }, [
56                                 E('div', { 'class': 'th' }, _('Host')),
57                                 E('div', { 'class': 'th' }, _('IPv6-Address')),
58                                 E('div', { 'class': 'th' }, _('DUID')),
59                                 E('div', { 'class': 'th' }, _('Leasetime remaining'))
60                         ])
61                 ]);
62
63                 cbi_update_table(table6, leases6.map(function(lease) {
64                         var exp;
65
66                         if (lease.expires === false)
67                                 exp = E('em', _('unlimited'));
68                         else if (lease.expires <= 0)
69                                 exp = E('em', _('expired'));
70                         else
71                                 exp = '%t'.format(lease.expires);
72
73                         var hint = lease.macaddr ? machints.filter(function(h) { return h[0] == lease.macaddr })[0] : null,
74                             host = null;
75
76                         if (hint && lease.hostname && lease.hostname != hint[1] && lease.ip6addr != hint[1])
77                                 host = '%s (%s)'.format(lease.hostname, hint[1]);
78                         else if (lease.hostname)
79                                 host = lease.hostname;
80                         else if (hint)
81                                 host = hint[1];
82
83                         return [
84                                 host || '-',
85                                 lease.ip6addrs ? lease.ip6addrs.join(' ') : lease.ip6addr,
86                                 lease.duid,
87                                 exp
88                         ];
89                 }), E('em', _('There are no active leases')));
90
91                 return E([
92                         E('h3', _('Active DHCP Leases')),
93                         table,
94                         E('h3', _('Active DHCPv6 Leases')),
95                         table6
96                 ]);
97         },
98
99         render: function(data) {
100                 if (L.hasSystemFeature('dnsmasq') || L.hasSystemFeature('odhcpd'))
101                         return this.renderLeases(data);
102
103                 return E([]);
104         }
105 });