forked from vmware-archive/atc
/
radar_scheduler_factory.go
98 lines (87 loc) · 3.08 KB
/
radar_scheduler_factory.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
package pipelines
import (
"time"
"code.cloudfoundry.org/clock"
"github.com/concourse/atc"
"github.com/concourse/atc/creds"
"github.com/concourse/atc/db"
"github.com/concourse/atc/engine"
"github.com/concourse/atc/radar"
"github.com/concourse/atc/resource"
"github.com/concourse/atc/scheduler"
"github.com/concourse/atc/scheduler/factory"
"github.com/concourse/atc/scheduler/inputmapper"
"github.com/concourse/atc/scheduler/inputmapper/inputconfig"
"github.com/concourse/atc/scheduler/maxinflight"
)
//go:generate counterfeiter . RadarSchedulerFactory
type RadarSchedulerFactory interface {
BuildScanRunnerFactory(dbPipeline db.Pipeline, externalURL string, variables creds.Variables) radar.ScanRunnerFactory
BuildScheduler(pipeline db.Pipeline, externalURL string, variables creds.Variables) scheduler.BuildScheduler
}
type radarSchedulerFactory struct {
resourceFactory resource.ResourceFactory
resourceConfigCheckSessionFactory db.ResourceConfigCheckSessionFactory
resourceTypeCheckingInterval time.Duration
resourceCheckingInterval time.Duration
engine engine.Engine
}
func NewRadarSchedulerFactory(
resourceFactory resource.ResourceFactory,
resourceConfigCheckSessionFactory db.ResourceConfigCheckSessionFactory,
resourceTypeCheckingInterval time.Duration,
resourceCheckingInterval time.Duration,
engine engine.Engine,
) RadarSchedulerFactory {
return &radarSchedulerFactory{
resourceFactory: resourceFactory,
resourceConfigCheckSessionFactory: resourceConfigCheckSessionFactory,
resourceTypeCheckingInterval: resourceTypeCheckingInterval,
resourceCheckingInterval: resourceCheckingInterval,
engine: engine,
}
}
func (rsf *radarSchedulerFactory) BuildScanRunnerFactory(dbPipeline db.Pipeline, externalURL string, variables creds.Variables) radar.ScanRunnerFactory {
return radar.NewScanRunnerFactory(rsf.resourceFactory, rsf.resourceConfigCheckSessionFactory, rsf.resourceTypeCheckingInterval, rsf.resourceCheckingInterval, dbPipeline, clock.NewClock(), externalURL, variables)
}
func (rsf *radarSchedulerFactory) BuildScheduler(pipeline db.Pipeline, externalURL string, variables creds.Variables) scheduler.BuildScheduler {
resourceTypeScanner := radar.NewResourceTypeScanner(
clock.NewClock(),
rsf.resourceFactory,
rsf.resourceConfigCheckSessionFactory,
rsf.resourceTypeCheckingInterval,
pipeline,
externalURL,
variables,
)
scanner := radar.NewResourceScanner(
clock.NewClock(),
rsf.resourceFactory,
rsf.resourceConfigCheckSessionFactory,
rsf.resourceCheckingInterval,
pipeline,
externalURL,
variables,
resourceTypeScanner,
)
inputMapper := inputmapper.NewInputMapper(
pipeline,
inputconfig.NewTransformer(pipeline),
)
return &scheduler.Scheduler{
Pipeline: pipeline,
InputMapper: inputMapper,
BuildStarter: scheduler.NewBuildStarter(
pipeline,
maxinflight.NewUpdater(pipeline),
factory.NewBuildFactory(
pipeline.ID(),
atc.NewPlanFactory(time.Now().Unix()),
),
scanner,
inputMapper,
rsf.engine,
),
Scanner: scanner,
}
}