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/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
|
||||
|
||||
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/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=
|
||||
|
||||
30
main.go
30
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")
|
||||
|
||||
28
src/app.go
28
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)
|
||||
// 认证模块
|
||||
|
||||
Reference in New Issue
Block a user