forked from vmware-archive/atc
-
Notifications
You must be signed in to change notification settings - Fork 0
/
radar_scheduler_factory.go
76 lines (68 loc) · 2 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
package pipelines
import (
"time"
"code.cloudfoundry.org/clock"
"github.com/concourse/atc"
"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(pipelineDB db.PipelineDB, externalURL string) radar.ScanRunnerFactory
BuildScheduler(pipelineDB db.PipelineDB, externalURL string) scheduler.BuildScheduler
}
type radarSchedulerFactory struct {
tracker resource.Tracker
interval time.Duration
engine engine.Engine
}
func NewRadarSchedulerFactory(
tracker resource.Tracker,
interval time.Duration,
engine engine.Engine,
) RadarSchedulerFactory {
return &radarSchedulerFactory{
tracker: tracker,
interval: interval,
engine: engine,
}
}
func (rsf *radarSchedulerFactory) BuildScanRunnerFactory(pipelineDB db.PipelineDB, externalURL string) radar.ScanRunnerFactory {
return radar.NewScanRunnerFactory(rsf.tracker, rsf.interval, pipelineDB, clock.NewClock(), externalURL)
}
func (rsf *radarSchedulerFactory) BuildScheduler(pipelineDB db.PipelineDB, externalURL string) scheduler.BuildScheduler {
scanner := radar.NewResourceScanner(
clock.NewClock(),
rsf.tracker,
rsf.interval,
pipelineDB,
externalURL,
)
inputMapper := inputmapper.NewInputMapper(
pipelineDB,
inputconfig.NewTransformer(pipelineDB),
)
return &scheduler.Scheduler{
DB: pipelineDB,
InputMapper: inputMapper,
BuildStarter: scheduler.NewBuildStarter(
pipelineDB,
maxinflight.NewUpdater(pipelineDB),
factory.NewBuildFactory(
pipelineDB.GetPipelineID(),
atc.NewPlanFactory(time.Now().Unix()),
),
scanner,
inputMapper,
rsf.engine,
),
Scanner: scanner,
}
}