fix: resolve -1ms latency display, diagnostic outbounds check timeout, country.is fallback, and docker AGH false positive
- Fix -1ms badge and green coloring in dashboard sections when node latency check fails or returns -1 - Handle Clash API group delay responses properly in dashboard single and batch latency tests - Target active outbound node in diagnostics outbounds check instead of group tag to prevent router timeout - Add nslookup fallback in country.uc resolve_service_host and retain system DNS resolution - Ensure flag emoji country deduction acts as fallback in URLTest groups when exclude_countries is specified - Ignore processes in container network namespaces when diagnosing system port 53 / DNS conflicts for AdGuardHome - Bump fe-app-tachyon version to 1.3.25 and rebuild LuCI bundle
This commit is contained in:
@@ -135,12 +135,25 @@ function normalized_resolver(value) {
|
||||
|
||||
function resolve_service_host(host, resolver) {
|
||||
resolver = normalized_resolver(resolver);
|
||||
if (host == "" || resolver == "")
|
||||
if (host == "")
|
||||
return "";
|
||||
|
||||
return first_ipv4_line(command_output_from_args([
|
||||
"dig", "+short", "@" + resolver, host, "A", "+time=2", "+tries=1"
|
||||
]));
|
||||
let ip = "";
|
||||
if (resolver != "") {
|
||||
ip = first_ipv4_line(command_output_from_args([
|
||||
"dig", "+short", "@" + resolver, host, "A", "+time=2", "+tries=1"
|
||||
]));
|
||||
if (ip == "")
|
||||
ip = first_nslookup_address(command_output_from_args([ "nslookup", host, resolver ]));
|
||||
}
|
||||
if (ip == "") {
|
||||
ip = first_ipv4_line(command_output_from_args([
|
||||
"dig", "+short", host, "A", "+time=2", "+tries=1"
|
||||
]));
|
||||
if (ip == "")
|
||||
ip = first_nslookup_address(command_output_from_args([ "nslookup", host ]));
|
||||
}
|
||||
return public_ipv4(ip) ? ip : "";
|
||||
}
|
||||
|
||||
function resolve_server(value) {
|
||||
@@ -174,11 +187,6 @@ function lookup_ip_batch(ips, resolver) {
|
||||
let endpoint = country_is_endpoint();
|
||||
if (endpoint.host != "" && !valid_ipv4(endpoint.host) && !valid_ipv6(endpoint.host)) {
|
||||
let service_ip = resolve_service_host(endpoint.host, resolver);
|
||||
if (normalized_resolver(resolver) != "" && !public_ipv4(service_ip)) {
|
||||
remove_file(body_path);
|
||||
warn("Server country service host resolution failed\n");
|
||||
return { countries: {}, stop: true };
|
||||
}
|
||||
if (public_ipv4(service_ip)) {
|
||||
push(args, "--resolve");
|
||||
push(args, endpoint.host + ":" + endpoint.port + ":" + service_ip);
|
||||
|
||||
@@ -191,11 +191,19 @@ function section_has_direct_priority_level(section) {
|
||||
}
|
||||
|
||||
function urltest_country_metadata(section, urltest_id, state) {
|
||||
let metadata = object_or_empty(object_or_empty(state.outboundMetadata).countries);
|
||||
let names = object_or_empty(object_or_empty(state.outboundMetadata).names);
|
||||
let from_flags = runtime_urltest.countries_from_flag_names(names);
|
||||
let detect_method = connections.urltest_detect_server_country(section, urltest_id);
|
||||
if (detect_method == "flag_emoji")
|
||||
return runtime_urltest.countries_from_flag_names(object_or_empty(object_or_empty(state.outboundMetadata).names));
|
||||
return metadata;
|
||||
return from_flags;
|
||||
let metadata = object_or_empty(object_or_empty(state.outboundMetadata).countries);
|
||||
let result = {};
|
||||
for (let tag, c in from_flags)
|
||||
result[tag] = c;
|
||||
for (let tag, c in metadata)
|
||||
if (c != "")
|
||||
result[tag] = c;
|
||||
return result;
|
||||
}
|
||||
|
||||
function array_contains(values, needle) {
|
||||
@@ -409,11 +417,19 @@ function urltest_filtered_outbounds(section, urltest_id, urltest_candidate_tags,
|
||||
}
|
||||
|
||||
function priority_level_country_metadata(group_id, level_id, state) {
|
||||
let metadata = object_or_empty(object_or_empty(state.outboundMetadata).countries);
|
||||
let names = object_or_empty(object_or_empty(state.outboundMetadata).names);
|
||||
let from_flags = runtime_urltest.countries_from_flag_names(names);
|
||||
let detect_method = connections.priority_level_detect_server_country(group_id, level_id);
|
||||
if (detect_method == "flag_emoji")
|
||||
return runtime_urltest.countries_from_flag_names(object_or_empty(object_or_empty(state.outboundMetadata).names));
|
||||
return metadata;
|
||||
return from_flags;
|
||||
let metadata = object_or_empty(object_or_empty(state.outboundMetadata).countries);
|
||||
let result = {};
|
||||
for (let tag, c in from_flags)
|
||||
result[tag] = c;
|
||||
for (let tag, c in metadata)
|
||||
if (c != "")
|
||||
result[tag] = c;
|
||||
return result;
|
||||
}
|
||||
|
||||
function priority_level_filtered_outbounds(group_id, level_id, urltest_candidate_tags, state) {
|
||||
@@ -444,10 +460,18 @@ function priority_level_filtered_outbounds(group_id, level_id, urltest_candidate
|
||||
}
|
||||
|
||||
function dashboard_country_metadata(section, state) {
|
||||
let metadata = object_or_empty(object_or_empty(state.outboundMetadata).countries);
|
||||
let names = object_or_empty(object_or_empty(state.outboundMetadata).names);
|
||||
let from_flags = runtime_urltest.countries_from_flag_names(names);
|
||||
if (connections.dashboard_detect_server_country(section) == "flag_emoji")
|
||||
return runtime_urltest.countries_from_flag_names(object_or_empty(object_or_empty(state.outboundMetadata).names));
|
||||
return metadata;
|
||||
return from_flags;
|
||||
let metadata = object_or_empty(object_or_empty(state.outboundMetadata).countries);
|
||||
let result = {};
|
||||
for (let tag, c in from_flags)
|
||||
result[tag] = c;
|
||||
for (let tag, c in metadata)
|
||||
if (c != "")
|
||||
result[tag] = c;
|
||||
return result;
|
||||
}
|
||||
|
||||
function selected_group_outbounds(group_names, group_outbounds) {
|
||||
|
||||
Reference in New Issue
Block a user