Files

75 lines
1.5 KiB
Go
Raw Permalink Normal View History

2021-09-28 11:47:19 +08:00
package router
import (
"SciencesServer/config"
"SciencesServer/router/rate"
2022-01-25 11:45:53 +08:00
"github.com/prometheus/client_golang/prometheus/promhttp"
2021-09-28 11:47:19 +08:00
"io"
"net/http"
"os"
"time"
2022-01-25 11:45:53 +08:00
"github.com/chenjiandongx/ginprom"
2021-09-28 11:47:19 +08:00
"github.com/gin-gonic/gin"
)
type Router struct {
*Option
}
type (
Option struct {
Mode string
IsCors bool
*RateLimitConfig
}
2021-10-27 13:27:01 +08:00
// RateLimitConfig 限流配置
2021-09-28 11:47:19 +08:00
RateLimitConfig struct {
IsRate bool `json:"is_rate"`
Limit int `json:"limit"`
Capacity int `json:"capacity"`
}
)
func (this *Router) Init() *gin.Engine {
gin.SetMode(this.Mode)
app := gin.New()
if this.IsCors {
app.Use(Cors())
}
2022-01-25 11:45:53 +08:00
app.NoRoute(NoRouteHandler())
2021-09-28 11:47:19 +08:00
app.NoMethod(NoMethodHandler())
2022-01-25 11:45:53 +08:00
app.Use(ginprom.PromMiddleware(nil))
2021-09-28 11:47:19 +08:00
app.Use(LoggerHandle("log/gin.log", 3))
app.Use(TimeoutHandle(time.Second * 30))
//app.Use(RecoveryHandler())
2022-01-25 11:45:53 +08:00
app.GET("/metrics", ginprom.PromHandler(promhttp.Handler()))
2021-09-28 11:47:19 +08:00
if this.RateLimitConfig != nil {
if this.RateLimitConfig.IsRate {
rate.NewIPRateLimiter()(this.RateLimitConfig.Limit, this.RateLimitConfig.Capacity)
app.Use(rate.RequestIPRateLimiter()(this.RateLimitConfig.Limit, this.RateLimitConfig.Capacity))
}
}
if config.IsDebug() {
gin.DefaultWriter = io.MultiWriter(os.Stdout)
app.StaticFS("/api-docs", http.Dir("./doc"))
}
app.StaticFS("/upload", http.Dir("./upload"))
// 注册路由
2021-10-15 11:50:57 +08:00
registerAPI(app)
registerAdminAPI(app)
2021-10-15 11:50:57 +08:00
registerEnterpriseAPI(app)
2021-09-28 11:47:19 +08:00
app.MaxMultipartMemory = 4 << 20
return app
}
func NewRouter(option *Option) *Router {
return &Router{option}
}