update 2023-04-29 21:25:36
This commit is contained in:
parent
4c4c60da2e
commit
63d7c0746f
|
@ -1,7 +1,7 @@
|
||||||
include $(TOPDIR)/rules.mk
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
PKG_NAME:=luci-app-serverchan
|
PKG_NAME:=luci-app-serverchan
|
||||||
PKG_VERSION:=2.03.00
|
PKG_VERSION:=2.03.01
|
||||||
PKG_RELEASE:=10
|
PKG_RELEASE:=10
|
||||||
|
|
||||||
PKG_MAINTAINER:=tty228 <tty228@yeah.net>
|
PKG_MAINTAINER:=tty228 <tty228@yeah.net>
|
||||||
|
|
|
@ -27,6 +27,7 @@ a.description = translate("若无二级路由设备,信号强度良好,可
|
||||||
a = s:option(Value, "thread_num", translate('最大并发进程数'))
|
a = s:option(Value, "thread_num", translate('最大并发进程数'))
|
||||||
a.default = "3"
|
a.default = "3"
|
||||||
a.datatype = "uinteger"
|
a.datatype = "uinteger"
|
||||||
|
a.description = translate("低性能设备请勿更改设置值,或酌情减少参数")
|
||||||
|
|
||||||
a = s:option(Value, "soc_code", "自定义温度读取命令")
|
a = s:option(Value, "soc_code", "自定义温度读取命令")
|
||||||
a.rmempty = true
|
a.rmempty = true
|
||||||
|
|
|
@ -129,7 +129,7 @@ a.rmempty = true
|
||||||
a.optional = false
|
a.optional = false
|
||||||
a.default = "60"
|
a.default = "60"
|
||||||
a.datatype = "and(uinteger,min(10))"
|
a.datatype = "and(uinteger,min(10))"
|
||||||
a.description = translate("越短的时间时间响应越及时,但会占用更多的系统资源")
|
a.description = translate("越短的时间响应越及时,但会占用更多的系统资源")
|
||||||
|
|
||||||
a = s:taboption("basic", ListValue, "oui_data", translate("MAC设备信息数据库"))
|
a = s:taboption("basic", ListValue, "oui_data", translate("MAC设备信息数据库"))
|
||||||
a.rmempty = true
|
a.rmempty = true
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
www.cip.cc
|
cip.cc
|
||||||
ifcfg.cn
|
|
||||||
ddns.oray.com/checkip
|
ddns.oray.com/checkip
|
||||||
www.net.cn/static/customercare/yourip.asp
|
www.net.cn/static/customercare/yourip.asp
|
||||||
myip.ipip.net/s
|
myip.ipip.net/s
|
||||||
speed.neu.edu.cn/getIP.php
|
|
||||||
www.uc.cn/ip
|
|
||||||
ifcfg.cn
|
|
||||||
ip.3322.net
|
ip.3322.net
|
||||||
|
ip.cn
|
||||||
|
ip.threep.top
|
||||||
|
10086.cn/web-Center/commonservice/getUserIp.do --referer http://10086.cn -XPOST
|
||||||
|
https://www.taobao.com/help/getip.php -H 'authority: www.taobao.com'
|
|
@ -1,5 +1,5 @@
|
||||||
ip.sb
|
|
||||||
ipv6.ddnspod.com
|
ipv6.ddnspod.com
|
||||||
api-ipv6.ip.sb/ip
|
|
||||||
speed.neu6.edu.cn/getIP.php
|
speed.neu6.edu.cn/getIP.php
|
||||||
v6.myip.la/json
|
6.ipw.cn
|
||||||
|
10086.cn/web-Center/commonservice/getUserIp.do --referer http://10086.cn -XPOST
|
||||||
|
https://www.taobao.com/help/getip.php -H 'authority: www.taobao.com'
|
|
@ -139,13 +139,16 @@ function getip(){
|
||||||
function get_hostipv4()
|
function get_hostipv4()
|
||||||
{
|
{
|
||||||
local url_number=`echo "$ipv4_urllist"|wc -l`
|
local url_number=`echo "$ipv4_urllist"|wc -l`
|
||||||
local ipv4_URL=`echo "$ipv4_urllist"| sed -n "$(rand 1 $url_number)p"|sed -e 's/\r//g'`
|
[ -z $rand_number ] && local rand_number=`rand 1 $url_number` || rand_number=`expr $rand_number + 1` && [ $rand_number -gt $url_number ] && rand_number=1
|
||||||
|
local ipv4_URL=`echo "$ipv4_urllist"| sed -n "${rand_number}p"|sed -e 's/\r//g'`
|
||||||
[ ! -z "$ipv4_interface" ] && local hostIP=$(curl -k -s -4 --interface ${ipv4_interface} -m 5 ${ipv4_URL}) || local hostIP=$(curl -k -s -4 -m 5 ${ipv4_URL})
|
[ ! -z "$ipv4_interface" ] && local hostIP=$(curl -k -s -4 --interface ${ipv4_interface} -m 5 ${ipv4_URL}) || local hostIP=$(curl -k -s -4 -m 5 ${ipv4_URL})
|
||||||
echo $hostIP|grep -oE '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}'|head -n1
|
[ -z "$hostIP" ] && echo "`date "+%Y-%m-%d %H:%M:%S"` 【info】IP 获取失败,当前使用的 API 为 $ipv4_URL" >> ${logfile}
|
||||||
|
echo "`echo $hostIP|grep -oE '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}'|head -n1` $ipv4_URL"
|
||||||
}
|
}
|
||||||
local hostIP=`get_hostipv4`
|
local hostIP=`get_hostipv4`
|
||||||
[ -z "$hostIP" ] && sleep 1 && local hostIP=`get_hostipv4`
|
[ `echo $hostIP|awk '{print NF}'` -ne "2" ] && sleep 10 && local hostIP=`get_hostipv4`
|
||||||
[ -z "$hostIP" ] && sleep 1 && local hostIP=`get_hostipv4`
|
[ `echo $hostIP|awk '{print NF}'` -ne "2" ] && sleep 10 && local hostIP=`get_hostipv4`
|
||||||
|
[ `echo $hostIP|awk '{print NF}'` -ne "2" ] && wget --no-check-certificate -t 3 -T 15 -O /usr/share/serverchan/api/ipv4.list https://raw.githubusercontent.com/tty228/luci-app-serverchan/master/root/usr/share/serverchan/api/ipv4.list >/dev/null 2>&1 && echo "`date "+%Y-%m-%d %H:%M:%S"` 【info】多次获取 IP 失败,重新同步 API 列表" >> ${logfile}
|
||||||
echo $hostIP # 重试,偷懒,有空再优化
|
echo $hostIP # 重试,偷懒,有空再优化
|
||||||
elif [ $1 == "wanipv6" ] ;then
|
elif [ $1 == "wanipv6" ] ;then
|
||||||
[ ! -z "$ipv6_interface" ] && local wanIPv6=$(ip addr show ${ipv6_interface}|grep -v deprecated|grep -A1 'inet6 [^f:]'|sed -nr ':a;N;s#^ +inet6 ([a-f0-9:]+)/.+? scope global .*? valid_lft ([0-9]+sec) .*#\2 \1#p;ta'|sort -nr|head -n1|awk '{print $2}')
|
[ ! -z "$ipv6_interface" ] && local wanIPv6=$(ip addr show ${ipv6_interface}|grep -v deprecated|grep -A1 'inet6 [^f:]'|sed -nr ':a;N;s#^ +inet6 ([a-f0-9:]+)/.+? scope global .*? valid_lft ([0-9]+sec) .*#\2 \1#p;ta'|sort -nr|head -n1|awk '{print $2}')
|
||||||
|
@ -155,13 +158,16 @@ function getip(){
|
||||||
function get_hostipv6()
|
function get_hostipv6()
|
||||||
{
|
{
|
||||||
local urlv6_number=`echo "$ipv6_urllist"|wc -l`
|
local urlv6_number=`echo "$ipv6_urllist"|wc -l`
|
||||||
local ipv6_URL=`echo "$ipv6_urllist"| sed -n "$(rand 1 $urlv6_number)p"|sed -e 's/\r//g'`
|
[ -z $rand_numberv6 ] && local rand_numberv6=`rand 1 $urlv6_number` || rand_numberv6=`expr $rand_numberv6 + 1` && [ $rand_numberv6 -gt $urlv6_number ] && rand_numberv6=1
|
||||||
|
local ipv6_URL=`echo "$ipv6_urllist"| sed -n "${rand_numberv6}p"|sed -e 's/\r//g'`
|
||||||
[ ! -z "$ipv6_interface" ] && local hostIPv6=$(curl -k -s -6 --interface ${ipv6_interface} -m 5 ${ipv6_URL}) || local hostIPv6=$(curl -k -s -6 -m 5 ${ipv6_URL})
|
[ ! -z "$ipv6_interface" ] && local hostIPv6=$(curl -k -s -6 --interface ${ipv6_interface} -m 5 ${ipv6_URL}) || local hostIPv6=$(curl -k -s -6 -m 5 ${ipv6_URL})
|
||||||
echo $hostIPv6|grep -oE '([\da-fA-F0-9]{1,4}(:{1,2})){1,15}[\da-fA-F0-9]{1,4}'|head -n1
|
[ -z "$hostIPv6" ] && echo "`date "+%Y-%m-%d %H:%M:%S"` 【info】IPv6 获取失败,当前使用的 API 为 $ipv6_URL" >> ${logfile}
|
||||||
|
echo "`echo $hostIPv6|grep -oE '([\da-fA-F0-9]{1,4}(:{1,2})){1,15}[\da-fA-F0-9]{1,4}'|head -n1` $ipv6_URL"
|
||||||
}
|
}
|
||||||
local hostIPv6=`get_hostipv6`
|
local hostIPv6=`get_hostipv6`
|
||||||
[ -z "$hostIPv6" ] && sleep 1 && local hostIPv6=`get_hostipv6`
|
[ `echo $hostIPv6|awk '{print NF}'` -ne "2" ] && sleep 10 && local hostIPv6=`get_hostipv6`
|
||||||
[ -z "$hostIPv6" ] && sleep 1 && local hostIPv6=`get_hostipv6`
|
[ `echo $hostIPv6|awk '{print NF}'` -ne "2" ] && sleep 10 && local hostIPv6=`get_hostipv6`
|
||||||
|
[ `echo $hostIPv6|awk '{print NF}'` -ne "2" ] && wget --no-check-certificate -t 3 -T 15 -O /usr/share/serverchan/api/ipv6.list https://raw.githubusercontent.com/tty228/luci-app-serverchan/master/root/usr/share/serverchan/api/ipv6.list >/dev/null 2>&1 && echo "`date "+%Y-%m-%d %H:%M:%S"` 【info】多次获取 IP 失败,重新同步 API 列表" >> ${logfile}
|
||||||
echo $hostIPv6 # 重试,偷懒,有空再优化
|
echo $hostIPv6 # 重试,偷懒,有空再优化
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
@ -393,7 +399,7 @@ function cut_str {
|
||||||
temp_length=`expr $temp_length + 1`
|
temp_length=`expr $temp_length + 1`
|
||||||
done
|
done
|
||||||
temp_length=`expr $temp_length - 1`
|
temp_length=`expr $temp_length - 1`
|
||||||
echo $(echo "$1"|cut -c -$temp_length)"*"
|
echo $(echo "$1"|cut -c -$temp_length)"..."
|
||||||
}
|
}
|
||||||
|
|
||||||
# 随机数
|
# 随机数
|
||||||
|
@ -572,16 +578,16 @@ function unattended(){
|
||||||
if [ ! -z "$public_ip_event" ] && [ ! -z "$public_ip_retry_count" ] && [ "$public_ip_count" -le "$public_ip_retry_count" ]; then
|
if [ ! -z "$public_ip_event" ] && [ ! -z "$public_ip_retry_count" ] && [ "$public_ip_count" -le "$public_ip_retry_count" ]; then
|
||||||
public_ip_count=`expr $public_ip_count + 1`
|
public_ip_count=`expr $public_ip_count + 1`
|
||||||
local wanIP=`getip wanipv4`
|
local wanIP=`getip wanipv4`
|
||||||
local hostIP=`getip hostipv4`
|
local hostIP=`getip hostipv4|awk '{print $1}'`
|
||||||
if [ ! -z "$wanIP" ] && [ ! -z "$hostIP" ] && ( ! echo "$wanIP"|grep -q -w ${hostIP} );then
|
if [ ! -z "$wanIP" ] && [ ! -z "$hostIP" ] && ( ! echo "$wanIP"|grep -q -w ${hostIP} );then
|
||||||
echo "`date "+%Y-%m-%d %H:%M:%S"` 【无人值守任务】重拨尝试获取公网 ip,当前第 $public_ip_count 次 " >> ${logfile}
|
echo "`date "+%Y-%m-%d %H:%M:%S"` 【无人值守任务】重拨尝试获取公网 ip,当前第 $public_ip_count 次 " >> ${logfile}
|
||||||
ifup wan >/dev/null 2>&1
|
ifup wan >/dev/null 2>&1
|
||||||
sleep 60
|
sleep 60
|
||||||
local wanIP=`getip wanipv4` && local hostIP=`getip hostipv4`
|
local wanIP=`getip wanipv4` && local hostIP=`getip hostipv4|awk '{print $1}'`
|
||||||
[ ! -z "$serverchan_ipv4" ] && [ "$serverchan_ipv4" -eq "1" ] && local IPv4=${wanIP}
|
[ ! -z "$serverchan_ipv4" ] && [ "$serverchan_ipv4" -eq "1" ] && local IPv4=${wanIP}
|
||||||
[ ! -z "$serverchan_ipv4" ] && [ "$serverchan_ipv4" -eq "2" ] && local IPv4=${hostIP}
|
[ ! -z "$serverchan_ipv4" ] && [ "$serverchan_ipv4" -eq "2" ] && local IPv4=${hostIP}
|
||||||
[ ! -z "$serverchan_ipv6" ] && [ "$serverchan_ipv6" -eq "1" ] && local IPv6=`getip wanipv6`
|
[ ! -z "$serverchan_ipv6" ] && [ "$serverchan_ipv6" -eq "1" ] && local IPv6=`getip wanipv6`
|
||||||
[ ! -z "$serverchan_ipv6" ] && [ "$serverchan_ipv6" -eq "2" ] && local IPv6=`getip hostipv6`
|
[ ! -z "$serverchan_ipv6" ] && [ "$serverchan_ipv6" -eq "2" ] && local IPv6=`getip hostipv6|awk '{print $1}'`
|
||||||
[ ! -z "$wanIP" ] && [ ! -z "$hostIP" ] && ( ! echo "$wanIP"|grep -q -w ${hostIP} ) && echo IPv4 $IPv4 > ${dir}ip && echo -e IPv6 $last_IPv6 >> ${dir}ip
|
[ ! -z "$wanIP" ] && [ ! -z "$hostIP" ] && ( ! echo "$wanIP"|grep -q -w ${hostIP} ) && echo IPv4 $IPv4 > ${dir}ip && echo -e IPv6 $last_IPv6 >> ${dir}ip
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
@ -593,12 +599,12 @@ function rand_geturl(){
|
||||||
local urllist="https://www.163.com https://www.qq.com https://www.baidu.com https://www.qidian.com https://www.douban.com"
|
local urllist="https://www.163.com https://www.qq.com https://www.baidu.com https://www.qidian.com https://www.douban.com"
|
||||||
local url_number=`expr $(echo "$urllist"|grep -o ' '|wc -l) + 1`
|
local url_number=`expr $(echo "$urllist"|grep -o ' '|wc -l) + 1`
|
||||||
local url_str=`echo "$urllist"|awk -v i=$(rand 1 $url_number) '{print $i}'`
|
local url_str=`echo "$urllist"|awk -v i=$(rand 1 $url_number) '{print $i}'`
|
||||||
echo `curl -k -s -w "%{http_code}" -m 5 ${url_str} -A "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36" -o /dev/null`
|
echo `curl -k -s -w "%{http_code}" -m 5 ${url_str} -A "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36 Edg/112.0.1722.58" -o /dev/null`
|
||||||
}
|
}
|
||||||
local check=`getcheck`
|
local check=`getcheck`
|
||||||
while [ -z "$check" ] || [ "$check" -ne "200" ]; do
|
while [ -z "$check" ] || [[ $check -ne 200 && $check -ne 301 && $check -ne 302 ]]; do
|
||||||
local check=`getcheck`
|
local check=`getcheck`
|
||||||
if [ ! -z "$check" ] && [ "$check" -eq "200" ]; then
|
if [ ! -z "$check" ] && [[ $check -eq 200 || $check -eq 301 || $check -eq 302 ]]; then
|
||||||
[ ! -z "$network_enable" ] && [ "$network_enable" -eq "404" ] && echo "`date "+%Y-%m-%d %H:%M:%S"` 【网络状态】网络恢复正常.." >> ${logfile}
|
[ ! -z "$network_enable" ] && [ "$network_enable" -eq "404" ] && echo "`date "+%Y-%m-%d %H:%M:%S"` 【网络状态】网络恢复正常.." >> ${logfile}
|
||||||
local network_enable="200"
|
local network_enable="200"
|
||||||
else
|
else
|
||||||
|
@ -686,9 +692,9 @@ function rand_geturl(){
|
||||||
# 检测 ip 状况
|
# 检测 ip 状况
|
||||||
function ip_changes(){
|
function ip_changes(){
|
||||||
[ ! -z "$serverchan_ipv4" ] && [ "$serverchan_ipv4" -eq "1" ] && local IPv4=`getip wanipv4`
|
[ ! -z "$serverchan_ipv4" ] && [ "$serverchan_ipv4" -eq "1" ] && local IPv4=`getip wanipv4`
|
||||||
[ ! -z "$serverchan_ipv4" ] && [ "$serverchan_ipv4" -eq "2" ] && local IPv4=`getip hostipv4`
|
[ ! -z "$serverchan_ipv4" ] && [ "$serverchan_ipv4" -eq "2" ] && local IPv4=`getip hostipv4|awk '{print $1}'`
|
||||||
[ ! -z "$serverchan_ipv6" ] && [ "$serverchan_ipv6" -eq "1" ] && local IPv6=`getip wanipv6`
|
[ ! -z "$serverchan_ipv6" ] && [ "$serverchan_ipv6" -eq "1" ] && local IPv6=`getip wanipv6`
|
||||||
[ ! -z "$serverchan_ipv6" ] && [ "$serverchan_ipv6" -eq "2" ] && local IPv6=`getip hostipv6`
|
[ ! -z "$serverchan_ipv6" ] && [ "$serverchan_ipv6" -eq "2" ] && local IPv6=`getip hostipv6|awk '{print $1}'`
|
||||||
|
|
||||||
if [ -f ${dir}ip ]; then
|
if [ -f ${dir}ip ]; then
|
||||||
local last_IPv4=$(cat "${dir}ip"|grep IPv4|awk '{print $2}'|grep -v "^$"|sort -u|head -n1)
|
local last_IPv4=$(cat "${dir}ip"|grep IPv4|awk '{print $2}'|grep -v "^$"|sort -u|head -n1)
|
||||||
|
@ -698,8 +704,7 @@ function ip_changes(){
|
||||||
echo IPv4 $IPv4 > ${dir}ip && echo -e IPv6 $last_IPv6 >> ${dir}ip
|
echo IPv4 $IPv4 > ${dir}ip && echo -e IPv6 $last_IPv6 >> ${dir}ip
|
||||||
title="IP 地址变化"
|
title="IP 地址变化"
|
||||||
content="${content}${str_splitline}${str_title_start} IP 地址变化${str_title_end}${str_linefeed}${str_tab}当前 IP:${IPv4}"
|
content="${content}${str_splitline}${str_title_start} IP 地址变化${str_title_end}${str_linefeed}${str_tab}当前 IP:${IPv4}"
|
||||||
elif [ ! -z "$serverchan_ipv4" ] && [ "$serverchan_ipv4" -ne "0" ] && [ -z "$IPv4" ]; then
|
echo "`date "+%Y-%m-%d %H:%M:%S"` 【info】当前 IP 获取来源为 `getip hostipv4|awk '{print $2}'`" >> ${logfile}
|
||||||
echo "`date "+%Y-%m-%d %H:%M:%S"` 【!!!】获取 IPv4 地址失败" >> ${logfile}
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ ! -z "$serverchan_ipv6" ] && [ "$serverchan_ipv6" -ne "0" ] && [ ! -z "$IPv6" ] && ( ! echo "$IPv6"|grep -w -q ${last_IPv6} ); then
|
if [ ! -z "$serverchan_ipv6" ] && [ "$serverchan_ipv6" -ne "0" ] && [ ! -z "$IPv6" ] && ( ! echo "$IPv6"|grep -w -q ${last_IPv6} ); then
|
||||||
|
@ -708,8 +713,7 @@ function ip_changes(){
|
||||||
[ -z "$title" ] && title="IPv6 地址变化"
|
[ -z "$title" ] && title="IPv6 地址变化"
|
||||||
[ ! -z "$title" ] && title="IP 地址变化"
|
[ ! -z "$title" ] && title="IP 地址变化"
|
||||||
content="${content}${str_splitline}${str_title_start} IPv6 地址变化${str_title_end}${str_linefeed}${str_tab}当前 IPv6:${IPv6}"
|
content="${content}${str_splitline}${str_title_start} IPv6 地址变化${str_title_end}${str_linefeed}${str_tab}当前 IPv6:${IPv6}"
|
||||||
elif [ ! -z "$serverchan_ipv6" ] && [ "$serverchan_ipv6" -ne "0" ] && [ -z "$IPv6" ]; then
|
echo "`date "+%Y-%m-%d %H:%M:%S"` 【info】当前 IPv6 获取来源为 `getip hostipv6|awk '{print $2}'`" >> ${logfile}
|
||||||
echo "`date "+%Y-%m-%d %H:%M:%S"` 【!!!】获取 IPv6 地址失败" >> ${logfile}
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
else
|
else
|
||||||
|
@ -804,7 +808,8 @@ function down(){
|
||||||
LockFile unlock
|
LockFile unlock
|
||||||
else
|
else
|
||||||
local tmp_name=`cat ${dir}ipAddress|grep -w ${1}|awk '{print $3}'|grep -v "^$"|sort -u|head -n1`
|
local tmp_name=`cat ${dir}ipAddress|grep -w ${1}|awk '{print $3}'|grep -v "^$"|sort -u|head -n1`
|
||||||
if [ ${ip_name} != ${tmp_name} ]; then
|
local tmp_mac=`cat ${dir}ipAddress|grep -w ${1}|awk '{print $2}'|grep -v "^$"|sort -u|head -n1`
|
||||||
|
if [ ${ip_name} != ${tmp_name} ] || [ ${ip_mac} != ${tmp_mac} ]; then
|
||||||
LockFile lock
|
LockFile lock
|
||||||
local tmp_str=$(echo "$1 ${ip_mac} ${ip_name} `cat ${dir}ipAddress|grep -w ${1}|awk '{print $4}'|grep -v "^$"|sort -u|head -n1` ${ip_interface}")
|
local tmp_str=$(echo "$1 ${ip_mac} ${ip_name} `cat ${dir}ipAddress|grep -w ${1}|awk '{print $4}'|grep -v "^$"|sort -u|head -n1` ${ip_interface}")
|
||||||
sed -i "/^${1} /d" ${dir}ipAddress
|
sed -i "/^${1} /d" ${dir}ipAddress
|
||||||
|
@ -1076,7 +1081,7 @@ function add_ip_black(){
|
||||||
[ ! -f "${ip_blacklist_path}" ] && touch ${ip_blacklist_path}
|
[ ! -f "${ip_blacklist_path}" ] && touch ${ip_blacklist_path}
|
||||||
local logrow=$(grep -c "" ${ip_blacklist_path})
|
local logrow=$(grep -c "" ${ip_blacklist_path})
|
||||||
[ ! -z "$web_login_black" ] && [ "$web_login_black" -eq "0" ] || [ -z "$web_login_black" ] && logrow=0
|
[ ! -z "$web_login_black" ] && [ "$web_login_black" -eq "0" ] || [ -z "$web_login_black" ] && logrow=0
|
||||||
[ ! -z "$1" ] && logrow=logrow+1
|
[ ! -z "$1" ] && logrow=`expr $logrow + 1`
|
||||||
ipset flush ip_blacklist >/dev/null 2>&1
|
ipset flush ip_blacklist >/dev/null 2>&1
|
||||||
|
|
||||||
if [ $logrow -le "0" ]; then
|
if [ $logrow -le "0" ]; then
|
||||||
|
@ -1111,7 +1116,7 @@ function send(){
|
||||||
local cpuload=`getcpu`
|
local cpuload=`getcpu`
|
||||||
local ramload=`free -m|sed -n '2p'|awk '{printf "%.2f%%\n",($3/$2)*100}'`
|
local ramload=`free -m|sed -n '2p'|awk '{printf "%.2f%%\n",($3/$2)*100}'`
|
||||||
local Qwai=`curl -o /dev/null --connect-timeout 5 -s -w %{http_code} www.google.com`
|
local Qwai=`curl -o /dev/null --connect-timeout 5 -s -w %{http_code} www.google.com`
|
||||||
if [[ "$Qwai" -eq "200" ]] || [[ "$Qwai" -eq "301" ]] || [[ "$Qwai" -eq "302" ]]; then
|
if [[ $Qwai -eq 200 || $Qwai -eq 301 || $Qwai -eq 302 ]]; then
|
||||||
local Qwai_status="已连通!"
|
local Qwai_status="已连通!"
|
||||||
else
|
else
|
||||||
local Qwai_status="已断开!"
|
local Qwai_status="已断开!"
|
||||||
|
@ -1132,11 +1137,11 @@ function send(){
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -z "$1" ] && [ ! -z "$router_wan" ] && [ "$router_wan" -eq "1" ]; then
|
if [ -z "$1" ] && [ ! -z "$router_wan" ] && [ "$router_wan" -eq "1" ]; then
|
||||||
local send_wanIP=`getip wanipv4`;local send_hostIP=`getip hostipv4`
|
local send_wanIP=`getip wanipv4`;local send_hostIP=`getip hostipv4|awk '{print $1}'`
|
||||||
local send_content="${send_content}${str_splitline}${str_title_start} WAN 口信息${str_title_end}${str_linefeed}${str_tab}接口 IPv4:${send_wanIP}"
|
local send_content="${send_content}${str_splitline}${str_title_start} WAN 口信息${str_title_end}${str_linefeed}${str_tab}接口 IPv4:${send_wanIP}"
|
||||||
local send_content="${send_content}${str_linefeed}${str_tab}外网 IPv4:${send_hostIP}"
|
local send_content="${send_content}${str_linefeed}${str_tab}外网 IPv4:${send_hostIP}"
|
||||||
if [ ! -z "$serverchan_ipv6" ] && [ "$serverchan_ipv6" -ne "0" ]; then
|
if [ ! -z "$serverchan_ipv6" ] && [ "$serverchan_ipv6" -ne "0" ]; then
|
||||||
local send_wanIPv6=`getip wanipv6`;local send_hostIPv6=`getip hostipv6`
|
local send_wanIPv6=`getip wanipv6`;local send_hostIPv6=`getip hostipv6|awk '{print $1}'`
|
||||||
local send_content="${send_content}${str_linefeed}${str_tab}接口 IPv6:${send_wanIPv6}"
|
local send_content="${send_content}${str_linefeed}${str_tab}接口 IPv6:${send_wanIPv6}"
|
||||||
local send_content="${send_content}${str_linefeed}${str_tab}外网 IPv6:${send_hostIPv6}"
|
local send_content="${send_content}${str_linefeed}${str_tab}外网 IPv6:${send_hostIPv6}"
|
||||||
fi
|
fi
|
||||||
|
|
|
@ -137,7 +137,7 @@ o.description = translate("非必要不推荐使用")
|
||||||
o.default = 0
|
o.default = 0
|
||||||
|
|
||||||
o = s:option(ListValue, "log_level", translate("日志等级"))
|
o = s:option(ListValue, "log_level", translate("日志等级"))
|
||||||
o:value("debug", translate("'调试"));
|
o:value("debug", translate("调试"));
|
||||||
o:value("info", translate("信息(默认)"))
|
o:value("info", translate("信息(默认)"))
|
||||||
o:value("silent", translate("静默"))
|
o:value("silent", translate("静默"))
|
||||||
o.default = "info";
|
o.default = "info";
|
||||||
|
|
|
@ -16,7 +16,7 @@ return view.extend({
|
||||||
E('h2', {'name': 'content'}, [ _('Usage - Custom User File') ]),
|
E('h2', {'name': 'content'}, [ _('Usage - Custom User File') ]),
|
||||||
E('div', {'class': 'cbi-map-descr'}, [
|
E('div', {'class': 'cbi-map-descr'}, [
|
||||||
_('Each line must have the following format:'),
|
_('Each line must have the following format:'),
|
||||||
E('em', {}, E('font', {'color': 'red'}, '00:aa:bb:cc:ee:ff,hostname'))
|
E('em', {'style': 'color:red'}, '00:aa:bb:cc:ee:ff,hostname')
|
||||||
]),
|
]),
|
||||||
E('div', {'class': 'cbi-section'}, [
|
E('div', {'class': 'cbi-section'}, [
|
||||||
E('textarea', {
|
E('textarea', {
|
||||||
|
@ -32,13 +32,6 @@ return view.extend({
|
||||||
var map = document.querySelector('#custom_hosts');
|
var map = document.querySelector('#custom_hosts');
|
||||||
return fs.write('/etc/wrtbwmon.user', map.value.trim().replace(/\r\n/g, '\n') + '\n');
|
return fs.write('/etc/wrtbwmon.user', map.value.trim().replace(/\r\n/g, '\n') + '\n');
|
||||||
},
|
},
|
||||||
|
handleSaveApply: null,
|
||||||
addFooter: function() {
|
handleReset: null
|
||||||
return E('div', { 'class': 'cbi-page-actions' }, [
|
|
||||||
E('button', {
|
|
||||||
'class': 'cbi-button cbi-button-save',
|
|
||||||
'click': ui.createHandlerFn(this, 'handleSave')
|
|
||||||
}, [ _('Save') ])
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
|
@ -10,6 +10,17 @@
|
||||||
var cachedData = [];
|
var cachedData = [];
|
||||||
var luciConfig = '/etc/luci-wrtbwmon.conf';
|
var luciConfig = '/etc/luci-wrtbwmon.conf';
|
||||||
var hostNameFile = '/etc/wrtbwmon.user';
|
var hostNameFile = '/etc/wrtbwmon.user';
|
||||||
|
var columns = {
|
||||||
|
thClient: _('Clients'),
|
||||||
|
thMAC: _('MAC'),
|
||||||
|
thDownload: _('Download'),
|
||||||
|
thUpload: _('Upload'),
|
||||||
|
thTotalDown: _('Total Down'),
|
||||||
|
thTotalUp: _('Total Up'),
|
||||||
|
thTotal: _('Total'),
|
||||||
|
thFirstSeen: _('First Seen'),
|
||||||
|
thLastSeen: _('Last Seen')
|
||||||
|
};
|
||||||
|
|
||||||
var callLuciDHCPLeases = rpc.declare({
|
var callLuciDHCPLeases = rpc.declare({
|
||||||
object: 'luci-rpc',
|
object: 'luci-rpc',
|
||||||
|
@ -89,26 +100,9 @@ function clickToSelectProtocol(settings, table, updated, updating, ev) {
|
||||||
updateData(settings, table, updated, updating, true);
|
updateData(settings, table, updated, updating, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
function clickToShowMore(settings, table, ev) {
|
|
||||||
var t = table.querySelector('.tr.table-totals');
|
|
||||||
settings.showMore = ev.target.checked
|
|
||||||
|
|
||||||
if (t && t.firstElementChild)
|
|
||||||
t.firstElementChild.textContent = _('TOTAL') + (settings.showMore ? '' : ': ' + (table.childElementCount - 2));
|
|
||||||
|
|
||||||
table.querySelectorAll('.showMore').forEach(function(e) {
|
|
||||||
e.classList.toggle('hide');
|
|
||||||
});
|
|
||||||
|
|
||||||
if (!settings.showMore && table.querySelector('.th.sorted').classList.contains('hide')) {
|
|
||||||
table.querySelector('[id="thTotal"]').click();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function createOption(args, val) {
|
function createOption(args, val) {
|
||||||
var cstr = args[0], title = args[1], desc = args.slice(-1), widget, frame;
|
var cstr = args[0], title = args[1], desc = args.slice(-1), widget, frame;
|
||||||
val = val != null ? val : args[2];
|
widget = args.length == 4 ? new cstr(val, args[2]) : new cstr(val, args[2], args[3]);
|
||||||
widget = args.length == 5 ? new cstr(val, args[3]) : new cstr(val, args[3], args[4]);
|
|
||||||
|
|
||||||
frame = E('div', {'class': 'cbi-value'}, [
|
frame = E('div', {'class': 'cbi-value'}, [
|
||||||
E('label', {'class': 'cbi-value-title'}, title),
|
E('label', {'class': 'cbi-value-title'}, title),
|
||||||
|
@ -123,13 +117,12 @@ function createOption(args, val) {
|
||||||
|
|
||||||
function displayTable(tb, settings) {
|
function displayTable(tb, settings) {
|
||||||
var elm, elmID, col, sortedBy, flag, IPVer;
|
var elm, elmID, col, sortedBy, flag, IPVer;
|
||||||
var thID = ['thClient', 'thMAC', 'thDownload', 'thUpload', 'thTotalDown', 'thTotalUp', 'thTotal', 'thFirstSeen', 'thLastSeen', ''];
|
|
||||||
|
|
||||||
elm = tb.querySelector('.th.sorted');
|
elm = tb.querySelector('.th.sorted');
|
||||||
elmID = elm ? elm.id : 'thTotal';
|
elmID = elm ? elm.id : 'thTotal';
|
||||||
sortedBy = elm && elm.classList.contains('ascent') ? 'asc' : 'desc';
|
sortedBy = elm && elm.classList.contains('ascent') ? 'asc' : 'desc';
|
||||||
|
|
||||||
col = thID.indexOf(elmID);
|
col = Object.keys(columns).indexOf(elmID);
|
||||||
IPVer = col == 0 ? settings.protocol : null;
|
IPVer = col == 0 ? settings.protocol : null;
|
||||||
flag = sortedBy == 'desc' ? 1 : -1;
|
flag = sortedBy == 'desc' ? 1 : -1;
|
||||||
|
|
||||||
|
@ -156,8 +149,8 @@ function formatSpeed(speed, useBits, useMultiple) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function formatDate(d) {
|
function formatDate(d) {
|
||||||
var Y = d.getFullYear(), M = d.getMonth() + 1, D = d.getDate();
|
var Y = d.getFullYear(), M = d.getMonth() + 1, D = d.getDate(),
|
||||||
var hh = d.getHours(), mm = d.getMinutes(), ss = d.getSeconds();
|
hh = d.getHours(), mm = d.getMinutes(), ss = d.getSeconds();
|
||||||
return '%04d/%02d/%02d %02d:%02d:%02d'.format(Y, M, D, hh, mm, ss);
|
return '%04d/%02d/%02d %02d:%02d:%02d'.format(Y, M, D, hh, mm, ss);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -180,17 +173,17 @@ function handleConfig(ev) {
|
||||||
var arglist, keylist = Object.keys(settings), res, cstrs = {}, node = [], body;
|
var arglist, keylist = Object.keys(settings), res, cstrs = {}, node = [], body;
|
||||||
|
|
||||||
arglist = [
|
arglist = [
|
||||||
[ui.Select, _('Default Protocol'), 'ipv4', {'ipv4': _('ipv4'), 'ipv6': _('ipv6')}, {}, ''],
|
[ui.Select, _('Default Protocol'), {'ipv4': _('ipv4'), 'ipv6': _('ipv6')}, {}, ''],
|
||||||
[ui.Select, _('Default Refresh Interval'), '5', {'-1': _('Disabled'), '2': _('2 seconds'), '5': _('5 seconds'), '10': _('10 seconds'), '30': _('30 seconds')}, {sort: ['-1', '2', '5', '10', '30']}, ''],
|
[ui.Select, _('Default Refresh Interval'), {'-1': _('Disabled'), '2': _('2 seconds'), '5': _('5 seconds'), '10': _('10 seconds'), '30': _('30 seconds')}, {sort: ['-1', '2', '5', '10', '30']}, ''],
|
||||||
[ui.Checkbox, _('Default More Columns'), false, {value_enabled: true, value_disabled: false}, ''],
|
[ui.Dropdown, _('Default More Columns'), columns, {multiple: true, sort: false, custom_placeholder: '', dropdown_items: 3}, ''],
|
||||||
[ui.Checkbox, _('Show Zeros'), true, {value_enabled: true, value_disabled: false}, ''],
|
[ui.Checkbox, _('Show Zeros'), {value_enabled: true, value_disabled: false}, ''],
|
||||||
[ui.Checkbox, _('Transfer Speed in Bits'), false, {value_enabled: true, value_disabled: false}, ''],
|
[ui.Checkbox, _('Transfer Speed in Bits'), {value_enabled: true, value_disabled: false}, ''],
|
||||||
[ui.Select, _('Multiple of Unit'), '1000', {'1000': _('SI - 1000'), '1024': _('IEC - 1024')}, {}, ''],
|
[ui.Select, _('Multiple of Unit'), {'1000': _('SI - 1000'), '1024': _('IEC - 1024')}, {}, ''],
|
||||||
[ui.Checkbox, _('Use DSL Bandwidth'), false, {value_enabled: true, value_disabled: false}, ''],
|
[ui.Checkbox, _('Use DSL Bandwidth'), {value_enabled: true, value_disabled: false}, ''],
|
||||||
[ui.Textfield, _('Upstream Bandwidth'), '100', {datatype: 'ufloat'}, 'Mbps'],
|
[ui.Textfield, _('Upstream Bandwidth'), {datatype: 'ufloat'}, 'Mbps'],
|
||||||
[ui.Textfield, _('Downstream Bandwidth'), '100', {datatype: 'ufloat'}, 'Mbps'],
|
[ui.Textfield, _('Downstream Bandwidth'), {datatype: 'ufloat'}, 'Mbps'],
|
||||||
[ui.DynamicList, _('Hide MAC Addresses'), [], '', {datatype: 'macaddr'}, '']
|
[ui.DynamicList, _('Hide MAC Addresses'), '', {datatype: 'macaddr'}, '']
|
||||||
]; // [constructor, label, default_value(, all_values), options, description]
|
]; // [constructor, label(, all_choices), options, description]
|
||||||
|
|
||||||
for (var i = 0; i < keylist.length; i++) {
|
for (var i = 0; i < keylist.length; i++) {
|
||||||
res = createOption(arglist[i], settings[keylist[i]]);
|
res = createOption(arglist[i], settings[keylist[i]]);
|
||||||
|
@ -229,59 +222,58 @@ function loadCss(path) {
|
||||||
head.appendChild(link);
|
head.appendChild(link);
|
||||||
}
|
}
|
||||||
|
|
||||||
function parseDatabase(values, hosts, showZero, hideMACs) {
|
function parseDatabase(raw, hosts, showZero, hideMACs) {
|
||||||
var valArr = [], totals = [0, 0, 0, 0, 0], valToRows, row;
|
var values = [],
|
||||||
|
totals = [0, 0, 0, 0, 0],
|
||||||
|
rows = raw.trim().split(/\r?\n|\r/g),
|
||||||
|
rowIndex = [1, 0, 3, 4, 5, 6, 7, 8, 9, 0];
|
||||||
|
|
||||||
valToRows = values.replace(/(^\s*)|(\s*$)/g, '').split(/\r?\n|\r/g);
|
rows.shift();
|
||||||
valToRows.shift();
|
|
||||||
|
|
||||||
for (var i = 0; i < valToRows.length; i++) {
|
for (var i = 0; i < rows.length; i++) {
|
||||||
row = valToRows[i].split(',');
|
var row = rows[i].split(',');
|
||||||
if ((!showZero && row[7] == 0) || hideMACs.indexOf(row[0]) >= 0) continue;
|
if ((!showZero && row[7] == 0) || hideMACs.indexOf(row[0]) >= 0) continue;
|
||||||
|
|
||||||
for (var j = 0; j < totals.length; j++) {
|
for (var j = 0; j < totals.length; j++) {
|
||||||
totals[j] += parseInt(row[3 + j]);
|
totals[j] += parseInt(row[3 + j]);
|
||||||
}
|
}
|
||||||
|
|
||||||
row = Array.prototype.concat(row.slice(0, 2).reverse(), row.slice(3), row.slice(0, 1));
|
var newRow = rowIndex.map(function(i) { return row[i] });
|
||||||
if (row[1] in hosts && hosts[row[1]] != '-') {
|
if (newRow[1].toLowerCase() in hosts) {
|
||||||
row[9] = hosts[row[1]];
|
newRow[9] = hosts[newRow[1].toLowerCase()];
|
||||||
}
|
}
|
||||||
valArr.push(row);
|
values.push(newRow);
|
||||||
}
|
}
|
||||||
|
|
||||||
return [valArr, totals];
|
return [values, totals];
|
||||||
}
|
}
|
||||||
|
|
||||||
function parseDefaultSettings(file) {
|
function parseDefaultSettings(file) {
|
||||||
var keylist = ['protocol', 'interval', 'showMore', 'showZero', 'useBits', 'useMultiple', 'useDSL', 'upstream', 'downstream', 'hideMACs'];
|
var defaultColumns = ['thClient', 'thDownload', 'thUpload', 'thTotalDown', 'thTotalUp', 'thTotal'],
|
||||||
var valuelist = ['ipv4', '5', false, true, false, '1000', false, '100', '100', []];
|
keylist = ['protocol', 'interval', 'showColumns', 'showZero', 'useBits', 'useMultiple', 'useDSL', 'upstream', 'downstream', 'hideMACs'],
|
||||||
|
valuelist = ['ipv4', '5', defaultColumns, true, false, '1000', false, '100', '100', []];
|
||||||
return fs.read_direct(file).then(function(json) {
|
|
||||||
var settings;
|
|
||||||
try {
|
|
||||||
settings = JSON.parse(json);
|
|
||||||
}
|
|
||||||
catch(err) {
|
|
||||||
settings = {};
|
|
||||||
}
|
|
||||||
|
|
||||||
|
return fs.read_direct(file, 'json').then(function(oldSettings) {
|
||||||
|
var settings = {};
|
||||||
for (var i = 0; i < keylist.length; i++) {
|
for (var i = 0; i < keylist.length; i++) {
|
||||||
if (!(keylist[i] in settings))
|
if (!(keylist[i] in oldSettings))
|
||||||
settings[keylist[i]] = valuelist[i];
|
settings[keylist[i]] = valuelist[i];
|
||||||
|
else
|
||||||
|
settings[keylist[i]] = oldSettings[keylist[i]];
|
||||||
}
|
}
|
||||||
|
|
||||||
if (settings.useDSL) {
|
if (settings.useDSL) {
|
||||||
return getDSLBandwidth().then(function(dsl) {
|
return getDSLBandwidth().then(function(dsl) {
|
||||||
settings.upstream = dsl.upstream || settings.upstream;
|
for (var s in dsl)
|
||||||
settings.downstream = dsl.downstream || settings.downstream;
|
settings[s] = dsl[s];
|
||||||
return settings;
|
return settings;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
return settings;
|
return settings;
|
||||||
}
|
}
|
||||||
});
|
})
|
||||||
|
.catch(function() { return {} });
|
||||||
}
|
}
|
||||||
|
|
||||||
function progressbar(query, v, m, useBits, useMultiple) {
|
function progressbar(query, v, m, useBits, useMultiple) {
|
||||||
|
@ -317,8 +309,11 @@ function setupThisDOM(settings, table) {
|
||||||
displayTable(table, settings);
|
displayTable(table, settings);
|
||||||
});
|
});
|
||||||
|
|
||||||
if (e.classList.contains('showMore'))
|
if (settings.showColumns.indexOf(e.id) >= 0)
|
||||||
settings.showMore ? e.classList.remove('hide') : e.classList.add('hide');
|
e.classList.remove('hide');
|
||||||
|
else
|
||||||
|
e.classList.add('hide');
|
||||||
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -333,13 +328,13 @@ function renameFile(str, tag) {
|
||||||
function resolveCustomizedHostName() {
|
function resolveCustomizedHostName() {
|
||||||
return fs.stat(hostNameFile).then(function() {
|
return fs.stat(hostNameFile).then(function() {
|
||||||
return fs.read_direct(hostNameFile).then(function(raw) {
|
return fs.read_direct(hostNameFile).then(function(raw) {
|
||||||
var hostNames = [], arr = raw.trim().split(/\r?\n/), row;
|
var arr = raw.trim().split(/\r?\n/), hosts = {}, row;
|
||||||
for (var i = 0; i < arr.length; i++) {
|
for (var i = 0; i < arr.length; i++) {
|
||||||
row = arr[i].split(',');
|
row = arr[i].split(',');
|
||||||
if (row.length == 2 && row[0])
|
if (row.length == 2 && row[0])
|
||||||
hostNames.push({ macaddr: row[0], hostname: row[1] });
|
hosts[row[0].toLowerCase()] = row[1];
|
||||||
}
|
}
|
||||||
return hostNames;
|
return hosts;
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
.catch(function() { return []; });
|
.catch(function() { return []; });
|
||||||
|
@ -350,23 +345,18 @@ function resolveHostNameByMACAddr() {
|
||||||
resolveCustomizedHostName(),
|
resolveCustomizedHostName(),
|
||||||
callLuciDHCPLeases()
|
callLuciDHCPLeases()
|
||||||
]).then(function(res) {
|
]).then(function(res) {
|
||||||
var leaseNames, macaddr, hostNames = {};
|
var hosts = res[0];
|
||||||
leaseNames = [
|
for (var key in res[1]) {
|
||||||
res[0],
|
var leases = Array.isArray(res[1][key]) ? res[1][key] : [];
|
||||||
Array.isArray(res[1].dhcp_leases) ? res[1].dhcp_leases : [],
|
for (var i = 0; i < leases.length; i++) {
|
||||||
Array.isArray(res[1].dhcp6_leases) ? res[1].dhcp6_leases : []
|
if(leases[i].macaddr) {
|
||||||
];
|
var macaddr = leases[i].macaddr.toLowerCase();
|
||||||
for (var i = 0; i < leaseNames.length; i++) {
|
if (!(macaddr in hosts) && Boolean(leases[i].hostname))
|
||||||
for (var j = 0; j < leaseNames[i].length; j++) {
|
hosts[macaddr] = leases[i].hostname;
|
||||||
if (leaseNames[i][j].macaddr) {
|
|
||||||
macaddr = leaseNames[i][j].macaddr.toLowerCase();
|
|
||||||
if (!(macaddr in hostNames) || hostNames[macaddr] == '-') {
|
|
||||||
hostNames[macaddr] = leaseNames[i][j].hostname || '-';
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
return hosts;
|
||||||
return hostNames;
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -413,7 +403,10 @@ function sortTable(col, IPVer, flag, x, y) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function updateData(settings, table, updated, updating, once) {
|
function updateData(settings, table, updated, updating, once) {
|
||||||
if (!(poll.tick % settings.interval) || once) {
|
var tick = poll.tick,
|
||||||
|
interval = settings.interval,
|
||||||
|
sec = (interval - tick % interval) % interval;
|
||||||
|
if (!sec || once) {
|
||||||
callGetDatabasePath()
|
callGetDatabasePath()
|
||||||
.then(function(res) {
|
.then(function(res) {
|
||||||
var params = settings.protocol == 'ipv4' ? '-4' : '-6';
|
var params = settings.protocol == 'ipv4' ? '-4' : '-6';
|
||||||
|
@ -433,17 +426,10 @@ function updateData(settings, table, updated, updating, once) {
|
||||||
//console.timeEnd('start');
|
//console.timeEnd('start');
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
updatePerSec(updating, settings.interval);
|
|
||||||
}
|
|
||||||
|
|
||||||
function updatePerSec(e, interval) {
|
setUpdateMessage(updating, sec);
|
||||||
var tick = poll.tick;
|
if (!sec)
|
||||||
var sec = tick % interval ? interval - tick % interval : 0;
|
setTimeout(setUpdateMessage.bind(this, updating, interval), 100);
|
||||||
|
|
||||||
setUpdateMessage(e, sec);
|
|
||||||
if (sec == 0) {
|
|
||||||
setTimeout(setUpdateMessage.bind(this, e, interval), 100);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function updateTable(tb, values, placeholder, settings) {
|
function updateTable(tb, values, placeholder, settings) {
|
||||||
|
@ -460,10 +446,10 @@ function updateTable(tb, values, placeholder, settings) {
|
||||||
newNode = fragment.firstChild.cloneNode(true);
|
newNode = fragment.firstChild.cloneNode(true);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
newNode = document.createElement('div');
|
newNode = document.createElement('tr');
|
||||||
childTD = document.createElement('div');
|
childTD = document.createElement('td');
|
||||||
for (var j = 0; j < tbTitle.children.length; j++) {
|
for (var j = 0; j < tbTitle.children.length; j++) {
|
||||||
childTD.className = 'td' + ('178'.indexOf(j) != -1 ? ' showMore' + (settings.showMore ? '' : ' hide') : '');
|
childTD.className = 'td' + (settings.showColumns.indexOf(tbTitle.children[j].id) >= 0 ? '' : ' hide');
|
||||||
childTD.setAttribute('data-title', tbTitle.children[j].textContent);
|
childTD.setAttribute('data-title', tbTitle.children[j].textContent);
|
||||||
newNode.appendChild(childTD.cloneNode(true));
|
newNode.appendChild(childTD.cloneNode(true));
|
||||||
}
|
}
|
||||||
|
@ -502,9 +488,9 @@ function updateTable(tb, values, placeholder, settings) {
|
||||||
|
|
||||||
//Append the totals or placeholder row.
|
//Append the totals or placeholder row.
|
||||||
if (formData.length == 0) {
|
if (formData.length == 0) {
|
||||||
newNode = document.createElement('div');
|
newNode = document.createElement('tr');
|
||||||
newNode.className = 'tr placeholder';
|
newNode.className = 'tr placeholder';
|
||||||
childTD = document.createElement('div');
|
childTD = document.createElement('td');
|
||||||
childTD.className = 'td';
|
childTD.className = 'td';
|
||||||
childTD.innerHTML = placeholder;
|
childTD.innerHTML = placeholder;
|
||||||
newNode.appendChild(childTD);
|
newNode.appendChild(childTD);
|
||||||
|
@ -513,7 +499,7 @@ function updateTable(tb, values, placeholder, settings) {
|
||||||
newNode = fragment.firstChild.cloneNode(true);
|
newNode = fragment.firstChild.cloneNode(true);
|
||||||
newNode.className = 'tr table-totals';
|
newNode.className = 'tr table-totals';
|
||||||
|
|
||||||
newNode.children[0].textContent = _('TOTAL') + (settings.showMore ? '' : ': ' + formData.length);
|
newNode.children[0].textContent = _('TOTAL') + (settings.showColumns.indexOf('thMAC') >= 0 ? '' : ': ' + formData.length);
|
||||||
newNode.children[1].textContent = formData.length + ' ' + _('Clients');
|
newNode.children[1].textContent = formData.length + ' ' + _('Clients');
|
||||||
|
|
||||||
for (var j = 0; j < tbTitle.childElementCount; j++) {
|
for (var j = 0; j < tbTitle.childElementCount; j++) {
|
||||||
|
@ -565,20 +551,20 @@ return view.extend({
|
||||||
var settings = data[0],
|
var settings = data[0],
|
||||||
labelUpdated = E('label'),
|
labelUpdated = E('label'),
|
||||||
labelUpdating = E('label'),
|
labelUpdating = E('label'),
|
||||||
table = E('div', { 'class': 'table', 'id': 'traffic' }, [
|
table = E('table', { 'class': 'table', 'id': 'traffic' }, [
|
||||||
E('div', { 'class': 'tr table-titles' }, [
|
E('tr', { 'class': 'tr table-titles' }, [
|
||||||
E('div', { 'class': 'th', 'id': 'thClient' }, _('Clients')),
|
E('th', { 'class': 'th', 'id': 'thClient' }, _('Clients')),
|
||||||
E('div', { 'class': 'th showMore hide', 'id': 'thMAC' }, _('MAC')),
|
E('th', { 'class': 'th hide', 'id': 'thMAC' }, _('MAC')),
|
||||||
E('div', { 'class': 'th', 'id': 'thDownload' }, _('Download')),
|
E('th', { 'class': 'th', 'id': 'thDownload' }, _('Download')),
|
||||||
E('div', { 'class': 'th', 'id': 'thUpload' }, _('Upload')),
|
E('th', { 'class': 'th', 'id': 'thUpload' }, _('Upload')),
|
||||||
E('div', { 'class': 'th', 'id': 'thTotalDown' }, _('Total Down')),
|
E('th', { 'class': 'th', 'id': 'thTotalDown' }, _('Total Down')),
|
||||||
E('div', { 'class': 'th', 'id': 'thTotalUp' }, _('Total Up')),
|
E('th', { 'class': 'th', 'id': 'thTotalUp' }, _('Total Up')),
|
||||||
E('div', { 'class': 'th sorted', 'id': 'thTotal' }, _('Total')),
|
E('th', { 'class': 'th sorted', 'id': 'thTotal' }, _('Total')),
|
||||||
E('div', { 'class': 'th showMore hide', 'id': 'thFirstSeen' }, _('First Seen')),
|
E('th', { 'class': 'th hide', 'id': 'thFirstSeen' }, _('First Seen')),
|
||||||
E('div', { 'class': 'th showMore hide', 'id': 'thLastSeen' }, _('Last Seen'))
|
E('th', { 'class': 'th hide', 'id': 'thLastSeen' }, _('Last Seen'))
|
||||||
]),
|
]),
|
||||||
E('div', {'class': 'tr placeholder'}, [
|
E('tr', {'class': 'tr placeholder'}, [
|
||||||
E('div', { 'class': 'td' }, E('em', {}, _('Collecting data...')))
|
E('td', { 'class': 'td' }, E('em', {}, _('Collecting data...')))
|
||||||
])
|
])
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
@ -598,15 +584,6 @@ return view.extend({
|
||||||
'ipv6': 'ipv6'
|
'ipv6': 'ipv6'
|
||||||
}, settings.protocol))
|
}, settings.protocol))
|
||||||
]),
|
]),
|
||||||
E('div', {}, [
|
|
||||||
E('label', { 'for': 'showMore' }, _('Show More Columns:')),
|
|
||||||
E('input', {
|
|
||||||
'id': 'showMore',
|
|
||||||
'type': 'checkbox',
|
|
||||||
'click': clickToShowMore.bind(this, settings, table),
|
|
||||||
'checked': settings.showMore ? '' : null
|
|
||||||
}),
|
|
||||||
]),
|
|
||||||
E('div', {}, [
|
E('div', {}, [
|
||||||
E('button', {
|
E('button', {
|
||||||
'class': 'btn cbi-button cbi-button-reset important',
|
'class': 'btn cbi-button cbi-button-reset important',
|
||||||
|
@ -636,24 +613,24 @@ return view.extend({
|
||||||
}, settings.interval))
|
}, settings.interval))
|
||||||
])
|
])
|
||||||
]),
|
]),
|
||||||
E('div', { 'id': 'progressbar_panel', 'class': 'table' }, [
|
E('div', { 'id': 'progressbar_panel' }, [
|
||||||
E('div', { 'class': 'tr' }, [
|
E('div', {}, [
|
||||||
E('div', { 'class': 'td' }, E('div', {}, _('Downstream:'))),
|
E('label', {}, _('Downstream:')),
|
||||||
E('div', { 'class': 'td' }, E('div', {
|
E('div', {
|
||||||
'id': 'downstream',
|
'id': 'downstream',
|
||||||
'class': 'cbi-progressbar',
|
'class': 'cbi-progressbar',
|
||||||
'title': '-'
|
'title': '-'
|
||||||
}, E('div')
|
}, E('div')
|
||||||
))
|
)
|
||||||
]),
|
]),
|
||||||
E('div', { 'class': 'tr' }, [
|
E('div', {}, [
|
||||||
E('div', { 'class': 'td' }, E('div', {}, _('Upstream:'))),
|
E('label', {}, _('Upstream:')),
|
||||||
E('div', { 'class': 'td' }, E('div', {
|
E('div', {
|
||||||
'id': 'upstream',
|
'id': 'upstream',
|
||||||
'class': 'cbi-progressbar',
|
'class': 'cbi-progressbar',
|
||||||
'title': '-'
|
'title': '-'
|
||||||
}, E('div')
|
}, E('div')
|
||||||
))
|
)
|
||||||
]),
|
]),
|
||||||
]),
|
]),
|
||||||
table
|
table
|
||||||
|
|
|
@ -13,27 +13,24 @@
|
||||||
padding: .5rem;
|
padding: .5rem;
|
||||||
line-height: 2rem;
|
line-height: 2rem;
|
||||||
}
|
}
|
||||||
#control_panel > :nth-child(1), #control_panel > :nth-child(2) {
|
#control_panel > :nth-child(1) {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
flex: 1 1 25%;
|
flex: 1 1 50%;
|
||||||
}
|
}
|
||||||
#control_panel > :nth-child(3) {
|
#control_panel > :nth-child(2) {
|
||||||
flex: 1 1 50%;
|
flex: 1 1 50%;
|
||||||
text-align: right;
|
text-align: right;
|
||||||
}
|
}
|
||||||
#control_panel > * > * {
|
#control_panel > * > * {
|
||||||
vertical-align: middle;
|
vertical-align: middle;
|
||||||
}
|
}
|
||||||
div > label {
|
#control_panel > div > label {
|
||||||
margin-right: .5rem;
|
margin-right: .5rem;
|
||||||
}
|
}
|
||||||
div > label + select {
|
#control_panel > div > label + select {
|
||||||
min-width: unset;
|
min-width: unset;
|
||||||
width: auto;
|
width: auto;
|
||||||
}
|
}
|
||||||
#control_panel input[type="checkbox"]{
|
|
||||||
margin: 0
|
|
||||||
}
|
|
||||||
#control_panel + div {
|
#control_panel + div {
|
||||||
display: flex;
|
display: flex;
|
||||||
margin-bottom: .5rem;
|
margin-bottom: .5rem;
|
||||||
|
@ -60,14 +57,8 @@ div > label + select {
|
||||||
#thFirstSeen, #thLastSeen {
|
#thFirstSeen, #thLastSeen {
|
||||||
width: 15%;
|
width: 15%;
|
||||||
}
|
}
|
||||||
#progressbar_panel > .tr {
|
|
||||||
background: none;
|
|
||||||
}
|
|
||||||
#progressbar_panel > .tr > .td:nth-child(1) {
|
|
||||||
width: 10%;
|
|
||||||
}
|
|
||||||
.tr.table-totals {
|
.tr.table-totals {
|
||||||
background: #e0e0e0 !important;
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
#traffic .tr:not(.table-totals):not(.placeholder) > .td:not(.th):first-child::before {
|
#traffic .tr:not(.table-totals):not(.placeholder) > .td:not(.th):first-child::before {
|
||||||
content: attr(title)'\a';
|
content: attr(title)'\a';
|
||||||
|
|
|
@ -21,13 +21,13 @@ define Download/geoip
|
||||||
HASH:=80087c87710e92ec9966553098c5f65eb636060fb821b0d92dd8119560de7d77
|
HASH:=80087c87710e92ec9966553098c5f65eb636060fb821b0d92dd8119560de7d77
|
||||||
endef
|
endef
|
||||||
|
|
||||||
GEOSITE_VER:=20230428052845
|
GEOSITE_VER:=20230429042459
|
||||||
GEOSITE_FILE:=dlc.dat.$(GEOSITE_VER)
|
GEOSITE_FILE:=dlc.dat.$(GEOSITE_VER)
|
||||||
define Download/geosite
|
define Download/geosite
|
||||||
URL:=https://github.com/v2fly/domain-list-community/releases/download/$(GEOSITE_VER)/
|
URL:=https://github.com/v2fly/domain-list-community/releases/download/$(GEOSITE_VER)/
|
||||||
URL_FILE:=dlc.dat
|
URL_FILE:=dlc.dat
|
||||||
FILE:=$(GEOSITE_FILE)
|
FILE:=$(GEOSITE_FILE)
|
||||||
HASH:=69de742e7e279ad889adb4aafea678ff6c0032a4afdb9ba25bfe884f32922888
|
HASH:=8a3a2c656e241f00cc438136a7486bf5db63cad006a810c0202741f2b08371b6
|
||||||
endef
|
endef
|
||||||
|
|
||||||
define Package/v2ray-geodata/template
|
define Package/v2ray-geodata/template
|
||||||
|
|
Loading…
Reference in New Issue