diff --git a/go.mod b/go.mod index 7abfaf4f..79e43e6e 100644 --- a/go.mod +++ b/go.mod @@ -8,6 +8,7 @@ require ( github.com/glebarez/sqlite v1.11.0 github.com/go-resty/resty/v2 v2.16.5 github.com/go-sql-driver/mysql v1.9.2 + github.com/godoes/ginprom v0.3.7 github.com/golang-jwt/jwt/v5 v5.2.2 github.com/gopacket/gopacket v1.3.1 github.com/gorilla/mux v1.8.1 @@ -19,6 +20,7 @@ require ( github.com/mojocn/base64Captcha v1.3.8 github.com/mssola/useragent v1.0.0 github.com/patrickmn/go-cache v2.1.0+incompatible + github.com/penglongli/gin-metrics v0.1.13 github.com/pkg/sftp v1.13.9 github.com/prometheus-community/pro-bing v0.7.0 github.com/redis/go-redis/v9 v9.7.3 @@ -45,10 +47,10 @@ require ( filippo.io/edwards25519 v1.1.0 // indirect github.com/KyleBanks/depth v1.2.1 // indirect github.com/beorn7/perks v1.0.1 // indirect + github.com/bits-and-blooms/bitset v1.2.0 // indirect github.com/bytedance/sonic v1.13.2 // indirect github.com/bytedance/sonic/loader v0.2.4 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect - github.com/chenjiandongx/ginprom v0.0.0-20210617023641-6c809602c38a github.com/cloudwego/base64x v0.1.5 // indirect github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect github.com/dustin/go-humanize v1.0.1 // indirect diff --git a/go.sum b/go.sum index a79458ba..789d04eb 100644 --- a/go.sum +++ b/go.sum @@ -7,6 +7,8 @@ github.com/KyleBanks/depth v1.2.1 h1:5h8fQADFrWtarTdtDudMmGsC7GPbOAu6RVB3ffsVFHc github.com/KyleBanks/depth v1.2.1/go.mod h1:jzSb9d0L43HxTQfT+oSA1EEp2q+ne2uh6XgeJcm8brE= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/bits-and-blooms/bitset v1.2.0 h1:Kn4yilvwNtMACtf1eYDlG8H77R07mZSPbMjLyS07ChA= +github.com/bits-and-blooms/bitset v1.2.0/go.mod h1:gIdJ4wp64HaoK2YrL1Q5/N7Y16edYb8uY+O0FJTyyDA= github.com/bsm/ginkgo/v2 v2.12.0 h1:Ny8MWAHyOepLGlLKYmXG4IEkioBysk6GpaRTLC8zwWs= github.com/bsm/ginkgo/v2 v2.12.0/go.mod h1:SwYbGRRDovPVboqFv0tPTcG1sN61LM1Z4ARdbAV9g4c= github.com/bsm/gomega v1.27.10 h1:yeMWxP2pV2fG3FgAODIY8EiRE3dy0aeFYt4l7wh6yKA= @@ -18,8 +20,6 @@ github.com/bytedance/sonic/loader v0.2.4 h1:ZWCw4stuXUsn1/+zQDqeE7JKP+QO47tz7QCN github.com/bytedance/sonic/loader v0.2.4/go.mod h1:N8A3vUdtUebEY2/VQC0MyhYeKUFosQU6FxH2JmUe6VI= github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/chenjiandongx/ginprom v0.0.0-20210617023641-6c809602c38a h1:yTfhjWYoPomJkHVArtNHpo36FuOa6Kc2ZjTLvyyQ5Lg= -github.com/chenjiandongx/ginprom v0.0.0-20210617023641-6c809602c38a/go.mod h1:lINNCb1ZH3c0uL/9ApaQ8muR4QILsi0STj8Ojt8ZmwU= github.com/cloudwego/base64x v0.1.5 h1:XPciSp1xaq2VCSt6lF0phncD4koWyULpl5bUxbfCyP4= github.com/cloudwego/base64x v0.1.5/go.mod h1:0zlkT4Wn5C6NdauXdJRhSKRlJvmclQ1hhJgA0rcu/8w= github.com/cloudwego/iasm v0.2.0/go.mod h1:8rXZaNYT2n95jn+zTI1sDr+IgcD2GVs0nlbbQPiEFhY= @@ -84,6 +84,8 @@ github.com/go-viper/mapstructure/v2 v2.2.1 h1:ZAaOCxANMuZx5RCeg0mBdEZk7DZasvvZIx github.com/go-viper/mapstructure/v2 v2.2.1/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM= github.com/goccy/go-json v0.10.5 h1:Fq85nIqj+gXn/S5ahsiTlK3TmC85qgirsdTP/+DeaC4= github.com/goccy/go-json v0.10.5/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M= +github.com/godoes/ginprom v0.3.7 h1:HlKZhp2qS23YPpBWrP1K1+XZQFVruC6leUqkm/1ImFE= +github.com/godoes/ginprom v0.3.7/go.mod h1:U6qRPc3I1sFtgbMDrnea4sDNYcc47b5e/ZHtCW3KFtY= github.com/golang-jwt/jwt/v5 v5.2.2 h1:Rl4B7itRWVtYIHFrSNd7vhTiz9UpLdi6gZhZ3wEeDy8= github.com/golang-jwt/jwt/v5 v5.2.2/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk= github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 h1:DACJavvAHhabrF08vX0COfcOBJRhZ8lUbR+ZWIs0Y5g= @@ -205,6 +207,8 @@ github.com/patrickmn/go-cache v2.1.0+incompatible h1:HRMgzkcYKYpi3C8ajMPV8OFXaaR github.com/patrickmn/go-cache v2.1.0+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ= github.com/pelletier/go-toml/v2 v2.2.4 h1:mye9XuhQ6gvn5h28+VilKrrPoQVanw5PMw/TB0t5Ec4= github.com/pelletier/go-toml/v2 v2.2.4/go.mod h1:2gIqNv+qfxSVS7cM2xJQKtLSTLUE9V8t9Stt+h56mCY= +github.com/penglongli/gin-metrics v0.1.13 h1:a1wyrXcbUVxL5w4c2TSv+9kyQA9qM1o23h0V6SdSHgQ= +github.com/penglongli/gin-metrics v0.1.13/go.mod h1:VEmSyx/9TwUG50IsPCgjMKOUuGO74V2lmkLZ6x1Dlko= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/sftp v1.13.9 h1:4NGkvGudBL7GteO3m6qnaQ4pC0Kvf0onSVc9gR3EWBw= diff --git a/main.go b/main.go index 7d804677..d35b50d5 100644 --- a/main.go +++ b/main.go @@ -7,8 +7,9 @@ import ( _ "net/http/pprof" - "github.com/chenjiandongx/ginprom" "github.com/gin-gonic/gin" + "github.com/godoes/ginprom" + "github.com/penglongli/gin-metrics/ginmetrics" "github.com/prometheus/client_golang/prometheus/promhttp" swaggerFiles "github.com/swaggo/files" ginSwagger "github.com/swaggo/gin-swagger" @@ -23,6 +24,7 @@ import ( "be.ems/src/framework/config" "be.ems/src/framework/logger" "be.ems/src/framework/middleware" + "be.ems/src/framework/utils/machine" "be.ems/src/framework/utils/parse" _ "be.ems/swagger_docs" ) @@ -144,15 +146,20 @@ func main() { src.ConfigurationInit() app := src.AppEngine() + src.DefeatConfig(app) + + loadGlobalPre(app) + + src.ModulesRoute(app) loadFeatures(app) - loadDev(app) - loadServer(app) - loadWebServer() + loadServerWeb() + // 首次安装启动记录 + machine.Launch() wg.Wait() } @@ -183,8 +190,8 @@ func loadFeatures(app *gin.Engine) { features.InitServiceEngine(app) } -// loadDev 开发环境调试 -func loadDev(app *gin.Engine) { +// loadGlobalPre 全局预加载 +func loadGlobalPre(app *gin.Engine) { // Swagger 接口文档 if config.Env() == "local" { app.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler)) @@ -193,11 +200,16 @@ func loadDev(app *gin.Engine) { //性能分析监控 Prometheus pprofEnabled := config.Get("pprof.enabled") if parse.Boolean(pprofEnabled) { + // Grafana Monitor 1 + m := ginmetrics.GetMonitor() + m.UseWithoutExposingEndpoint(app) + // Grafana Monitor 2 app.Use(ginprom.PromMiddleware(nil)) app.GET("/metrics", ginprom.PromHandler(promhttp.Handler())) - pprofAddr := config.Get("pprof.addr").(string) + wg.Add(1) // 启用pprof HTTP服务 + pprofAddr := config.Get("pprof.addr").(string) go func(addr string) { defer wg.Done() fmt.Println(http.ListenAndServe(addr, nil)) @@ -260,8 +272,8 @@ func loadServer(app *gin.Engine) { } } -// loadWebServer 前端静态资源服务 -func loadWebServer() { +// loadServerWeb 多个HTTP服务启动-前端静态资源 +func loadServerWeb() { webEnabled := config.Get("webServer.enabled") if webEnabled == nil { logger.Errorf("webServer config not found") diff --git a/src/app.go b/src/app.go index 5c53da1f..2c905fbf 100644 --- a/src/app.go +++ b/src/app.go @@ -7,7 +7,7 @@ import ( "be.ems/src/framework/errorcatch" "be.ems/src/framework/middleware" "be.ems/src/framework/middleware/security" - "be.ems/src/framework/utils/machine" + "be.ems/src/modules/auth" "be.ems/src/modules/chart" "be.ems/src/modules/common" @@ -23,26 +23,8 @@ import ( "github.com/gin-gonic/gin" ) -// AppEngine 路由函数句柄,交给由 http.ListenAndServe(addr, router) -func AppEngine() *gin.Engine { - app := initAppEngine() - - // 初始全局默认 - initDefeat(app) - - // 初始模块路由 - initModulesRoute(app) - - // 首次安装启动记录 - machine.Launch() - - // 读取服务配置 - app.ForwardedByClientIP = true - return app -} - // 初始应用引擎 -func initAppEngine() *gin.Engine { +func AppEngine() *gin.Engine { var app *gin.Engine // 禁止控制台日志输出的颜色 @@ -56,12 +38,12 @@ func initAppEngine() *gin.Engine { } else { app = gin.Default() } - + app.ForwardedByClientIP = true return app } // 初始全局默认 -func initDefeat(app *gin.Engine) { +func DefeatConfig(app *gin.Engine) { // 全局中间件 if config.Env() == "local" { app.Use(middleware.Report()) @@ -96,7 +78,7 @@ func initDefeat(app *gin.Engine) { } // 初始模块路由 -func initModulesRoute(app *gin.Engine) { +func ModulesRoute(app *gin.Engine) { // 系统模块 system.Setup(app) // 认证模块