platform: modularize api/gui, add docs-tests-web foundation, and refresh root config
This commit is contained in:
90
selective-vpn-api/app/resolver_pipeline_context.go
Normal file
90
selective-vpn-api/app/resolver_pipeline_context.go
Normal file
@@ -0,0 +1,90 @@
|
||||
package app
|
||||
|
||||
import "time"
|
||||
|
||||
func buildResolverJobContext(opts ResolverOpts, logf func(string, ...any)) resolverJobContext {
|
||||
ctx := resolverJobContext{}
|
||||
|
||||
ctx.domains = loadList(opts.DomainsPath)
|
||||
ctx.metaSpecial = loadList(opts.MetaPath)
|
||||
ctx.staticLines = readLinesAllowMissing(opts.StaticPath)
|
||||
ctx.wildcards = newWildcardMatcher(opts.SmartDNSWildcards)
|
||||
|
||||
ctx.cfg = loadDNSConfig(opts.DNSConfigPath, logf)
|
||||
ctx.cfg = applyResolverDNSModeRuntime(ctx.cfg, opts)
|
||||
logResolverDNSMode(ctx.cfg, ctx.wildcards, logf)
|
||||
|
||||
ctx.domainCache = loadDomainCacheState(opts.CachePath, logf)
|
||||
ctx.ptrCache = loadJSONMap(opts.PtrCachePath)
|
||||
ctx.now = int(time.Now().Unix())
|
||||
ctx.precheckStatePath = opts.CachePath + ".precheck.json"
|
||||
ctx.precheckEnvForced = resolvePrecheckForceEnvEnabled()
|
||||
ctx.precheckFileForced = resolvePrecheckForceFileEnabled(precheckForcePath)
|
||||
ctx.tuning = buildResolverRuntimeTuning(opts, ctx.now, ctx.precheckStatePath, ctx.precheckEnvForced, ctx.precheckFileForced)
|
||||
|
||||
ctx.cacheSourceForHost = func(host string) domainCacheSource {
|
||||
switch ctx.cfg.Mode {
|
||||
case DNSModeSmartDNS:
|
||||
return domainCacheSourceWildcard
|
||||
case DNSModeHybridWildcard:
|
||||
if ctx.wildcards.Match(host) {
|
||||
return domainCacheSourceWildcard
|
||||
}
|
||||
}
|
||||
return domainCacheSourceDirect
|
||||
}
|
||||
ctx.cooldown = newDNSRunCooldown()
|
||||
|
||||
if ctx.tuning.PrecheckDue && ctx.tuning.TimeoutRecheckMax > 0 {
|
||||
ctx.timeoutRecheck = runTimeoutQuarantineRecheck(
|
||||
ctx.domains,
|
||||
ctx.cfg,
|
||||
ctx.metaSpecial,
|
||||
ctx.wildcards,
|
||||
ctx.tuning.DNSTimeout,
|
||||
&ctx.domainCache,
|
||||
ctx.cacheSourceForHost,
|
||||
ctx.now,
|
||||
ctx.tuning.TimeoutRecheckMax,
|
||||
ctx.tuning.Workers,
|
||||
)
|
||||
}
|
||||
|
||||
directPolicy := directDNSAttemptPolicy(len(ctx.cfg.Default))
|
||||
wildcardPolicy := wildcardDNSAttemptPolicy(1)
|
||||
cEnabled, cMin, cRate, cStreak, cBan, cMaxBan := ctx.cooldown.configSnapshot()
|
||||
logResolverStart(
|
||||
resolverStartLogInput{
|
||||
DomainsTotal: len(ctx.domains),
|
||||
TTL: ctx.tuning.TTL,
|
||||
Workers: ctx.tuning.Workers,
|
||||
DNSTimeoutMS: ctx.tuning.DNSTimeoutMS,
|
||||
DirectTry: directPolicy.TryLimit,
|
||||
DirectBudgetMS: directPolicy.DomainBudget.Milliseconds(),
|
||||
WildcardTry: wildcardPolicy.TryLimit,
|
||||
WildcardBudgetMS: wildcardPolicy.DomainBudget.Milliseconds(),
|
||||
NXEarlyStop: resolveNXEarlyStopEnabled(),
|
||||
NXHardQuarantine: resolveNXHardQuarantineEnabled(),
|
||||
CooldownEnabled: cEnabled,
|
||||
CooldownMinAttempts: cMin,
|
||||
CooldownTimeoutRate: cRate,
|
||||
CooldownFailStreak: cStreak,
|
||||
CooldownBanSec: cBan,
|
||||
CooldownMaxBanSec: cMaxBan,
|
||||
LiveBatchTarget: ctx.tuning.LiveBatchTarget,
|
||||
LiveBatchMin: ctx.tuning.LiveBatchMin,
|
||||
LiveBatchMax: ctx.tuning.LiveBatchMax,
|
||||
LiveBatchNXHeavyPct: ctx.tuning.LiveBatchNXHeavyPct,
|
||||
LiveBatchNXHeavyMin: ctx.tuning.LiveBatchNXHeavyMin,
|
||||
LiveBatchNXHeavyMax: ctx.tuning.LiveBatchNXHeavyMax,
|
||||
StaleKeepSec: ctx.tuning.StaleKeepSec,
|
||||
PrecheckEverySec: ctx.tuning.PrecheckEverySec,
|
||||
PrecheckMaxDomains: ctx.tuning.PrecheckMaxDomains,
|
||||
PrecheckForcedEnv: ctx.precheckEnvForced,
|
||||
PrecheckForcedFile: ctx.precheckFileForced,
|
||||
},
|
||||
logf,
|
||||
)
|
||||
|
||||
return ctx
|
||||
}
|
||||
Reference in New Issue
Block a user