Skip to content

Commit 7edc6d7

Browse files
refactor: nil for retntion policies
1 parent 146480f commit 7edc6d7

File tree

3 files changed

+45
-32
lines changed

3 files changed

+45
-32
lines changed

config/config.go

+11-11
Original file line numberDiff line numberDiff line change
@@ -103,21 +103,21 @@ func Parse(raw Raw) (Config, error) {
103103
rrules = append(rrules, rule)
104104
}
105105

106-
var attachmentsSize int64
107-
if raw.Retention.AttachmentSize != "" {
108-
var err error
109-
attachmentsSize, err = bytes.Parse(raw.Retention.AttachmentSize)
106+
var attachmentsSize *int64
107+
if raw.Retention.AttachmentSize != nil {
108+
size, err := bytes.Parse(*raw.Retention.AttachmentSize)
110109
if err != nil {
111110
return Config{}, err
112111
}
112+
attachmentsSize = &size
113113
}
114-
var envelopeAge time.Duration
115-
if raw.Retention.EnvelopeAge != "" {
116-
var err error
117-
envelopeAge, err = time.ParseDuration(raw.Retention.EnvelopeAge)
114+
var envelopeAge *time.Duration
115+
if raw.Retention.EnvelopeAge != nil {
116+
age, err := time.ParseDuration(*raw.Retention.EnvelopeAge)
118117
if err != nil {
119118
return Config{}, err
120119
}
120+
envelopeAge = &age
121121
}
122122

123123
retentionPolicy := models.RetentionPolicy{
@@ -147,9 +147,9 @@ type Raw struct {
147147
MaxPayloadSize string `name:"max_payload_size" default:"25 MB"`
148148
DataDirectory string `name:"data_directory" default:"smtpbridge_data" arg:""`
149149
Retention struct {
150-
EnvelopeCount int `name:"envelope_count"`
151-
EnvelopeAge string `name:"envelope_age"`
152-
AttachmentSize string `name:"attachment_size"`
150+
EnvelopeCount *int `name:"envelope_count"`
151+
EnvelopeAge *string `name:"envelope_age"`
152+
AttachmentSize *string `name:"attachment_size"`
153153
} `embed:"" prefix:"retention-"`
154154
HTTP struct {
155155
Disable bool

internal/models/retention.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ package models
33
import "time"
44

55
type RetentionPolicy struct {
6-
EnvelopeCount int
7-
EnvelopeAge time.Duration
6+
EnvelopeCount *int
7+
EnvelopeAge *time.Duration
88
MinEnvelopeAge time.Duration
9-
AttachmentSize int64
9+
AttachmentSize *int64
1010
}

internal/procs/gardener.go

+31-18
Original file line numberDiff line numberDiff line change
@@ -73,41 +73,54 @@ func gardener(cc *core.Context, policy models.RetentionPolicy, envCreatedC <-cha
7373
}
7474
}
7575
func gardenerDeleteByAttachmentSize(cc *core.Context, policy models.RetentionPolicy, storage models.Storage) {
76-
if policy.AttachmentSize != 0 && storage.AttachmentSize > policy.AttachmentSize {
77-
count := humanize.Bytes(uint64(storage.AttachmentSize - policy.AttachmentSize))
76+
if policy.AttachmentSize == nil {
77+
return
78+
}
79+
attachmentSize := *policy.AttachmentSize
80+
81+
if storage.AttachmentSize > attachmentSize {
82+
count := humanize.Bytes(uint64(storage.AttachmentSize - attachmentSize))
7883
log.Info().Str("count", count).Msg("Deleting attachment files by attachment size retention policy")
7984

80-
err := files.DeleteFileUntilSize(cc, storage.AttachmentSize, policy.AttachmentSize)
85+
err := files.DeleteFileUntilSize(cc, storage.AttachmentSize, attachmentSize)
8186
if err != nil {
8287
log.Err(err).Msg("Failed to delete attachment files by attachment size retention policy")
8388
}
8489
}
8590
}
8691

8792
func gardenerDeleteByEnvelopeCount(cc *core.Context, policy models.RetentionPolicy, storage models.Storage) {
88-
if policy.EnvelopeCount != 0 && storage.EnvelopeCount > policy.EnvelopeCount {
93+
if policy.EnvelopeCount == nil {
94+
return
95+
}
96+
envelopeCount := *policy.EnvelopeCount
97+
98+
if storage.EnvelopeCount > envelopeCount {
8999
date := time.Now().Add(-policy.MinEnvelopeAge)
90-
count, err := db.EnvelopeDeleteUntilCount(cc, policy.EnvelopeCount, date)
100+
count, err := db.EnvelopeDeleteUntilCount(cc, envelopeCount, date)
91101
if err != nil {
92-
log.Err(err).Time("age", date).Int("keep", policy.EnvelopeCount).Msg("Failed to envelopes by envelope count retention policy")
102+
log.Err(err).Time("age", date).Int("keep", envelopeCount).Msg("Failed to envelopes by envelope count retention policy")
93103
} else {
94-
log.Info().Time("age", date).Int("keep", policy.EnvelopeCount).Int64("deleted", count).Msg("Deleted envelopes by envelope count retention policy")
104+
log.Info().Time("age", date).Int("keep", envelopeCount).Int64("deleted", count).Msg("Deleted envelopes by envelope count retention policy")
95105
}
96106
}
97107
}
98108

99109
func gardenerDeleteByAge(cc *core.Context, policy models.RetentionPolicy) {
100-
if policy.EnvelopeAge != 0 {
101-
date := time.Now().Add(-policy.EnvelopeAge)
102-
if policy.MinEnvelopeAge > policy.EnvelopeAge {
103-
date.Add(-policy.MinEnvelopeAge)
104-
}
105-
count, err := db.EnvelopeDeleteOlderThan(cc, date)
106-
if err != nil {
107-
log.Err(err).Time("age", date).Msg("Failed to delete envelopes by age retention policy")
108-
} else {
109-
log.Info().Time("age", date).Int64("deleted", count).Msg("Deleted envelopes by age retention policy")
110-
}
110+
if policy.EnvelopeAge == nil {
111+
return
112+
}
113+
envelopeAge := *policy.EnvelopeAge
114+
115+
date := time.Now().Add(-envelopeAge)
116+
if policy.MinEnvelopeAge > envelopeAge {
117+
date.Add(-policy.MinEnvelopeAge)
118+
}
119+
count, err := db.EnvelopeDeleteOlderThan(cc, date)
120+
if err != nil {
121+
log.Err(err).Time("age", date).Msg("Failed to delete envelopes by age retention policy")
122+
} else {
123+
log.Info().Time("age", date).Int64("deleted", count).Msg("Deleted envelopes by age retention policy")
111124
}
112125
}
113126

0 commit comments

Comments
 (0)