Compare commits

..

No commits in common. "689d31c2462e2d44ad871b8d2a47ca00ed433817" and "252699cb777be71a6c8db9f6a49df9f095f2c6fe" have entirely different histories.

4 changed files with 21 additions and 19 deletions

View File

@ -9,11 +9,7 @@ RUN CGO_ENABLED=0 go build -ldflags="-s -w" -o modelrt main.go
FROM alpine:latest FROM alpine:latest
WORKDIR /app WORKDIR /app
ARG USER_ID=1000
RUN adduser -D -u ${USER_ID} modelrt
COPY --from=builder /app/modelrt ./modelrt COPY --from=builder /app/modelrt ./modelrt
COPY configs/config.example.yaml ./configs/config.example.yaml COPY configs/config.example.yaml ./configs/config.example.yaml
RUN chown -R modelrt:modelrt /app
RUN chmod +x /app/modelrt RUN chmod +x /app/modelrt
USER modelrt CMD ["/app/modelrt"]
CMD ["/app/modelrt", "-modelRT_config_dir=/app/configs"]

20
main.go
View File

@ -12,6 +12,7 @@ import (
"os/signal" "os/signal"
"path/filepath" "path/filepath"
"syscall" "syscall"
"time"
"modelRT/alert" "modelRT/alert"
"modelRT/config" "modelRT/config"
@ -21,6 +22,7 @@ import (
_ "modelRT/docs" _ "modelRT/docs"
"modelRT/handler" "modelRT/handler"
"modelRT/logger" "modelRT/logger"
"modelRT/middleware"
"modelRT/model" "modelRT/model"
"modelRT/pool" "modelRT/pool"
realtimedata "modelRT/real-time-data" realtimedata "modelRT/real-time-data"
@ -34,6 +36,12 @@ import (
"gorm.io/gorm" "gorm.io/gorm"
) )
var limiter *middleware.Limiter
func init() {
limiter = middleware.NewLimiter(10, 1*time.Minute) // 设置限流器允许每分钟最多请求10次
}
var ( var (
modelRTConfigDir = flag.String("modelRT_config_dir", "./configs", "config file dir of model runtime service") modelRTConfigDir = flag.String("modelRT_config_dir", "./configs", "config file dir of model runtime service")
modelRTConfigName = flag.String("modelRT_config_name", "config", "config file name of model runtime service") modelRTConfigName = flag.String("modelRT_config_name", "config", "config file name of model runtime service")
@ -72,16 +80,14 @@ func main() {
log.Println("configuration file not found,checking for example file") log.Println("configuration file not found,checking for example file")
exampleConfigPath := filepath.Join(*modelRTConfigDir, *modelRTConfigName+".example."+*modelRTConfigType) exampleConfigPath := filepath.Join(*modelRTConfigDir, *modelRTConfigName+".example."+*modelRTConfigType)
configDir := filepath.Dir(configPath)
if err := os.MkdirAll(configDir, 0o755); err != nil {
panic(fmt.Errorf("failed to create config directory %s:%w", configDir, err))
}
if _, err := os.Stat(exampleConfigPath); err == nil { if _, err := os.Stat(exampleConfigPath); err == nil {
if err := util.CopyFile(exampleConfigPath, configPath); err != nil { if err := util.CopyFile(exampleConfigPath, configPath); err != nil {
panic(fmt.Errorf("failed to copy example config file:%w", err)) panicErr := fmt.Errorf("failed to copy example config file:%w", err)
panic(panicErr)
} }
} else { } else {
panic(errors.New("no config file and no config example file found")) panicErr := errors.New("no config file and no config example file found")
panic(panicErr)
} }
} }
@ -185,7 +191,7 @@ func main() {
engine.GET("/rt/datas/query", handler.QueryRealTimeDataHandler) engine.GET("/rt/datas/query", handler.QueryRealTimeDataHandler)
// dashborad api // dashborad api
dashboard := engine.Group("/dashboard") dashboard := engine.Group("/dashboard", limiter.Middleware)
{ {
dashboard.GET("/load", nil) dashboard.GET("/load", nil)
dashboard.GET("/query", nil) dashboard.GET("/query", nil)

View File

@ -3,14 +3,15 @@ package router
import ( import (
"modelRT/handler" "modelRT/handler"
"modelRT/middleware"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
) )
// registerMeasurementRoutes define func of register measurement routes // registerMeasurementRoutes define func of register measurement routes
func registerMeasurementRoutes(rg *gin.RouterGroup, middlewares ...gin.HandlerFunc) { func registerMeasurementRoutes(rg *gin.RouterGroup, clientToken string) {
g := rg.Group("/measurement/") g := rg.Group("/measurement/")
g.Use(middlewares...) g.Use(middleware.SetTokenMiddleware(clientToken))
g.GET("load", handler.MeasurementGetHandler) g.GET("load", handler.MeasurementGetHandler)
g.GET("recommend", handler.MeasurementRecommendHandler) g.GET("recommend", handler.MeasurementRecommendHandler)
} }

View File

@ -9,21 +9,20 @@ import (
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
) )
var measurementLimiter *middleware.Limiter var limiter *middleware.Limiter
func init() { func init() {
// set a rate limiter to allow a maximum of 2 requests per second for measurement group api limiter = middleware.NewLimiter(10, 1*time.Minute) // 设置限流器允许每分钟最多请求10次
measurementLimiter = middleware.NewLimiter(2, 1*time.Second)
} }
// RegisterRoutes define func of register all routes // RegisterRoutes define func of register all routes
func RegisterRoutes(engine *gin.Engine, clientToken string) { func RegisterRoutes(engine *gin.Engine, clientToken string) {
// use global middlewares // use global middlewares
engine.Use(middleware.StartTrace()) engine.Use(middleware.StartTrace(), limiter.Middleware)
routeGroup := engine.Group("") routeGroup := engine.Group("")
registerDiagramRoutes(routeGroup) registerDiagramRoutes(routeGroup)
registerAttrRoutes(routeGroup) registerAttrRoutes(routeGroup)
registerMeasurementRoutes(routeGroup, middleware.SetTokenMiddleware(clientToken), measurementLimiter.Middleware) registerMeasurementRoutes(routeGroup, clientToken)
registerDataRoutes(routeGroup) registerDataRoutes(routeGroup)
registerMonitorRoutes(routeGroup) registerMonitorRoutes(routeGroup)
} }