96 lines
2.5 KiB
Go
96 lines
2.5 KiB
Go
// 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 依赖注入管理 DVIE 面板注册的 panel
|
||
func main() {
|
||
flag.Parse()
|
||
ctx := context.TODO()
|
||
|
||
modelRTConfig = config.ReadAndInitConfig(*modelRTConfigDir, *modelRTConfigName, *modelRTConfigType)
|
||
// init postgresDBClient
|
||
postgresDBClient = database.InitPostgresDBInstance(ctx, modelRTConfig.PostgresDBURI)
|
||
|
||
defer func() {
|
||
sqlDB, err := postgresDBClient.DB()
|
||
if err != nil {
|
||
panic(err)
|
||
}
|
||
sqlDB.Close()
|
||
}()
|
||
|
||
// init logger
|
||
logger = log.InitLoggerInstance(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)
|
||
engine.GET("/model/diagram_load", handler.CircuitDiagramLoadHandler)
|
||
engine.POST("/model/diagram_create", nil)
|
||
engine.POST("/model/diagram_update", handler.CircuitDiagramUpdateHandler)
|
||
engine.POST("/model/diagram_delete", handler.CircuitDiagramDeleteHandler)
|
||
|
||
// start route with 8080 port
|
||
engine.Run(":8080")
|
||
|
||
// Redis hashmap 母线模型、异步电动机模型
|
||
|
||
// kv key name value busx
|
||
}
|