Skip to content
This repository was archived by the owner on Feb 7, 2025. It is now read-only.

Commit 0a50b21

Browse files
committed
feat: added environment
1 parent cf59917 commit 0a50b21

7 files changed

Lines changed: 152 additions & 74 deletions

File tree

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package interfaces
2+
3+
import (
4+
"github.com/crawlab-team/crawlab-db/mongo"
5+
"go.mongodb.org/mongo-driver/bson"
6+
"go.mongodb.org/mongo-driver/bson/primitive"
7+
)
8+
9+
type GrpcClientModelEnvironmentService interface {
10+
ModelBaseService
11+
GetEnvironmentById(id primitive.ObjectID) (s Environment, err error)
12+
GetEnvironment(query bson.M, opts *mongo.FindOptions) (s Environment, err error)
13+
GetEnvironmentList(query bson.M, opts *mongo.FindOptions) (res []Environment, err error)
14+
}

interfaces/model_environment.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package interfaces
2+
3+
type Environment interface {
4+
Model
5+
GetKey() (key string)
6+
SetKey(key string)
7+
GetValue() (value string)
8+
SetValue(value string)
9+
}

interfaces/task_handler_service.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,8 @@ type TaskHandlerService interface {
4747
GetModelTaskService() (modelTaskSvc GrpcClientModelTaskService)
4848
// GetModelTaskStatService get model task stat service
4949
GetModelTaskStatService() (modelTaskStatSvc GrpcClientModelTaskStatService)
50+
// GetModelEnvironmentService get model environment service
51+
GetModelEnvironmentService() (modelEnvironmentSvc GrpcClientModelEnvironmentService)
5052
// GetNodeConfigService get node config service
5153
GetNodeConfigService() (cfgSvc NodeConfigService)
5254
// GetCurrentNode get node of the handler
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
package client
2+
3+
import (
4+
"github.com/crawlab-team/crawlab-core/errors"
5+
"github.com/crawlab-team/crawlab-core/interfaces"
6+
"github.com/crawlab-team/crawlab-db/mongo"
7+
"go.mongodb.org/mongo-driver/bson"
8+
"go.mongodb.org/mongo-driver/bson/primitive"
9+
)
10+
11+
type EnvironmentServiceDelegate struct {
12+
interfaces.GrpcClientModelBaseService
13+
}
14+
15+
func (svc *EnvironmentServiceDelegate) GetEnvironmentById(id primitive.ObjectID) (e interfaces.Environment, err error) {
16+
res, err := svc.GetById(id)
17+
if err != nil {
18+
return nil, err
19+
}
20+
s, ok := res.(interfaces.Environment)
21+
if !ok {
22+
return nil, errors.ErrorModelInvalidType
23+
}
24+
return s, nil
25+
}
26+
27+
func (svc *EnvironmentServiceDelegate) GetEnvironment(query bson.M, opts *mongo.FindOptions) (e interfaces.Environment, err error) {
28+
res, err := svc.Get(query, opts)
29+
if err != nil {
30+
return nil, err
31+
}
32+
s, ok := res.(interfaces.Environment)
33+
if !ok {
34+
return nil, errors.ErrorModelInvalidType
35+
}
36+
return s, nil
37+
}
38+
39+
func (svc *EnvironmentServiceDelegate) GetEnvironmentList(query bson.M, opts *mongo.FindOptions) (res []interfaces.Environment, err error) {
40+
list, err := svc.GetList(query, opts)
41+
if err != nil {
42+
return nil, err
43+
}
44+
for _, item := range list.GetModels() {
45+
s, ok := item.(interfaces.Environment)
46+
if !ok {
47+
return nil, errors.ErrorModelInvalidType
48+
}
49+
res = append(res, s)
50+
}
51+
return res, nil
52+
}
53+
54+
func NewEnvironmentServiceDelegate(opts ...ModelBaseServiceDelegateOption) (svc2 interfaces.GrpcClientModelEnvironmentService, err error) {
55+
// apply options
56+
opts = append(opts, WithBaseServiceModelId(interfaces.ModelIdEnvironment))
57+
58+
// base service
59+
baseSvc, err := NewBaseServiceDelegate(opts...)
60+
if err != nil {
61+
return nil, err
62+
}
63+
64+
// service
65+
svc := &EnvironmentServiceDelegate{baseSvc}
66+
67+
return svc, nil
68+
}
69+
70+
func ProvideEnvironmentServiceDelegate(path string, opts ...ModelBaseServiceDelegateOption) func() (svc interfaces.GrpcClientModelEnvironmentService, err error) {
71+
if path != "" {
72+
opts = append(opts, WithBaseServiceConfigPath(path))
73+
}
74+
return func() (svc interfaces.GrpcClientModelEnvironmentService, err error) {
75+
return NewEnvironmentServiceDelegate(opts...)
76+
}
77+
}

models/models/environment.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,22 @@ func (e *Environment) SetId(id primitive.ObjectID) {
1919
e.Id = id
2020
}
2121

22+
func (e *Environment) GetKey() (key string) {
23+
return e.Key
24+
}
25+
26+
func (e *Environment) SetKey(key string) {
27+
e.Key = key
28+
}
29+
30+
func (e *Environment) GetValue() (value string) {
31+
return e.Value
32+
}
33+
34+
func (e *Environment) SetValue(value string) {
35+
e.Value = value
36+
}
37+
2238
type EnvironmentList []Environment
2339

2440
func (l *EnvironmentList) GetModels() (res []interfaces.Model) {

task/handler/runner.go

Lines changed: 16 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -304,33 +304,13 @@ func (r *Runner) startHealthCheck() {
304304
}
305305

306306
func (r *Runner) configureEnv() {
307-
// TODO: refactor
308-
//envs := r.s.Envs
309-
//if r.s.Type == constants.Configurable {
310-
// // 数据库配置
311-
// envs = append(envs, model.Env{Name: "CRAWLAB_MONGO_HOST", Value: viper.GetString("mongo.host")})
312-
// envs = append(envs, model.Env{Name: "CRAWLAB_MONGO_PORT", Value: viper.GetString("mongo.port")})
313-
// envs = append(envs, model.Env{Name: "CRAWLAB_MONGO_DB", Value: viper.GetString("mongo.db")})
314-
// envs = append(envs, model.Env{Name: "CRAWLAB_MONGO_USERNAME", Value: viper.GetString("mongo.username")})
315-
// envs = append(envs, model.Env{Name: "CRAWLAB_MONGO_PASSWORD", Value: viper.GetString("mongo.password")})
316-
// envs = append(envs, model.Env{Name: "CRAWLAB_MONGO_AUTHSOURCE", Value: viper.GetString("mongo.authSource")})
317-
//
318-
// // 设置配置
319-
// for envName, envValue := range r.s.Config.Settings {
320-
// envs = append(envs, model.Env{Name: "CRAWLAB_SETTING_" + envName, Value: envValue})
321-
// }
322-
//}
323-
324307
// 默认把Node.js的全局node_modules加入环境变量
325-
//envPath := os.Getenv("PATH")
326-
//nodePath := "/usr/lib/node_modules"
327-
//if !strings.Contains(envPath, nodePath) {
328-
// _ = os.Setenv("PATH", nodePath+":"+envPath)
329-
//}
330-
//_ = os.Setenv("NODE_PATH", nodePath)
331-
332-
// default results collection
333-
//col := utils.GetSpiderCol(r.s.Col, r.s.Name)
308+
envPath := os.Getenv("PATH")
309+
nodePath := "/usr/lib/node_modules"
310+
if !strings.Contains(envPath, nodePath) {
311+
_ = os.Setenv("PATH", nodePath+":"+envPath)
312+
}
313+
_ = os.Setenv("NODE_PATH", nodePath)
334314

335315
// default envs
336316
r.cmd.Env = append(os.Environ(), "CRAWLAB_TASK_ID="+r.tid.Hex())
@@ -342,46 +322,16 @@ func (r *Runner) configureEnv() {
342322
} else {
343323
r.cmd.Env = append(r.cmd.Env, "CRAWLAB_GRPC_AUTH_KEY="+constants.DefaultGrpcAuthKey)
344324
}
345-
//r.cmd.Env = append(r.cmd.Env, "CRAWLAB_COLLECTION="+col)
346-
//r.cmd.Env = append(r.cmd.Env, "CRAWLAB_MONGO_HOST="+viper.GetString("mongo.host"))
347-
//r.cmd.Env = append(r.cmd.Env, "CRAWLAB_MONGO_PORT="+viper.GetString("mongo.port"))
348-
//if viper.GetString("mongo.db") != "" {
349-
// r.cmd.Env = append(r.cmd.Env, "CRAWLAB_MONGO_DB="+viper.GetString("mongo.db"))
350-
//}
351-
//if viper.GetString("mongo.username") != "" {
352-
// r.cmd.Env = append(r.cmd.Env, "CRAWLAB_MONGO_USERNAME="+viper.GetString("mongo.username"))
353-
//}
354-
//if viper.GetString("mongo.password") != "" {
355-
// r.cmd.Env = append(r.cmd.Env, "CRAWLAB_MONGO_PASSWORD="+viper.GetString("mongo.password"))
356-
//}
357-
//if viper.GetString("mongo.authSource") != "" {
358-
// r.cmd.Env = append(r.cmd.Env, "CRAWLAB_MONGO_AUTHSOURCE="+viper.GetString("mongo.authSource"))
359-
//}
360-
//r.cmd.Env = append(r.cmd.Env, "PYTHONUNBUFFERED=0")
361-
//r.cmd.Env = append(r.cmd.Env, "PYTHONIOENCODING=utf-8")
362-
//r.cmd.Env = append(r.cmd.Env, "TZ=Asia/Shanghai")
363-
//r.cmd.Env = append(r.cmd.Env, "CRAWLAB_DEDUP_FIELD="+r.s.DedupField)
364-
//r.cmd.Env = append(r.cmd.Env, "CRAWLAB_DEDUP_METHOD="+r.s.DedupMethod)
365-
//if r.s.IsDedup {
366-
// r.cmd.Env = append(r.cmd.Env, "CRAWLAB_IS_DEDUP=1")
367-
//} else {
368-
// r.cmd.Env = append(r.cmd.Env, "CRAWLAB_IS_DEDUP=0")
369-
//}
370-
371-
// TODO: implement task environment variables
372-
//for _, env := range r.s.Envs {
373-
// r.cmd.Env = append(r.cmd.Env, env.Name+"="+env.Value)
374-
//}
375-
376-
// TODO: implement global environment variables
377-
//variables, err := models.MustGetRootService().GetVariableList(nil, nil)
378-
//if err != nil {
379-
// return err
380-
//}
381-
//for _, variable := range variables {
382-
// r.cmd.Env = append(r.cmd.Env, variable.Key+"="+variable.Value)
383-
//}
384-
//return nil
325+
326+
// global environment variables
327+
envs, err := r.svc.GetModelEnvironmentService().GetEnvironmentList(nil, nil)
328+
if err != nil {
329+
trace.PrintError(err)
330+
return
331+
}
332+
for _, env := range envs {
333+
r.cmd.Env = append(r.cmd.Env, env.GetKey()+"="+env.GetValue())
334+
}
385335
}
386336

387337
// wait for process to finish and send task signal (constants.TaskSignal)

task/handler/service.go

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -26,14 +26,15 @@ import (
2626
type Service struct {
2727
// dependencies
2828
interfaces.TaskBaseService
29-
cfgSvc interfaces.NodeConfigService
30-
modelSvc service.ModelService
31-
clientModelSvc interfaces.GrpcClientModelService
32-
clientModelNodeSvc interfaces.GrpcClientModelNodeService
33-
clientModelSpiderSvc interfaces.GrpcClientModelSpiderService
34-
clientModelTaskSvc interfaces.GrpcClientModelTaskService
35-
clientModelTaskStatSvc interfaces.GrpcClientModelTaskStatService
36-
c interfaces.GrpcClient // grpc client
29+
cfgSvc interfaces.NodeConfigService
30+
modelSvc service.ModelService
31+
clientModelSvc interfaces.GrpcClientModelService
32+
clientModelNodeSvc interfaces.GrpcClientModelNodeService
33+
clientModelSpiderSvc interfaces.GrpcClientModelSpiderService
34+
clientModelTaskSvc interfaces.GrpcClientModelTaskService
35+
clientModelTaskStatSvc interfaces.GrpcClientModelTaskStatService
36+
clientModelEnvironmentSvc interfaces.GrpcClientModelEnvironmentService
37+
c interfaces.GrpcClient // grpc client
3738

3839
// settings
3940
//maxRunners int
@@ -212,6 +213,10 @@ func (svc *Service) GetModelTaskStatService() (modelTaskSvc interfaces.GrpcClien
212213
return svc.clientModelTaskStatSvc
213214
}
214215

216+
func (svc *Service) GetModelEnvironmentService() (modelTaskSvc interfaces.GrpcClientModelEnvironmentService) {
217+
return svc.clientModelEnvironmentSvc
218+
}
219+
215220
func (svc *Service) GetNodeConfigService() (cfgSvc interfaces.NodeConfigService) {
216221
return svc.cfgSvc
217222
}
@@ -453,6 +458,9 @@ func NewTaskHandlerService(opts ...Option) (svc2 interfaces.TaskHandlerService,
453458
if err := c.Provide(client.ProvideTaskStatServiceDelegate(svc.GetConfigPath())); err != nil {
454459
return nil, trace.TraceError(err)
455460
}
461+
if err := c.Provide(client.ProvideEnvironmentServiceDelegate(svc.GetConfigPath())); err != nil {
462+
return nil, trace.TraceError(err)
463+
}
456464
if err := c.Provide(client2.ProvideGetClient(svc.GetConfigPath())); err != nil {
457465
return nil, trace.TraceError(err)
458466
}
@@ -464,6 +472,7 @@ func NewTaskHandlerService(opts ...Option) (svc2 interfaces.TaskHandlerService,
464472
clientModelSpiderSvc interfaces.GrpcClientModelSpiderService,
465473
clientModelTaskSvc interfaces.GrpcClientModelTaskService,
466474
clientModelTaskStatSvc interfaces.GrpcClientModelTaskStatService,
475+
clientModelEnvironmentSvc interfaces.GrpcClientModelEnvironmentService,
467476
c interfaces.GrpcClient,
468477
) {
469478
svc.cfgSvc = cfgSvc
@@ -473,6 +482,7 @@ func NewTaskHandlerService(opts ...Option) (svc2 interfaces.TaskHandlerService,
473482
svc.clientModelSpiderSvc = clientModelSpiderSvc
474483
svc.clientModelTaskSvc = clientModelTaskSvc
475484
svc.clientModelTaskStatSvc = clientModelTaskStatSvc
485+
svc.clientModelEnvironmentSvc = clientModelEnvironmentSvc
476486
svc.c = c
477487
}); err != nil {
478488
return nil, trace.TraceError(err)

0 commit comments

Comments
 (0)