精简项目:只保留 docker_logs + health + info 三个工具
- 移除 database/middleware 等复杂模块,先聚焦核心功能 - docker_logs:封装 docker logs --tail N <container> - 修复 go.mod 版本为 1.24 匹配 Docker 构建镜像 - Dockerfile 改用 alpine + docker-cli,避免 scratch 无 shell 问题 - docker-compose.yml 简化为单服务定义 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
+8
-62
@@ -1,81 +1,27 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"flag"
|
||||
"fmt"
|
||||
"log/slog"
|
||||
"os"
|
||||
|
||||
"ops-mcp/config"
|
||||
"ops-mcp/internal/server"
|
||||
"ops-mcp/internal/tool"
|
||||
|
||||
"ops-mcp/config"
|
||||
)
|
||||
|
||||
func main() {
|
||||
env := flag.String("env", "dev", "运行环境:dev | staging | prod")
|
||||
flag.Parse()
|
||||
|
||||
// 结构化日志
|
||||
slog.SetDefault(slog.New(slog.NewTextHandler(os.Stderr, &slog.HandlerOptions{
|
||||
Level: slog.LevelInfo,
|
||||
})))
|
||||
|
||||
if err := run(*env); err != nil {
|
||||
cfg, err := config.Load()
|
||||
if err != nil {
|
||||
slog.Warn("config load failed, using defaults", "err", err)
|
||||
cfg = &config.Config{Transport: "stdio"}
|
||||
}
|
||||
|
||||
if err := server.Run(cfg.Transport, tool.NewDockerTool()); err != nil {
|
||||
slog.Error("fatal", "err", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
}
|
||||
|
||||
func run(env string) error {
|
||||
// 1. 加载配置
|
||||
cfg, err := config.Load(env)
|
||||
if err != nil {
|
||||
fmt.Fprintf(os.Stderr, "Warning: could not load config file, using env vars only: %v\n", err)
|
||||
cfg = &config.Config{
|
||||
Env: env,
|
||||
Server: config.ServerConfig{Transport: "stdio", Addr: ":8080"},
|
||||
}
|
||||
}
|
||||
|
||||
slog.Info("config loaded", "env", cfg.Env, "transport", cfg.Server.Transport)
|
||||
|
||||
// 2. 收集工具
|
||||
var tools []tool.Tool
|
||||
|
||||
// database 工具
|
||||
if len(cfg.Databases) > 0 {
|
||||
dbConfigs := make([]tool.DatabaseConf, 0, len(cfg.Databases))
|
||||
for alias, db := range cfg.Databases {
|
||||
dbConfigs = append(dbConfigs, tool.DatabaseConf{
|
||||
Alias: alias,
|
||||
Driver: db.Driver,
|
||||
DSN: db.DSN,
|
||||
})
|
||||
}
|
||||
tools = append(tools, tool.NewDatabaseTool(dbConfigs))
|
||||
}
|
||||
|
||||
// docker 工具
|
||||
if cfg.Docker.Enabled {
|
||||
dockerTool, err := tool.NewDockerTool(tool.DockerOpts{
|
||||
ContainerPattern: cfg.Docker.ContainerPattern,
|
||||
MaxLogBytes: cfg.Docker.MaxLogBytes,
|
||||
MaxLogLines: cfg.Docker.MaxLogLines,
|
||||
MaxLogSince: cfg.Docker.MaxLogSince,
|
||||
})
|
||||
if err != nil {
|
||||
slog.Error("create docker tool", "err", err)
|
||||
} else {
|
||||
tools = append(tools, dockerTool)
|
||||
}
|
||||
}
|
||||
|
||||
// 3. 映射 server 配置
|
||||
srvCfg := &server.Config{}
|
||||
srvCfg.Server.Transport = cfg.Server.Transport
|
||||
srvCfg.Server.Addr = cfg.Server.Addr
|
||||
|
||||
// 4. 启动
|
||||
return server.Run(srvCfg, tools...)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user