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  }