package resolver func SaveResolverPrecheckState(path string, ts int, timeoutStats ResolverTimeoutRecheckStats, live ResolverLiveBatchStats) { if path == "" || ts <= 0 { return } state := LoadJSONMap(path) if state == nil { state = map[string]any{} } state["last_run"] = ts state["timeout_recheck"] = map[string]any{ "checked": timeoutStats.Checked, "recovered": timeoutStats.Recovered, "recovered_ips": timeoutStats.RecoveredIPs, "still_timeout": timeoutStats.StillTimeout, "now_nxdomain": timeoutStats.NowNXDomain, "now_temporary": timeoutStats.NowTemporary, "now_other": timeoutStats.NowOther, "no_signal": timeoutStats.NoSignal, } state["live_batch_target"] = live.Target state["live_batch_total"] = live.Total state["live_batch_deferred"] = live.Deferred state["live_batch_p1"] = live.P1 state["live_batch_p2"] = live.P2 state["live_batch_p3"] = live.P3 state["live_batch_nxheavy_pct"] = live.NXHeavyPct state["live_batch_nxheavy_total"] = live.NXHeavyTotal state["live_batch_nxheavy_skip"] = live.NXHeavySkip state["live_batch_nxheavy_next_pct"] = live.NextNXPct state["live_batch_nxheavy_next_reason"] = live.NextNXReason state["live_batch_next_target"] = live.NextTarget state["live_batch_next_reason"] = live.NextReason state["live_batch_dns_attempts"] = live.DNSAttempts state["live_batch_dns_timeout"] = live.DNSTimeout state["live_batch_dns_cooldown_skips"] = live.DNSCoolSkips SaveJSON(state, path) }