fix: egress cache TTL independent from fetcher cache (24h default)

Egress probe results (IP/country/region/city/isp) were cached using the
fetcher's cache_ttl (300s / 5min). After 5 minutes the cache expired and
the node list showed empty Egress IP/Country/Region fields again.

Add a dedicated egress_cache_ttl config (default 24h) so egress data
persists long enough to be useful when re-expanding the node list.
This commit is contained in:
2026-07-29 17:54:15 +08:00
parent cc38a6f0ba
commit eba9fa1be0
3 changed files with 5 additions and 2 deletions
+1
View File
@@ -25,6 +25,7 @@ fetcher:
max_response_bytes: 2097152 # 2 MiB
max_total_bytes: 12582912 # 12 MiB
proxy_url: "" # e.g. "http://127.0.0.1:7890" for fetching sources behind Cloudflare
egress_cache_ttl: 24h # TTL for egress IP/country/region probe cache
recycle:
max_entries: 50
+2
View File
@@ -47,6 +47,7 @@ type FetcherConfig struct {
MaxResponseBytes int `mapstructure:"max_response_bytes"`
MaxTotalBytes int `mapstructure:"max_total_bytes"`
ProxyURL string `mapstructure:"proxy_url"`
EgressCacheTTL time.Duration `mapstructure:"egress_cache_ttl"`
}
type RecycleConfig struct {
@@ -80,6 +81,7 @@ func defaults() {
viper.SetDefault("fetcher.max_response_bytes", 2*1024*1024)
viper.SetDefault("fetcher.max_total_bytes", 12*1024*1024)
viper.SetDefault("fetcher.proxy_url", "")
viper.SetDefault("fetcher.egress_cache_ttl", 24*time.Hour)
viper.SetDefault("recycle.max_entries", 50)
viper.SetDefault("app.name", "Sub-Store")
viper.SetDefault("app.version", "1.0.0")
+2 -2
View File
@@ -66,9 +66,9 @@ func (d *Deps) HandleEgressInfo(c fiber.Ctx) error {
}
info["cached"] = false
if data, err := json.Marshal(info); err == nil {
ttl := int(d.Cfg.Fetcher.CacheTTL.Seconds())
ttl := int(d.Cfg.Fetcher.EgressCacheTTL.Seconds())
if ttl <= 0 {
ttl = 300
ttl = 86400 // 24h default
}
d.CacheRepo.SafePut(cacheKey, string(data), nil, ttl)
}