luci: remove auto switch logic
This commit is contained in:
parent
cb5d086dd2
commit
1ede6499dc
@ -24,7 +24,6 @@ function index()
|
|||||||
entry({"admin", "services", appname, "settings"}, cbi(appname .. "/client/global"), _("Basic Settings"), 1).dependent = true
|
entry({"admin", "services", appname, "settings"}, cbi(appname .. "/client/global"), _("Basic Settings"), 1).dependent = true
|
||||||
entry({"admin", "services", appname, "node_list"}, cbi(appname .. "/client/node_list"), _("Node List"), 2).dependent = true
|
entry({"admin", "services", appname, "node_list"}, cbi(appname .. "/client/node_list"), _("Node List"), 2).dependent = true
|
||||||
entry({"admin", "services", appname, "node_subscribe"}, cbi(appname .. "/client/node_subscribe"), _("Node Subscribe"), 3).dependent = true
|
entry({"admin", "services", appname, "node_subscribe"}, cbi(appname .. "/client/node_subscribe"), _("Node Subscribe"), 3).dependent = true
|
||||||
entry({"admin", "services", appname, "auto_switch"}, cbi(appname .. "/client/auto_switch"), _("Auto Switch"), 4).leaf = true
|
|
||||||
entry({"admin", "services", appname, "other"}, cbi(appname .. "/client/other", {autoapply = true}), _("Other Settings"), 92).leaf = true
|
entry({"admin", "services", appname, "other"}, cbi(appname .. "/client/other", {autoapply = true}), _("Other Settings"), 92).leaf = true
|
||||||
if nixio.fs.access("/usr/sbin/haproxy") then
|
if nixio.fs.access("/usr/sbin/haproxy") then
|
||||||
entry({"admin", "services", appname, "haproxy"}, cbi(appname .. "/client/haproxy"), _("Load Balancing"), 93).leaf = true
|
entry({"admin", "services", appname, "haproxy"}, cbi(appname .. "/client/haproxy"), _("Load Balancing"), 93).leaf = true
|
||||||
@ -48,8 +47,6 @@ function index()
|
|||||||
entry({"admin", "services", appname, "server_get_log"}, call("server_get_log")).leaf = true
|
entry({"admin", "services", appname, "server_get_log"}, call("server_get_log")).leaf = true
|
||||||
entry({"admin", "services", appname, "server_clear_log"}, call("server_clear_log")).leaf = true
|
entry({"admin", "services", appname, "server_clear_log"}, call("server_clear_log")).leaf = true
|
||||||
entry({"admin", "services", appname, "link_add_node"}, call("link_add_node")).leaf = true
|
entry({"admin", "services", appname, "link_add_node"}, call("link_add_node")).leaf = true
|
||||||
entry({"admin", "services", appname, "autoswitch_add_node"}, call("autoswitch_add_node")).leaf = true
|
|
||||||
entry({"admin", "services", appname, "autoswitch_remove_node"}, call("autoswitch_remove_node")).leaf = true
|
|
||||||
entry({"admin", "services", appname, "get_now_use_node"}, call("get_now_use_node")).leaf = true
|
entry({"admin", "services", appname, "get_now_use_node"}, call("get_now_use_node")).leaf = true
|
||||||
entry({"admin", "services", appname, "get_redir_log"}, call("get_redir_log")).leaf = true
|
entry({"admin", "services", appname, "get_redir_log"}, call("get_redir_log")).leaf = true
|
||||||
entry({"admin", "services", appname, "get_log"}, call("get_log")).leaf = true
|
entry({"admin", "services", appname, "get_log"}, call("get_log")).leaf = true
|
||||||
@ -107,41 +104,6 @@ function link_add_node()
|
|||||||
luci.sys.call("lua /usr/share/passwall2/subscribe.lua add log")
|
luci.sys.call("lua /usr/share/passwall2/subscribe.lua add log")
|
||||||
end
|
end
|
||||||
|
|
||||||
function autoswitch_add_node()
|
|
||||||
local key = luci.http.formvalue("key")
|
|
||||||
if key and key ~= "" then
|
|
||||||
local new_list = ucic:get(appname, "@auto_switch[0]", "node") or {}
|
|
||||||
for i = #new_list, 1, -1 do
|
|
||||||
if (ucic:get(appname, new_list[i], "remarks") or ""):find(key) then
|
|
||||||
table.remove(new_list, i)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
for k, e in ipairs(api.get_valid_nodes()) do
|
|
||||||
if e.node_type == "normal" and e["remark"]:find(key) then
|
|
||||||
table.insert(new_list, e.id)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
ucic:set_list(appname, "@auto_switch[0]", "node", new_list)
|
|
||||||
ucic:commit(appname)
|
|
||||||
end
|
|
||||||
luci.http.redirect(api.url("auto_switch"))
|
|
||||||
end
|
|
||||||
|
|
||||||
function autoswitch_remove_node()
|
|
||||||
local key = luci.http.formvalue("key")
|
|
||||||
if key and key ~= "" then
|
|
||||||
local new_list = ucic:get(appname, "@auto_switch[0]", "node") or {}
|
|
||||||
for i = #new_list, 1, -1 do
|
|
||||||
if (ucic:get(appname, new_list[i], "remarks") or ""):find(key) then
|
|
||||||
table.remove(new_list, i)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
ucic:set_list(appname, "@auto_switch[0]", "node", new_list)
|
|
||||||
ucic:commit(appname)
|
|
||||||
end
|
|
||||||
luci.http.redirect(api.url("auto_switch"))
|
|
||||||
end
|
|
||||||
|
|
||||||
function get_now_use_node()
|
function get_now_use_node()
|
||||||
local e = {}
|
local e = {}
|
||||||
local data, code, msg = nixio.fs.readfile("/tmp/etc/passwall2/id/global")
|
local data, code, msg = nixio.fs.readfile("/tmp/etc/passwall2/id/global")
|
||||||
@ -293,7 +255,6 @@ end
|
|||||||
function clear_all_nodes()
|
function clear_all_nodes()
|
||||||
ucic:set(appname, '@global[0]', "enabled", "0")
|
ucic:set(appname, '@global[0]', "enabled", "0")
|
||||||
ucic:set(appname, '@global[0]', "node", "nil")
|
ucic:set(appname, '@global[0]', "node", "nil")
|
||||||
ucic:set_list(appname, "@auto_switch[0]", "node", {})
|
|
||||||
ucic:foreach(appname, "socks", function(t)
|
ucic:foreach(appname, "socks", function(t)
|
||||||
ucic:delete(appname, t[".name"])
|
ucic:delete(appname, t[".name"])
|
||||||
end)
|
end)
|
||||||
@ -313,14 +274,7 @@ end
|
|||||||
|
|
||||||
function delete_select_nodes()
|
function delete_select_nodes()
|
||||||
local ids = luci.http.formvalue("ids")
|
local ids = luci.http.formvalue("ids")
|
||||||
local auto_switch_node_list = ucic:get(appname, "@auto_switch[0]", "node") or {}
|
|
||||||
string.gsub(ids, '[^' .. "," .. ']+', function(w)
|
string.gsub(ids, '[^' .. "," .. ']+', function(w)
|
||||||
for i = #auto_switch_node_list, 1, -1 do
|
|
||||||
if w == auto_switch_node_list[i] then
|
|
||||||
table.remove(auto_switch_node_list, i)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
ucic:set_list(appname, "@auto_switch[0]", "node", auto_switch_node_list)
|
|
||||||
if (ucic:get(appname, "@global[0]", "node") or "nil") == w then
|
if (ucic:get(appname, "@global[0]", "node") or "nil") == w then
|
||||||
ucic:set(appname, '@global[0]', "node", "nil")
|
ucic:set(appname, '@global[0]', "node", "nil")
|
||||||
end
|
end
|
||||||
|
@ -1,66 +0,0 @@
|
|||||||
local api = require "luci.passwall2.api"
|
|
||||||
local appname = api.appname
|
|
||||||
|
|
||||||
local nodes_table = {}
|
|
||||||
for k, e in ipairs(api.get_valid_nodes()) do
|
|
||||||
nodes_table[#nodes_table + 1] = e
|
|
||||||
end
|
|
||||||
|
|
||||||
m = Map(appname)
|
|
||||||
|
|
||||||
-- [[ Auto Switch Settings ]]--
|
|
||||||
s = m:section(TypedSection, "auto_switch")
|
|
||||||
s.anonymous = true
|
|
||||||
|
|
||||||
---- Enable
|
|
||||||
o = s:option(Flag, "enable", translate("Enable"))
|
|
||||||
o.default = 0
|
|
||||||
o.rmempty = false
|
|
||||||
|
|
||||||
o = s:option(Value, "testing_time", translate("How often to test"), translate("Units:minutes"))
|
|
||||||
o.datatype = "uinteger"
|
|
||||||
o.default = 1
|
|
||||||
|
|
||||||
o = s:option(Value, "connect_timeout", translate("Timeout seconds"), translate("Units:seconds"))
|
|
||||||
o.datatype = "uinteger"
|
|
||||||
o.default = 3
|
|
||||||
|
|
||||||
o = s:option(Value, "retry_num", translate("Timeout retry num"))
|
|
||||||
o.datatype = "uinteger"
|
|
||||||
o.default = 3
|
|
||||||
|
|
||||||
o = s:option(DynamicList, "node", translate("List of backup nodes"))
|
|
||||||
for k, v in pairs(nodes_table) do
|
|
||||||
if v.node_type == "normal" then
|
|
||||||
o:value(v.id, v["remark"])
|
|
||||||
end
|
|
||||||
end
|
|
||||||
function o.write(self, section, value)
|
|
||||||
local t = {}
|
|
||||||
local t2 = {}
|
|
||||||
if type(value) == "table" then
|
|
||||||
local x
|
|
||||||
for _, x in ipairs(value) do
|
|
||||||
if x and #x > 0 then
|
|
||||||
if not t2[x] then
|
|
||||||
t2[x] = x
|
|
||||||
t[#t+1] = x
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
else
|
|
||||||
t = { value }
|
|
||||||
end
|
|
||||||
return DynamicList.write(self, section, t)
|
|
||||||
end
|
|
||||||
|
|
||||||
o = s:option(Flag, "restore_switch", translate("Restore Switch"), translate("When detects main node is available, switch back to the main node."))
|
|
||||||
|
|
||||||
o = s:option(ListValue, "shunt_logic", translate("If the main node is shunt"))
|
|
||||||
o:value("0", translate("Switch it"))
|
|
||||||
o:value("1", translate("Applying to the default node"))
|
|
||||||
o:value("2", translate("Applying to the default preproxy node"))
|
|
||||||
|
|
||||||
m:append(Template(appname .. "/auto_switch/footer"))
|
|
||||||
|
|
||||||
return m
|
|
@ -46,42 +46,9 @@ s:tab("Main", translate("Main"))
|
|||||||
o = s:taboption("Main", Flag, "enabled", translate("Main switch"))
|
o = s:taboption("Main", Flag, "enabled", translate("Main switch"))
|
||||||
o.rmempty = false
|
o.rmempty = false
|
||||||
|
|
||||||
local auto_switch_tip
|
|
||||||
local shunt_remark
|
|
||||||
local current_node = luci.sys.exec(string.format("[ -f '/tmp/etc/%s/id/global' ] && echo -n $(cat /tmp/etc/%s/id/global)", appname, appname))
|
|
||||||
if current_node and current_node ~= "" and current_node ~= "nil" then
|
|
||||||
local n = uci:get_all(appname, current_node)
|
|
||||||
if n then
|
|
||||||
if tonumber(m:get("@auto_switch[0]", "enable") or 0) == 1 then
|
|
||||||
if n.protocol == "_shunt" then
|
|
||||||
local shunt_logic = tonumber(m:get("@auto_switch[0]", "shunt_logic"))
|
|
||||||
if shunt_logic == 1 or shunt_logic == 2 then
|
|
||||||
if shunt_logic == 1 then
|
|
||||||
shunt_remark = "default"
|
|
||||||
elseif shunt_logic == 2 then
|
|
||||||
shunt_remark = "main"
|
|
||||||
end
|
|
||||||
current_node = luci.sys.exec(string.format("[ -f '/tmp/etc/%s/id/global_%s' ] && echo -n $(cat /tmp/etc/%s/id/global_%s)", appname, shunt_remark, appname, shunt_remark))
|
|
||||||
if current_node and current_node ~= "" and current_node ~= "nil" then
|
|
||||||
n = uci:get_all(appname, current_node)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
if n then
|
|
||||||
local remarks = api.get_node_remarks(n)
|
|
||||||
local url = api.url("node_config", n[".name"])
|
|
||||||
auto_switch_tip = translatef("Current node: %s", string.format('<a href="%s">%s</a>', url, remarks)) .. "<br />"
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
---- Node
|
---- Node
|
||||||
node = s:taboption("Main", ListValue, "node", "<a style='color: red'>" .. translate("Node") .. "</a>")
|
node = s:taboption("Main", ListValue, "node", "<a style='color: red'>" .. translate("Node") .. "</a>")
|
||||||
node:value("nil", translate("Close"))
|
node:value("nil", translate("Close"))
|
||||||
if not shunt_remark and auto_switch_tip then
|
|
||||||
node.description = auto_switch_tip
|
|
||||||
end
|
|
||||||
|
|
||||||
-- 分流
|
-- 分流
|
||||||
if (has_v2ray or has_xray) and #nodes_table > 0 then
|
if (has_v2ray or has_xray) and #nodes_table > 0 then
|
||||||
@ -151,9 +118,6 @@ if (has_v2ray or has_xray) and #nodes_table > 0 then
|
|||||||
end
|
end
|
||||||
o.cfgvalue = get_cfgvalue(v.id, "main_node")
|
o.cfgvalue = get_cfgvalue(v.id, "main_node")
|
||||||
o.write = get_write(v.id, "main_node")
|
o.write = get_write(v.id, "main_node")
|
||||||
if shunt_remark == "main" and auto_switch_tip then
|
|
||||||
o.description = auto_switch_tip
|
|
||||||
end
|
|
||||||
|
|
||||||
if (has_v2ray and has_xray) or (v.type == "V2ray" and not has_v2ray) or (v.type == "Xray" and not has_xray) then
|
if (has_v2ray and has_xray) or (v.type == "V2ray" and not has_v2ray) or (v.type == "Xray" and not has_xray) then
|
||||||
type:depends("node", v.id)
|
type:depends("node", v.id)
|
||||||
@ -211,9 +175,6 @@ if (has_v2ray or has_xray) and #nodes_table > 0 then
|
|||||||
for k1, v1 in pairs(normal_list) do
|
for k1, v1 in pairs(normal_list) do
|
||||||
o:value(v1.id, v1.remark)
|
o:value(v1.id, v1.remark)
|
||||||
end
|
end
|
||||||
if shunt_remark == "default" and auto_switch_tip then
|
|
||||||
o.description = auto_switch_tip
|
|
||||||
end
|
|
||||||
|
|
||||||
local id = "default_proxy_tag"
|
local id = "default_proxy_tag"
|
||||||
o = s:taboption("Main", ListValue, vid .. "-" .. id, string.format('* <a style="color:red">%s</a>', translate("Default Preproxy")), translate("When using, localhost will connect this node first and then use this node to connect the default node."))
|
o = s:taboption("Main", ListValue, vid .. "-" .. id, string.format('* <a style="color:red">%s</a>', translate("Default Preproxy")), translate("When using, localhost will connect this node first and then use this node to connect the default node."))
|
||||||
|
@ -43,11 +43,6 @@ function s.remove(e, t)
|
|||||||
m:set(s[".name"], "node", "default")
|
m:set(s[".name"], "node", "default")
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
for k, v in ipairs(m:get("@auto_switch[0]", "node") or {}) do
|
|
||||||
if v and v == t then
|
|
||||||
sys.call(string.format("uci -q del_list %s.@auto_switch[0].node='%s'", appname, v))
|
|
||||||
end
|
|
||||||
end
|
|
||||||
TypedSection.remove(e, t)
|
TypedSection.remove(e, t)
|
||||||
local new_node = "nil"
|
local new_node = "nil"
|
||||||
local node0 = m:get("@nodes[0]") or nil
|
local node0 = m:get("@nodes[0]") or nil
|
||||||
|
@ -1,22 +0,0 @@
|
|||||||
<%
|
|
||||||
local api = require "luci.passwall2.api"
|
|
||||||
-%>
|
|
||||||
|
|
||||||
<script type="text/javascript">
|
|
||||||
//<![CDATA[
|
|
||||||
function add_node_by_key() {
|
|
||||||
var key = prompt("<%:Please enter the node keyword, pay attention to distinguish between spaces, uppercase and lowercase.%>", "");
|
|
||||||
if (key) {
|
|
||||||
window.location.href = '<%=api.url("autoswitch_add_node")%>' + "?key=" + key;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
function remove_node_by_key() {
|
|
||||||
var key = prompt("<%:Please enter the node keyword, pay attention to distinguish between spaces, uppercase and lowercase.%>", "");
|
|
||||||
if (key) {
|
|
||||||
window.location.href = '<%=api.url("autoswitch_remove_node")%>' + "?key=" + key;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
//]]>
|
|
||||||
</script>
|
|
||||||
<input class="btn cbi-button cbi-button-add" type="button" onclick="add_node_by_key()" value="<%:Add nodes to the standby node list by keywords%>" />
|
|
||||||
<input class="btn cbi-button cbi-button-remove" type="button" onclick="remove_node_by_key()" value="<%:Delete nodes in the standby node list by keywords%>" />
|
|
@ -1,6 +1,5 @@
|
|||||||
<%
|
<%
|
||||||
local api = require "luci.passwall2.api"
|
local api = require "luci.passwall2.api"
|
||||||
local auto_switch = api.uci_get_type("auto_switch", "enable", 0)
|
|
||||||
-%>
|
-%>
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
//<![CDATA[
|
//<![CDATA[
|
||||||
|
@ -58,13 +58,6 @@ config global_subscribe
|
|||||||
list filter_discard_list 'QQ群'
|
list filter_discard_list 'QQ群'
|
||||||
list filter_discard_list '官网'
|
list filter_discard_list '官网'
|
||||||
|
|
||||||
config auto_switch
|
|
||||||
option enable '0'
|
|
||||||
option testing_time '1'
|
|
||||||
option connect_timeout '3'
|
|
||||||
option retry_num '3'
|
|
||||||
option shunt_logic '1'
|
|
||||||
|
|
||||||
config nodes 'myshunt'
|
config nodes 'myshunt'
|
||||||
option remarks '分流总节点'
|
option remarks '分流总节点'
|
||||||
option type 'Xray'
|
option type 'Xray'
|
||||||
|
@ -535,49 +535,6 @@ run_socks() {
|
|||||||
unset http_flag
|
unset http_flag
|
||||||
}
|
}
|
||||||
|
|
||||||
node_switch() {
|
|
||||||
local flag new_node shunt_logic
|
|
||||||
eval_set_val $@
|
|
||||||
[ -n "$flag" ] && [ -n "$new_node" ] && {
|
|
||||||
pgrep -af "$TMP_BIN_PATH" | awk -v P1="${flag}" 'BEGIN{IGNORECASE=1}$0~P1 && !/acl\/|acl_/{print $1}' | xargs kill -9 >/dev/null 2>&1
|
|
||||||
rm -rf $TMP_PATH/${flag}*
|
|
||||||
[ "$shunt_logic" != "0" ] && {
|
|
||||||
local node=$(config_t_get global node nil)
|
|
||||||
[ "$(config_n_get $node protocol nil)" = "_shunt" ] && {
|
|
||||||
if [ "$shunt_logic" = "1" ]; then
|
|
||||||
uci set $CONFIG.$node.default_node="$new_node"
|
|
||||||
elif [ "$shunt_logic" = "2" ]; then
|
|
||||||
uci set $CONFIG.$node.main_node="$new_node"
|
|
||||||
fi
|
|
||||||
uci commit $CONFIG
|
|
||||||
}
|
|
||||||
new_node=$node
|
|
||||||
}
|
|
||||||
|
|
||||||
[ -s "$TMP_SCRIPT_FUNC_PATH/_${flag}" ] && {
|
|
||||||
for filename in $(ls ${TMP_SCRIPT_FUNC_PATH} | grep -v "^_"); do
|
|
||||||
cmd=$(cat ${TMP_SCRIPT_FUNC_PATH}/${filename})
|
|
||||||
[ -n "$(echo $cmd | grep "${flag}")" ] && rm -f ${TMP_SCRIPT_FUNC_PATH}/${filename}
|
|
||||||
done
|
|
||||||
local script_func=$(cat $TMP_SCRIPT_FUNC_PATH/_${flag})
|
|
||||||
local now_node_arg=$(echo $script_func | grep -o -E "node=.*" | awk -F ' ' '{print $1}')
|
|
||||||
new_script_func=$(echo $script_func | sed "s#${now_node_arg}#node=${new_node}#g")
|
|
||||||
${new_script_func}
|
|
||||||
echo $new_node > $TMP_ID_PATH/${flag}
|
|
||||||
|
|
||||||
[ "$shunt_logic" != "0" ] && [ "$(config_n_get $new_node protocol nil)" = "_shunt" ] && {
|
|
||||||
echo $(config_n_get $new_node default_node nil) > $TMP_ID_PATH/${flag}_default
|
|
||||||
echo $(config_n_get $new_node main_node nil) > $TMP_ID_PATH/${flag}_main
|
|
||||||
uci commit $CONFIG
|
|
||||||
}
|
|
||||||
|
|
||||||
#uci set $CONFIG.@global[0].node=$node
|
|
||||||
#uci commit $CONFIG
|
|
||||||
source $APP_PATH/helper_dnsmasq.sh logic_restart no_log=1
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
run_global() {
|
run_global() {
|
||||||
[ "$NODE" = "nil" ] && return 1
|
[ "$NODE" = "nil" ] && return 1
|
||||||
TYPE=$(echo $(config_n_get $NODE type nil) | tr 'A-Z' 'a-z')
|
TYPE=$(echo $(config_n_get $NODE type nil) | tr 'A-Z' 'a-z')
|
||||||
@ -667,7 +624,6 @@ run_global() {
|
|||||||
[ "$node_http_port" != "0" ] && V2RAY_ARGS="${V2RAY_ARGS} http_port=${node_http_port}"
|
[ "$node_http_port" != "0" ] && V2RAY_ARGS="${V2RAY_ARGS} http_port=${node_http_port}"
|
||||||
|
|
||||||
run_v2ray $V2RAY_ARGS
|
run_v2ray $V2RAY_ARGS
|
||||||
echo "run_v2ray $V2RAY_ARGS" > $TMP_SCRIPT_FUNC_PATH/_global
|
|
||||||
}
|
}
|
||||||
|
|
||||||
start_socks() {
|
start_socks() {
|
||||||
@ -771,9 +727,6 @@ start_crontab() {
|
|||||||
if [ "$ENABLED_DEFAULT_ACL" == 1 ] || [ "$ENABLED_ACLS" == 1 ]; then
|
if [ "$ENABLED_DEFAULT_ACL" == 1 ] || [ "$ENABLED_ACLS" == 1 ]; then
|
||||||
start_daemon=$(config_t_get global_delay start_daemon 0)
|
start_daemon=$(config_t_get global_delay start_daemon 0)
|
||||||
[ "$start_daemon" = "1" ] && $APP_PATH/monitor.sh > /dev/null 2>&1 &
|
[ "$start_daemon" = "1" ] && $APP_PATH/monitor.sh > /dev/null 2>&1 &
|
||||||
|
|
||||||
AUTO_SWITCH_ENABLE=$(config_t_get auto_switch enable 0)
|
|
||||||
[ "$AUTO_SWITCH_ENABLE" = "1" ] && $APP_PATH/test.sh > /dev/null 2>&1 &
|
|
||||||
else
|
else
|
||||||
echolog "运行于非代理模式,仅允许服务启停的定时任务。"
|
echolog "运行于非代理模式,仅允许服务启停的定时任务。"
|
||||||
fi
|
fi
|
||||||
@ -1027,7 +980,6 @@ stop() {
|
|||||||
[ -s "$TMP_PATH/bridge_nf_ipt" ] && sysctl -w net.bridge.bridge-nf-call-iptables=$(cat $TMP_PATH/bridge_nf_ipt) >/dev/null 2>&1
|
[ -s "$TMP_PATH/bridge_nf_ipt" ] && sysctl -w net.bridge.bridge-nf-call-iptables=$(cat $TMP_PATH/bridge_nf_ipt) >/dev/null 2>&1
|
||||||
[ -s "$TMP_PATH/bridge_nf_ip6t" ] && sysctl -w net.bridge.bridge-nf-call-ip6tables=$(cat $TMP_PATH/bridge_nf_ip6t) >/dev/null 2>&1
|
[ -s "$TMP_PATH/bridge_nf_ip6t" ] && sysctl -w net.bridge.bridge-nf-call-ip6tables=$(cat $TMP_PATH/bridge_nf_ip6t) >/dev/null 2>&1
|
||||||
rm -rf ${TMP_PATH}
|
rm -rf ${TMP_PATH}
|
||||||
rm -rf /tmp/lock/${CONFIG}_script.lock
|
|
||||||
echolog "清空并关闭相关程序和缓存完成。"
|
echolog "清空并关闭相关程序和缓存完成。"
|
||||||
exit 0
|
exit 0
|
||||||
}
|
}
|
||||||
@ -1091,9 +1043,6 @@ run_v2ray)
|
|||||||
run_socks)
|
run_socks)
|
||||||
run_socks $@
|
run_socks $@
|
||||||
;;
|
;;
|
||||||
node_switch)
|
|
||||||
node_switch $@
|
|
||||||
;;
|
|
||||||
echolog)
|
echolog)
|
||||||
echolog $@
|
echolog $@
|
||||||
;;
|
;;
|
||||||
|
@ -164,47 +164,6 @@ do
|
|||||||
end)
|
end)
|
||||||
end
|
end
|
||||||
|
|
||||||
local node_table = uci:get(appname, "@auto_switch[0]", "node")
|
|
||||||
if node_table then
|
|
||||||
local nodes = {}
|
|
||||||
local new_nodes = {}
|
|
||||||
for k,node_id in ipairs(node_table) do
|
|
||||||
if node_id then
|
|
||||||
local currentNode = uci:get_all(appname, node_id) or nil
|
|
||||||
if currentNode then
|
|
||||||
if currentNode.protocol and (currentNode.protocol == "_balancing" or currentNode.protocol == "_shunt") then
|
|
||||||
currentNode = nil
|
|
||||||
end
|
|
||||||
nodes[#nodes + 1] = {
|
|
||||||
log = true,
|
|
||||||
remarks = "备用节点的列表[" .. k .. "]",
|
|
||||||
currentNode = currentNode,
|
|
||||||
set = function(o, server)
|
|
||||||
for kk, vv in pairs(CONFIG) do
|
|
||||||
if (vv.remarks == "备用节点的列表") then
|
|
||||||
table.insert(vv.new_nodes, server)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
}
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
CONFIG[#CONFIG + 1] = {
|
|
||||||
remarks = "备用节点的列表",
|
|
||||||
nodes = nodes,
|
|
||||||
new_nodes = new_nodes,
|
|
||||||
set = function(o)
|
|
||||||
for kk, vv in pairs(CONFIG) do
|
|
||||||
if (vv.remarks == "备用节点的列表") then
|
|
||||||
--log("刷新自动切换的备用节点的列表")
|
|
||||||
uci:set_list(appname, "@auto_switch[0]", "node", vv.new_nodes)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
uci:foreach(appname, "nodes", function(node)
|
uci:foreach(appname, "nodes", function(node)
|
||||||
if node.protocol and node.protocol == '_shunt' then
|
if node.protocol and node.protocol == '_shunt' then
|
||||||
local node_id = node[".name"]
|
local node_id = node[".name"]
|
||||||
|
@ -2,8 +2,6 @@
|
|||||||
|
|
||||||
CONFIG=passwall2
|
CONFIG=passwall2
|
||||||
LOG_FILE=/tmp/log/$CONFIG.log
|
LOG_FILE=/tmp/log/$CONFIG.log
|
||||||
LOCK_FILE_DIR=/tmp/lock
|
|
||||||
LOCK_FILE=${LOCK_FILE_DIR}/${CONFIG}_script.lock
|
|
||||||
|
|
||||||
echolog() {
|
echolog() {
|
||||||
local d="$(date "+%Y-%m-%d %H:%M:%S")"
|
local d="$(date "+%Y-%m-%d %H:%M:%S")"
|
||||||
@ -96,148 +94,6 @@ test_node() {
|
|||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
|
|
||||||
flag=0
|
|
||||||
main_node=$(config_t_get global node nil)
|
|
||||||
|
|
||||||
test_auto_switch() {
|
|
||||||
flag=$(expr $flag + 1)
|
|
||||||
local TYPE=$1
|
|
||||||
local b_nodes=$2
|
|
||||||
local now_node=$3
|
|
||||||
[ -z "$now_node" ] && {
|
|
||||||
local f="/tmp/etc/$CONFIG/id/global"
|
|
||||||
if [ -f "${f}" ]; then
|
|
||||||
now_node=$(cat ${f})
|
|
||||||
if [ "$(config_n_get $now_node protocol nil)" = "_shunt" ]; then
|
|
||||||
if [ "$shunt_logic" == "1" ] && [ -f "${f}_default" ]; then
|
|
||||||
now_node=$(cat ${f}_default)
|
|
||||||
elif [ "$shunt_logic" == "2" ] && [ -f "${f}_main" ]; then
|
|
||||||
now_node=$(cat ${f}_main)
|
|
||||||
else
|
|
||||||
shunt_logic=0
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
shunt_logic=0
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
#echolog "自动切换检测:未知错误"
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
[ $flag -le 1 ] && {
|
|
||||||
main_node=$now_node
|
|
||||||
}
|
|
||||||
|
|
||||||
status=$(test_proxy)
|
|
||||||
if [ "$status" == 2 ]; then
|
|
||||||
echolog "自动切换检测:无法连接到网络,请检查网络是否正常!"
|
|
||||||
return 2
|
|
||||||
fi
|
|
||||||
|
|
||||||
#检测主节点是否能使用
|
|
||||||
if [ "$restore_switch" == "1" ] && [ "$main_node" != "nil" ] && [ "$now_node" != "$main_node" ]; then
|
|
||||||
test_node ${main_node}
|
|
||||||
[ $? -eq 0 ] && {
|
|
||||||
#主节点正常,切换到主节点
|
|
||||||
echolog "自动切换检测:${TYPE}主节点【$(config_n_get $main_node type):[$(config_n_get $main_node remarks)]】正常,切换到主节点!"
|
|
||||||
/usr/share/${CONFIG}/app.sh node_switch flag=global new_node=${main_node} shunt_logic=${shunt_logic}
|
|
||||||
[ $? -eq 0 ] && {
|
|
||||||
echolog "自动切换检测:${TYPE}节点切换完毕!"
|
|
||||||
[ "$shunt_logic" != "0" ] && {
|
|
||||||
local node=$(config_t_get global node nil)
|
|
||||||
[ "$(config_n_get $node protocol nil)" = "_shunt" ] && {
|
|
||||||
if [ "$shunt_logic" == "1" ]; then
|
|
||||||
uci set $CONFIG.$node.default_node="$main_node"
|
|
||||||
elif [ "$shunt_logic" == "2" ]; then
|
|
||||||
uci set $CONFIG.$node.main_node="$main_node"
|
|
||||||
fi
|
|
||||||
uci commit $CONFIG
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "$status" == 0 ]; then
|
|
||||||
#echolog "自动切换检测:${TYPE}节点【$(config_n_get $now_node type):[$(config_n_get $now_node remarks)]】正常。"
|
|
||||||
return 0
|
|
||||||
elif [ "$status" == 1 ]; then
|
|
||||||
echolog "自动切换检测:${TYPE}节点【$(config_n_get $now_node type):[$(config_n_get $now_node remarks)]】异常,切换到下一个备用节点检测!"
|
|
||||||
local new_node
|
|
||||||
in_backup_nodes=$(echo $b_nodes | grep $now_node)
|
|
||||||
# 判断当前节点是否存在于备用节点列表里
|
|
||||||
if [ -z "$in_backup_nodes" ]; then
|
|
||||||
# 如果不存在,设置第一个节点为新的节点
|
|
||||||
new_node=$(echo $b_nodes | awk -F ' ' '{print $1}')
|
|
||||||
else
|
|
||||||
# 如果存在,设置下一个备用节点为新的节点
|
|
||||||
#local count=$(expr $(echo $b_nodes | grep -o ' ' | wc -l) + 1)
|
|
||||||
local next_node=$(echo $b_nodes | awk -F "$now_node" '{print $2}' | awk -F " " '{print $1}')
|
|
||||||
if [ -z "$next_node" ]; then
|
|
||||||
new_node=$(echo $b_nodes | awk -F ' ' '{print $1}')
|
|
||||||
else
|
|
||||||
new_node=$next_node
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
test_node ${new_node}
|
|
||||||
if [ $? -eq 0 ]; then
|
|
||||||
[ "$restore_switch" == "0" ] && {
|
|
||||||
[ "$shunt_logic" == "0" ] && uci set $CONFIG.@global[0].node=$new_node
|
|
||||||
[ -z "$(echo $b_nodes | grep $main_node)" ] && uci add_list $CONFIG.@auto_switch[0].node=$main_node
|
|
||||||
uci commit $CONFIG
|
|
||||||
}
|
|
||||||
echolog "自动切换检测:${TYPE}节点【$(config_n_get $new_node type):[$(config_n_get $new_node remarks)]】正常,切换到此节点!"
|
|
||||||
/usr/share/${CONFIG}/app.sh node_switch flag=global new_node=${new_node} shunt_logic=${shunt_logic}
|
|
||||||
[ $? -eq 0 ] && {
|
|
||||||
[ "$restore_switch" == "1" ] && [ "$shunt_logic" != "0" ] && {
|
|
||||||
local node=$(config_t_get global node nil)
|
|
||||||
[ "$(config_n_get $node protocol nil)" = "_shunt" ] && {
|
|
||||||
if [ "$shunt_logic" == "1" ]; then
|
|
||||||
uci set $CONFIG.$node.default_node="$main_node"
|
|
||||||
elif [ "$shunt_logic" == "2" ]; then
|
|
||||||
uci set $CONFIG.$node.main_node="$main_node"
|
|
||||||
fi
|
|
||||||
uci commit $CONFIG
|
|
||||||
}
|
|
||||||
}
|
|
||||||
echolog "自动切换检测:${TYPE}节点切换完毕!"
|
|
||||||
}
|
|
||||||
return 0
|
|
||||||
else
|
|
||||||
test_auto_switch ${TYPE} "${b_nodes}" ${new_node}
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
start() {
|
|
||||||
ENABLED=$(config_t_get global enabled 0)
|
|
||||||
[ "$ENABLED" != 1 ] && return 1
|
|
||||||
ENABLED=$(config_t_get auto_switch enable 0)
|
|
||||||
[ "$ENABLED" != 1 ] && return 1
|
|
||||||
delay=$(config_t_get auto_switch testing_time 1)
|
|
||||||
#sleep 9s
|
|
||||||
connect_timeout=$(config_t_get auto_switch connect_timeout 3)
|
|
||||||
retry_num=$(config_t_get auto_switch retry_num 3)
|
|
||||||
restore_switch=$(config_t_get auto_switch restore_switch 0)
|
|
||||||
shunt_logic=$(config_t_get auto_switch shunt_logic 0)
|
|
||||||
while [ "$ENABLED" -eq 1 ]; do
|
|
||||||
[ -f "$LOCK_FILE" ] && {
|
|
||||||
sleep 6s
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
touch $LOCK_FILE
|
|
||||||
NODE=$(config_t_get auto_switch node nil)
|
|
||||||
[ -n "$NODE" -a "$NODE" != "nil" ] && {
|
|
||||||
NODE=$(echo $NODE | tr -s ' ' '\n' | uniq | tr -s '\n' ' ')
|
|
||||||
test_auto_switch TCP "$NODE"
|
|
||||||
}
|
|
||||||
rm -f $LOCK_FILE
|
|
||||||
sleep ${delay}m
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
arg1=$1
|
arg1=$1
|
||||||
shift
|
shift
|
||||||
case $arg1 in
|
case $arg1 in
|
||||||
@ -247,7 +103,4 @@ test_url)
|
|||||||
url_test_node)
|
url_test_node)
|
||||||
url_test_node $@
|
url_test_node $@
|
||||||
;;
|
;;
|
||||||
*)
|
|
||||||
start
|
|
||||||
;;
|
|
||||||
esac
|
esac
|
||||||
|
Loading…
Reference in New Issue
Block a user