Files
crawlab/core/apps/utils.go
2024-06-14 16:37:48 +08:00

93 lines
2.4 KiB
Go

package apps
import (
"fmt"
"github.com/apex/log"
"github.com/crawlab-team/crawlab/core/color"
"github.com/crawlab-team/crawlab/core/config"
"github.com/crawlab-team/crawlab/core/container"
grpcclient "github.com/crawlab-team/crawlab/core/grpc/client"
grpcserver "github.com/crawlab-team/crawlab/core/grpc/server"
modelsclient "github.com/crawlab-team/crawlab/core/models/client"
modelsservice "github.com/crawlab-team/crawlab/core/models/service"
nodeconfig "github.com/crawlab-team/crawlab/core/node/config"
"github.com/crawlab-team/crawlab/core/schedule"
"github.com/crawlab-team/crawlab/core/spider/admin"
"github.com/crawlab-team/crawlab/core/stats"
"github.com/crawlab-team/crawlab/core/task/handler"
"github.com/crawlab-team/crawlab/core/task/scheduler"
taskstats "github.com/crawlab-team/crawlab/core/task/stats"
"github.com/crawlab-team/crawlab/core/user"
"github.com/crawlab-team/crawlab/core/utils"
"github.com/crawlab-team/crawlab/trace"
)
func Start(app App) {
start(app)
}
func start(app App) {
app.Init()
go app.Start()
app.Wait()
app.Stop()
}
func DefaultWait() {
utils.DefaultWait()
}
func initModule(name string, fn func() error) (err error) {
if err := fn(); err != nil {
log.Error(fmt.Sprintf("init %s error: %s", name, err.Error()))
_ = trace.TraceError(err)
panic(err)
}
log.Info(fmt.Sprintf("initialized %s successfully", name))
return nil
}
func initApp(name string, app App) {
_ = initModule(name, func() error {
app.Init()
return nil
})
}
var injectors = []interface{}{
modelsservice.GetService,
modelsclient.NewServiceDelegate,
modelsclient.NewNodeServiceDelegate,
modelsclient.NewSpiderServiceDelegate,
modelsclient.NewTaskServiceDelegate,
modelsclient.NewTaskStatServiceDelegate,
modelsclient.NewEnvironmentServiceDelegate,
grpcclient.NewClient,
grpcclient.NewPool,
grpcserver.GetServer,
grpcserver.NewModelDelegateServer,
grpcserver.NewModelBaseServiceServer,
grpcserver.NewNodeServer,
grpcserver.NewTaskServer,
grpcserver.NewMessageServer,
config.NewConfigPathService,
user.GetUserService,
schedule.GetScheduleService,
admin.GetSpiderAdminService,
stats.GetStatsService,
nodeconfig.NewNodeConfigService,
taskstats.GetTaskStatsService,
color.NewService,
scheduler.GetTaskSchedulerService,
handler.GetTaskHandlerService,
}
func injectModules() {
c := container.GetContainer()
for _, injector := range injectors {
if err := c.Provide(injector); err != nil {
panic(err)
}
}
}