Files
crawlab/backend/apps/master.go
2021-05-31 16:26:17 +08:00

72 lines
1.2 KiB
Go

package apps
import (
"github.com/crawlab-team/crawlab-core/config"
"github.com/crawlab-team/crawlab-core/interfaces"
"github.com/crawlab-team/crawlab-core/node/service"
"go.uber.org/dig"
)
type Master struct {
// settings
runOnMaster bool
// dependencies
interfaces.WithConfigPath
masterSvc interfaces.NodeMasterService
// modules
api *Api
// internals
quit chan int
}
func (app *Master) SetRunOnMaster(ok bool) {
app.runOnMaster = ok
}
func (app *Master) Init() {
}
func (app *Master) Start() {
go app.api.Start()
go app.masterSvc.Start()
}
func (app *Master) Wait() {
<-app.quit
}
func (app *Master) Stop() {
app.api.Stop()
app.quit <- 1
}
func NewMaster(opts ...MasterOption) (app MasterApp) {
// master
m := &Master{
WithConfigPath: config.NewConfigPathService(),
api: NewApi(),
quit: make(chan int, 1),
}
// apply options
for _, opt := range opts {
opt(m)
}
// dependency injection
c := dig.New()
if err := c.Provide(service.ProvideMasterService(m.GetConfigPath())); err != nil {
panic(err)
}
if err := c.Invoke(func(masterSvc interfaces.NodeMasterService) {
m.masterSvc = masterSvc
}); err != nil {
panic(err)
}
return m
}