77 lines
2.1 KiB
Go
77 lines
2.1 KiB
Go
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
|
||
}
|