feat(server): 添加配置文件支持和示例配置生成

- 新增 GenerateSampleConfig 函数用于生成示例配置文件
- 在 main 函数中添加配置文件路径和生成示例配置的命令行参数
- 实现配置文件加载逻辑,替代命令行参数
- 优化命令行参数默认值,如 NATS 服务器地址
This commit is contained in:
kingecg 2025-06-11 00:14:52 +08:00
parent 9682c51336
commit 11149c0c94
2 changed files with 44 additions and 1 deletions

View File

@ -32,3 +32,22 @@ func LoadConfig(path string) (*Config, error) {
return &config, nil
}
func GenerateSampleConfig(path string) error {
config := Config{
MetricsAddr: ":8082",
NATSURL: "nats://localhost:4222",
PersistenceDir: "./data",
PersistenceType: "memory",
RestAddr: ":8080",
SyncEvery: 1000,
WsAddr: ":8081",
}
// 序列化yaml到path
file, err := os.Create(path)
if err != nil {
return err
}
defer file.Close()
return yaml.NewEncoder(file).Encode(config)
}

View File

@ -21,14 +21,38 @@ var (
restAddr = flag.String("rest-addr", ":8080", "REST API服务地址")
wsAddr = flag.String("ws-addr", ":8081", "WebSocket服务地址")
metricsAddr = flag.String("metrics-addr", ":8082", "指标服务地址")
natsURL = flag.String("nats-url", "nats://localhost:4222", "NATS服务器地址")
natsURL = flag.String("nats-url", "", "NATS服务器地址")
persistenceType = flag.String("persistence", "none", "持久化类型 (none, wal)")
persistenceDir = flag.String("persistence-dir", "./data", "持久化目录")
syncEvery = flag.Int("sync-every", 100, "每写入多少条数据同步一次")
configPath = flag.String("config", "config.yaml", "配置文件路径")
genSampleConfig = flag.Bool("gen-sample-config", false, "生成示例配置文件")
)
func main() {
if *genSampleConfig {
err := GenerateSampleConfig("./config.yaml.sample")
if err != nil {
log.Fatalf("生成示例配置文件失败: %v", err)
}
log.Println("示例配置文件已生成")
return
}
flag.Parse()
if *configPath != "" {
config, err := LoadConfig(*configPath)
if err != nil {
log.Fatalf("Failed to load config: %v", err)
}
restAddr = &config.RestAddr
wsAddr = &config.WsAddr
metricsAddr = &config.MetricsAddr
natsURL = &config.NATSURL
persistenceType = &config.PersistenceType
persistenceDir = &config.PersistenceDir
syncEvery = &config.SyncEvery
}
// 创建存储引擎
engine := storage.NewMemoryEngine()