feat: 更新依赖并重构应用引擎初始化逻辑, 支持Grafana

This commit is contained in:
TsMask
2025-04-19 11:57:27 +08:00
parent 6bed1fda33
commit c11676bf6f
4 changed files with 35 additions and 35 deletions

4
go.mod
View File

@@ -8,6 +8,7 @@ require (
github.com/glebarez/sqlite v1.11.0 github.com/glebarez/sqlite v1.11.0
github.com/go-resty/resty/v2 v2.16.5 github.com/go-resty/resty/v2 v2.16.5
github.com/go-sql-driver/mysql v1.9.2 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/golang-jwt/jwt/v5 v5.2.2
github.com/gopacket/gopacket v1.3.1 github.com/gopacket/gopacket v1.3.1
github.com/gorilla/mux v1.8.1 github.com/gorilla/mux v1.8.1
@@ -19,6 +20,7 @@ require (
github.com/mojocn/base64Captcha v1.3.8 github.com/mojocn/base64Captcha v1.3.8
github.com/mssola/useragent v1.0.0 github.com/mssola/useragent v1.0.0
github.com/patrickmn/go-cache v2.1.0+incompatible 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/pkg/sftp v1.13.9
github.com/prometheus-community/pro-bing v0.7.0 github.com/prometheus-community/pro-bing v0.7.0
github.com/redis/go-redis/v9 v9.7.3 github.com/redis/go-redis/v9 v9.7.3
@@ -45,10 +47,10 @@ require (
filippo.io/edwards25519 v1.1.0 // indirect filippo.io/edwards25519 v1.1.0 // indirect
github.com/KyleBanks/depth v1.2.1 // indirect github.com/KyleBanks/depth v1.2.1 // indirect
github.com/beorn7/perks v1.0.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 v1.13.2 // indirect
github.com/bytedance/sonic/loader v0.2.4 // indirect github.com/bytedance/sonic/loader v0.2.4 // indirect
github.com/cespare/xxhash/v2 v2.3.0 // 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/cloudwego/base64x v0.1.5 // indirect
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect
github.com/dustin/go-humanize v1.0.1 // indirect github.com/dustin/go-humanize v1.0.1 // indirect

8
go.sum
View File

@@ -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/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 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= 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 h1:Ny8MWAHyOepLGlLKYmXG4IEkioBysk6GpaRTLC8zwWs=
github.com/bsm/ginkgo/v2 v2.12.0/go.mod h1:SwYbGRRDovPVboqFv0tPTcG1sN61LM1Z4ARdbAV9g4c= github.com/bsm/ginkgo/v2 v2.12.0/go.mod h1:SwYbGRRDovPVboqFv0tPTcG1sN61LM1Z4ARdbAV9g4c=
github.com/bsm/gomega v1.27.10 h1:yeMWxP2pV2fG3FgAODIY8EiRE3dy0aeFYt4l7wh6yKA= 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/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 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= 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 h1:XPciSp1xaq2VCSt6lF0phncD4koWyULpl5bUxbfCyP4=
github.com/cloudwego/base64x v0.1.5/go.mod h1:0zlkT4Wn5C6NdauXdJRhSKRlJvmclQ1hhJgA0rcu/8w= 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= 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/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 h1:Fq85nIqj+gXn/S5ahsiTlK3TmC85qgirsdTP/+DeaC4=
github.com/goccy/go-json v0.10.5/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M= 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 h1:Rl4B7itRWVtYIHFrSNd7vhTiz9UpLdi6gZhZ3wEeDy8=
github.com/golang-jwt/jwt/v5 v5.2.2/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk= 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= 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/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 h1:mye9XuhQ6gvn5h28+VilKrrPoQVanw5PMw/TB0t5Ec4=
github.com/pelletier/go-toml/v2 v2.2.4/go.mod h1:2gIqNv+qfxSVS7cM2xJQKtLSTLUE9V8t9Stt+h56mCY= 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 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/sftp v1.13.9 h1:4NGkvGudBL7GteO3m6qnaQ4pC0Kvf0onSVc9gR3EWBw= github.com/pkg/sftp v1.13.9 h1:4NGkvGudBL7GteO3m6qnaQ4pC0Kvf0onSVc9gR3EWBw=

30
main.go
View File

@@ -7,8 +7,9 @@ import (
_ "net/http/pprof" _ "net/http/pprof"
"github.com/chenjiandongx/ginprom"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"github.com/godoes/ginprom"
"github.com/penglongli/gin-metrics/ginmetrics"
"github.com/prometheus/client_golang/prometheus/promhttp" "github.com/prometheus/client_golang/prometheus/promhttp"
swaggerFiles "github.com/swaggo/files" swaggerFiles "github.com/swaggo/files"
ginSwagger "github.com/swaggo/gin-swagger" ginSwagger "github.com/swaggo/gin-swagger"
@@ -23,6 +24,7 @@ import (
"be.ems/src/framework/config" "be.ems/src/framework/config"
"be.ems/src/framework/logger" "be.ems/src/framework/logger"
"be.ems/src/framework/middleware" "be.ems/src/framework/middleware"
"be.ems/src/framework/utils/machine"
"be.ems/src/framework/utils/parse" "be.ems/src/framework/utils/parse"
_ "be.ems/swagger_docs" _ "be.ems/swagger_docs"
) )
@@ -144,15 +146,20 @@ func main() {
src.ConfigurationInit() src.ConfigurationInit()
app := src.AppEngine() app := src.AppEngine()
src.DefeatConfig(app)
loadGlobalPre(app)
src.ModulesRoute(app)
loadFeatures(app) loadFeatures(app)
loadDev(app)
loadServer(app) loadServer(app)
loadWebServer() loadServerWeb()
// 首次安装启动记录
machine.Launch()
wg.Wait() wg.Wait()
} }
@@ -183,8 +190,8 @@ func loadFeatures(app *gin.Engine) {
features.InitServiceEngine(app) features.InitServiceEngine(app)
} }
// loadDev 开发环境调试 // loadGlobalPre 全局预加载
func loadDev(app *gin.Engine) { func loadGlobalPre(app *gin.Engine) {
// Swagger 接口文档 // Swagger 接口文档
if config.Env() == "local" { if config.Env() == "local" {
app.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler)) app.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))
@@ -193,11 +200,16 @@ func loadDev(app *gin.Engine) {
//性能分析监控 Prometheus //性能分析监控 Prometheus
pprofEnabled := config.Get("pprof.enabled") pprofEnabled := config.Get("pprof.enabled")
if parse.Boolean(pprofEnabled) { if parse.Boolean(pprofEnabled) {
// Grafana Monitor 1
m := ginmetrics.GetMonitor()
m.UseWithoutExposingEndpoint(app)
// Grafana Monitor 2
app.Use(ginprom.PromMiddleware(nil)) app.Use(ginprom.PromMiddleware(nil))
app.GET("/metrics", ginprom.PromHandler(promhttp.Handler())) app.GET("/metrics", ginprom.PromHandler(promhttp.Handler()))
pprofAddr := config.Get("pprof.addr").(string)
wg.Add(1) wg.Add(1)
// 启用pprof HTTP服务 // 启用pprof HTTP服务
pprofAddr := config.Get("pprof.addr").(string)
go func(addr string) { go func(addr string) {
defer wg.Done() defer wg.Done()
fmt.Println(http.ListenAndServe(addr, nil)) fmt.Println(http.ListenAndServe(addr, nil))
@@ -260,8 +272,8 @@ func loadServer(app *gin.Engine) {
} }
} }
// loadWebServer 前端静态资源服务 // loadServerWeb 多个HTTP服务启动-前端静态资源
func loadWebServer() { func loadServerWeb() {
webEnabled := config.Get("webServer.enabled") webEnabled := config.Get("webServer.enabled")
if webEnabled == nil { if webEnabled == nil {
logger.Errorf("webServer config not found") logger.Errorf("webServer config not found")

View File

@@ -7,7 +7,7 @@ import (
"be.ems/src/framework/errorcatch" "be.ems/src/framework/errorcatch"
"be.ems/src/framework/middleware" "be.ems/src/framework/middleware"
"be.ems/src/framework/middleware/security" "be.ems/src/framework/middleware/security"
"be.ems/src/framework/utils/machine"
"be.ems/src/modules/auth" "be.ems/src/modules/auth"
"be.ems/src/modules/chart" "be.ems/src/modules/chart"
"be.ems/src/modules/common" "be.ems/src/modules/common"
@@ -23,26 +23,8 @@ import (
"github.com/gin-gonic/gin" "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 var app *gin.Engine
// 禁止控制台日志输出的颜色 // 禁止控制台日志输出的颜色
@@ -56,12 +38,12 @@ func initAppEngine() *gin.Engine {
} else { } else {
app = gin.Default() app = gin.Default()
} }
app.ForwardedByClientIP = true
return app return app
} }
// 初始全局默认 // 初始全局默认
func initDefeat(app *gin.Engine) { func DefeatConfig(app *gin.Engine) {
// 全局中间件 // 全局中间件
if config.Env() == "local" { if config.Env() == "local" {
app.Use(middleware.Report()) 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) system.Setup(app)
// 认证模块 // 认证模块