modelRT/main.go

96 lines
2.4 KiB
Go
Raw Permalink Normal View History

// entry function
package main
import (
"context"
"flag"
"time"
"modelRT/config"
"modelRT/database"
"modelRT/handler"
"modelRT/log"
"modelRT/middleware"
"modelRT/model"
"github.com/gin-gonic/gin"
"github.com/panjf2000/ants/v2"
"go.uber.org/zap"
"gorm.io/gorm"
)
var limiter *middleware.Limiter
func init() {
limiter = middleware.NewLimiter(10, 1*time.Minute) // 设置限流器允许每分钟最多请求10次
}
var (
modelRTConfigDir = flag.String("modelRT_config_dir", "./config", "config file dir of model runtime service")
modelRTConfigName = flag.String("modelRT_config_name", "config", "config file name of model runtime service")
modelRTConfigType = flag.String("modelRT_config_type", "yaml", "config file type of model runtime service")
)
var (
modelRTConfig config.ModelRTConfig
postgresDBClient *gorm.DB
logger *zap.Logger
)
// TODO 使用 wire 依赖注入
func main() {
flag.Parse()
ctx := context.TODO()
modelRTConfig = config.ReadAndInitConfig(*modelRTConfigDir, *modelRTConfigName, *modelRTConfigType)
// init postgresDBClient
postgresDBClient = database.GetPostgresDBInstance(ctx, modelRTConfig.PostgresDBURI)
defer func() {
sqlDB, err := postgresDBClient.DB()
if err != nil {
panic(err)
}
sqlDB.Close()
}()
// init logger
2024-11-28 11:46:40 +08:00
logger = log.GetLoggerInstance(modelRTConfig.LoggerConfig)
defer logger.Sync()
// init ants pool
pool, err := ants.NewPoolWithFunc(modelRTConfig.ParseConcurrentQuantity, model.ParseFunc)
if err != nil {
logger.Error("init concurrent parse task pool failed", zap.Error(err))
panic(err)
}
defer ants.Release()
// load circuit diagram from postgres
err = database.QueryCircuitDiagramComponentFromDB(ctx, pool, logger)
if err != nil {
logger.Error("load circuit diagrams from postgres failed", zap.Error(err))
panic(err)
}
err = database.QueryTopologicFromDB(ctx, logger, modelRTConfig.GridID, modelRTConfig.ZoneID, modelRTConfig.StationID)
if err != nil {
logger.Error("load topologic info from postgres failed", zap.Error(err))
panic(err)
}
engine := gin.Default()
engine.Use(limiter.Middleware)
2024-11-27 16:48:11 +08:00
engine.GET("/model/diagram_load", handler.CircuitDiagramLoadHandler)
engine.POST("/model/diagram_create", nil)
engine.POST("/model/diagram_update", nil)
engine.POST("/model/diagram_delete", nil)
// start route with 8080 port
engine.Run(":8080")
// Redis hashmap 母线模型、异步电动机模型
// kv key name value busx
}