forked from digitalocean/atc
/
scan_runner_factory.go
70 lines (59 loc) · 1.71 KB
/
scan_runner_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
package radar
import (
"time"
"github.com/concourse/atc"
"github.com/concourse/atc/dbng"
"github.com/concourse/atc/resource"
"github.com/tedsuo/ifrit"
"code.cloudfoundry.org/clock"
"code.cloudfoundry.org/lager"
)
//go:generate counterfeiter . Scanner
type Scanner interface {
Run(lager.Logger, string) (time.Duration, error)
Scan(lager.Logger, string) error
ScanFromVersion(lager.Logger, string, atc.Version) error
}
type ScanRunnerFactory interface {
ScanResourceRunner(lager.Logger, string) ifrit.Runner
ScanResourceTypeRunner(lager.Logger, string) ifrit.Runner
}
type scanRunnerFactory struct {
clock clock.Clock
resourceScanner Scanner
resourceTypeScanner Scanner
}
func NewScanRunnerFactory(
resourceFactory resource.ResourceFactory,
defaultInterval time.Duration,
dbPipeline dbng.Pipeline,
clock clock.Clock,
externalURL string,
) ScanRunnerFactory {
resourceScanner := NewResourceScanner(
clock,
resourceFactory,
defaultInterval,
dbPipeline,
externalURL,
)
resourceTypeScanner := NewResourceTypeScanner(
resourceFactory,
defaultInterval,
dbPipeline,
externalURL,
)
return &scanRunnerFactory{
clock: clock,
resourceScanner: resourceScanner,
resourceTypeScanner: resourceTypeScanner,
}
}
func (sf *scanRunnerFactory) ScanResourceRunner(logger lager.Logger, name string) ifrit.Runner {
intervalRunner := NewIntervalRunner(logger, sf.clock, name, sf.resourceScanner)
return ifrit.RunFunc(intervalRunner.RunFunc)
}
func (sf *scanRunnerFactory) ScanResourceTypeRunner(logger lager.Logger, name string) ifrit.Runner {
intervalRunner := NewIntervalRunner(logger, sf.clock, name, sf.resourceTypeScanner)
return ifrit.RunFunc(intervalRunner.RunFunc)
}