'use strict'; 'require baseclass'; 'require rpc'; 'require network'; var callLuciDHCPLeases = rpc.declare({ object: 'luci-rpc', method: 'getDHCPLeases', expect: { '': {} } }); return baseclass.extend({ title: _('DHCP Devices'), params: {}, load: function() { return Promise.all([ callLuciDHCPLeases(), network.getDevices() ]); }, renderHtml: function() { var container_wapper = E('div', { 'class': 'router-status-lan dashboard-bg box-s1' }); var container_box = E('div', { 'class': 'lan-info devices-list' }); var container_devices = E('table', { 'class': 'table assoclist devices-info' }, [ E('tr', { 'class': 'tr table-titles dashboard-bg' }, [ E('th', { 'class': 'th nowrap' }, _('Hostname')), E('th', { 'class': 'th' }, _('IP Address')), E('th', { 'class': 'th' }, _('MAC')), ]) ]); var container_deviceslist = E('table', { 'class': 'table assoclist devices-info' }); container_box.appendChild(E('div', { 'class': 'title'}, [ E('img', { 'src': L.resource('view/dashboard/icons/devices.svg'), 'width': 55, 'title': this.title, 'class': 'middle' }), E('h3', this.title) ])); for(var idx in this.params.lan.devices) { var deivce = this.params.lan.devices[idx]; container_deviceslist.appendChild(E('tr', { 'class': 'tr cbi-rowstyle-1'}, [ E('td', { 'class': 'td device-info'}, [ E('p', {}, [ E('span', { 'class': 'd-inline-block'}, [ deivce.hostname ]), ]), ]), E('td', { 'class': 'td device-info'}, [ E('p', {}, [ E('span', { 'class': 'd-inline-block'}, [ deivce.ipv4 ]), ]), ]), E('td', { 'class': 'td device-info'}, [ E('p', {}, [ E('span', { 'class': 'd-inline-block'}, [ deivce.macaddr ]), ]), ]) ])); } container_box.appendChild(E('hr')); container_box.appendChild(container_devices); container_box.appendChild(E('hr')); container_box.appendChild(container_deviceslist); container_wapper.appendChild(container_box); return container_wapper; }, renderUpdateData: function(data, leases) { for(var item in data) { if (/lan|br-lan/ig.test(data[item].ifname) && (typeof data[item].dev == 'object' && !data[item].dev.wireless)) { var lan_device = data[item]; var ipv4addr = lan_device.dev.ipaddrs.toString().split('/'); this.params.lan.ipv4 = ipv4addr[0] || '?'; this.params.lan.ipv6 = ipv4addr[0] || '?'; this.params.lan.macaddr = lan_device.dev.macaddr || '00:00:00:00:00:00'; this.params.lan.rx_bytes = lan_device.dev.stats.rx_bytes ? '%.2mB'.format(lan_device.dev.stats.rx_bytes) : '-'; this.params.lan.tx_bytes = lan_device.dev.stats.tx_bytes ? '%.2mB'.format(lan_device.dev.stats.tx_bytes) : '-'; } } var devices = []; leases.map(function(lease) { devices[lease.expires] = { hostname: lease.hostname || '?', ipv4: lease.ipaddr || '-', macaddr: lease.macaddr || '00:00:00:00:00:00', }; }); this.params.lan.devices = devices; }, renderLeases: function(data) { var leases = Array.isArray(data[0].dhcp_leases) ? data[0].dhcp_leases : []; this.params.lan = { ipv4: { title: _('IPv4'), value: '?' }, macaddr: { title: _('Mac'), value: '00:00:00:00:00:00' }, rx_bytes: { title: _('Upload'), value: '-' }, tx_bytes: { title: _('Download'), value: '-' }, devices: { title: _('Devices'), value: [] } }; this.renderUpdateData(data[1], leases); return this.renderHtml(); }, render: function(data) { if (L.hasSystemFeature('dnsmasq') || L.hasSystemFeature('odhcpd')) return this.renderLeases(data); return E([]); } });