goaidb/main.go

87 lines
1.9 KiB
Go
Raw Normal View History

2025-06-05 17:59:27 +08:00
package main
import (
"fmt"
"net"
2025-06-05 21:05:36 +08:00
"os"
"os/signal"
"path/filepath"
"syscall"
2025-06-06 20:47:59 +08:00
"git.pyer.club/kingecg/goaidb/config"
"git.pyer.club/kingecg/goaidb/log"
"git.pyer.club/kingecg/goaidb/network"
"git.pyer.club/kingecg/goaidb/storage"
2025-06-05 17:59:27 +08:00
)
2025-06-05 21:05:36 +08:00
func getExeDir() string {
exePath, err := os.Executable()
if err != nil {
panic(err)
}
exeDir := filepath.Dir(exePath)
return exeDir
}
2025-06-05 17:59:27 +08:00
// 主程序入口
func main() {
2025-06-05 21:05:36 +08:00
// 加载配置文件(优先级:命令行参数 > 环境变量 > 默认配置)
configPath := getExeDir() + "/config.yaml"
if len(os.Args) > 1 {
configPath = os.Args[1]
} else if envPath := os.Getenv("GOAIDB_CONFIG"); envPath != "" {
configPath = envPath
}
// 解析配置文件
cfg, err := config.ParseConfig(configPath)
if err != nil {
2025-06-06 20:47:59 +08:00
// fmt.Fprintf(os.Stderr, "配置加载失败: %v\n", err)
log.Error("配置加载失败", err)
2025-06-05 21:05:36 +08:00
os.Exit(1)
}
// 设置全局配置
config.SetGlobalConfig(cfg)
// 启动配置文件监视
err = config.WatchConfig(configPath)
if err != nil {
fmt.Fprintf(os.Stderr, "配置监控启动失败: %v\n", err)
2025-06-06 20:47:59 +08:00
log.Error("配置监控启动失败", err)
2025-06-05 21:05:36 +08:00
os.Exit(1)
}
// 设置信号处理(优雅关闭)
sigChan := make(chan os.Signal, 1)
signal.Notify(sigChan, syscall.SIGINT, syscall.SIGTERM)
go func() {
<-sigChan
2025-06-06 20:47:59 +08:00
log.Info("正在关闭...")
2025-06-05 21:05:36 +08:00
config.CloseWatcher()
os.Exit(0)
}()
2025-06-05 17:59:27 +08:00
// 初始化存储引擎(默认使用内存引擎)
storageEngine, err := storage.NewMemoryEngine()
if err != nil {
2025-06-06 20:47:59 +08:00
log.Error("Failed to initialize storage engine: %v\n", err)
2025-06-05 17:59:27 +08:00
return
}
// 创建网络服务器
server := network.NewServer(storageEngine)
2025-06-05 21:05:36 +08:00
conf := config.GetConfig()
2025-06-05 17:59:27 +08:00
// 启动服务
2025-06-05 21:05:36 +08:00
listener, err := net.Listen("tcp", conf.Server.Host+":"+fmt.Sprintf("%d", conf.Server.Port))
2025-06-05 17:59:27 +08:00
if err != nil {
2025-06-06 20:47:59 +08:00
log.Error("Failed to start server: %v\n", err)
2025-06-05 17:59:27 +08:00
return
}
2025-06-05 21:05:36 +08:00
2025-06-06 20:47:59 +08:00
log.Info("GoAIDB started on port", conf.Server.Port)
2025-06-05 17:59:27 +08:00
server.Serve(listener)
2025-06-05 21:05:36 +08:00
}