dns ui: compact tab + benchmark dialog and api endpoint
This commit is contained in:
@@ -24,6 +24,8 @@ _NEXT_CHECK_RE = re.compile(
|
||||
from api_client import (
|
||||
ApiClient,
|
||||
CmdResult,
|
||||
DNSBenchmarkResponse,
|
||||
DNSBenchmarkUpstream,
|
||||
DNSStatus,
|
||||
DnsUpstreams,
|
||||
DomainsFile,
|
||||
@@ -128,7 +130,11 @@ class TrafficModeView:
|
||||
desired_mode: str
|
||||
applied_mode: str
|
||||
preferred_iface: str
|
||||
advanced_active: bool
|
||||
auto_local_bypass: bool
|
||||
auto_local_active: bool
|
||||
ingress_reply_bypass: bool
|
||||
ingress_reply_active: bool
|
||||
bypass_candidates: int
|
||||
force_vpn_subnets: List[str]
|
||||
force_vpn_uids: List[str]
|
||||
@@ -141,6 +147,8 @@ class TrafficModeView:
|
||||
cgroup_warning: str
|
||||
active_iface: str
|
||||
iface_reason: str
|
||||
ingress_rule_present: bool
|
||||
ingress_nft_active: bool
|
||||
probe_ok: bool
|
||||
probe_message: str
|
||||
healthy: bool
|
||||
@@ -614,7 +622,11 @@ class DashboardController:
|
||||
desired_mode=(st.desired_mode or st.mode or "selective"),
|
||||
applied_mode=(st.applied_mode or "direct"),
|
||||
preferred_iface=st.preferred_iface or "",
|
||||
advanced_active=bool(st.advanced_active),
|
||||
auto_local_bypass=bool(st.auto_local_bypass),
|
||||
auto_local_active=bool(st.auto_local_active),
|
||||
ingress_reply_bypass=bool(st.ingress_reply_bypass),
|
||||
ingress_reply_active=bool(st.ingress_reply_active),
|
||||
bypass_candidates=int(st.bypass_candidates),
|
||||
force_vpn_subnets=list(st.force_vpn_subnets or []),
|
||||
force_vpn_uids=list(st.force_vpn_uids or []),
|
||||
@@ -627,6 +639,8 @@ class DashboardController:
|
||||
cgroup_warning=st.cgroup_warning or "",
|
||||
active_iface=st.active_iface or "",
|
||||
iface_reason=st.iface_reason or "",
|
||||
ingress_rule_present=bool(st.ingress_rule_present),
|
||||
ingress_nft_active=bool(st.ingress_nft_active),
|
||||
probe_ok=bool(st.probe_ok),
|
||||
probe_message=st.probe_message or "",
|
||||
healthy=bool(st.healthy),
|
||||
@@ -638,6 +652,7 @@ class DashboardController:
|
||||
mode: str,
|
||||
preferred_iface: Optional[str] = None,
|
||||
auto_local_bypass: Optional[bool] = None,
|
||||
ingress_reply_bypass: Optional[bool] = None,
|
||||
force_vpn_subnets: Optional[List[str]] = None,
|
||||
force_vpn_uids: Optional[List[str]] = None,
|
||||
force_vpn_cgroups: Optional[List[str]] = None,
|
||||
@@ -649,6 +664,7 @@ class DashboardController:
|
||||
mode,
|
||||
preferred_iface,
|
||||
auto_local_bypass,
|
||||
ingress_reply_bypass,
|
||||
force_vpn_subnets,
|
||||
force_vpn_uids,
|
||||
force_vpn_cgroups,
|
||||
@@ -660,7 +676,11 @@ class DashboardController:
|
||||
desired_mode=(st.desired_mode or st.mode or mode),
|
||||
applied_mode=(st.applied_mode or "direct"),
|
||||
preferred_iface=st.preferred_iface or "",
|
||||
advanced_active=bool(st.advanced_active),
|
||||
auto_local_bypass=bool(st.auto_local_bypass),
|
||||
auto_local_active=bool(st.auto_local_active),
|
||||
ingress_reply_bypass=bool(st.ingress_reply_bypass),
|
||||
ingress_reply_active=bool(st.ingress_reply_active),
|
||||
bypass_candidates=int(st.bypass_candidates),
|
||||
force_vpn_subnets=list(st.force_vpn_subnets or []),
|
||||
force_vpn_uids=list(st.force_vpn_uids or []),
|
||||
@@ -673,6 +693,8 @@ class DashboardController:
|
||||
cgroup_warning=st.cgroup_warning or "",
|
||||
active_iface=st.active_iface or "",
|
||||
iface_reason=st.iface_reason or "",
|
||||
ingress_rule_present=bool(st.ingress_rule_present),
|
||||
ingress_nft_active=bool(st.ingress_nft_active),
|
||||
probe_ok=bool(st.probe_ok),
|
||||
probe_message=st.probe_message or "",
|
||||
healthy=bool(st.healthy),
|
||||
@@ -685,7 +707,11 @@ class DashboardController:
|
||||
desired_mode=(st.desired_mode or st.mode or "selective"),
|
||||
applied_mode=(st.applied_mode or "direct"),
|
||||
preferred_iface=st.preferred_iface or "",
|
||||
advanced_active=bool(st.advanced_active),
|
||||
auto_local_bypass=bool(st.auto_local_bypass),
|
||||
auto_local_active=bool(st.auto_local_active),
|
||||
ingress_reply_bypass=bool(st.ingress_reply_bypass),
|
||||
ingress_reply_active=bool(st.ingress_reply_active),
|
||||
bypass_candidates=int(st.bypass_candidates),
|
||||
force_vpn_subnets=list(st.force_vpn_subnets or []),
|
||||
force_vpn_uids=list(st.force_vpn_uids or []),
|
||||
@@ -698,6 +724,39 @@ class DashboardController:
|
||||
cgroup_warning=st.cgroup_warning or "",
|
||||
active_iface=st.active_iface or "",
|
||||
iface_reason=st.iface_reason or "",
|
||||
ingress_rule_present=bool(st.ingress_rule_present),
|
||||
ingress_nft_active=bool(st.ingress_nft_active),
|
||||
probe_ok=bool(st.probe_ok),
|
||||
probe_message=st.probe_message or "",
|
||||
healthy=bool(st.healthy),
|
||||
message=st.message or "",
|
||||
)
|
||||
|
||||
def traffic_advanced_reset(self) -> TrafficModeView:
|
||||
st: TrafficModeStatus = self.client.traffic_advanced_reset()
|
||||
return TrafficModeView(
|
||||
desired_mode=(st.desired_mode or st.mode or "selective"),
|
||||
applied_mode=(st.applied_mode or "direct"),
|
||||
preferred_iface=st.preferred_iface or "",
|
||||
advanced_active=bool(st.advanced_active),
|
||||
auto_local_bypass=bool(st.auto_local_bypass),
|
||||
auto_local_active=bool(st.auto_local_active),
|
||||
ingress_reply_bypass=bool(st.ingress_reply_bypass),
|
||||
ingress_reply_active=bool(st.ingress_reply_active),
|
||||
bypass_candidates=int(st.bypass_candidates),
|
||||
force_vpn_subnets=list(st.force_vpn_subnets or []),
|
||||
force_vpn_uids=list(st.force_vpn_uids or []),
|
||||
force_vpn_cgroups=list(st.force_vpn_cgroups or []),
|
||||
force_direct_subnets=list(st.force_direct_subnets or []),
|
||||
force_direct_uids=list(st.force_direct_uids or []),
|
||||
force_direct_cgroups=list(st.force_direct_cgroups or []),
|
||||
overrides_applied=int(st.overrides_applied),
|
||||
cgroup_resolved_uids=int(st.cgroup_resolved_uids),
|
||||
cgroup_warning=st.cgroup_warning or "",
|
||||
active_iface=st.active_iface or "",
|
||||
iface_reason=st.iface_reason or "",
|
||||
ingress_rule_present=bool(st.ingress_rule_present),
|
||||
ingress_nft_active=bool(st.ingress_nft_active),
|
||||
probe_ok=bool(st.probe_ok),
|
||||
probe_message=st.probe_message or "",
|
||||
healthy=bool(st.healthy),
|
||||
@@ -811,6 +870,22 @@ class DashboardController:
|
||||
def dns_upstreams_save(self, cfg: DnsUpstreams) -> None:
|
||||
self.client.dns_upstreams_set(cfg)
|
||||
|
||||
def dns_benchmark(
|
||||
self,
|
||||
upstreams: List[DNSBenchmarkUpstream],
|
||||
domains: List[str],
|
||||
timeout_ms: int = 1800,
|
||||
attempts: int = 1,
|
||||
concurrency: int = 6,
|
||||
) -> DNSBenchmarkResponse:
|
||||
return self.client.dns_benchmark(
|
||||
upstreams=upstreams,
|
||||
domains=domains,
|
||||
timeout_ms=timeout_ms,
|
||||
attempts=attempts,
|
||||
concurrency=concurrency,
|
||||
)
|
||||
|
||||
def dns_status_view(self) -> DNSStatus:
|
||||
return self.client.dns_status_get()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user