mirror of
https://github.com/Ysurac/openmptcprouter-feeds.git
synced 2025-03-09 15:40:03 +00:00
Add dashboard with omr support
This commit is contained in:
parent
3c25b997dc
commit
c98df165fe
13 changed files with 1589 additions and 0 deletions
|
@ -0,0 +1,267 @@
|
|||
'use strict';
|
||||
'require baseclass';
|
||||
'require dom';
|
||||
'require network';
|
||||
'require rpc';
|
||||
|
||||
return baseclass.extend({
|
||||
|
||||
title: _('Wireless'),
|
||||
|
||||
params: [],
|
||||
|
||||
load: function() {
|
||||
return Promise.all([
|
||||
network.getWifiDevices(),
|
||||
network.getWifiNetworks(),
|
||||
network.getHostHints()
|
||||
]).then(function(radios_networks_hints) {
|
||||
var tasks = [];
|
||||
|
||||
for (var i = 0; i < radios_networks_hints[1].length; i++)
|
||||
tasks.push(L.resolveDefault(radios_networks_hints[1][i].getAssocList(), []).then(L.bind(function(net, list) {
|
||||
net.assoclist = list.sort(function(a, b) { return a.mac > b.mac });
|
||||
}, this, radios_networks_hints[1][i])));
|
||||
|
||||
return Promise.all(tasks).then(function() {
|
||||
return radios_networks_hints;
|
||||
});
|
||||
});
|
||||
},
|
||||
|
||||
renderHtml: function() {
|
||||
|
||||
var container_wapper = E('div', { 'class': 'router-status-wifi dashboard-bg box-s1' });
|
||||
var container_box = E('div', { 'class': 'wifi-info devices-list' });
|
||||
var container_radio = E('div', { 'class': 'settings-info' });
|
||||
var container_radio_item;
|
||||
|
||||
container_box.appendChild(E('div', { 'class': 'title'}, [
|
||||
E('img', {
|
||||
'src': L.resource('view/dashboard/icons/wireless.svg'),
|
||||
'width': 55,
|
||||
'title': this.title,
|
||||
'class': 'middle'
|
||||
}),
|
||||
E('h3', this.title)
|
||||
]));
|
||||
|
||||
container_box.appendChild(E('hr'));
|
||||
|
||||
for (var i =0; i < this.params.wifi.radios.length; i++) {
|
||||
|
||||
container_radio_item = E('div', { 'class': 'radio-info' })
|
||||
|
||||
for(var idx in this.params.wifi.radios[i]) {
|
||||
var classname = idx,
|
||||
radio = this.params.wifi.radios[i];
|
||||
|
||||
if (!radio[idx].visible) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if ('actived' === idx) {
|
||||
classname = radio[idx].value ? 'label label-success' : 'label label-danger';
|
||||
radio[idx].value = radio[idx].value ? _('yes') : _('no');
|
||||
}
|
||||
|
||||
container_radio_item.appendChild(
|
||||
E('p', {}, [
|
||||
E('span', { 'class': ''}, [ radio[idx].title + ':']),
|
||||
E('span', { 'class': classname }, [ radio[idx].value ]),
|
||||
])
|
||||
);
|
||||
}
|
||||
|
||||
container_radio.appendChild(container_radio_item);
|
||||
}
|
||||
|
||||
container_box.appendChild(container_radio);
|
||||
|
||||
var container_devices = E('div', { 'class': 'table assoclist devices-info' }, [
|
||||
E('div', { 'class': 'tr table-titles dashboard-bg' }, [
|
||||
E('div', { 'class': 'th nowrap' }, _('Hostname')),
|
||||
E('div', { 'class': 'th' }, _('Wireless')),
|
||||
E('div', { 'class': 'th' }, _('Signal')),
|
||||
E('div', { 'class': 'th' }, '%s / %s'.format( _('Up.'), _('Down.')))
|
||||
])
|
||||
]);
|
||||
|
||||
var container_devices_item;
|
||||
var container_devices_list = E('div', { 'class': 'table assoclist devices-info' });
|
||||
|
||||
for (var i =0; i < this.params.wifi.devices.length; i++) {
|
||||
container_devices_item = E('div', { 'class': 'tr cbi-rowstyle-1' });
|
||||
|
||||
for(var idx in this.params.wifi.devices[i]) {
|
||||
var device = this.params.wifi.devices[i];
|
||||
|
||||
if (!device[idx].visible) {
|
||||
continue;
|
||||
}
|
||||
|
||||
var container_content;
|
||||
|
||||
if ('progress' == idx) {
|
||||
container_content = E('div', { 'class' : 'td device-info' }, [
|
||||
E('div', { 'class': 'progress' }, [
|
||||
E('div', { 'class': 'progress-bar ' + device[idx].value.style, role: 'progressbar', style: 'width:'+device[idx].value.qualite+'%', 'aria-valuenow': device[idx].value.qualite, 'aria-valuemin': 0, 'aria-valuemax': 100 }),
|
||||
])
|
||||
]);
|
||||
} else if ('rate' == idx) {
|
||||
container_content = E('div', { 'class': 'td device-info' }, [
|
||||
E('p', {}, [
|
||||
E('span', { 'class': ''}, [ device[idx].value.rx ]),
|
||||
E('br'),
|
||||
E('span', { 'class': ''}, [ device[idx].value.tx ])
|
||||
])
|
||||
]);
|
||||
} else {
|
||||
container_content = E('div', { 'class': 'td device-info'}, [
|
||||
E('p', {}, [
|
||||
E('span', { 'class': ''}, [ device[idx].value ]),
|
||||
])
|
||||
]);
|
||||
}
|
||||
|
||||
container_devices_item.appendChild(container_content);
|
||||
}
|
||||
|
||||
container_devices_list.appendChild(container_devices_item);
|
||||
}
|
||||
|
||||
container_devices.appendChild(container_devices_list);
|
||||
container_box.appendChild(E('hr'));
|
||||
container_box.appendChild(container_devices);
|
||||
container_box.appendChild(container_devices_list);
|
||||
container_wapper.appendChild(container_box);
|
||||
|
||||
return container_wapper;
|
||||
},
|
||||
|
||||
renderUpdateData: function(radios, networks, hosthints) {
|
||||
|
||||
for (var i = 0; i < radios.sort(function(a, b) { a.getName() > b.getName() }).length; i++) {
|
||||
var network_items = networks.filter(function(net) { return net.getWifiDeviceName() == radios[i].getName() });
|
||||
|
||||
for (var j = 0; j < network_items.length; j++) {
|
||||
var net = network_items[j],
|
||||
is_assoc = (net.getBSSID() != '00:00:00:00:00:00' && net.getChannel() && !net.isDisabled()),
|
||||
chan = net.getChannel(),
|
||||
freq = net.getFrequency(),
|
||||
rate = net.getBitRate();
|
||||
|
||||
this.params.wifi.radios.push(
|
||||
{
|
||||
ssid : {
|
||||
title: _('SSID'),
|
||||
visible: true,
|
||||
value: net.getActiveSSID() || '?'
|
||||
},
|
||||
|
||||
actived : {
|
||||
title: _('Active'),
|
||||
visible: true,
|
||||
value: !net.isDisabled()
|
||||
},
|
||||
|
||||
chan : {
|
||||
title: _('Channel'),
|
||||
visible: true,
|
||||
value: chan ? '%d (%.3f %s)'.format(chan, freq, _('GHz')) : '-'
|
||||
},
|
||||
|
||||
rate : {
|
||||
title: _('Bitrate'),
|
||||
visible: true,
|
||||
value: rate ? '%d %s'.format(rate, _('Mbit/s')) : '-'
|
||||
},
|
||||
|
||||
bssid : {
|
||||
title: _('BSSID'),
|
||||
visible: true,
|
||||
value: is_assoc ? (net.getActiveBSSID() || '-') : '-'
|
||||
},
|
||||
|
||||
encryption : {
|
||||
title: _('Encryption'),
|
||||
visible: true,
|
||||
value: is_assoc ? net.getActiveEncryption() : '-'
|
||||
},
|
||||
|
||||
associations : {
|
||||
title: _('Devices Connected'),
|
||||
visible: true,
|
||||
value: is_assoc ? (net.assoclist.length || '0') : 0
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
for (var i = 0; i < networks.length; i++) {
|
||||
for (var k = 0; k < networks[i].assoclist.length; k++) {
|
||||
var bss = networks[i].assoclist[k],
|
||||
name = hosthints.getHostnameByMACAddr(bss.mac);
|
||||
|
||||
var progress_style;
|
||||
var q = Math.min((bss.signal + 110) / 70 * 100, 100);
|
||||
|
||||
if (q == 0 || q < 25)
|
||||
progress_style = 'bg-danger';
|
||||
else if (q < 50)
|
||||
progress_style = 'bg-warning';
|
||||
else if (q < 75)
|
||||
progress_style = 'bg-success';
|
||||
else
|
||||
progress_style = 'bg-success';
|
||||
|
||||
this.params.wifi.devices.push(
|
||||
{
|
||||
hostname : {
|
||||
title: _('Hostname'),
|
||||
visible: true,
|
||||
value: name || '?'
|
||||
},
|
||||
|
||||
ssid : {
|
||||
title: _('SSID'),
|
||||
visible: true,
|
||||
value: networks[i].getActiveSSID()
|
||||
},
|
||||
|
||||
progress : {
|
||||
title: _('Channel'),
|
||||
visible: true,
|
||||
value: {
|
||||
qualite: q,
|
||||
style: progress_style
|
||||
}
|
||||
},
|
||||
|
||||
rate : {
|
||||
title: _('Bitrate'),
|
||||
visible: true,
|
||||
value: {
|
||||
rx: '%s'.format('%.2mB'.format(bss.rx.bytes)),
|
||||
tx: '%s'.format('%.2mB'.format(bss.tx.bytes)),
|
||||
}
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
render: function(data) {
|
||||
|
||||
this.params.wifi = {
|
||||
radios: [],
|
||||
devices: []
|
||||
};
|
||||
|
||||
this.renderUpdateData(data[0], data[1], data[2]);
|
||||
|
||||
return this.renderHtml();
|
||||
}
|
||||
});
|
Loading…
Add table
Add a link
Reference in a new issue