1
0
Fork 0
mirror of https://github.com/Ysurac/openmptcprouter-feeds.git synced 2025-03-09 15:40:03 +00:00

Test upload and download with iperf

This commit is contained in:
Ycarus 2018-07-16 12:16:54 +02:00
parent ed45459144
commit fa86ba21a6
2 changed files with 69 additions and 22 deletions

View file

@ -10,7 +10,7 @@ function index()
entry({"admin", "services", "iperf", "run_test"}, post("run_test")).leaf = true entry({"admin", "services", "iperf", "run_test"}, post("run_test")).leaf = true
end end
function run_test(server,proto,mode) function run_test(server,proto,mode,updown)
luci.http.prepare_content("text/plain") luci.http.prepare_content("text/plain")
local iperf local iperf
local addr = uci:get("iperf",server,"host") local addr = uci:get("iperf",server,"host")
@ -21,10 +21,18 @@ function run_test(server,proto,mode)
end end
local port = t[ math.random( #t ) ] local port = t[ math.random( #t ) ]
if proto == "ipv4" then if proto == "ipv4" then
iperf = io.popen("iperf3 -c %s -P 10 -4 -p %s -J" % {ut.shellquote(addr),port}) if updown == "upload" then
iperf = io.popen("iperf3 -c %s -P 10 -4 -p %s -O 3 -J" % {ut.shellquote(addr),port})
else
iperf = io.popen("iperf3 -c %s -P 10 -4 -p %s -O 3 -R -J" % {ut.shellquote(addr),port})
end
--iperf = io.popen("iperf3 -c bouygues.iperf.fr -P 10 -4 -J") --iperf = io.popen("iperf3 -c bouygues.iperf.fr -P 10 -4 -J")
else else
iperf = io.popen("iperf3 -c %s -P 10 -6 -p %s -J" % {ut.shellquote(addr),port}) if updown == "upload" then
iperf = io.popen("iperf3 -c %s -P 10 -6 -p %s -O 3 -J" % {ut.shellquote(addr),port})
else
iperf = io.popen("iperf3 -c %s -P 10 -6 -p %s -O 3 -R -J" % {ut.shellquote(addr),port})
end
end end
if iperf then if iperf then
while true do while true do

View file

@ -8,45 +8,84 @@
<script type="text/javascript">//<![CDATA[ <script type="text/javascript">//<![CDATA[
var stxhr = new XHR(); var stxhr = new XHR();
function update_status(field, proto, mode) function update_speed(field, proto, mode)
{
update_upload(field,proto,mode);
}
function update_upload(field, proto, mode)
{ {
var tool = field.name; var tool = field.name;
var addr = field.value; var addr = field.value;
var legend = document.getElementById('diag-rc-legend'); var upload = document.getElementById('iperf-upload');
var output = document.getElementById('diag-rc-output');
if (legend && output) if (upload)
{ {
output.innerHTML = upload.innerHTML =
'<img src="<%=resource%>/icons/loading.gif" alt="<%:Loading%>" style="vertical-align:middle" /> ' + '<img src="<%=resource%>/icons/loading.gif" alt="<%:Loading%>" style="vertical-align:middle" /> ' + '<%:Upload%> - ' +
'<%:Waiting for command to complete...%>' '<%:Waiting for command to complete...%>'
; ;
legend.parentNode.style.display = 'block'; stxhr.post('<%=url('admin/services/iperf')%>/run_test' + '/' + addr + '/' + proto + '/' + mode + '/upload', { token: '<%=token%>' },
legend.style.display = 'inline';
stxhr.post('<%=url('admin/services/iperf')%>/run_test' + '/' + addr + '/' + proto + '/' + mode, { token: '<%=token%>' },
function(x) function(x)
{ {
if (x.responseText) if (x.responseText)
{ {
legend.style.display = 'none';
var response = JSON.parse(x.responseText); var response = JSON.parse(x.responseText);
if (response.error) if (response.error)
{ {
output.innerHTML = String.format('<pre>%s</pre>', response.error ); upload.innerHTML = String.format('<%:Upload%> - <pre>%s</pre>', response.error );
} else { } else {
var sent_speed = (response.end.sum_sent.bits_per_second/1000000); var sent_speed = (response.end.sum_sent.bits_per_second/1000000);
var received_speed = (response.end.sum_received.bits_per_second/1000000); var received_speed = (response.end.sum_received.bits_per_second/1000000);
var server = response.start.connecting_to.host; var server = response.start.connecting_to.host;
output.innerHTML = String.format('<pre>Server: %s - Sent: %sMb/s - Received: %sMb/s</pre>', server, sent_speed.toFixed(2), received_speed.toFixed(2) ); upload.innerHTML = String.format('<pre><%:Upload%> - Server: %s - Sender: %sMb/s - Receiver: %sMb/s</pre>', server, sent_speed.toFixed(2), received_speed.toFixed(2) );
} }
} }
else else
{ {
legend.style.display = 'none'; upload.innerHTML = '<%:Upload%> - <span class="error"><%:Bad address specified!%></span>';
output.innerHTML = '<span class="error"><%:Bad address specified!%></span>'; }
update_download(field,proto,mode);
}
);
}
}
function update_download(field, proto, mode)
{
var tool = field.name;
var addr = field.value;
var download = document.getElementById('iperf-download');
if (download)
{
download.innerHTML =
'<img src="<%=resource%>/icons/loading.gif" alt="<%:Loading%>" style="vertical-align:middle" /> ' + '<%:Download%> - ' +
'<%:Waiting for command to complete...%>'
;
stxhr.post('<%=url('admin/services/iperf')%>/run_test' + '/' + addr + '/' + proto + '/' + mode + '/download', { token: '<%=token%>' },
function(x)
{
if (x.responseText)
{
var response = JSON.parse(x.responseText);
if (response.error)
{
download.innerHTML = String.format('<%:Download%> - <pre>%s</pre>', response.error );
} else {
var sent_speed = (response.end.sum_sent.bits_per_second/1000000);
var received_speed = (response.end.sum_received.bits_per_second/1000000);
var server = response.start.connecting_to.host;
download.innerHTML = String.format('<pre><%:Download%> - Server: %s - Sender: %sMb/s - Receiver: %sMb/s</pre>', server, sent_speed.toFixed(2), received_speed.toFixed(2) );
}
}
else
{
download.innerHTML = '<%:Download%> - <span class="error"><%:Bad address specified!%></span>';
} }
} }
); );
@ -94,13 +133,13 @@
</select> </select>
</div> </div>
</div> </div>
<input type="button" value="<%:Test%>" class="cbi-button cbi-button-apply" onclick="update_status(this.form.addr,this.form.proto.value,this.form.mode.value)" /> <input type="button" value="<%:Test%>" class="cbi-button cbi-button-apply" onclick="update_speed(this.form.addr,this.form.proto.value,this.form.mode.value)" />
</fieldset> </fieldset>
</div> </div>
</form> </form>
<div class="cbi-section" style="display:none"> <div class="cbi-section">
<strong id="diag-rc-legend"></strong> <span id="iperf-upload"></span>
<span id="diag-rc-output"></span> <span id="iperf-download"></span>
</div> </div>
<%+footer%> <%+footer%>