Files
frp-panel/cmd/frpp/master.go
VaalaCat f07c03ce68 feat: fx
2025-04-26 10:52:21 +00:00

79 lines
2.3 KiB
Go

package main
import (
"context"
"github.com/VaalaCat/frp-panel/biz/master/auth"
"github.com/VaalaCat/frp-panel/biz/master/proxy"
"github.com/VaalaCat/frp-panel/conf"
"github.com/VaalaCat/frp-panel/services/app"
"github.com/VaalaCat/frp-panel/services/cache"
"github.com/VaalaCat/frp-panel/services/master"
"github.com/VaalaCat/frp-panel/services/mux"
"github.com/VaalaCat/frp-panel/services/watcher"
"github.com/VaalaCat/frp-panel/utils/logger"
"github.com/VaalaCat/frp-panel/utils/wsgrpc"
"github.com/fatedier/golib/crypto"
"github.com/gin-gonic/gin"
"github.com/sourcegraph/conc"
"go.uber.org/fx"
)
type runMasterParam struct {
fx.In
Lc fx.Lifecycle
Ctx *app.Context
AppInstance app.Application
DBManagerMgr app.DBManager
HTTPMuxServer mux.MuxServer `name:"httpMux"`
TLSMuxServer mux.MuxServer `name:"tlsMux"`
MasterRouter *gin.Engine `name:"masterRouter"`
ClientLogManager app.ClientLogManager
WsGrpcHandler gin.HandlerFunc `name:"wsGrpcHandler"`
MasterService master.MasterService `name:"wsMasterService"`
TaskManager watcher.Client `name:"masterTaskManager"`
WsListener *wsgrpc.WSListener
DefaultServerConfig conf.Config `name:"defaultServerConfig"`
}
func runMaster(param runMasterParam) {
cfg := param.AppInstance.GetConfig()
crypto.DefaultSalt = conf.MasterDefaultSalt(cfg)
param.AppInstance.SetClientLogManager(param.ClientLogManager)
param.MasterRouter.GET("/wsgrpc", param.WsGrpcHandler)
cache.InitCache(param.AppInstance.GetConfig())
auth.InitAuth(param.AppInstance)
param.TaskManager.AddCronTask("0 0 3 * * *", proxy.CollectDailyStats, param.AppInstance)
defer param.TaskManager.Stop()
logger.Logger(param.Ctx).Infof("start to run master")
var wg conc.WaitGroup
param.Lc.Append(fx.Hook{
OnStart: func(ctx context.Context) error {
wg.Go(func() {
if err := param.MasterService.GetServer().Serve(param.WsListener); err != nil {
logger.Logger(param.Ctx).Fatalf("gRPC server error: %v", err)
}
})
wg.Go(param.TLSMuxServer.Run)
wg.Go(param.HTTPMuxServer.Run)
wg.Go(param.TaskManager.Run)
return nil
},
OnStop: func(ctx context.Context) error {
param.MasterService.GetServer().Stop()
param.TLSMuxServer.Stop()
param.HTTPMuxServer.Stop()
param.TaskManager.Stop()
wg.Wait()
return nil
},
})
}