You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

325 lines
7.1 KiB
JavaScript

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

'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)];
}
});