From 3a030f5bca48334cef0234c61dd0121863531ec7 Mon Sep 17 00:00:00 2001 From: huang <1724659546@qq.com> Date: Wed, 24 Sep 2025 18:09:29 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0pprof?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config.yml | 4 ++-- internal/app/api/api.go | 28 ++++++++++++++++++++++++++-- internal/core/application.go | 2 ++ 3 files changed, 30 insertions(+), 4 deletions(-) diff --git a/config.yml b/config.yml index 33d0652..2b428db 100644 --- a/config.yml +++ b/config.yml @@ -8,7 +8,7 @@ app: # HTTP 服务配置 server: port: 8086 - mode: "debug" # Gin 运行模式: "debug", "release", "test" + mode: "release" # Gin 运行模式: "debug", "release", "test" # 日志配置 log: @@ -29,7 +29,7 @@ database: password: "pig-farm-controller" dbname: "pig-farm-controller" sslmode: "disable" # 在生产环境中建议使用 "require" - is_timescaledb: false + is_timescaledb: true max_open_conns: 25 # 最大开放连接数 max_idle_conns: 10 # 最大空闲连接数 conn_max_lifetime: 600 # 连接最大生命周期(秒) diff --git a/internal/app/api/api.go b/internal/app/api/api.go index 56f1dc8..6d2dbf9 100644 --- a/internal/app/api/api.go +++ b/internal/app/api/api.go @@ -12,6 +12,7 @@ import ( "context" "fmt" "net/http" + "net/http/pprof" "time" "git.huangwc.com/pig/pig-farm-controller/internal/app/controller/device" @@ -99,6 +100,7 @@ func (a *API) setupRoutes() { userGroup.POST("", a.userController.CreateUser) // 注册创建用户接口 (POST /api/v1/users) userGroup.POST("/login", a.userController.Login) // 注册用户登录接口 (POST /api/v1/users/login) } + a.logger.Info("用户相关接口注册成功") // 设备相关路由组 deviceGroup := v1.Group("/devices") @@ -109,6 +111,7 @@ func (a *API) setupRoutes() { deviceGroup.PUT("/:id", a.deviceController.UpdateDevice) deviceGroup.DELETE("/:id", a.deviceController.DeleteDevice) } + a.logger.Info("设备相关接口注册成功") // 计划相关路由组 planGroup := v1.Group("/plans") @@ -121,17 +124,38 @@ func (a *API) setupRoutes() { planGroup.POST("/:id/start", a.planController.StartPlan) planGroup.POST("/:id/stop", a.planController.StopPlan) } + a.logger.Info("计划相关接口注册成功") } + // 注册 pprof 路由 + pprofGroup := a.engine.Group("/debug/pprof") + { + pprofGroup.GET("/", gin.WrapF(pprof.Index)) + pprofGroup.GET("/cmdline", gin.WrapF(pprof.Cmdline)) + pprofGroup.GET("/profile", gin.WrapF(pprof.Profile)) + pprofGroup.POST("/symbol", gin.WrapF(pprof.Symbol)) + pprofGroup.GET("/symbol", gin.WrapF(pprof.Symbol)) + pprofGroup.GET("/trace", gin.WrapF(pprof.Trace)) + pprofGroup.GET("/allocs", gin.WrapH(pprof.Handler("allocs"))) + pprofGroup.GET("/block", gin.WrapH(pprof.Handler("block"))) + pprofGroup.GET("/goroutine", gin.WrapH(pprof.Handler("goroutine"))) + pprofGroup.GET("/heap", gin.WrapH(pprof.Handler("heap"))) + pprofGroup.GET("/mutex", gin.WrapH(pprof.Handler("mutex"))) + pprofGroup.GET("/threadcreate", gin.WrapH(pprof.Handler("threadcreate"))) + } + a.logger.Info("pprof 接口注册成功") + // 上行事件监听路由 a.engine.POST("/upstream", func(c *gin.Context) { h := a.listenHandler.Handler() h.ServeHTTP(c.Writer, c.Request) }) + a.logger.Info("上行事件监听接口注册成功") - // 添加 Swagger UI 路由 + // 添加 Swagger UI 路由, Swagger UI可在 /swagger/index.html 上找到 a.engine.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler)) - a.logger.Info("Swagger UI is available at /swagger/index.html") + a.logger.Info("Swagger UI 接口注册成功") + } // Start 启动 HTTP 服务器 diff --git a/internal/core/application.go b/internal/core/application.go index e8815a7..a446e11 100644 --- a/internal/core/application.go +++ b/internal/core/application.go @@ -258,5 +258,7 @@ func initStorage(cfg config.DatabaseConfig, logger *logs.Logger) (database.Stora if err := storage.Migrate(models.GetAllModels()...); err != nil { return nil, fmt.Errorf("数据库迁移失败: %w", err) } + + logger.Info("数据库初始化完成。") return storage, nil }