package main import ( "net/http" "github.com/gin-gonic/gin" "github.com/infraboard/mcube/v2/ioc" "github.com/infraboard/mcube/v2/ioc/config/datasource" ioc_gin "github.com/infraboard/mcube/v2/ioc/config/gin" "github.com/infraboard/mcube/v2/ioc/server/cmd" "gorm.io/gorm" // 开启Health健康检查 _ "github.com/infraboard/mcube/v2/ioc/apps/health/gin" // 开启Metric _ "github.com/infraboard/mcube/v2/ioc/apps/metric/gin" // 日志 "github.com/infraboard/mcube/v2/ioc/config/log" ) func main() { // 注册HTTP接口类 ioc.Api().Registry(&ApiHandler{}) // 开启配置文件读取配置 // server 是一个特殊的对象,在ioc 提供的 服务器 // server.DefaultConfig.ConfigFile.Enabled = true // server.DefaultConfig.ConfigFile.Paths = []string{"etc/application.toml"} // // 启动应用 // err := server.Run(context.Background()) // if err != nil { // panic(err) // } // 基于CLI启动 cmd.Start() // 为程序添加子命令 // cmd.Root.AddCommand() } type ApiHandler struct { // 继承自Ioc对象 ioc.ObjectImpl // mysql db依赖 db *gorm.DB } // 覆写对象的名称, 该名称名称会体现在API的路径前缀里面 // 比如: /simple/api/v1/module_a/db_stats // 其中/simple/api/v1/module_a 就是对象API前缀, 命名规则如下: // // /// func (h *ApiHandler) Name() string { return "module_a" } // 初始化db属性, 从ioc的配置区域获取共用工具 gorm db对象 func (h *ApiHandler) Init() error { h.db = datasource.DB() // 进行业务暴露, router 通过ioc router := ioc_gin.RootRouter() router.GET("/db_stats", h.GetDbStats) return nil } // 业务功能 func (h *ApiHandler) GetDbStats(ctx *gin.Context) { // 使用L() 获取日志对象, 进行日志记录 log.Sub("api handler").Info().Msg("GetDbStats") db, _ := h.db.DB() ctx.JSON(http.StatusOK, gin.H{ "data": db.Stats(), }) }