forked from vmware-archive/atc
/
radar_scheduler_factory.go
82 lines (74 loc) · 2.45 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
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
resourceConfigFactory db.ResourceConfigFactory
interval time.Duration
engine engine.Engine
}
func NewRadarSchedulerFactory(
resourceFactory resource.ResourceFactory,
resourceConfigFactory db.ResourceConfigFactory,
interval time.Duration,
engine engine.Engine,
) RadarSchedulerFactory {
return &radarSchedulerFactory{
resourceFactory: resourceFactory,
resourceConfigFactory: resourceConfigFactory,
interval: interval,
engine: engine,
}
}
func (rsf *radarSchedulerFactory) BuildScanRunnerFactory(dbPipeline db.Pipeline, externalURL string, variables creds.Variables) radar.ScanRunnerFactory {
return radar.NewScanRunnerFactory(rsf.resourceFactory, rsf.resourceConfigFactory, rsf.interval, dbPipeline, clock.NewClock(), externalURL, variables)
}
func (rsf *radarSchedulerFactory) BuildScheduler(pipeline db.Pipeline, externalURL string, variables creds.Variables) scheduler.BuildScheduler {
scanner := radar.NewResourceScanner(
clock.NewClock(),
rsf.resourceFactory,
rsf.resourceConfigFactory,
rsf.interval,
pipeline,
externalURL,
variables,
)
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,
}
}