'use strict'; 'require baseclass'; 'require fs'; 'require rpc'; 'require network'; var callSystemBoard = rpc.declare({ object: 'system', method: 'board' }); var callSystemInfo = rpc.declare({ object: 'system', method: 'info' }); return baseclass.extend({ params: [], load: function() { return Promise.all([ network.getWANNetworks(), network.getWAN6Networks(), L.resolveDefault(callSystemBoard(), {}), L.resolveDefault(callSystemInfo(), {}) ]); }, renderHtml: function(data, type) { var icon = type; var title = 'router' == type ? _('System') : _('Internet'); var container_wapper = E('div', { 'class': type + '-status-self dashboard-bg box-s1'}); var container_box = E('div', { 'class': type + '-status-info'}); var container_item = E('div', { 'class': 'settings-info'}); if ('internet' == type) { icon = (data.v4.connected.value || data.v6.connected.value) ? type : 'not-internet'; } container_box.appendChild(E('div', { 'class': 'title'}, [ E('img', { 'src': L.resource('view/dashboard/icons/' + icon + '.svg'), 'width': 'router' == type ? 64 : 54, 'title': title, 'class': 'middle' }), E('h3', title) ])); container_box.appendChild(E('hr')); if ('internet' == type) { var container_internet_v4 = E('div'); var container_internet_v6 = E('div'); for(var idx in data) { for(var ver in data[idx]) { var classname = ver, suppelements = '', visible = data[idx][ver].visible; if('connected' === ver) { classname = data[idx][ver].value ? 'label label-success' : 'label label-danger'; data[idx][ver].value = data[idx][ver].value ? _('yes') : _('no'); } if ('v4' === idx) { if ('title' === ver) { container_internet_v4.appendChild( E('p', { 'class': 'mt-2'}, [ E('span', {'class': ''}, [ data[idx].title ]), ]) ); continue; } if ('addrsv4' === ver) { var addrs = data[idx][ver].value; if(Array.isArray(addrs) && addrs.length) { for(var ip in addrs) { data[idx][ver].value = addrs[ip].split('/')[0]; } } } if (visible) { container_internet_v4.appendChild( E('p', { 'class': 'mt-2'}, [ E('span', {'class': ''}, [ data[idx][ver].title + ':' ]), E('span', {'class': classname }, [ data[idx][ver].value ]), suppelements ]) ); } } else { if ('title' === ver) { container_internet_v6.appendChild( E('p', { 'class': 'mt-2'}, [ E('span', {'class': ''}, [ data[idx].title ]), ]) ); continue; } if (visible) { container_internet_v6.appendChild( E('p', {'class': 'mt-2'}, [ E('span', {'class': ''}, [data[idx][ver].title + ':']), E('span', {'class': classname}, [data[idx][ver].value]), suppelements ]) ); } } } } container_item.appendChild(container_internet_v4); container_item.appendChild(container_internet_v6); } else { for(var idx in data) { container_item.appendChild( E('p', { 'class': 'mt-2'}, [ E('span', {'class': ''}, [ data[idx].title + ':' ]), E('span', {'class': ''}, [ data[idx].value ]) ]) ); } } container_box.appendChild(container_item); container_box.appendChild(E('hr')); container_wapper.appendChild(container_box); return container_wapper; }, renderUpdateWanData: function(data, v6) { for (var i = 0; i < data.length; i++) { var ifc = data[i]; if (v6) { var uptime = ifc.getUptime(); this.params.internet.v6.uptime.value = (uptime > 0) ? '%t'.format(uptime) : '-'; this.params.internet.v6.ipprefixv6.value = ifc.getIP6Prefix() || '-'; this.params.internet.v6.gatewayv6.value = ifc.getGateway6Addr() || '-'; this.params.internet.v6.protocol.value= ifc.getI18n() || E('em', _('Not connected')); this.params.internet.v6.addrsv6.value = ifc.getIP6Addrs() || [ '-' ]; this.params.internet.v6.dnsv6.value = ifc.getDNS6Addrs() || [ '-' ]; this.params.internet.v6.connected.value = ifc.isUp(); } else { var uptime = ifc.getUptime(); this.params.internet.v4.uptime.value = (uptime > 0) ? '%t'.format(uptime) : '-'; this.params.internet.v4.protocol.value= ifc.getI18n() || E('em', _('Not connected')); this.params.internet.v4.gatewayv4.value = ifc.getGatewayAddr() || '0.0.0.0'; this.params.internet.v4.connected.value = ifc.isUp(); this.params.internet.v4.addrsv4.value = ifc.getIPAddrs() || [ '-']; this.params.internet.v4.dnsv4.value = ifc.getDNSAddrs() || [ '-' ]; } } }, renderInternetBox: function(data) { this.params.internet = { v4: { title: _('IPv4 Internet'), connected: { title: _('Connected'), visible: true, value: false }, uptime: { title: _('Uptime'), visible: true, value: '-' }, protocol: { title: _('Protocol'), visible: true, value: '-' }, addrsv4: { title: _('IPv4'), visible: true, value: [ '-' ] }, gatewayv4: { title: _('GatewayV4'), visible: true, value: '-' }, dnsv4: { title: _('DNSv4'), visible: true, value: ['-'] } }, v6: { title: _('IPv6 Internet'), connected: { title: _('Connected'), visible: true, value: false }, uptime: { title: _('Uptime'), visible: true, value: '-' }, protocol: { title: _('Protocol'), visible: true, value: ' - ' }, ipprefixv6 : { title: _('IPv6 prefix'), visible: true, value: ' - ' }, addrsv6: { title: _('IPv6'), visible: false, value: [ '-' ] }, gatewayv6: { title: _('GatewayV6'), visible: true, value: '-' }, dnsv6: { title: _('DNSv6'), visible: true, value: [ '-' ] } } }; this.renderUpdateWanData(data[0], false); this.renderUpdateWanData(data[1], true); return this.renderHtml(this.params.internet, 'internet'); }, renderRouterBox: function(data) { var boardinfo = data[2], systeminfo = data[3]; var datestr = null; if (systeminfo.localtime) { var date = new Date(systeminfo.localtime * 1000); datestr = '%04d-%02d-%02d %02d:%02d:%02d'.format( date.getUTCFullYear(), date.getUTCMonth() + 1, date.getUTCDate(), date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds() ); } this.params.router = { uptime: { title: _('Uptime'), value: systeminfo.uptime ? '%t'.format(systeminfo.uptime) : null, }, localtime: { title: _('Local Time'), value: datestr }, kernel: { title: _('Kernel Version'), value: boardinfo.kernel }, model: { title: _('Model'), value: boardinfo.model }, system: { title: _('Architecture'), value: boardinfo.system }, release: { title: _('Firmware Version'), value: boardinfo.release.description } }; return this.renderHtml(this.params.router, 'router'); }, render: function(data) { return [this.renderInternetBox(data), this.renderRouterBox(data)]; } });