| 204 | } |
| 205 | |
| 206 | func resolveRedisSettings(cfg benchmarkConfig) (dsn string, skipTLSVerify bool, err error) { |
| 207 | if strings.TrimSpace(cfg.redisDSN) != "" { |
| 208 | return strings.TrimSpace(cfg.redisDSN), cfg.redisSkipTLS, nil |
| 209 | } |
| 210 | |
| 211 | if envDSN := strings.TrimSpace(os.Getenv("LEDGERFORGE_REDIS_DNS")); envDSN != "" { |
| 212 | return envDSN, parseEnvBool("LEDGERFORGE_REDIS_SKIP_TLS_VERIFY"), nil |
| 213 | } |
| 214 | |
| 215 | if strings.TrimSpace(cfg.configPath) == "" { |
| 216 | return "", false, fmt.Errorf("redis DSN not found; pass -redis-dsn, set LEDGERFORGE_REDIS_DNS, or use -config") |
| 217 | } |
| 218 | |
| 219 | type redisSection struct { |
| 220 | DNS string `json:"dns"` |
| 221 | SkipTLSVerify bool `json:"skip_tls_verify"` |
| 222 | } |
| 223 | type fileConfig struct { |
| 224 | Redis redisSection `json:"redis"` |
| 225 | } |
| 226 | |
| 227 | data, readErr := os.ReadFile(cfg.configPath) |
| 228 | if readErr != nil { |
| 229 | return "", false, readErr |
| 230 | } |
| 231 | |
| 232 | var parsed fileConfig |
| 233 | if unmarshalErr := json.Unmarshal(data, &parsed); unmarshalErr != nil { |
| 234 | return "", false, unmarshalErr |
| 235 | } |
| 236 | |
| 237 | if strings.TrimSpace(parsed.Redis.DNS) == "" { |
| 238 | return "", false, fmt.Errorf("redis.dns missing in config file") |
| 239 | } |
| 240 | |
| 241 | return strings.TrimSpace(parsed.Redis.DNS), parsed.Redis.SkipTLSVerify, nil |
| 242 | } |
| 243 | |
| 244 | func takeSnapshot(inspector *asynq.Inspector, cfg benchmarkConfig) (snapshot, error) { |
| 245 | queueNames, err := resolveQueueNames(inspector, cfg) |