1
0
Fork 0
mirror of https://github.com/Ysurac/openmptcprouter-feeds.git synced 2025-03-09 15:40:03 +00:00
This commit is contained in:
suyuan168 2022-04-14 16:37:22 +08:00
parent 591a726b09
commit b8edf7acb9
79 changed files with 1 additions and 7503 deletions

View file

@ -1,56 +0,0 @@
local uci = luci.model.uci.cursor()
local ut = require "luci.util"
module("luci.controller.iperf", package.seeall)
function index()
--entry({"admin", "openmptcprouter", "iperf"}, cbi("iperf"), _("iperf"))
entry({"admin", "services", "iperf"}, alias("admin", "services", "iperf", "test"), _("iPerf"),8)
entry({"admin", "services", "iperf", "test"}, template("iperf/test"), nil,1)
entry({"admin", "services", "iperf", "run_test"}, post("run_test")).leaf = true
end
function run_test(server,proto,mode,updown,omit,parallel,transmit,bitrate)
luci.http.prepare_content("text/plain")
local iperf
local addr = uci:get("iperf",server,"host")
local ports = uci:get("iperf",server,"ports")
local user = uci:get("iperf",server,"user") or ""
local password = uci:get("iperf",server,"password") or ""
local key = uci:get("iperf",server,"key") or ""
local options = ""
if user ~= "" and password ~= "" and key ~= "" then
luci.sys.call("echo " .. key .. " | base64 -d > /tmp/iperf.pem")
options = options .. " --username " .. user .. " --rsa-public-key-path /tmp/iperf.pem"
end
if mode == "udp" then
options = options .. " -u -b " .. bitrate
end
if mode ~= "upload" then
options = options .. " -R"
end
local ipv = "4"
if proto == "ipv6" then
local ipv = "6"
end
local t={}
for pt in ports:gmatch("([^,%s]+)") do
table.insert(t,pt)
end
local port = t[ math.random( #t ) ]
if password ~= "" then
iperf = io.popen("omr-iperf %s -P %s -%s -O %s -t %s -J -Z %s" % {server,parallel,ipv,omit,transmit,options})
else
iperf = io.popen("iperf3 -c %s -P %s -%s -p %s -O %s -t %s -J -Z %s" % {ut.shellquote(addr),parallel,ipv,port,omit,transmit,options})
end
if iperf then
while true do
local ln = iperf:read("*l")
if not ln then break end
luci.http.write(ln)
luci.http.write("\n")
end
end
return
end

View file

@ -1,178 +0,0 @@
<%+header%>
<%
local uci = require("luci.model.uci").cursor()
%>
<script type="text/javascript" src="<%=resource%>/cbi.js?v=git-18.193.28471-ee087a1"></script>
<script type="text/javascript">//<![CDATA[
var stxhr = new XHR();
function update_speed(field, proto, mode,omit,parallel,transmit,bitrate)
{
update_upload(field,proto,mode,omit,parallel,transmit,bitrate);
}
function update_upload(field, proto, mode,omit,parallel,transmit,bitrate)
{
var tool = field.name;
var addr = field.value;
var upload = document.getElementById('iperf-upload');
if (upload)
{
upload.innerHTML =
'<img src="<%=resource%>/icons/loading.gif" alt="<%:Loading%>" style="vertical-align:middle" /> ' + '<%:Upload%> - ' +
'<%:Waiting for command to complete...%>'
;
stxhr.post('<%=url('admin/services/iperf')%>/run_test' + '/' + addr + '/' + proto + '/' + mode + '/upload' + '/' + omit + '/' + parallel + '/' + transmit + '/' + bitrate, { token: '<%=token%>' },
function(x)
{
if (x.responseText)
{
var response = JSON.parse(x.responseText);
if (response.error)
{
upload.innerHTML = String.format('<%:Upload%> - <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;
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
{
upload.innerHTML = '<%:Upload%> - <span class="error"><%:Bad address specified!%></span>';
}
update_download(field,proto,mode,omit,parallel,transmit,bitrate);
}
);
}
}
function update_download(field, proto, mode,omit,parallel,transmit,bitrate)
{
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' + '/' + omit + '/' + parallel + '/' + transmit + '/' + bitrate, { 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>';
}
}
);
}
}
//]]></script>
<% if stderr and #stderr > 0 then %><pre class="error"><%=pcdata(stderr)%></pre><% end %>
<form class="inline" method="post" action="<%=url('admin/services/iperf/run_test')%>">
<div class="cbi-map">
<h2 name="content"><%:iPerf speed tests%></h2>
<div class="cbi-map-descr"><%:This iPerf interface is in bêta. No support for this.%></div>
<fieldset class="cbi-section" id="networks">
<legend><%:Settings%></legend>
<div class="cbi-section-descr"></div>
<div class="cbi-value">
<label class="cbi-value-title"><%:Mode of operation%></label>
<div class="cbi-value-field">
<select class="cbi-input-select" name="mode">
<option value="tcp">TCP</option>
<option value="udp">UDP</option>
</select>
</div>
</div>
<div class="cbi-value">
<label class="cbi-value-title"><%:Internet protocol%></label>
<div class="cbi-value-field">
<select class="cbi-input-select" name="proto">
<option value="ipv4">IPv4</option>
<option value="ipv6">IPv6</option>
</select>
</div>
</div>
<div class="cbi-value">
<label class="cbi-value-title"><%:Target bitrate (Mbits/s)%></label>
<div class="cbi-value-field">
<input name="bitrate" data-type="uinteger" type="text" class="cbi-input-text" value="0"/>
<br />
<div class="cbi-value-description">
<%:0 for unlimited. Need to be limited for UDP test%>
</div>
</div>
</div>
<div class="cbi-value">
<label class="cbi-value-title"><%:Number of parallel client streams to run%></label>
<div class="cbi-value-field">
<input name="parallel" data-type="uinteger" type="text" class="cbi-input-text" value="1"/>
</div>
</div>
<div class="cbi-value">
<label class="cbi-value-title"><%:Omit the first n seconds%></label>
<div class="cbi-value-field">
<input name="omit" data-type="uinteger" type="text" class="cbi-input-text" value="3"/>
</div>
</div>
<div class="cbi-value">
<label class="cbi-value-title"><%:Time to transmit for (s)%></label>
<div class="cbi-value-field">
<input name="transmit" data-type="uinteger" type="text" class="cbi-input-text" value="5"/>
</div>
</div>
<div class="cbi-value">
<label class="cbi-value-title"><%:Server%></label>
<div class="cbi-value-field">
<select class="cbi-input-select" name="addr">
<%
uci:foreach("iperf","server", function(s)
local server = s[".name"]
%>
<option value="<%=server%>"><%=string.gsub(server,"_","-")%></option>
<%
end)
%>
</select>
<br />
<div class="cbi-value-description">
<%:Server VPS IP is bypassed, so this will test only default route speed.%>
</div>
</div>
</div>
<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,this.form.omit.value,this.form.parallel.value,this.form.transmit.value,this.form.bitrate.value)" />
</fieldset>
</div>
</form>
<div class="cbi-section">
<span id="iperf-upload"></span>
<span id="iperf-download"></span>
</div>
<%+footer%>