5 L
.network
.findWanInterfaces().then(function(wans
) {
11 $('#network_status_table').empty();
15 var networkTable
= new L
.ui
.table({
16 caption
: L
.tr('Network'),
24 return new L
.ui
.devicebadge(v
).render();
27 format: function(v
, n
) {
28 var format_addr = function()
33 for (var i
= 0; i
< v
['ipv6-address'].length
; i
++)
34 rv
.push('%s/%d'.format(v
['ipv6-address'][i
].address
, v
['ipv6-address'][i
].mask
));
36 for (var i
= 0; i
< v
['ipv6-prefix-assignment'].length
; i
++)
37 rv
.push('%s1/%d'.format(v
['ipv6-prefix-assignment'][i
].address
, v
['ipv6-prefix-assignment'][i
].mask
));
41 for (var i
= 0; i
< v
['ipv4-address'].length
; i
++)
42 rv
.push('%s/%d'.format(v
['ipv4-address'][i
].address
, v
['ipv4-address'][i
].mask
));
47 var format_dns = function()
50 for (var i
= 0; i
< v
['dns-server'].length
; i
++)
52 if ((n
> 0 && v
['dns-server'][i
].indexOf(':') > -1) ||
53 (n
== 0 && v
['dns-server'][i
].indexOf(':') == -1))
54 rv
.push(v
['dns-server'][i
]);
59 var s
= '<strong>' + L
.tr('Type') + ':</strong> %s | ' +
60 '<strong>' + L
.tr('Connected') + ':</strong> %t<br />' +
61 '<strong>' + L
.tr('Address') + ':</strong> %s<br />';
63 s
= s
.format(v
.proto
, v
.uptime
, format_addr());
65 for (var i
= 0; i
< v
.route
.length
; i
++)
66 if (v
.route
[i
].mask
== 0 && v
.route
[i
].nexthop
!= '::')
68 s
+= '<strong>' + L
.tr('Gateway') + ':</strong> %s<br />'.format(v
.route
[i
].nexthop
);
72 var dns
= format_dns();
74 s
+= '<strong>' + L
.tr('DNS') + ':</strong> %s<br />'.format(dns
);
82 networkTable
.row([ L
.tr('IPv4 WAN Status'), wan
, wan
]);
85 networkTable
.row([ L
.tr('IPv6 WAN Status'), wan6
, wan6
]);
87 networkTable
.insertInto('#network_status_table');
89 L
.network
.getConntrackCount().then(function(count
) {
90 var conntrackTable
= new L
.ui
.table({
91 caption
: L
.tr('Connection Tracking'),
96 return new L
.ui
.progress({
99 format
: '%d / %d (%d%%)'
105 conntrackTable
.row([ L
.tr('Active Connections'), count
]);
106 conntrackTable
.insertInto('#conntrack_status_table');
108 L
.system
.getInfo().then(function(info
) {
109 var sysinfoTable
= new L
.ui
.table({
110 caption
: L
.tr('System'),
111 columns
: [ { width
: '300px' }, { } ]
115 [ L
.tr('Hostname'), info
.hostname
],
116 [ L
.tr('Model'), info
.model
],
117 [ L
.tr('Firmware Version'), info
.release
.description
],
118 [ L
.tr('Kernel Version'), info
.kernel
],
119 [ L
.tr('Local Time'), (new Date(info
.localtime
* 1000)).toString() ],
120 [ L
.tr('Uptime'), '%t'.format(info
.uptime
) ],
121 [ L
.tr('Load Average'),
122 '%.2f %.2f %.2f'.format(
123 info
.load
[0] / 65535.0,
124 info
.load
[1] / 65535.0,
125 info
.load
[2] / 65535.0
129 sysinfoTable
.insertInto('#system_status_table');
131 var memoryTable
= new L
.ui
.table({
132 caption
: L
.tr('Memory'),
137 format: function(v
) {
138 return new L
.ui
.progress({
140 max
: info
.memory
.total
,
141 format: function(pc
) {
142 return ('%d ' + L
.tr('kB') + ' / %d ' + L
.tr('kB') + ' (%d%%)').format(
143 v
/ 1024, info
.memory
.total
/ 1024, pc
152 [ L
.tr('Total Available'), info
.memory
.free
+ info
.memory
.buffered
],
153 [ L
.tr('Free'), info
.memory
.free
],
154 [ L
.tr('Cached'), info
.memory
.shared
],
155 [ L
.tr('Buffered'), info
.memory
.buffered
],
158 memoryTable
.insertInto('#memory_status_table');
160 if (info
.swap
.total
> 0)
162 var swapTable
= new L
.ui
.table({
163 caption
: L
.tr('Swap'),
168 format: function(v
) {
169 return new L
.ui
.progress({
171 max
: info
.swap
.total
,
172 format: function(pc
) {
173 return ('%d ' + L
.tr('kB') + ' / %d ' + L
.tr('kB') + ' (%d%%)').format(
174 v
/ 1024, info
.swap
.total
/ 1024, pc
182 swapTable
.row([ L
.tr('Free'), info
.swap
.free
]);
183 swapTable
.insertInto('#swap_status_table');
186 var diskTable
= new L
.ui
.table({
187 caption
: L
.tr('Storage'),
192 format: function(v
) {
193 return new L
.ui
.progress({
196 format: function(pc
) {
197 return ('%d ' + L
.tr('kB') + ' / %d ' + L
.tr('kB') + ' (%d%%)').format(
198 v
[0] / 1024, v
[1] / 1024, pc
206 diskTable
.row([ '' + L
.tr('Root Usage') + ' (/)', [ info
.root
.used
, info
.root
.total
] ]);
207 diskTable
.row([ '' + L
.tr('Temporary Usage') + ' (/tmp)', [ info
.tmp
.used
, info
.tmp
.total
] ]);
208 diskTable
.insertInto('#disk_status_table');
210 L
.wireless
.getWirelessStatus().then(function(radios
) {
212 for (var phy
in radios
)
217 $('#wifi_status_table').empty();
219 for (var i
= 0; i
< phys
.length
; i
++)
222 var radio
= radios
[phys
[i
]];
226 ? '%s 802.11%s (%s)'.format(
227 radio
.hardware
.name
, radio
.hwmodes
.join(''),
228 radio
.phy
.replace(/^[^0-9]+/, 'radio'))
229 : ('802.11%s ' + L
.tr('Radio') + ' (%s)').format(
230 radio
.hwmodes
.join(''),
231 radio
.phy
.replace(/^[^0-9]+/, 'radio')),
232 channel
: radio
.channel
,
233 frequency
: radio
.frequency
,
234 txpower
: radio
.txpower
237 for (var j
= 0; j
< radio
.networks
.length
; j
++)
239 var network
= radio
.networks
[j
];
241 if (network
.bssid
&& network
.bssid
!= '00:00:00:00:00:00' && radio
.channel
)
245 signal
: network
.signal
,
246 noise
: network
.noise
,
247 device
: network
.device
250 bssid
: network
.bssid
,
252 encryption
: network
.encryption
,
253 bitrate
: network
.bitrate
257 var wifiTable
= new L
.ui
.table({
258 caption
: i
? null : L
.tr('Wireless'),
262 format: function(v
, n
)
264 if (typeof(v
) != 'boolean')
266 return new L
.ui
.devicebadge(v
).render();
270 var img
= document
.createElement('img');
271 img
.src
= L
.globals
.resource
+ '/icons/wifi_big' + (v
? '' : '_disabled') + '.png';
277 format: function(v
, n
)
279 if (typeof(rows
[n
][0]) != 'boolean')
281 var s
= '<strong>' + L
.tr('Mode') + ':</strong> %s | ' +
282 '<strong>' + L
.tr('Bitrate') + ':</strong> %s | ' +
283 '<strong>' + L
.tr('SSID') + ':</strong> %s<br />' +
284 '<strong>' + L
.tr('BSSID') + ':</strong> %s | ' +
285 '<strong>' + L
.tr('Encryption') + ':</strong> %s';
288 v
.mode
, v
.bitrate
? ('~ %.1f ' + L
.tr('Mbit/s')).format(v
.bitrate
/ 1000) : '?',
289 v
.ssid
, v
.bssid
, L
.wireless
.formatEncryption(v
.encryption
)
294 var s
= '<big><strong>%s</strong></big><br />' +
295 '<strong>' + L
.tr('Channel') + ':</strong> %d (%.3f ' + L
.tr('GHz') + ') | ' +
296 '<strong>' + L
.tr('TX Power') + ':</strong> %d ' + L
.tr('dBm') + '';
300 v
.channel
, v
.frequency
/ 1000,
308 wifiTable
.rows(rows
);
309 $('#wifi_status_table').append(wifiTable
.render());
312 L
.wireless
.getAssocLists().then(function(assoclist
) {
313 var formatRate = function(v
)
315 return (typeof v
.mcs
!= 'undefined')
316 ? ('%.1f ' + L
.tr('Mbit/s') + ', MCS %d, %d%s').format(v
.rate
/ 1000, v
.mcs
, v
['40mhz'] ? 40 : 20, L
.tr('MHz'))
317 : ('%.1f ' + L
.tr('Mbit/s')).format(v
.rate
/ 1000);
320 var assocTable
= new L
.ui
.table({
321 caption
: L
.tr('Associated Stations'),
322 placeholder
: L
.tr('No information available'),
324 format: function(v
, n
) {
325 return new L
.ui
.devicebadge(assoclist
[n
]).render();
331 caption
: L
.tr('MAC-Address'),
334 caption
: L
.tr('Signal'),
335 format
: '%d ' + L
.tr('dBm') + '',
338 caption
: L
.tr('Noise'),
339 format
: '%d ' + L
.tr('dBm') + '',
342 caption
: L
.tr('RX Rate'),
346 caption
: L
.tr('TX Rate'),
352 assocTable
.rows(assoclist
);
353 assocTable
.insertInto('#wifi_assoc_table');
355 L
.network
.getDHCPLeases().then(function(leases
) {
356 var leaseTable
= new L
.ui
.table({
357 caption
: L
.tr('DHCP Leases'),
358 placeholder
: L
.tr('There are no active leases.'),
360 caption
: L
.tr('Hostname'),
364 caption
: L
.tr('IPv4-Address'),
367 caption
: L
.tr('MAC-Address'),
370 caption
: L
.tr('Leasetime remaining'),
372 format: function(v
) {
373 return (v
<= 0) ? L
.tr('expired') : '%t'.format(v
);
378 leaseTable
.rows(leases
);
379 leaseTable
.insertInto('#lease_status_table');
381 L
.network
.getDHCPv6Leases().then(function(leases
) {
385 var leaseTable
= new L
.ui
.table({
386 caption
: L
.tr('DHCPv6 Leases'),
388 caption
: L
.tr('Hostname'),
392 caption
: L
.tr('IPv6-Address'),
395 caption
: L
.tr('DUID'),
398 caption
: L
.tr('Leasetime remaining'),
400 format: function(v
) {
401 return (v
<= 0) ? L
.tr('expired') : '%t'.format(v
);
406 leaseTable
.rows(leases
);
407 leaseTable
.insertInto('#lease6_status_table');