@@ -54,13 +54,14 @@ const (
54
54
// FileCollector implements a collector based on local K8s API json files generated outside the KubeHound application via e.g kubectl.
55
55
type FileCollector struct {
56
56
cfg * config.FileCollectorConfig
57
- log * log.KubehoundLogger
58
57
tags collectorTags
59
58
clusterName string
60
59
}
61
60
62
61
// NewFileCollector creates a new instance of the file collector from the provided application config.
63
62
func NewFileCollector (ctx context.Context , cfg * config.KubehoundConfig ) (CollectorClient , error ) {
63
+ ctx = context .WithValue (ctx , log .ContextFieldComponent , FileCollectorName )
64
+ l := log .Trace (ctx )
64
65
if cfg .Collector .Type != config .CollectorTypeFile {
65
66
return nil , fmt .Errorf ("invalid collector type in config: %s" , cfg .Collector .Type )
66
67
}
@@ -69,12 +70,10 @@ func NewFileCollector(ctx context.Context, cfg *config.KubehoundConfig) (Collect
69
70
return nil , errors .New ("file collector config not provided" )
70
71
}
71
72
72
- l := log .Trace (ctx )
73
- l .Info ("Creating file collector from directory" , log .String ("path" , cfg .Collector .File .Directory ))
73
+ l .Info ("Creating file collector from directory" , log .String (log .FieldPathKey , cfg .Collector .File .Directory ))
74
74
75
75
return & FileCollector {
76
- cfg : cfg .Collector .File ,
77
- // log: l,
76
+ cfg : cfg .Collector .File ,
78
77
tags : newCollectorTags (),
79
78
clusterName : cfg .Dynamic .ClusterName ,
80
79
}, nil
@@ -139,6 +138,7 @@ func (c *FileCollector) streamPodsNamespace(ctx context.Context, fp string, inge
139
138
func (c * FileCollector ) StreamPods (ctx context.Context , ingestor PodIngestor ) error {
140
139
span , ctx := tracer .StartSpanFromContext (ctx , span .CollectorStream , tracer .Measured ())
141
140
span .SetTag (tag .EntityTag , tag .EntityPods )
141
+ l := log .Trace (ctx )
142
142
var err error
143
143
defer func () { span .Finish (tracer .WithError (err )) }()
144
144
@@ -156,7 +156,7 @@ func (c *FileCollector) StreamPods(ctx context.Context, ingestor PodIngestor) er
156
156
return nil
157
157
}
158
158
159
- c . log . Debugf ("Streaming pods from file %s " , fp )
159
+ l . Debug ("Streaming pods from file" , log . String ( log . FieldPathKey , fp ), log . String ( log . FieldEntityKey , tag . EntityPods ) )
160
160
161
161
return c .streamPodsNamespace (ctx , fp , ingestor )
162
162
})
@@ -190,6 +190,7 @@ func (c *FileCollector) streamRolesNamespace(ctx context.Context, fp string, ing
190
190
func (c * FileCollector ) StreamRoles (ctx context.Context , ingestor RoleIngestor ) error {
191
191
span , ctx := tracer .StartSpanFromContext (ctx , span .CollectorStream , tracer .Measured ())
192
192
span .SetTag (tag .EntityTag , tag .EntityRoles )
193
+ l := log .Trace (ctx )
193
194
var err error
194
195
defer func () { span .Finish (tracer .WithError (err )) }()
195
196
@@ -199,17 +200,17 @@ func (c *FileCollector) StreamRoles(ctx context.Context, ingestor RoleIngestor)
199
200
return nil
200
201
}
201
202
202
- f := filepath .Join (path , RolesPath )
203
+ fp := filepath .Join (path , RolesPath )
203
204
204
205
// Check if the file exists
205
- if _ , err := os .Stat (f ); os .IsNotExist (err ) {
206
+ if _ , err := os .Stat (fp ); os .IsNotExist (err ) {
206
207
// Skipping streaming as file does not exist (k8s type not necessary required in a namespace, for instance, an namespace can have no roles)
207
208
return nil
208
209
}
209
210
210
- c . log . Debugf ("Streaming roles from file %s " , f )
211
+ l . Debug ("Streaming roles from file" , log . String ( log . FieldPathKey , fp ), log . String ( log . FieldEntityKey , tag . EntityRoles ) )
211
212
212
- return c .streamRolesNamespace (ctx , f , ingestor )
213
+ return c .streamRolesNamespace (ctx , fp , ingestor )
213
214
})
214
215
215
216
if err != nil {
@@ -241,6 +242,7 @@ func (c *FileCollector) streamRoleBindingsNamespace(ctx context.Context, fp stri
241
242
func (c * FileCollector ) StreamRoleBindings (ctx context.Context , ingestor RoleBindingIngestor ) error {
242
243
span , ctx := tracer .StartSpanFromContext (ctx , span .CollectorStream , tracer .Measured ())
243
244
span .SetTag (tag .EntityTag , tag .EntityRolebindings )
245
+ l := log .Trace (ctx )
244
246
var err error
245
247
defer func () { span .Finish (tracer .WithError (err )) }()
246
248
@@ -258,7 +260,7 @@ func (c *FileCollector) StreamRoleBindings(ctx context.Context, ingestor RoleBin
258
260
return nil
259
261
}
260
262
261
- c . log . Debugf ("Streaming role bindings from file %s " , fp )
263
+ l . Debug ("Streaming role bindings from file" , log . String ( log . FieldPathKey , fp ), log . String ( log . FieldEntityKey , tag . EntityRolebindings ) )
262
264
263
265
return c .streamRoleBindingsNamespace (ctx , fp , ingestor )
264
266
})
@@ -292,6 +294,7 @@ func (c *FileCollector) streamEndpointsNamespace(ctx context.Context, fp string,
292
294
func (c * FileCollector ) StreamEndpoints (ctx context.Context , ingestor EndpointIngestor ) error {
293
295
span , ctx := tracer .StartSpanFromContext (ctx , span .CollectorStream , tracer .Measured ())
294
296
span .SetTag (tag .EntityTag , tag .EntityEndpoints )
297
+ l := log .Trace (ctx )
295
298
var err error
296
299
defer func () { span .Finish (tracer .WithError (err )) }()
297
300
@@ -308,8 +311,7 @@ func (c *FileCollector) StreamEndpoints(ctx context.Context, ingestor EndpointIn
308
311
// Skipping streaming as file does not exist (k8s type not necessary required in a namespace, for instance, an namespace can have no endpoints)
309
312
return nil
310
313
}
311
-
312
- c .log .Debugf ("Streaming endpoint slices from file %s" , fp )
314
+ l .Debug ("Streaming endpoints slices from file" , log .String (log .FieldPathKey , fp ), log .String (log .FieldEntityKey , tag .EntityEndpoints ))
313
315
314
316
return c .streamEndpointsNamespace (ctx , fp , ingestor )
315
317
})
@@ -324,11 +326,12 @@ func (c *FileCollector) StreamEndpoints(ctx context.Context, ingestor EndpointIn
324
326
func (c * FileCollector ) StreamNodes (ctx context.Context , ingestor NodeIngestor ) error {
325
327
span , ctx := tracer .StartSpanFromContext (ctx , span .CollectorStream , tracer .Measured ())
326
328
span .SetTag (tag .EntityTag , tag .EntityNodes )
329
+ l := log .Trace (ctx )
327
330
var err error
328
331
defer func () { span .Finish (tracer .WithError (err )) }()
329
332
330
333
fp := filepath .Join (c .cfg .Directory , NodePath )
331
- c . log . Debugf ("Streaming nodes from file %s " , fp )
334
+ l . Debug ("Streaming nodes from file" , log . String ( log . FieldPathKey , fp ), log . String ( log . FieldEntityKey , tag . EntityNodes ) )
332
335
333
336
list , err := readList [corev1.NodeList ](ctx , fp )
334
337
if err != nil {
@@ -350,11 +353,12 @@ func (c *FileCollector) StreamNodes(ctx context.Context, ingestor NodeIngestor)
350
353
func (c * FileCollector ) StreamClusterRoles (ctx context.Context , ingestor ClusterRoleIngestor ) error {
351
354
span , ctx := tracer .StartSpanFromContext (ctx , span .CollectorStream , tracer .Measured ())
352
355
span .SetTag (tag .EntityTag , tag .EntityClusterRoles )
356
+ l := log .Trace (ctx )
353
357
var err error
354
358
defer func () { span .Finish (tracer .WithError (err )) }()
355
359
356
360
fp := filepath .Join (c .cfg .Directory , ClusterRolesPath )
357
- c . log . Debugf ("Streaming cluster roles from file %s " , fp )
361
+ l . Debug ("Streaming cluster role from file" , log . String ( log . FieldPathKey , fp ), log . String ( log . FieldEntityKey , tag . EntityClusterRoles ) )
358
362
359
363
list , err := readList [rbacv1.ClusterRoleList ](ctx , fp )
360
364
if err != nil {
@@ -376,11 +380,12 @@ func (c *FileCollector) StreamClusterRoles(ctx context.Context, ingestor Cluster
376
380
func (c * FileCollector ) StreamClusterRoleBindings (ctx context.Context , ingestor ClusterRoleBindingIngestor ) error {
377
381
span , ctx := tracer .StartSpanFromContext (ctx , span .CollectorStream , tracer .Measured ())
378
382
span .SetTag (tag .EntityTag , tag .EntityClusterRolebindings )
383
+ l := log .Trace (ctx )
379
384
var err error
380
385
defer func () { span .Finish (tracer .WithError (err )) }()
381
386
382
387
fp := filepath .Join (c .cfg .Directory , ClusterRoleBindingsPath )
383
- c . log . Debugf ("Streaming cluster role bindings from file %s " , fp )
388
+ l . Debug ("Streaming cluster role bindings from file" , log . String ( log . FieldPathKey , fp ), log . String ( log . FieldEntityKey , tag . EntityClusterRolebindings ) )
384
389
385
390
list , err := readList [rbacv1.ClusterRoleBindingList ](ctx , fp )
386
391
if err != nil {
0 commit comments