1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
|
<%#
Copyright 2014 Aedan Renner <chipdankly@gmail.com>
Copyright 2018 Florian Eckert <fe@dev.tdt.de>
Licensed to the public under the GNU General Public License v2.
-%>
<script type="text/javascript">//<![CDATA[
function secondsToString(time) {
var seconds = parseInt(time, 10);
var hrs = Math.floor(seconds / 3600);
seconds -= hrs*3600;
var mnts = Math.floor(seconds / 60);
seconds -= mnts*60;
return String.format("%sh:%sm:%ss", hrs, mnts, seconds);
}
XHR.poll(-1, '<%=luci.dispatcher.build_url("admin", "status", "mwan", "interface_status")%>', null,
function(x, status)
{
var statusDiv = document.getElementById('mwan_status_text');
if (status.interfaces)
{
var statusview = '';
for ( var iface in status.interfaces)
{
var state = '';
var css = '';
var time = '';
switch (status.interfaces[iface].status)
{
case 'online':
state = '<%:Online%>';
time = String.format(
'<div><strong><%:Uptime%>: </strong>%s</div>',
secondsToString(status.interfaces[iface].online)
);
css = 'success';
break;
case 'offline':
state = '<%:Offline%>';
time = String.format(
'<div><strong><%:Downtime%>: </strong>%s</div>',
secondsToString(status.interfaces[iface].offline)
);
css = 'danger';
break;
case 'notracking':
state = '<%:No Tracking%>';
if ((status.interfaces[iface].uptime) > 0) {
time = String.format(
'<div><strong><%:Uptime%>: </strong>%s</div>',
secondsToString(status.interfaces[iface].uptime)
);
css = 'success';
}
else {
time = '<div> </div>'
css = 'warning';
}
break;
default:
state = '<%:Disabled%>';
time = '<div> </div>'
css = 'warning';
break;
}
statusview += String.format(
'<div class="alert-message %s">',
css
);
statusview += String.format(
'<div><strong><%:Interface%>: </strong>%s</div>',
iface
);
statusview += String.format(
'<div><strong><%:Status%>: </strong>%s</div>',
state
);
if (time)
{
statusview += time;
}
statusview += '</div>'
}
statusDiv.innerHTML = statusview;
}
else
{
statusDiv.innerHTML = '<strong><%:No MWAN interfaces found%></strong>';
}
}
);
//]]></script>
<style type="text/css">
#mwan_status_text > div {
display: inline-block;
margin: 1rem;
padding: 1rem;
width: 15rem;
float: left;
line-height: 125%;
}
</style>
<fieldset id="interface_field" class="cbi-section">
<legend><%:MWAN Interfaces%></legend>
<div id="mwan_status_text">
<img src="<%=resource%>/icons/loading.gif" alt="<%:Loading%>" style="vertical-align:middle" />
<%:Collecting data...%>
</div>
</fieldset>
|