AutoProxy

{{ t('menu_' + currentView) }}

{{ n.name }} {{ t('node_this') }} {{ t('node_down') }} · {{ n.error }}
{{ n.qps.toFixed(2) }} QPS {{ n.total_queries.toLocaleString() }} {{ t('node_queries') }} {{ t('node_hit') }} {{ (n.cache_hit_rate * 100).toFixed(0) }}% {{ t('node_miss') }} {{ fmtUs(n.avg_miss_us) }}
{{ Math.round(n.total_queries / stats.total_queries * 100) }}%
{{ t('node_share') }}

{{ t('stats_total_queries') }}

{{ formatNumber(stats.total_queries) }}

CN
{{ formatNumber(stats.total_cn) }}
Overseas
{{ formatNumber(stats.total_overseas) }}

{{ t('stats_memory') }}

{{ stats.memory_usage_mb?.toFixed(1) }} MB

QPS {{ formatQPS(stats.qps) }} req/s

{{ t('stats_uptime') }}

{{ formatUptime(stats.uptime_seconds) }}

Started At
{{ getStartTime(stats.uptime_seconds) }}

{{ t('stats_ports') }}

TCP {{ formatListenPort(stats.listen_dns_tcp) }} {{ t('not_listening') }}
UDP {{ formatListenPort(stats.listen_dns_udp) }} {{ t('not_listening') }}
DoH {{ formatListenPort(stats.listen_doh) }} {{ t('not_listening') }}
DoT {{ formatListenPort(stats.listen_dot) }} {{ t('not_listening') }}
DoQ {{ formatListenPort(stats.listen_doq) }} {{ t('not_listening') }}

{{ t('accel_title') }}

{{ t('cache_disabled') }}
{{ Math.round((cacheStats.hit_rate || 0) * 100) }}%
{{ t('cache_hit_rate') }}
{{ t('cache_entries') }} {{ formatNumber(cacheStats.entries) }}
{{ t('accel_faster') }}
{{ speedupText }}
{{ t('accel_cache_lane') }} {{ fmtUs(cacheStats.avg_hit_us) }}
{{ t('accel_upstream_lane') }} {{ fmtUs(cacheStats.avg_miss_us) }}

{{ t('accel_race_hint') }}

{{ t('accel_saved') }}
{{ fmtSaved(savedDisplay) }}
{{ t('accel_saved_hint', { n: formatNumber(cacheStats.hits) }) }}
{{ t('accel_stale') }}
{{ formatNumber(cacheStats.stale_hits) }}
{{ t('accel_prefetch') }}
{{ formatNumber(cacheStats.prefetches) }}
{{ t('accel_ecs') }}
{{ formatNumber(cacheStats.ecs_routed) }}
{{ t('accel_trend') }} {{ t('accel_cache_lane') }} {{ t('accel_upstream_lane') }}
{{ b.label }}
{{ t('accel_15m_ago') }}{{ t('accel_now') }}

{{ t('flow_title') }}

{{ t('flow_empty') }}
  • {{ log.node }} {{ log.domain.replace(/\.$/, '') || '.' }} {{ log.type }}
    {{ fmtUs(logUs(log)) }}
  • {{ t('stats_traffic_distribution') }}

    CN (Domestic) {{ stats.total_cn }}
    {{ getPercentage(stats.total_cn, stats.total_queries) }}%
    Overseas {{ stats.total_overseas }}
    {{ getPercentage(stats.total_overseas, stats.total_queries) }}%
    {{ t('stats_blocked') }} {{ stats.total_blocked || 0 }}
    {{ getPercentage(stats.total_blocked || 0, stats.total_queries) }}%

    {{ t('stats_upstream_perf') }}

    {{ t('table_server') }} {{ t('table_group') }} {{ t('table_queries') }} {{ t('table_errors') }} {{ t('table_canceled') }} {{ t('table_avg_time') }}
    {{ s.node }}{{ s.address }} {{ s.protocol }} {{ s.group }} {{ s.total_queries }} {{ s.total_errors > 0 ? s.total_errors : '-' }} {{ s.total_canceled > 0 ? s.total_canceled : '-' }} {{ s.avg_duration_ms }} ms

    {{ t('top_clients') }}

    • {{ idx + 1 }} {{ client[0] }}
      {{ client[1] }}

    {{ t('top_domains') }}

    • {{ idx + 1 }} {{ domain[0] }}
      {{ domain[1] }}
    {{ t('logs_title') }}
    {{ t('log_time') }} {{ t('log_client') }} {{ t('log_domain') }} {{ t('log_type') }} {{ t('log_answer') }} {{ t('log_upstream') }} {{ t('log_status') }} {{ t('log_duration') }}
    {{ log.node }}{{ formatTime(log.time) }}
    {{ log.client_ip }}
    ECS {{ log.downstream_ecs }}
    {{ log.domain }} {{ log.type }} {{ log.answer }} {{ log.cache === 'stale' ? t('accel_stale') : t('flow_cache') }} {{ formatUpstreamLabel(log.upstream) }}
    {{ log.ecs }}
    {{ getLogStatusText(log) }} {{ fmtUs(logUs(log)) }}

    {{ t('no_logs') }}

    Showing {{ (logsPage - 1) * 15 + 1 }} to {{ Math.min(logsPage * 15, logsTotal) }} of {{ logsTotal }} results

    WebUI Settings

    Allow viewing dashboard without login. Login required for changes.

    {{ t('setting_querylog') }}

    Defaults to 'query.log' if empty.

    {{ t('setting_cache') }}

    {{ t('ecs_client_subnet_help') }}

    {{ t('setting_block') }}

    {{ t('block_help') }}

    {{ t('block_lists') }}

    {{ t('no_records') }}

    {{ t('setting_listen') }}

    {{ t('listen_address_help') }}

    {{ t('setting_bootstrap') }}

    {{ t('setting_tls_certs') }}

    {{ t('setting_upstreams') }}

    {{ t('setting_hosts') }}

    IP Domain
    {{ h.ip }} {{ h.domain }}
    {{ t('no_records') }}
    Total: {{ hostsTotal }}
    {{ hostsPage }}

    {{ t('setting_rules') }}

    {{ t('rule_help') }}

    {{ t('no_records') }}

    Geo Data

    Auto Certificate (ACME)

    AutoProxy

    System Dashboard

    {{ t('saving') }}

    {{ t('saved_msg') }}

    {{ t('testing') }}

    Address Protocol Group Status Latency
    {{ res.address }} {{ res.protocol }} {{ res.group }} {{ res.status }} {{ res.latency }}
    {{ t('log_time') }} {{ formatTime(modal.log.time) }}
    {{ t('log_client') }} {{ modal.log.client_ip }}
    {{ t('log_downstream_ecs') }} {{ modal.log.downstream_ecs || '-' }}
    {{ t('log_domain') }} {{ modal.log.domain }}
    {{ t('log_type') }} {{ modal.log.type }}
    {{ t('log_duration') }} {{ modal.log.duration_ms }}ms
    {{ t('log_status') }} {{ getLogStatusText(modal.log) }} {{ t('raw_status') }} {{ modal.log.status }}
    {{ t('log_upstream') }} {{ formatUpstreamLabel(modal.log.upstream) }}
    {{ t('query_interpretation') }}

    {{ getLogExplanation(modal.log) }}

    {{ t('resolution_chain') }}

    Question

    {{ modal.log.domain }}

    {{ rec.type }} TTL {{ rec.ttl }}

    {{ rec.data }}

    {{ getLogAnswerSummary(modal.log) }}