up 升级菜单

This commit is contained in:
Pdboy Sir 2024-03-23 00:38:54 +08:00 committed by GitHub
parent 6ada837f88
commit 78fe9e6554
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
19 changed files with 266 additions and 138 deletions

View File

@ -10,8 +10,8 @@ LUCI_TITLE:=LuCI support for Kucat theme setting by sirpdboy
LUCI_DEPENDS:=+luci-compat +curl +wget +libustream-openssl LUCI_DEPENDS:=+luci-compat +curl +wget +libustream-openssl
LUCI_PKGARCH:=all LUCI_PKGARCH:=all
PKG_VERSION:=1.7.9 PKG_VERSION:=1.7.10
PKG_RELEASE:=20240312 PKG_RELEASE:=20240318
define Package/$(PKG_NAME)/conffiles define Package/$(PKG_NAME)/conffiles
/etc/config/advancedplus /etc/config/advancedplus

View File

@ -4,7 +4,7 @@ local uci=luci.model.uci.cursor()
local a, t, e local a, t, e
a = Map("advancedplus") a = Map("advancedplus")
a.title = translate("Advanced Setting") a.title = translate("Advanced Setting")
a.description = translate("The enhanced version of the original advanced settings allows for unified setting and management of background images for kucat, Agron, and Opentopd themes, without the need to upload them separately. Color schemes for kucat and Agron themes can be set.<br>").. a.description = translate("The enhanced version of the original advanced settings allows for unified setting and management of background images for kucat/Agron/Opentopd themes, without the need to upload them separately. Color schemes for kucat/Agron/design themes can be set.<br>")..
translate("At the same time, important plugin parameters can be compiled. At the same time, some system parameters can also be set, such as display and hide settings.").. translate("At the same time, important plugin parameters can be compiled. At the same time, some system parameters can also be set, such as display and hide settings.")..
translate("</br>For specific usage, see:")..translate("<a href=\'https://github.com/sirpdboy/luci-app-advancedplus.git' target=\'_blank\'>GitHub @sirpdboy/luci-app-advancedplus </a>") translate("</br>For specific usage, see:")..translate("<a href=\'https://github.com/sirpdboy/luci-app-advancedplus.git' target=\'_blank\'>GitHub @sirpdboy/luci-app-advancedplus </a>")
@ -30,5 +30,8 @@ e = t:option(Flag, "wizard",translate('Hide Wizard'), translate('Show or hide th
e.default = "0" e.default = "0"
e.rmempty = false e.rmempty = false
e = t:option(Flag, "tsoset",translate('TSO optimization for network card interruption'), translate('Turn off the TSO parameters of the INTEL225 network card to improve network interruption'))
e.default = "1"
e.rmempty = false
return a return a

View File

@ -14,7 +14,6 @@ msgstr "Argon主题设置"
msgid "Design Config" msgid "Design Config"
msgstr "Design主题设置" msgstr "Design主题设置"
msgid "Advanced Setting" msgid "Advanced Setting"
msgstr "高级设置" msgstr "高级设置"
@ -30,8 +29,8 @@ msgstr "进阶参数编辑"
msgid "Built-in" msgid "Built-in"
msgstr "内建" msgstr "内建"
msgid "The enhanced version of the original advanced settings allows for unified setting and management of background images for kucat, Agron, and Opentopd themes, without the need to upload them separately. Color schemes for kucat and Agron themes can be set.<br>" msgid "The enhanced version of the original advanced settings allows for unified setting and management of background images for kucat/Agron/Opentopd themes, without the need to upload them separately. Color schemes for kucat/Agron/design themes can be set.<br>"
msgstr "原高级设置的加强版,可以统一设置管理 kucat,Agron,Opentopd三个主题登录壁纸图片无须分开上传可以设置kucat,Agron主题的颜色方案<br>" msgstr "原高级设置的加强版,可以统一设置管理 kucat/Agron/Opentopd三个主题登录壁纸图片无须分开上传可以设置kucat/Agron/design主题的颜色方案<br>"
msgid "At the same time, important plugin parameters can be compiled. At the same time, some system parameters can also be set, such as display and hide settings." msgid "At the same time, important plugin parameters can be compiled. At the same time, some system parameters can also be set, such as display and hide settings."
msgstr "同时可以编译重要的插件参数。同时还可以设置部分系统参数,如:显示隐藏设置设置等功能。" msgstr "同时可以编译重要的插件参数。同时还可以设置部分系统参数,如:显示隐藏设置设置等功能。"
@ -373,3 +372,9 @@ msgstr "本页是配置"
msgid "Document content. Automatic restart takes effect after saving the application" msgid "Document content. Automatic restart takes effect after saving the application"
msgstr "文档内容。应用保存后自动重启生效" msgstr "文档内容。应用保存后自动重启生效"
msgid "TSO optimization for network card interruption"
msgstr "网卡断流TSO优化"
msgid "Turn off the TSO parameters of the INTEL225 network card to improve network interruption"
msgstr "关闭INTEL225网卡TSO参数改善网络断流"

View File

@ -29,8 +29,8 @@ msgstr "进阶参数编辑"
msgid "Built-in" msgid "Built-in"
msgstr "内建" msgstr "内建"
msgid "The enhanced version of the original advanced settings allows for unified setting and management of background images for kucat, Agron, and Opentopd themes, without the need to upload them separately. Color schemes for kucat and Agron themes can be set.<br>" msgid "The enhanced version of the original advanced settings allows for unified setting and management of background images for kucat/Agron/Opentopd themes, without the need to upload them separately. Color schemes for kucat/Agron/design themes can be set.<br>"
msgstr "原高级设置的加强版,可以统一设置管理 kucat,Agron,Opentopd三个主题登录壁纸图片无须分开上传可以设置kucat,Agron主题的颜色方案<br>" msgstr "原高级设置的加强版,可以统一设置管理 kucat/Agron/Opentopd三个主题登录壁纸图片无须分开上传可以设置kucat/Agron/design主题的颜色方案<br>"
msgid "At the same time, important plugin parameters can be compiled. At the same time, some system parameters can also be set, such as display and hide settings." msgid "At the same time, important plugin parameters can be compiled. At the same time, some system parameters can also be set, such as display and hide settings."
msgstr "同时可以编译重要的插件参数。同时还可以设置部分系统参数,如:显示隐藏设置设置等功能。" msgstr "同时可以编译重要的插件参数。同时还可以设置部分系统参数,如:显示隐藏设置设置等功能。"
@ -372,3 +372,9 @@ msgstr "本页是配置"
msgid "Document content. Automatic restart takes effect after saving the application" msgid "Document content. Automatic restart takes effect after saving the application"
msgstr "文档内容。应用保存后自动重启生效" msgstr "文档内容。应用保存后自动重启生效"
msgid "TSO optimization for network card interruption"
msgstr "网卡断流TSO优化"
msgid "Turn off the TSO parameters of the INTEL225 network card to improve network interruption"
msgstr "关闭INTEL225网卡TSO参数改善网络断流"

View File

@ -9,7 +9,7 @@ config basic
option font_x '0.875rem' option font_x '0.875rem'
option bklock '1' option bklock '1'
option setbar '1' option setbar '1'
option dayword '1' option dayword '0'
option background '0' option background '0'
option bgqs '1' option bgqs '1'
option mode 'light' option mode 'light'
@ -19,7 +19,7 @@ config basic
option primary_opacity '0' option primary_opacity '0'
option primary_rgbs_ts '0.1' option primary_rgbs_ts '0.1'
option primary_rgbs '28,66,188' option primary_rgbs '28,66,188'
option bkuse '1' option bkuse '0'
config theme config theme
option primary_rgbbody '33,45,60' option primary_rgbbody '33,45,60'
@ -31,7 +31,7 @@ config theme
option primary_rgbm_ts '0.9' option primary_rgbm_ts '0.9'
option primary_rgbm 'blue' option primary_rgbm 'blue'
option use '1' option use '1'
option bkuse '1' option bkuse '0'
config theme config theme
option primary_rgbbody '33,45,60' option primary_rgbbody '33,45,60'
@ -88,7 +88,7 @@ config theme
option remarks '炫灰隔栏模糊' option remarks '炫灰隔栏模糊'
option primary_rgbs_ts '0.5' option primary_rgbs_ts '0.5'
option primary_opacity '4' option primary_opacity '4'
option use '0' option use '1'
config theme config theme
option mode 'light' option mode 'light'

View File

@ -23,7 +23,7 @@ config basic
option font_x '0.875rem' option font_x '0.875rem'
option bklock '1' option bklock '1'
option setbar '1' option setbar '1'
option dayword '1' option dayword '0'
option background '0' option background '0'
option bgqs '1' option bgqs '1'
option mode 'light' option mode 'light'
@ -33,7 +33,7 @@ config basic
option primary_opacity '0' option primary_opacity '0'
option primary_rgbs_ts '0.1' option primary_rgbs_ts '0.1'
option primary_rgbs '28,66,188' option primary_rgbs '28,66,188'
option bkuse '1' option bkuse '0'
config theme config theme
option primary_rgbbody '33,45,60' option primary_rgbbody '33,45,60'
@ -45,7 +45,7 @@ config theme
option primary_rgbm_ts '0.9' option primary_rgbm_ts '0.9'
option primary_rgbm 'blue' option primary_rgbm 'blue'
option use '1' option use '1'
option bkuse '1' option bkuse '0'
config theme config theme
option primary_rgbbody '33,45,60' option primary_rgbbody '33,45,60'
@ -124,6 +124,19 @@ cpumodeset()
for i in 0 1 2 3 ;do for i in 0 1 2 3 ;do
echo $1 > /sys/devices/system/cpu/cpufreq/policy$i/scaling_governor echo $1 > /sys/devices/system/cpu/cpufreq/policy$i/scaling_governor
done done
}
tsoset() {
tautocore=/etc/init.d/autocore
[ -f $tautocore ] || return
if [ "x$(uci -q get advancedplus.@basic[0].tsoset)" = "x1" ] ;then
sed -i 's/tso on/tso off/g' $tautocore
$tautocore restart
else
sed -i 's/tso off/tso on/g' $tautocore
$tautocore restart
fi
} }
sethttps() { sethttps() {
@ -166,6 +179,7 @@ dev=`ifconfig | grep "Point-to-Point" | cut -d " " -f1`
[ ! $dev ] && dev=br-lan [ ! $dev ] && dev=br-lan
setnetwizard setnetwizard
sethttps sethttps
tsoset
[ "x$(uci -q get advancedplus.@basic[0].qos)" = "x1" ] && \usr\bin\qoshome [ "x$(uci -q get advancedplus.@basic[0].qos)" = "x1" ] && \usr\bin\qoshome
if [ "x$(uci -q get advancedplus.@basic[0].ttl)" = "x1" ] ; then if [ "x$(uci -q get advancedplus.@basic[0].ttl)" = "x1" ] ; then
$ipt -t mangle -A PREROUTING -p tcp --tcp-flags RST RST -i $dev -j DROP $ipt -t mangle -A PREROUTING -p tcp --tcp-flags RST RST -i $dev -j DROP
@ -274,8 +288,8 @@ if [ "x$useset" == "x0" ] ; then
uci set advancedplus.@basic[0].primary_rgbs_ts='0.1' uci set advancedplus.@basic[0].primary_rgbs_ts='0.1'
uci set advancedplus.@basic[0].primary_rgbs='225,112,88' uci set advancedplus.@basic[0].primary_rgbs='225,112,88'
uci set advancedplus.@basic[0].bkuse='1' uci set advancedplus.@basic[0].bkuse='1'
uci set advancedplus.@basic[0].primary_rgbm_ts='0.9' uci set advancedplus.@basic[0].primary_rgbm_ts='0.7'
uci set advancedplus.@basic[0].primary_opacity='50' uci set advancedplus.@basic[0].primary_opacity='5'
[ $mode == dark ] && uci set advancedplus.@basic[0].primary_rgbbody='33,45,60' || uci set advancedplus.@basic[0].primary_rgbbody='248,248,248' [ $mode == dark ] && uci set advancedplus.@basic[0].primary_rgbbody='33,45,60' || uci set advancedplus.@basic[0].primary_rgbbody='248,248,248'
fi fi
if [ "x$(uci -q get advancedplus.@basic[0].fontmode)" = "x1" ] ; then if [ "x$(uci -q get advancedplus.@basic[0].fontmode)" = "x1" ] ; then

View File

@ -12,7 +12,7 @@ LUCI_TITLE:=LuCI support for Scheduled Time setting
LUCI_PKGARCH:=all LUCI_PKGARCH:=all
PKG_VERSION:=2.1.0 PKG_VERSION:=2.1.0
PKG_RELEASE:=20240311 PKG_RELEASE:=20240318
define Package/$(PKG_NAME)/conffiles define Package/$(PKG_NAME)/conffiles

View File

@ -13,12 +13,12 @@ s.anonymous=true
e=s:option(TextValue, "customscript" ,translate("Edit Custom Script")) e=s:option(TextValue, "customscript" ,translate("Edit Custom Script"))
e.description = translate("The execution content of the [Scheduled Customscript] in the task name") e.description = translate("The execution content of the [Scheduled Customscript] in the task name")
e.rows = 5 e.rows = 5
e.rmempty = false e.default=" "
e=s:option(TextValue, "customscript2" ,translate("Edit Custom Script2")) e=s:option(TextValue, "customscript2" ,translate("Edit Custom Script2"))
e.description = translate("The execution content of the [Scheduled Customscript2] in the task name") e.description = translate("The execution content of the [Scheduled Customscript2] in the task name")
e.rows = 5 e.rows = 5
e.rmempty = false e.default=" "
s=m:section(TypedSection,"stime","") s=m:section(TypedSection,"stime","")
s.addremove=true s.addremove=true
@ -38,9 +38,9 @@ e:value(9,translate("Scheduled DisReconn"))
e:value(10,translate("Scheduled DisRereboot")) e:value(10,translate("Scheduled DisRereboot"))
e:value(11,translate("Scheduled Restartmwan3")) e:value(11,translate("Scheduled Restartmwan3"))
e:value(12,translate("Scheduled Customscript")) e:value(12,translate("Scheduled Customscript"))
e:value(13,translate("Scheduled Customscript2")) e:value(13,translate("Scheduled Wifiup"))
e:value(14,translate("Scheduled Wifiup")) e:value(14,translate("Scheduled Wifidown"))
e:value(15,translate("Scheduled Wifidown")) e:value(15,translate("Scheduled Customscript2"))
e.default=2 e.default=2
e=s:option(Flag,"enable",translate("Enable")) e=s:option(Flag,"enable",translate("Enable"))

View File

@ -1,6 +1,7 @@
config global config global
option enabled '0' option enabled '0'
option customscript '#!/bin/sh' option customscript '# Sh script rules'
option customscript2 '# Sh script rules'
config stime config stime
option hour '*/4' option hour '*/4'

View File

@ -77,17 +77,17 @@ do
[ $ttype = '0' ] && echo "$cmd" >> $CR || echo "sleep $delay && /usr/bin/timesethandler customscript Startup_task" >>$TT [ $ttype = '0' ] && echo "$cmd" >> $CR || echo "sleep $delay && /usr/bin/timesethandler customscript Startup_task" >>$TT
;; ;;
13) 13)
local cmd="$minute $hour * $month $week /usr/bin/timesethandler customscript2 Scheduled_task"
[ $ttype = '0' ] && echo "$cmd" >> $CR || echo "sleep $delay && /usr/bin/timesethandler customscript2 Startup_task" >>$TT
;;
14)
local cmd="$minute $hour * $month $week /usr/bin/timesethandler upwifi Scheduled_task" local cmd="$minute $hour * $month $week /usr/bin/timesethandler upwifi Scheduled_task"
[ $ttype = '0' ] && echo "$cmd" >> $CR || echo "sleep $delay && /usr/bin/timesethandler upwifi Startup_task" >>$TT [ $ttype = '0' ] && echo "$cmd" >> $CR || echo "sleep $delay && /usr/bin/timesethandler upwifi Startup_task" >>$TT
;; ;;
15) 14)
local cmd="$minute $hour * $month $week /usr/bin/timesethandler downwifi Scheduled_task" local cmd="$minute $hour * $month $week /usr/bin/timesethandler downwifi Scheduled_task"
[ $ttype = '0' ] && echo "$cmd" >> $CR || echo "sleep $delay && /usr/bin/timesethandler downwifi Startup_task" >>$TT [ $ttype = '0' ] && echo "$cmd" >> $CR || echo "sleep $delay && /usr/bin/timesethandler downwifi Startup_task" >>$TT
;; ;;
15)
local cmd="$minute $hour * $month $week /usr/bin/timesethandler customscript2 Scheduled_task"
[ $ttype = '0' ] && echo "$cmd" >> $CR || echo "sleep $delay && /usr/bin/timesethandler customscript2 Startup_task" >>$TT
;;
esac esac
fi fi
done done

View File

@ -8,8 +8,8 @@ include $(TOPDIR)/rules.mk
PKG_NAME:=luci-app-netspeedtest PKG_NAME:=luci-app-netspeedtest
PKG_VERSION:=2.2.3 PKG_VERSION:=2.2.4
PKG_RELEASE:=20240315 PKG_RELEASE:=20240319
LUCI_TITLE:=LuCI Support for netspeedtest LUCI_TITLE:=LuCI Support for netspeedtest
LUCI_DEPENDS:=+python3 +iperf3-ssl +homebox LUCI_DEPENDS:=+python3 +iperf3-ssl +homebox
@ -24,8 +24,7 @@ endef
define Package/$(PKG_NAME)/postinst define Package/$(PKG_NAME)/postinst
endef endef
define Package/$(PKG_NAME)/prerm
endef
include $(TOPDIR)/feeds/luci/luci.mk include $(TOPDIR)/feeds/luci/luci.mk

View File

@ -1,6 +1,7 @@
-- Copyright (C) 2020-2022 sirpdboy <herboy2008@gmail.com> https://github.com/sirpdboy/netspeedtest -- Copyright (C) 2020-2022 sirpdboy <herboy2008@gmail.com> https://github.com/sirpdboy/netspeedtest
module("luci.controller.netspeedtest", package.seeall) module("luci.controller.netspeedtest", package.seeall)
local http = require "luci.http"
local fs=require"nixio.fs" local fs=require"nixio.fs"
local sys=require "luci.sys" local sys=require "luci.sys"
local uci = luci.model.uci.cursor() local uci = luci.model.uci.cursor()
@ -8,22 +9,47 @@ name='netspeedtest'
function index() function index()
if not nixio.fs.access("/etc/config/netspeedtest") then return end if not nixio.fs.access("/etc/config/netspeedtest") then return end
local e = entry({"admin","network","netspeedtest"},alias("admin", "network", "netspeedtest", "speedtestlan"),_("Net Speedtest"), 90)
e.dependent=false local e = entry({"admin","network","netspeedtest"},alias("admin", "network", "netspeedtest", "speedtestlan"),_("Net Speedtest"),90)
e.acl_depends = { "luci-app-netspeedtest" } e.dependent = false
e.acl_depends = { "luci-app-netspeedtest" }
entry({"admin", "network", "netspeedtest", "speedtestlan"},cbi("netspeedtest/speedtestlan"),_("Lan Speedtest Web"),20).leaf = true entry({"admin", "network", "netspeedtest", "speedtestlan"},cbi("netspeedtest/speedtestlan"),_("Lan Speedtest Web"),20).leaf = true
entry({"admin", "network", "netspeedtest", "speedtestiperf3"},cbi("netspeedtest/speedtestiperf3", {hideapplybtn=true, hidesavebtn=true, hideresetbtn=true}),_("Lan Speedtest Iperf3"),30).leaf = true entry({"admin", "network", "netspeedtest", "speedtestiperf3"},cbi("netspeedtest/speedtestiperf3", {hideapplybtn=true, hidesavebtn=true, hideresetbtn=true}),_("Lan Speedtest Iperf3"),30).leaf = true
entry({"admin", "network", "netspeedtest", "speedtestwan"},cbi("netspeedtest/speedtestwan", {hideapplybtn=true, hidesavebtn=true, hideresetbtn=true}),_("Broadband speed test"), 40).leaf = true entry({"admin", "network", "netspeedtest", "speedtestwan"},cbi("netspeedtest/speedtestwan", {hideapplybtn=true, hidesavebtn=true, hideresetbtn=true}),_("Broadband speed test"), 40).leaf = true
entry({"admin", "network", "netspeedtest", "speedtestport"},cbi("netspeedtest/speedtestport", {hideapplybtn=true, hidesavebtn=true, hideresetbtn=true}),_("Server Port Latency Test"), 50).leaf = true entry({"admin", "network", "netspeedtest", "speedtestport"},cbi("netspeedtest/speedtestport", {hideapplybtn=true, hidesavebtn=true, hideresetbtn=true}),_("Server Port Latency Test"), 50).leaf = true
entry({"admin", "network", "netspeedtest", "log"}, form("netspeedtest/log"), _("Log"), 60).leaf = true
entry({"admin", "network", "netspeedtest", "test_port"}, call("test_port")) entry({"admin", "network", "netspeedtest", "test_port"}, call("test_port"))
entry({"admin", "network", "iperf3_status"}, call("iperf3_status")) entry({"admin", "network", "iperf3_status"}, call("iperf3_status"))
entry({"admin", "network", "test_iperf0"}, post("test_iperf0"), nil).leaf = true entry({"admin", "network", "test_iperf0"}, post("test_iperf0"), nil).leaf = true
entry({"admin", "network", "test_iperf1"}, post("test_iperf1"), nil).leaf = true entry({"admin", "network", "test_iperf1"}, post("test_iperf1"), nil).leaf = true
entry({"admin", "network", "netspeedtest", "speedtestwanrun"}, call("speedtestwanrun")) entry({"admin", "network", "netspeedtest", "speedtestwanrun"}, call("speedtestwanrun"))
entry({"admin", "network", "netspeedtest", "realtime_log"}, call("get_log")) entry({"admin", "network", "netspeedtest", "netcheck"}, call("netcheck"))
entry({"admin", "network", "netspeedtest", "dellog"},call("dellog")) entry({"admin", "network", "netspeedtest", "dellog"},call("dellog"))
entry({"admin", "network", "netspeedtest", "getlog"},call("getlog"))
end end
function netcheck()
http.prepare_content("text/plain; charset=utf-8")
local f=io.open("/etc/netspeedtest/netspeedtest.log", "r+")
local fdp=fs.readfile("/etc/netspeedtest/netspeedtestpos") or 0
f:seek("set",fdp)
local a=f:read(2048000) or ""
fdp=f:seek()
fs.writefile("/etc/netspeedtest/netspeedtestpos",tostring(fdp))
f:close()
http.write(a)
end
function speedtestwanrun()
local cli = luci.http.formvalue('cli')
uci:set(name, 'speedtestwan', 'speedtest_cli', cli)
uci:commit(name)
fs.writefile("/etc/netspeedtest/netspeedtestpos","0")
http.prepare_content("application/json")
http.write('')
sys.exec(string.format("/etc/init.d/netspeedtest wantest " ..cli.. " > /etc/netspeedtest/netspeedtest.log 2>&1 &" ))
end
function test_port() function test_port()
local e = {} local e = {}
@ -82,24 +108,25 @@ function test_iperf1(addr)
sys.call("/etc/init.d/unblockmusic restart") sys.call("/etc/init.d/unblockmusic restart")
end end
function get_log()
local e = {}
e.running = sys.call("busybox ps -w | grep netspeedtest | grep -v grep >/dev/null") == 0
e.log = fs.readfile("/var/log/netspeedtest.log") or ""
luci.http.prepare_content("application/json")
luci.http.write_json(e)
end
function dellog() function dellog()
fs.writefile("/var/log/netspeedtest.log","") fs.writefile("/var/log/netspeedtest.log","")
http.prepare_content("application/json") http.prepare_content("application/json")
http.write('') http.write('')
end end
function speedtestwanrun()
local cli = luci.http.formvalue('cli')
uci:set(name, 'speedtestwan', 'speedtest_cli', cli) function getlog()
uci:commit(name) logfile="/var/log/netspeedtest.log"
testout("/etc/init.d/netspeedtest wantest "..cli) if not fs.access(logfile) then
http.write("")
return
end
local f=io.open(logfile,"r")
local a=f:read("*a") or ""
f:close()
a=string.gsub(a,"\n$","")
http.prepare_content("text/plain; charset=utf-8")
http.write(a)
end end

View File

@ -0,0 +1,13 @@
local fs = require "nixio.fs"
local uci = require"luci.model.uci".cursor()
local f, t
f = SimpleForm("logview")
f.reset = false
f.submit = false
t=f:field(TextValue,"conf")
t.rmempty=true
t.rows=20
t.template="netspeedtest/log"
t.readonly="readonly"
return f

View File

@ -21,8 +21,5 @@ e = t:option(DummyValue, '', '')
e.rawhtml = true e.rawhtml = true
e.template ='netspeedtest/speedtestport' e.template ='netspeedtest/speedtestport'
e =t:option(DummyValue, '', '')
e.rawhtml = true
e.template = 'netspeedtest/log'
return o return o

View File

@ -12,12 +12,8 @@ e:value("0",translate("ookla-speedtest-cli"))
e:value("1",translate("python3-speedtest-cli")) e:value("1",translate("python3-speedtest-cli"))
e.default = "1" e.default = "1"
e = t:option(DummyValue, '', '') e=t:option(Button, "restart", translate("speedtest.net Broadband speed test"))
e.rawhtml = true e.inputtitle=translate("Click to execute")
e.template ='netspeedtest/speedtestwan' e.template ='netspeedtest/speedtestwan'
e =t:option(DummyValue, '', '')
e.rawhtml = true
e.template = 'netspeedtest/log'
return o return o

View File

@ -1,16 +1,53 @@
<%+cbi/valueheader%> <%+cbi/valueheader%>
<textarea id="logview.list" class="cbi-input-textarea" style="width: 100%" rows="20" readonly="readonly"></textarea> <input type="button" class="btn cbi-button cbi-button-apply" id="apply_update_button" value="<%:Clear Log%>" onclick="apply_del_log()"/>
<input type="checkbox" name="NAME" value="reverse" onclick="reverselog()" style="vertical-align:middle;height:auto;"><%:Reverse%></input>
<textarea id="cbid.logview.1.conf" class="cbi-input-textarea" style="width: 100%;display:inline" data-update="change" rows="32" cols="60" readonly="readonly" > </textarea>
<script type="text/javascript"> <script type="text/javascript">//<![CDATA[
const LOG_URL = '<%=luci.dispatcher.build_url("admin", "network", "netspeedtest","realtime_log")%>'; var islogreverse=false;
XHR.poll(1, LOG_URL, null, (x, d) => { function createAndDownloadFile(fileName,content){
let logview = document.getElementById("logview.list"); var aTag=document.createElement('a');
if (!d.running) { var blob=new Blob([content]);
XHR.halt(); aTag.download=fileName;
} aTag.href=URL.createObjectURL(blob);
logview.value = d.log; aTag.click();
logview.scrollTop = logview.scrollHeight; URL.revokeObjectURL(blob);
}); }
function apply_del_log(){
XHR.get('<%=url([[admin]],[[network]],[[netspeedtest]],[[dellog]])%>',null,function(x,data){
var lv=document.getElementById('cbid.logview.1.conf');
lv.innerHTML="";
}
);
return
}
function reverselog(){
var lv=document.getElementById('cbid.logview.1.conf');
lv.innerHTML=lv.innerHTML.split('\n').reverse().join('\n')
if (islogreverse){
islogreverse=false;
}else{
islogreverse=true;
}
return
}
XHR.poll(3,'<%=url([[admin]],[[network]],[[netspeedtest]],[[getlog]])%>',null,
function(x,data){
var lv=document.getElementById('cbid.logview.1.conf');
lv.innerHTML=""
if (x.responseText && lv){
if (islogreverse){
lv.innerHTML=x.responseText.split('\n').reverse().join('\n')+lv.innerHTML;
}else{
lv.innerHTML+=x.responseText;
}
}
}
)
//]]>
</script> </script>
<%+cbi/valuefooter%> <%+cbi/valuefooter%>

View File

@ -3,24 +3,32 @@
https://github.com/sirpdboy/netspeedtest https://github.com/sirpdboy/netspeedtest
Licensed to the public under the Apache License 2.0. Licensed to the public under the Apache License 2.0.
-%> -%>
<%+cbi/valueheader%> <%+cbi/valueheader%>
<%local fs=require"nixio.fs"%>
<input type="button" class="btn cbi-button cbi-button-apply" id="apply_run_button" value="<%:Click to execute%>" onclick=" return apply_run(this) "/>
<label class="cbi-value-title"><%= translate("speedtest.net Broadband speed test") %></label> <div id="logview" style="display:none">
<div class="cbi-value-field"> <input type="checkbox" id="reversetag" value="reverse" onclick=" return reverselog()" style="vertical-align:middle;height: auto;"><%:reverse%></input>
<input class="cbi-button cbi-button-apply" id="run_service" type="button" onclick="run(this)" value="<%=translate('Click to execute') %>" /> <textarea id="cbid.logview.test.conf" class="cbi-input-textarea" style="width: 100%;display:block;" data-update="change" rows="20" cols="80" readonly="readonly" > </textarea>
</div> </div>
<fieldset class="cbi-section" style="display:none"> <script type="text/javascript">//<![CDATA[
<legend id="wanspeedtest-legend">
<%:Collecting data...%>
</legend>
<span id="wanspeedtest-output"></span>
</fieldset>
<script type="text/javascript">
function run(btn) {
const RUN_URL = '<%=luci.dispatcher.build_url("admin", "network", "netspeedtest","speedtestwanrun")%>'; const RUN_URL = '<%=luci.dispatcher.build_url("admin", "network", "netspeedtest","speedtestwanrun")%>';
const S_URL = '<%=luci.dispatcher.build_url("admin", "network", "netspeedtest","speedtestwan")%>'; const S_URL = '<%=luci.dispatcher.build_url("admin", "network", "netspeedtest","netcheck")%>';
var checkbtn = document.getElementById('apply_run_button');
var islogreverse = false;
function reverselog(){
var lv = document.getElementById('cbid.logview.test.conf');
lv.innerHTML=lv.innerHTML.split('\n').reverse().join('\n')
if (islogreverse){
islogreverse=false;
}else{
islogreverse=true;
}
return
}
function apply_run(btn) {
var sid='speedtestwan' var sid='speedtestwan'
var opt={ var opt={
base:"cbid.netspeedtest."+sid, base:"cbid.netspeedtest."+sid,
@ -47,40 +55,45 @@ function run(btn) {
return ret; return ret;
} }
} }
var legend=document.getElementById('wanspeedtest-legend');
var output=document.getElementById('wanspeedtest-output');
btn.value='<%:Waiting (executing)...%>'; btn.value='<%:Waiting (executing)...%>';
btn.disabled=true; btn.disabled=true;
var cli=opt.get("speedtest_cli").value; var cli=opt.get("speedtest_cli").value;
console.log(cli); console.log(cli);
legend.parentNode.style.display = 'block';
legend.style.display = 'inline';
output.innerHTML =
'<img src="<%=resource%>/icons/loading.gif" alt="<%:Loading%>" style="vertical-align:middle" /> ' +
'<%:Network speed test, please wait...%>'
;
XHR.get(RUN_URL, { cli: cli }, XHR.get(RUN_URL, { cli: cli },
(x) =>{ (x) =>{}
if (x.responseText)
{
legend.style.display = 'none';
output.innerHTML = String.format('<img src=%h height="300" style="vertical-align:middle" />', x.responseText);
}
else
{
legend.style.display = 'none';
output.innerHTML ='</p><%:Operation execution complete%></p>';
}
btn.disabled=false;
btn.value='<%:Click to execute%>';
}
); );
return false; poll_check();
return;
} }
</script> function poll_check(){
var tag = document.getElementById('logview');
tag.style.display="block"
XHR.poll(3, '<%=url([[admin]], [[network]], [[netspeedtest]], [[netcheck]])%>', null,
function(x, data) {
var lv = document.getElementById('cbid.logview.test.conf');
if (x.responseText && lv) {
if (x.responseText=="\u0000"){
for(j = 0,len=this.XHR._q.length; j < len; j++) {
if (this.XHR._q[j].url == '<%=url([[admin]], [[network]], [[netspeedtest]], [[netcheck]])%>'){
this.XHR._q.splice(j,1);
checkbtn.disabled = false;
checkbtn.value = '<%:Click to execute%>';
break;
}
}
return
}
if (islogreverse){
lv.innerHTML = x.responseText.split('\n').reverse().join('\n')+lv.innerHTML;
}else{
lv.innerHTML += x.responseText;
}
}
}
);}
//]]>
</script>
<%+cbi/valuefooter%> <%+cbi/valuefooter%>

View File

@ -15,7 +15,15 @@ EXTRA_COMMANDS="wantest"
TMP_T=/var/netspeedtest_nstest.tmp TMP_T=/var/netspeedtest_nstest.tmp
BINSPEEDTEST='/usr/bin/speedtest' BINSPEEDTEST='/usr/bin/speedtest'
LOCK=/var/lock/netspeedtest_nstest.lock LOCK=/var/lock/netspeedtest_nstest.lock
LOGD=/etc/netspeedtest
LOG=/var/log/netspeedtest.log LOG=/var/log/netspeedtest.log
LOGE=$LOGD/netspeedtest.log
LOGT=$LOGD/netspeedtestpos
[ -d "$LOGD" ] || mkdir -p $LOGD
[ -f "$LOGE" ] || echo "start" > $LOG
[ -f "$LOGT" ] || echo "start" > $LOGT
[ -f "$LOG" ] || echo "start" > $LOG
MAX_LOG=500 MAX_LOG=500
limit_log() { limit_log() {
local logf=$1 local logf=$1
@ -29,10 +37,6 @@ limit_log() {
fi fi
} }
init_log() {
local logf=$1
[ ! -f "$logf" ] && echo "" > $logf
}
echone() { echone() {
echo -ne $* >> $LOG echo -ne $* >> $LOG
@ -42,46 +46,50 @@ echone() {
wantest() { wantest() {
[ -f $LOCK ] && exit [ -f $LOCK ] && exit
limit_log $LOG 500 limit_log $LOG 500
init_log $LOG
touch $LOCK touch $LOCK
TESTMODE=$1 TESTMODE=$1
BINTEMP=$(git_bin_handle $TESTMODE) BINTEMP=$(git_bin_handle $TESTMODE)
# [ -n "$BINTEMP" ] || return
# echone "\n BINTEMP: $BINTEMP "
case $TESTMODE in case $TESTMODE in
0) 0)
echo -ne "\n —————ookla-speedtest测速$TESTMODE—————" >> $LOG echo -ne "\n —————ookla-speedtest测速—————\n" | tee -a $LOG
info=$($BINTEMP > $TMP_T 2>&1 ) $BINTEMP | tee $TMP_T
RESULT=$(echo "$TMP_T" | grep "URL" | awk '{print $NF}') RESULT=$(cat $TMP_T | grep 'URL' | cut -c15-)
if [ -n "$RESULT" ] ;then if [ -n "$RESULT" ] ;then
echo -ne "\n 测服信息:`cat $TMP_T | grep 'Server'| cut -c10- | awk -F: '{printf $2$3}'` 线路:`cat $TMP_T | grep 'ISP' | awk -F: '{printf $2}' ` 延时:`cat $TMP_T | grep 'Latency' | awk -F: '{printf $2}' | awk -F '(' '{printf $1}'`" >> $LOG echo -ne "\n 测服信息:`cat $TMP_T | grep 'Server'| cut -c10- | awk -F: '{printf $2$3}'` 线路:`cat $TMP_T | grep 'ISP' | awk -F: '{printf $2}' ` 延时:`cat $TMP_T | grep 'Latency' | awk -F: '{printf $2}' | awk -F '(' '{printf $1}'`" >> $LOG
echo -ne "\n 下行速率:`cat $TMP_T | grep 'Download' |awk -F: '{printf $2}' | awk -F '(' '{printf $1}'` --" >> $LOG echo -ne "\n 下行速率:`cat $TMP_T | grep 'Download' |awk -F: '{printf $2}' | awk -F '(' '{printf $1}'` --" >> $LOG
echo -ne "-- 上行速率:`cat $TMP_T | grep 'Upload' |awk -F: '{printf $2}' | awk -F '(' '{printf $1}'`" >> $LOG echo -ne "-- 上行速率:`cat $TMP_T | grep 'Upload' |awk -F: '{printf $2}' | awk -F '(' '{printf $1}'`" >> $LOG
echo -ne "\n 测速结果图片链接:`cat $TMP_T | grep 'URL' | cut -c15-`" >> $LOG echo -ne "\n 测速结果图片链接:`cat $TMP_T | grep 'URL' | cut -c15-`" >> $LOG
echo -ne "$RESULT"
else else
echo -ne "\n 因客户端在LUCI状态下无法执行,测试失败!" >> $LOG echo -ne "\n 因客户端在LUCI下运行错误,测试失败!" | tee -a $LOG
echo -ne "\n 请SSH登陆后输入 /etc/init.d/netspeedtest wantest 0 然后等完成后,刷新后查看记录!" >> $LOG echo -ne "\n 请SSH运行:/etc/init.d/netspeedtest wantest 0 测试,完成后,在日志中有测试结果!" | tee -a $LOG
fi fi
echo -ne "\n 测试时间: `date +%Y-%m-%d' '%H:%M:%S`" >> $LOG echo -ne "\n 测试时间: `date +%Y-%m-%d' '%H:%M:%S`" | tee -a $LOG
echo -ne "\n ————————————————————\n" >> $LOG echo -ne "\n ————————————————————\n" | tee -a $LOG
;; ;;
*) *)
echo -ne "\n —————python3-speedtest测速$TESTMODE—————" >> $LOG echo -ne "\n —————python3-speedtest测速—————\n" | tee -a $LOG
info=$($BINTEMP > $TMP_T 2>&1 ) $BINTEMP | tee $TMP_T
echo -ne "\n 测服信息:$(cat $TMP_T | grep 'Hosted by'| cut -c10- | awk -F: '{printf $1}') 延时:$(cat $TMP_T | grep 'Hosted by' | awk -F: '{printf $2}')" >> $LOG echo -ne "\n 测服信息:$(cat $TMP_T | grep 'Hosted by'| cut -c10- | awk -F: '{printf $1}') 延时:$(cat $TMP_T | grep 'Hosted by' | awk -F: '{printf $2}')" >> $LOG
echo -ne "\n 下行速率:$(cat $TMP_T | grep 'Download:' |awk -F: '{printf $2}' )" >> $LOG echo -ne "\n 下行速率:$(cat $TMP_T | grep 'Download:' |awk -F: '{printf $2}' ) --" >> $LOG
echo -ne " ---- 上行速率:$(cat $TMP_T | grep 'Upload:' |awk -F: '{printf $2}' )" >> $LOG echo -ne "-- 上行速率:$(cat $TMP_T | grep 'Upload:' |awk -F: '{printf $2}' )" >> $LOG
echo -ne "\n 测试结果图片链接:$(cat $TMP_T | grep 'results:' | cut -c16- )" >> $LOG echo -ne "\n 测试结果图片链接:$(cat $TMP_T | grep 'results:' | cut -c16- )" >> $LOG
echo -ne "\n 测试时间:`date +%Y-%m-%d" "%H:%M:%S`" >> $LOG echo -ne "\n 测试时间:`date +%Y-%m-%d" "%H:%M:%S`" | tee -a $LOG
echo -ne "\n ————————————————————\n" >> $LOG echo -ne "\n ————————————————————\n" | tee -a $LOG
echo -ne $(cat $TMP_T | grep 'results:' | awk '{print $NF}')
;; ;;
esac esac
rm -f $LOCK rm -f $LOCK
} }
getcpucore(){
#i386, x86_64, arm32, arm32hf, and arm64.
cputype=$(uname -ms | tr ' ' '_' | tr '[A-Z]' '[a-z]')
[ -n "$(echo $cputype | grep -E "linux.*armv.*")" ] && cpucore="armel"
[ -n "$(echo $cputype | grep -E "linux.*armv7.*")" ] && [ -n "$(cat /proc/cpuinfo | grep vfp)" ] && [ ! -d /jffs/clash ] && cpucore="armhf"
[ -n "$(echo $cputype | grep -E "linux.*aarch64.*|linux.*armv8.*")" ] && cpucore="aarch64"
[ -n "$(echo $cputype | grep -E "linux.*86.*")" ] && cpucore="i386"
[ -n "$(echo $cputype | grep -E "linux.*86_64.*")" ] && cpucore="x86_64"
echo $cpucore
}
git_bin_handle() git_bin_handle()
{ {
@ -95,7 +103,7 @@ case $1 in
chmod 755 $BINSPEEDTEST >/dev/null 2>&1 chmod 755 $BINSPEEDTEST >/dev/null 2>&1
echo "$BINSPEEDTEST --accept-gdpr --accept-license --progress=no" echo "$BINSPEEDTEST --accept-gdpr --accept-license --progress=no"
else else
ooklaurl=`curl --connect-timeout 5 -m 60 -sSL 'https://www.speedtest.net/apps/cli' | grep 'Download for Linux' | sed 's|<|\n<|g' | sed -n '/Download for Linux/,/<\/div>/p' | sed -En "s|.*<a href=\"([^\"]+)\">x86_64|\1|p" ` ooklaurl=`curl --connect-timeout 5 -m 60 -sSL 'https://www.speedtest.net/apps/cli' | grep 'Download for Linux' | sed 's|<|\n<|g' | sed -n '/Download for Linux/,/<\/div>/p' | sed -En "s|.*<a href=\"([^\"]+)\">$(getcpucore)|\1|p" `
[ -n "$ooklaurl" ] && curl -sSL $ooklaurl | tar -xvz -C /tmp >/dev/null 2>&1 || return [ -n "$ooklaurl" ] && curl -sSL $ooklaurl | tar -xvz -C /tmp >/dev/null 2>&1 || return
mv /tmp/speedtest $BINSPEEDTEST >/dev/null 2>&1 mv /tmp/speedtest $BINSPEEDTEST >/dev/null 2>&1
chmod 755 $BINSPEEDTEST >/dev/null 2>&1 chmod 755 $BINSPEEDTEST >/dev/null 2>&1

View File

@ -1,9 +1,18 @@
#!/bin/sh #!/bin/sh
chmod +x /etc/init.d/netspeedtest >/dev/null 2>&1 chmod +x /etc/init.d/netspeedtest >/dev/null 2>&1
[ `uci -q get partexp.global` ] && uci set partexp.global=global
[ `uci -q get netspeedtest.netspeedtest` ] || uci set netspeedtest.netspeedtest=netspeedtest [ `uci -q get netspeedtest.netspeedtest` ] || uci set netspeedtest.netspeedtest=netspeedtest
[ `uci -q get netspeedtest.speedtestiperf3` ] || uci set netspeedtest.speedtestiperf3=speedtestiperf3 [ `uci -q get netspeedtest.speedtestiperf3` ] || uci set netspeedtest.speedtestiperf3=speedtestiperf3
[ `uci -q get netspeedtest.speedtestport` ] || uci set netspeedtest.speedtestport=speedtestport [ `uci -q get netspeedtest.speedtestport` ] || uci set netspeedtest.speedtestport=speedtestport
[ `uci -q get netspeedtest.speedtestwan` ] || uci set netspeedtest.speedtestport=speedtestwan [ `uci -q get netspeedtest.speedtestwan` ] || uci set netspeedtest.speedtestport=speedtestwan
LOGD=/etc/netspeedtest
LOG=/var/log/netspeedtest.log
LOGE=$LOGD/netspeedtest.log
LOGT=$LOGD/netspeedtestpos
[ -d "$LOGD" ] || mkdir -p $LOGD
[ -f "$LOGE" ] || echo "start" > $LOG
[ -f "$LOGT" ] || echo "start" > $LOGT
[ -f "$LOG" ] || echo "start" > $LOG
rm -rf /tmp/luci-modulecache /tmp/luci-indexcache* rm -rf /tmp/luci-modulecache /tmp/luci-indexcache*
exit 0 exit 0