qr-scanner/config/config.go

77 lines
2.1 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package config
import (
"os"
"strconv"
)
type Config struct {
Host string
Port int
TempDir string
MaxUploadMB int64
MaxFiles int
DefaultWorkers int
MaxWorkers int
DefaultTimeoutS int
MaxTimeoutS int
RetentionMinutes int
MaxZipTotalMB int64
MaxZipFileMB int64
DebugDelayMS int
}
func Default() Config {
return Config{
Host: "0.0.0.0",
Port: 8080,
TempDir: "/tmp/qr-scanner",
MaxUploadMB: 100,
MaxFiles: 10000,
DefaultWorkers: 4,
MaxWorkers: 32,
DefaultTimeoutS: 30,
MaxTimeoutS: 60,
RetentionMinutes: 30,
MaxZipTotalMB: 1024,
MaxZipFileMB: 50,
DebugDelayMS: 0,
}
}
func (c Config) WithEnv() Config {
/*
环境变量说明(用于本地开发/部署时覆盖默认配置):
- QR_SCANNER_PORT服务监听端口
- QR_SCANNER_TEMP_DIR任务临时目录根路径任务结束后按保留期清理
- QR_SCANNER_RETENTION_MINUTES终态任务保留分钟数completed/canceled/failed
- QR_SCANNER_DEFAULT_WORKERS默认并发数scan 请求未传 concurrency 时使用)
- QR_SCANNER_DEFAULT_TIMEOUT_S默认单张图片超时秒数scan 请求未传 timeout 时使用)
- QR_SCANNER_DEBUG_DELAY_MS调试延时每处理完一张图片额外 sleep用于观察进度条/SSE
*/
c.Port = envInt("QR_SCANNER_PORT", c.Port)
c.TempDir = envString("QR_SCANNER_TEMP_DIR", c.TempDir)
c.RetentionMinutes = envInt("QR_SCANNER_RETENTION_MINUTES", c.RetentionMinutes)
c.DefaultWorkers = envInt("QR_SCANNER_DEFAULT_WORKERS", c.DefaultWorkers)
c.DefaultTimeoutS = envInt("QR_SCANNER_DEFAULT_TIMEOUT_S", c.DefaultTimeoutS)
c.DebugDelayMS = envInt("QR_SCANNER_DEBUG_DELAY_MS", c.DebugDelayMS)
return c
}
func envString(key, fallback string) string {
if v := os.Getenv(key); v != "" {
return v
}
return fallback
}
func envInt(key string, fallback int) int {
if v := os.Getenv(key); v != "" {
if n, err := strconv.Atoi(v); err == nil {
return n
}
}
return fallback
}