github.com/pf-qiu/concourse/v6@v6.7.3-0.20201207032516-1f455d73275f/atc/gc/build_log_retention_calculator.go (about) 1 package gc 2 3 import ( 4 "github.com/pf-qiu/concourse/v6/atc" 5 ) 6 7 type BuildLogRetentionCalculator interface { 8 BuildLogsToRetain(atc.JobConfig) atc.BuildLogRetention 9 } 10 11 type buildLogRetentionCalculator struct { 12 defaultBuildLogsToRetain uint64 13 maxBuildLogsToRetain uint64 14 defaultDaysToRetainBuildLogs uint64 15 maxDaysToRetainBuildLogs uint64 16 } 17 18 func NewBuildLogRetentionCalculator( 19 defaultBuildLogsToRetain uint64, 20 maxBuildLogsToRetain uint64, 21 defaultDaysToRetainBuildLogs uint64, 22 maxDaysToRetainBuildLogs uint64, 23 ) BuildLogRetentionCalculator { 24 return &buildLogRetentionCalculator{ 25 defaultBuildLogsToRetain: defaultBuildLogsToRetain, 26 maxBuildLogsToRetain: maxBuildLogsToRetain, 27 defaultDaysToRetainBuildLogs: defaultDaysToRetainBuildLogs, 28 maxDaysToRetainBuildLogs: maxDaysToRetainBuildLogs, 29 } 30 } 31 32 func (blrc *buildLogRetentionCalculator) BuildLogsToRetain(jobConfig atc.JobConfig) atc.BuildLogRetention { 33 // What does the job want? 34 var daysToRetainBuildLogs = 0 35 var buildLogsToRetain = 0 36 var minSuccessBuildLogsToRetain = 0 37 if jobConfig.BuildLogRetention != nil { 38 daysToRetainBuildLogs = jobConfig.BuildLogRetention.Days 39 buildLogsToRetain = jobConfig.BuildLogRetention.Builds 40 minSuccessBuildLogsToRetain = jobConfig.BuildLogRetention.MinimumSucceededBuilds 41 } else { 42 buildLogsToRetain = jobConfig.BuildLogsToRetain 43 } 44 45 // If not specified, set to default 46 if buildLogsToRetain == 0 { 47 buildLogsToRetain = int(blrc.defaultBuildLogsToRetain) 48 } 49 if daysToRetainBuildLogs == 0 { 50 daysToRetainBuildLogs = int(blrc.defaultDaysToRetainBuildLogs) 51 } 52 53 // If we don't have a max set, then we're done 54 if blrc.maxBuildLogsToRetain == 0 && blrc.maxDaysToRetainBuildLogs == 0 { 55 return atc.BuildLogRetention{Builds: buildLogsToRetain, MinimumSucceededBuilds: minSuccessBuildLogsToRetain, Days: daysToRetainBuildLogs} 56 } 57 58 var logRetention atc.BuildLogRetention 59 // If we have a value set, and we're less than the max, then return 60 if buildLogsToRetain > 0 && buildLogsToRetain < int(blrc.maxBuildLogsToRetain) { 61 logRetention.Builds = buildLogsToRetain 62 } else { 63 logRetention.Builds = int(blrc.maxBuildLogsToRetain) 64 } 65 66 if daysToRetainBuildLogs > 0 && daysToRetainBuildLogs < int(blrc.maxDaysToRetainBuildLogs) { 67 logRetention.Days = daysToRetainBuildLogs 68 } else { 69 logRetention.Days = int(blrc.maxDaysToRetainBuildLogs) 70 } 71 72 // successBuildLogsToRetain defaults to 0, and up to buildLogsToRetain. 73 if minSuccessBuildLogsToRetain >= 0 && minSuccessBuildLogsToRetain <= logRetention.Builds { 74 logRetention.MinimumSucceededBuilds = minSuccessBuildLogsToRetain 75 } else { 76 logRetention.MinimumSucceededBuilds = 0 77 } 78 79 return logRetention 80 81 }