forked from concourse/concourse
-
Notifications
You must be signed in to change notification settings - Fork 0
/
build_log_retention_calculator.go
81 lines (69 loc) · 2.59 KB
/
build_log_retention_calculator.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
package gc
import (
"github.com/chenbh/concourse/v6/atc"
)
type BuildLogRetentionCalculator interface {
BuildLogsToRetain(atc.JobConfig) atc.BuildLogRetention
}
type buildLogRetentionCalculator struct {
defaultBuildLogsToRetain uint64
maxBuildLogsToRetain uint64
defaultDaysToRetainBuildLogs uint64
maxDaysToRetainBuildLogs uint64
}
func NewBuildLogRetentionCalculator(
defaultBuildLogsToRetain uint64,
maxBuildLogsToRetain uint64,
defaultDaysToRetainBuildLogs uint64,
maxDaysToRetainBuildLogs uint64,
) BuildLogRetentionCalculator {
return &buildLogRetentionCalculator{
defaultBuildLogsToRetain: defaultBuildLogsToRetain,
maxBuildLogsToRetain: maxBuildLogsToRetain,
defaultDaysToRetainBuildLogs: defaultDaysToRetainBuildLogs,
maxDaysToRetainBuildLogs: maxDaysToRetainBuildLogs,
}
}
func (blrc *buildLogRetentionCalculator) BuildLogsToRetain(jobConfig atc.JobConfig) atc.BuildLogRetention {
// What does the job want?
var daysToRetainBuildLogs = 0
var buildLogsToRetain = 0
var minSuccessBuildLogsToRetain = 0
if jobConfig.BuildLogRetention != nil {
daysToRetainBuildLogs = jobConfig.BuildLogRetention.Days
buildLogsToRetain = jobConfig.BuildLogRetention.Builds
minSuccessBuildLogsToRetain = jobConfig.BuildLogRetention.MinimumSucceededBuilds
} else {
buildLogsToRetain = jobConfig.BuildLogsToRetain
}
// If not specified, set to default
if buildLogsToRetain == 0 {
buildLogsToRetain = int(blrc.defaultBuildLogsToRetain)
}
if daysToRetainBuildLogs == 0 {
daysToRetainBuildLogs = int(blrc.defaultDaysToRetainBuildLogs)
}
// If we don't have a max set, then we're done
if blrc.maxBuildLogsToRetain == 0 && blrc.maxDaysToRetainBuildLogs == 0 {
return atc.BuildLogRetention{buildLogsToRetain, minSuccessBuildLogsToRetain, daysToRetainBuildLogs}
}
var logRetention atc.BuildLogRetention
// If we have a value set, and we're less than the max, then return
if buildLogsToRetain > 0 && buildLogsToRetain < int(blrc.maxBuildLogsToRetain) {
logRetention.Builds = buildLogsToRetain
} else {
logRetention.Builds = int(blrc.maxBuildLogsToRetain)
}
if daysToRetainBuildLogs > 0 && daysToRetainBuildLogs < int(blrc.maxDaysToRetainBuildLogs) {
logRetention.Days = daysToRetainBuildLogs
} else {
logRetention.Days = int(blrc.maxDaysToRetainBuildLogs)
}
// successBuildLogsToRetain defaults to 0, and up to buildLogsToRetain.
if minSuccessBuildLogsToRetain >= 0 && minSuccessBuildLogsToRetain <= logRetention.Builds {
logRetention.MinimumSucceededBuilds = minSuccessBuildLogsToRetain
} else {
logRetention.MinimumSucceededBuilds = 0
}
return logRetention
}