feat: 更新依赖并重构应用引擎初始化逻辑, 支持Grafana
This commit is contained in:
4
go.mod
4
go.mod
@@ -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
8
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/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
30
main.go
@@ -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")
|
||||||
|
|||||||
28
src/app.go
28
src/app.go
@@ -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)
|
||||||
// 认证模块
|
// 认证模块
|
||||||
|
|||||||
Reference in New Issue
Block a user