Skip to content

Commit d16322b

Browse files
committed
feat: SaveLogsOnlyForNumberOfContainers option
Signed-off-by: Ilya Lesikov <[email protected]>
1 parent acff6da commit d16322b

File tree

7 files changed

+84
-47
lines changed

7 files changed

+84
-47
lines changed

pkg/tracker/daemonset/tracker.go

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ type Tracker struct {
5858

5959
ignoreLogs bool
6060
ignoreReadinessProbeFailsByContainerName map[string]time.Duration
61+
savingLogsReplicas int
6162

6263
lastObject *appsv1.DaemonSet
6364
failedReason string
@@ -79,12 +80,13 @@ type Tracker struct {
7980
func NewTracker(name, namespace string, kube kubernetes.Interface, informerFactory *util.Concurrent[*informer.InformerFactory], opts tracker.Options) *Tracker {
8081
return &Tracker{
8182
Tracker: tracker.Tracker{
82-
Kube: kube,
83-
Namespace: namespace,
84-
FullResourceName: fmt.Sprintf("ds/%s", name),
85-
ResourceName: name,
86-
LogsFromTime: opts.LogsFromTime,
87-
InformerFactory: informerFactory,
83+
Kube: kube,
84+
Namespace: namespace,
85+
FullResourceName: fmt.Sprintf("ds/%s", name),
86+
ResourceName: name,
87+
SaveLogsOnlyForNumberOfReplicas: opts.SaveLogsOnlyForNumberOfReplicas,
88+
LogsFromTime: opts.LogsFromTime,
89+
InformerFactory: informerFactory,
8890
},
8991

9092
podStatuses: make(map[string]pod.PodStatus),
@@ -356,9 +358,14 @@ func (d *Tracker) runPodTracker(ctx context.Context, podName string) error {
356358
errorChan := make(chan error, 1)
357359
doneChan := make(chan struct{})
358360

361+
ignoreLogs := d.ignoreLogs || d.savingLogsReplicas >= d.SaveLogsOnlyForNumberOfReplicas
362+
if !ignoreLogs {
363+
d.savingLogsReplicas++
364+
}
365+
359366
newCtx, cancelPodCtx := context.WithCancelCause(ctx)
360367
podTracker := pod.NewTracker(podName, d.Namespace, d.Kube, d.InformerFactory, pod.Options{
361-
IgnoreLogs: d.ignoreLogs,
368+
IgnoreLogs: ignoreLogs,
362369
IgnoreReadinessProbeFailsByContainerName: d.ignoreReadinessProbeFailsByContainerName,
363370
})
364371
if !d.LogsFromTime.IsZero() {

pkg/tracker/deployment/tracker.go

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ type Tracker struct {
5555

5656
ignoreLogs bool
5757
ignoreReadinessProbeFailsByContainerName map[string]time.Duration
58+
savingLogsReplicas int
5859

5960
TrackedPodsNames []string
6061

@@ -88,12 +89,13 @@ type Tracker struct {
8889
func NewTracker(name, namespace string, kube kubernetes.Interface, informerFactory *util.Concurrent[*informer.InformerFactory], opts tracker.Options) *Tracker {
8990
return &Tracker{
9091
Tracker: tracker.Tracker{
91-
Kube: kube,
92-
Namespace: namespace,
93-
FullResourceName: fmt.Sprintf("deploy/%s", name),
94-
ResourceName: name,
95-
LogsFromTime: opts.LogsFromTime,
96-
InformerFactory: informerFactory,
92+
Kube: kube,
93+
Namespace: namespace,
94+
FullResourceName: fmt.Sprintf("deploy/%s", name),
95+
ResourceName: name,
96+
SaveLogsOnlyForNumberOfReplicas: opts.SaveLogsOnlyForNumberOfReplicas,
97+
LogsFromTime: opts.LogsFromTime,
98+
InformerFactory: informerFactory,
9799
},
98100

99101
Added: make(chan DeploymentStatus, 1),
@@ -489,9 +491,14 @@ func (d *Tracker) runPodTracker(_ctx context.Context, podName, rsName string) er
489491
errorChan := make(chan error, 1)
490492
doneChan := make(chan struct{})
491493

494+
ignoreLogs := d.ignoreLogs || d.savingLogsReplicas >= d.SaveLogsOnlyForNumberOfReplicas
495+
if !ignoreLogs {
496+
d.savingLogsReplicas++
497+
}
498+
492499
newCtx, cancelPodCtx := context.WithCancelCause(_ctx)
493500
podTracker := pod.NewTracker(podName, d.Namespace, d.Kube, d.InformerFactory, pod.Options{
494-
IgnoreLogs: d.ignoreLogs,
501+
IgnoreLogs: ignoreLogs,
495502
IgnoreReadinessProbeFailsByContainerName: d.ignoreReadinessProbeFailsByContainerName,
496503
})
497504
if !d.LogsFromTime.IsZero() {

pkg/tracker/job/tracker.go

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ type Tracker struct {
6262

6363
ignoreLogs bool
6464
ignoreReadinessProbeFailsByContainerName map[string]time.Duration
65+
savingLogsReplicas int
6566

6667
objectAdded chan *batchv1.Job
6768
objectModified chan *batchv1.Job
@@ -80,12 +81,13 @@ type Tracker struct {
8081
func NewTracker(name, namespace string, kube kubernetes.Interface, informerFactory *util.Concurrent[*informer.InformerFactory], opts tracker.Options) *Tracker {
8182
return &Tracker{
8283
Tracker: tracker.Tracker{
83-
Kube: kube,
84-
Namespace: namespace,
85-
FullResourceName: fmt.Sprintf("job/%s", name),
86-
ResourceName: name,
87-
LogsFromTime: opts.LogsFromTime,
88-
InformerFactory: informerFactory,
84+
Kube: kube,
85+
Namespace: namespace,
86+
FullResourceName: fmt.Sprintf("job/%s", name),
87+
ResourceName: name,
88+
SaveLogsOnlyForNumberOfReplicas: opts.SaveLogsOnlyForNumberOfReplicas,
89+
LogsFromTime: opts.LogsFromTime,
90+
InformerFactory: informerFactory,
8991
},
9092

9193
Added: make(chan JobStatus, 1),
@@ -391,9 +393,14 @@ func (job *Tracker) runPodTracker(_ctx context.Context, podName string) error {
391393
errorChan := make(chan error, 1)
392394
doneChan := make(chan struct{})
393395

396+
ignoreLogs := job.ignoreLogs || job.savingLogsReplicas >= job.SaveLogsOnlyForNumberOfReplicas
397+
if !ignoreLogs {
398+
job.savingLogsReplicas++
399+
}
400+
394401
newCtx, cancelPodCtx := context.WithCancelCause(_ctx)
395402
podTracker := pod.NewTracker(podName, job.Namespace, job.Kube, job.InformerFactory, pod.Options{
396-
IgnoreLogs: job.ignoreLogs,
403+
IgnoreLogs: ignoreLogs,
397404
IgnoreReadinessProbeFailsByContainerName: job.ignoreReadinessProbeFailsByContainerName,
398405
})
399406
if !job.LogsFromTime.IsZero() {

pkg/tracker/replicaset/informer.go

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -54,11 +54,12 @@ type ReplicaSetInformer struct {
5454
func NewReplicaSetInformer(trk *tracker.Tracker, controller utils.ControllerMetadata) *ReplicaSetInformer {
5555
return &ReplicaSetInformer{
5656
Tracker: tracker.Tracker{
57-
Kube: trk.Kube,
58-
Namespace: trk.Namespace,
59-
ResourceName: trk.ResourceName,
60-
FullResourceName: trk.FullResourceName,
61-
InformerFactory: trk.InformerFactory,
57+
Kube: trk.Kube,
58+
Namespace: trk.Namespace,
59+
ResourceName: trk.ResourceName,
60+
FullResourceName: trk.FullResourceName,
61+
InformerFactory: trk.InformerFactory,
62+
SaveLogsOnlyForNumberOfReplicas: trk.SaveLogsOnlyForNumberOfReplicas,
6263
},
6364
Controller: controller,
6465
ReplicaSetAdded: make(chan *appsv1.ReplicaSet, 1),

pkg/tracker/statefulset/tracker.go

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ type Tracker struct {
4949

5050
ignoreLogs bool
5151
ignoreReadinessProbeFailsByContainerName map[string]time.Duration
52+
savingLogsReplicas int
5253

5354
TrackedPodsNames []string
5455

@@ -78,12 +79,13 @@ type Tracker struct {
7879
func NewTracker(name, namespace string, kube kubernetes.Interface, informerFactory *util.Concurrent[*informer.InformerFactory], opts tracker.Options) *Tracker {
7980
return &Tracker{
8081
Tracker: tracker.Tracker{
81-
Kube: kube,
82-
Namespace: namespace,
83-
FullResourceName: fmt.Sprintf("sts/%s", name),
84-
ResourceName: name,
85-
LogsFromTime: opts.LogsFromTime,
86-
InformerFactory: informerFactory,
82+
Kube: kube,
83+
Namespace: namespace,
84+
FullResourceName: fmt.Sprintf("sts/%s", name),
85+
ResourceName: name,
86+
SaveLogsOnlyForNumberOfReplicas: opts.SaveLogsOnlyForNumberOfReplicas,
87+
LogsFromTime: opts.LogsFromTime,
88+
InformerFactory: informerFactory,
8789
},
8890

8991
Added: make(chan StatefulSetStatus, 1),
@@ -364,9 +366,14 @@ func (d *Tracker) runPodTracker(_ctx context.Context, podName string) error {
364366
errorChan := make(chan error, 1)
365367
doneChan := make(chan struct{})
366368

369+
ignoreLogs := d.ignoreLogs || d.savingLogsReplicas >= d.SaveLogsOnlyForNumberOfReplicas
370+
if !ignoreLogs {
371+
d.savingLogsReplicas++
372+
}
373+
367374
newCtx, cancelPodCtx := context.WithCancelCause(_ctx)
368375
podTracker := pod.NewTracker(podName, d.Namespace, d.Kube, d.InformerFactory, pod.Options{
369-
IgnoreLogs: d.ignoreLogs,
376+
IgnoreLogs: ignoreLogs,
370377
IgnoreReadinessProbeFailsByContainerName: d.ignoreReadinessProbeFailsByContainerName,
371378
})
372379
if !d.LogsFromTime.IsZero() {

pkg/tracker/tracker.go

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -30,12 +30,13 @@ const (
3030
type TrackerState string
3131

3232
type Tracker struct {
33-
Kube kubernetes.Interface
34-
Namespace string
35-
ResourceName string
36-
FullResourceName string // full resource name with resource kind (deploy/superapp)
37-
LogsFromTime time.Time
38-
InformerFactory *util.Concurrent[*informer.InformerFactory]
33+
Kube kubernetes.Interface
34+
Namespace string
35+
ResourceName string
36+
FullResourceName string // full resource name with resource kind (deploy/superapp)
37+
SaveLogsOnlyForNumberOfReplicas int
38+
LogsFromTime time.Time
39+
InformerFactory *util.Concurrent[*informer.InformerFactory]
3940

4041
StatusGeneration uint64
4142
}
@@ -44,6 +45,7 @@ type Options struct {
4445
ParentContext context.Context
4546
Timeout time.Duration
4647
LogsFromTime time.Time
48+
SaveLogsOnlyForNumberOfReplicas int
4749
IgnoreLogs bool
4850
IgnoreReadinessProbeFailsByContainerName map[string]time.Duration
4951
}

pkg/trackers/dyntracker/dynamic_readiness_tracker.go

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -46,14 +46,15 @@ type DynamicReadinessTracker struct {
4646
timeout time.Duration
4747
noActivityTimeout time.Duration
4848

49-
saveLogsOnlyForContainers []string
50-
saveLogsByRegex *regexp.Regexp
51-
saveLogsByRegexForContainers map[string]*regexp.Regexp
52-
skipLogsByRegex *regexp.Regexp
53-
skipLogsByRegexForContainers map[string]*regexp.Regexp
54-
ignoreLogs bool
55-
ignoreLogsForContainers []string
56-
saveEvents bool
49+
saveLogsOnlyForNumberOfReplicas int
50+
saveLogsOnlyForContainers []string
51+
saveLogsByRegex *regexp.Regexp
52+
saveLogsByRegexForContainers map[string]*regexp.Regexp
53+
skipLogsByRegex *regexp.Regexp
54+
skipLogsByRegexForContainers map[string]*regexp.Regexp
55+
ignoreLogs bool
56+
ignoreLogsForContainers []string
57+
saveEvents bool
5758
}
5859

5960
func NewDynamicReadinessTracker(
@@ -112,6 +113,7 @@ func NewDynamicReadinessTracker(
112113
ParentContext: ctx,
113114
Timeout: timeout,
114115
LogsFromTime: captureLogsFromTime,
116+
SaveLogsOnlyForNumberOfReplicas: opts.SaveLogsOnlyForNumberOfReplicas,
115117
IgnoreLogs: opts.IgnoreLogs,
116118
IgnoreReadinessProbeFailsByContainerName: ignoreReadinessProbeFailsByContainerName,
117119
})
@@ -120,6 +122,7 @@ func NewDynamicReadinessTracker(
120122
ParentContext: ctx,
121123
Timeout: timeout,
122124
LogsFromTime: captureLogsFromTime,
125+
SaveLogsOnlyForNumberOfReplicas: opts.SaveLogsOnlyForNumberOfReplicas,
123126
IgnoreLogs: opts.IgnoreLogs,
124127
IgnoreReadinessProbeFailsByContainerName: ignoreReadinessProbeFailsByContainerName,
125128
})
@@ -135,6 +138,7 @@ func NewDynamicReadinessTracker(
135138
ParentContext: ctx,
136139
Timeout: timeout,
137140
LogsFromTime: captureLogsFromTime,
141+
SaveLogsOnlyForNumberOfReplicas: opts.SaveLogsOnlyForNumberOfReplicas,
138142
IgnoreLogs: opts.IgnoreLogs,
139143
IgnoreReadinessProbeFailsByContainerName: ignoreReadinessProbeFailsByContainerName,
140144
})
@@ -143,6 +147,7 @@ func NewDynamicReadinessTracker(
143147
ParentContext: ctx,
144148
Timeout: timeout,
145149
LogsFromTime: captureLogsFromTime,
150+
SaveLogsOnlyForNumberOfReplicas: opts.SaveLogsOnlyForNumberOfReplicas,
146151
IgnoreLogs: opts.IgnoreLogs,
147152
IgnoreReadinessProbeFailsByContainerName: ignoreReadinessProbeFailsByContainerName,
148153
})
@@ -181,6 +186,7 @@ type DynamicReadinessTrackerOptions struct {
181186
NoActivityTimeout time.Duration
182187
IgnoreReadinessProbeFailsByContainerName map[string]time.Duration
183188
CaptureLogsFromTime time.Time
189+
SaveLogsOnlyForNumberOfReplicas int
184190
SaveLogsOnlyForContainers []string
185191
SaveLogsByRegex *regexp.Regexp
186192
SaveLogsByRegexForContainers map[string]*regexp.Regexp

0 commit comments

Comments
 (0)