platform: modularize api/gui, add docs-tests-web foundation, and refresh root config

This commit is contained in:
beckline
2026-03-26 22:40:54 +03:00
parent 0e2d7f61ea
commit 6a56d734c2
562 changed files with 70151 additions and 16423 deletions

View File

@@ -0,0 +1,112 @@
package resolver
type ResolverSummaryLogInput struct {
DomainsTotal int
FreshCount int
CacheNegativeHits int
QuarantineHits int
StaleHits int
ResolvedTotal int
UnresolvedAfterAttempts int
LiveBatchTarget int
LiveDeferred int
LiveP1 int
LiveP2 int
LiveP3 int
LiveBatchNXHeavyPct int
LiveNXHeavyTotal int
LiveNXHeavySkip int
StaticEntries int
StaticSkipped int
UniqueIPs int
DirectIPs int
WildcardIPs int
PtrLookups int
PtrErrors int
DNSStats DNSMetrics
TimeoutRecheck ResolverTimeoutRecheckStats
DurationMS int64
DomainStateSummary string
ResolvedNowDNS int
ResolvedNowStale int
PrecheckDue bool
PrecheckScheduled int
PrecheckStatePath string
}
func LogResolverSummary(in ResolverSummaryLogInput, logf func(string, ...any)) {
if logf == nil {
return
}
dnsErrors := in.DNSStats.TotalErrors()
unresolved := in.DomainsTotal - in.ResolvedTotal
unresolvedSuppressed := in.CacheNegativeHits + in.QuarantineHits + in.LiveDeferred
logf(
"resolve summary: domains=%d cache_hits=%d cache_neg_hits=%d quarantine_hits=%d stale_hits=%d resolved_now=%d unresolved=%d unresolved_live=%d unresolved_suppressed=%d live_batch_target=%d live_batch_deferred=%d live_batch_p1=%d live_batch_p2=%d live_batch_p3=%d live_batch_nxheavy_pct=%d live_batch_nxheavy_total=%d live_batch_nxheavy_skip=%d static_entries=%d static_skipped=%d unique_ips=%d direct_ips=%d wildcard_ips=%d ptr_lookups=%d ptr_errors=%d dns_attempts=%d dns_ok=%d dns_nxdomain=%d dns_timeout=%d dns_temporary=%d dns_other=%d dns_cooldown_skips=%d dns_errors=%d timeout_recheck_checked=%d timeout_recheck_recovered=%d timeout_recheck_recovered_ips=%d timeout_recheck_still_timeout=%d timeout_recheck_now_nxdomain=%d timeout_recheck_now_temporary=%d timeout_recheck_now_other=%d timeout_recheck_no_signal=%d duration_ms=%d",
in.DomainsTotal,
in.FreshCount,
in.CacheNegativeHits,
in.QuarantineHits,
in.StaleHits,
in.ResolvedTotal-in.FreshCount,
unresolved,
in.UnresolvedAfterAttempts,
unresolvedSuppressed,
in.LiveBatchTarget,
in.LiveDeferred,
in.LiveP1,
in.LiveP2,
in.LiveP3,
in.LiveBatchNXHeavyPct,
in.LiveNXHeavyTotal,
in.LiveNXHeavySkip,
in.StaticEntries,
in.StaticSkipped,
in.UniqueIPs,
in.DirectIPs,
in.WildcardIPs,
in.PtrLookups,
in.PtrErrors,
in.DNSStats.Attempts,
in.DNSStats.OK,
in.DNSStats.NXDomain,
in.DNSStats.Timeout,
in.DNSStats.Temporary,
in.DNSStats.Other,
in.DNSStats.Skipped,
dnsErrors,
in.TimeoutRecheck.Checked,
in.TimeoutRecheck.Recovered,
in.TimeoutRecheck.RecoveredIPs,
in.TimeoutRecheck.StillTimeout,
in.TimeoutRecheck.NowNXDomain,
in.TimeoutRecheck.NowTemporary,
in.TimeoutRecheck.NowOther,
in.TimeoutRecheck.NoSignal,
in.DurationMS,
)
if perUpstream := in.DNSStats.FormatPerUpstream(); perUpstream != "" {
logf("resolve dns upstreams: %s", perUpstream)
}
if health := in.DNSStats.FormatResolverHealth(); health != "" {
logf("resolve dns health: %s", health)
}
if in.DomainStateSummary != "" {
logf("resolve domain states: %s", in.DomainStateSummary)
}
logf(
"resolve breakdown: resolved_now_total=%d resolved_now_dns=%d resolved_now_stale=%d skipped_neg=%d skipped_quarantine=%d deferred_live_batch=%d unresolved_after_attempts=%d",
in.ResolvedTotal-in.FreshCount,
in.ResolvedNowDNS,
in.ResolvedNowStale,
in.CacheNegativeHits,
in.QuarantineHits,
in.LiveDeferred,
in.UnresolvedAfterAttempts,
)
if in.PrecheckDue {
logf("resolve precheck done: scheduled=%d state=%s", in.PrecheckScheduled, in.PrecheckStatePath)
}
}