Skip to content

Commit db31d28

Browse files
committed
feat(s3client): Add debug logs and forgotten trace
Related to #442
1 parent 7391d11 commit db31d28

File tree

2 files changed

+118
-10
lines changed

2 files changed

+118
-10
lines changed

pkg/s3-proxy/s3client/s3-client.go

Lines changed: 117 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import (
1414
"github.com/aws/aws-sdk-go/service/s3/s3manager"
1515
"github.com/aws/aws-sdk-go/service/s3/s3manager/s3manageriface"
1616
"github.com/oxyno-zeta/s3-proxy/pkg/s3-proxy/config"
17+
"github.com/oxyno-zeta/s3-proxy/pkg/s3-proxy/log"
1718
"github.com/oxyno-zeta/s3-proxy/pkg/s3-proxy/metrics"
1819
"github.com/oxyno-zeta/s3-proxy/pkg/s3-proxy/tracing"
1920
)
@@ -68,10 +69,34 @@ func (s3cl *s3client) buildGetObjectInputFromInput(input *GetInput) *s3.GetObjec
6869
return s3Input
6970
}
7071

71-
func (s3cl *s3client) GetObjectSignedURL(_ context.Context, input *GetInput, expiration time.Duration) (string, error) {
72+
func (s3cl *s3client) GetObjectSignedURL(ctx context.Context, input *GetInput, expiration time.Duration) (string, error) {
7273
// Build input
7374
s3Input := s3cl.buildGetObjectInputFromInput(input)
7475

76+
// Get trace
77+
parentTrace := tracing.GetTraceFromContext(ctx)
78+
// Create child trace
79+
childTrace := parentTrace.GetChildTrace("s3-bucket.get-object-signed-url-request")
80+
childTrace.SetTag("s3-bucket.bucket-name", s3cl.target.Bucket.Name)
81+
childTrace.SetTag("s3-bucket.bucket-region", s3cl.target.Bucket.Region)
82+
childTrace.SetTag("s3-bucket.bucket-prefix", s3cl.target.Bucket.Prefix)
83+
childTrace.SetTag("s3-bucket.bucket-s3-endpoint", s3cl.target.Bucket.S3Endpoint)
84+
childTrace.SetTag("s3-bucket.bucket-key", *s3Input.Key)
85+
childTrace.SetTag("s3-proxy.target-name", s3cl.target.Name)
86+
87+
defer childTrace.Finish()
88+
89+
// Get logger
90+
logger := log.GetLoggerFromContext(ctx)
91+
// Build logger
92+
logger = logger.WithFields(map[string]interface{}{
93+
"bucket": s3cl.target.Bucket.Name,
94+
"key": *s3Input.Key,
95+
"region": s3cl.target.Bucket.Region,
96+
})
97+
// Log
98+
logger.Debugf("Trying to get object presigned url")
99+
75100
// Build object request
76101
req, _ := s3cl.svcClient.GetObjectRequest(s3Input)
77102
// Build url
@@ -93,11 +118,17 @@ func (s3cl *s3client) GetObjectSignedURL(_ context.Context, input *GetInput, exp
93118
return "", errors.WithStack(err)
94119
}
95120

121+
// Log
122+
logger.Debug("Get object presigned url with success")
123+
96124
return urlStr, nil
97125
}
98126

99127
// ListFilesAndDirectories List files and directories.
100128
func (s3cl *s3client) ListFilesAndDirectories(ctx context.Context, key string) ([]*ListElementOutput, *ResultInfo, error) {
129+
// Get logger
130+
logger := log.GetLoggerFromContext(ctx)
131+
101132
// List files on path
102133
folders := make([]*ListElementOutput, 0)
103134
files := make([]*ListElementOutput, 0)
@@ -131,8 +162,19 @@ func (s3cl *s3client) ListFilesAndDirectories(ctx context.Context, key string) (
131162
childTrace.SetTag("s3-bucket.bucket-region", s3cl.target.Bucket.Region)
132163
childTrace.SetTag("s3-bucket.bucket-prefix", s3cl.target.Bucket.Prefix)
133164
childTrace.SetTag("s3-bucket.bucket-s3-endpoint", s3cl.target.Bucket.S3Endpoint)
165+
childTrace.SetTag("s3-bucket.bucket-key", key)
134166
childTrace.SetTag("s3-proxy.target-name", s3cl.target.Name)
135167

168+
// Build logger
169+
logger = logger.WithFields(map[string]interface{}{
170+
"bucket": s3cl.target.Bucket.Name,
171+
"key": key,
172+
"region": s3cl.target.Bucket.Region,
173+
"maxKeys": maxKeys,
174+
})
175+
// Log
176+
logger.Debugf("Trying to list objects")
177+
136178
// Request S3
137179
err := s3cl.svcClient.ListObjectsV2PagesWithContext(
138180
ctx,
@@ -200,6 +242,9 @@ func (s3cl *s3client) ListFilesAndDirectories(ctx context.Context, key string) (
200242
if err != nil {
201243
return nil, nil, errors.WithStack(err)
202244
}
245+
246+
// Log
247+
logger.Debugf("List objects done with success")
203248
}
204249

205250
// Concat folders and files
@@ -219,6 +264,9 @@ func (s3cl *s3client) ListFilesAndDirectories(ctx context.Context, key string) (
219264

220265
// GetObject Get object from S3 bucket.
221266
func (s3cl *s3client) GetObject(ctx context.Context, input *GetInput) (*GetOutput, *ResultInfo, error) {
267+
// Build input
268+
s3Input := s3cl.buildGetObjectInputFromInput(input)
269+
222270
// Get trace
223271
parentTrace := tracing.GetTraceFromContext(ctx)
224272
// Create child trace
@@ -227,19 +275,28 @@ func (s3cl *s3client) GetObject(ctx context.Context, input *GetInput) (*GetOutpu
227275
childTrace.SetTag("s3-bucket.bucket-region", s3cl.target.Bucket.Region)
228276
childTrace.SetTag("s3-bucket.bucket-prefix", s3cl.target.Bucket.Prefix)
229277
childTrace.SetTag("s3-bucket.bucket-s3-endpoint", s3cl.target.Bucket.S3Endpoint)
278+
childTrace.SetTag("s3-bucket.bucket-key", *s3Input.Key)
230279
childTrace.SetTag("s3-proxy.target-name", s3cl.target.Name)
231280

232281
defer childTrace.Finish()
233282

234-
// Build input
235-
s3Input := s3cl.buildGetObjectInputFromInput(input)
236-
237283
// Init & get request headers
238284
var requestHeaders map[string]string
239285
if s3cl.target.Bucket.RequestConfig != nil {
240286
requestHeaders = s3cl.target.Bucket.RequestConfig.GetHeaders
241287
}
242288

289+
// Get logger
290+
logger := log.GetLoggerFromContext(ctx)
291+
// Build logger
292+
logger = logger.WithFields(map[string]interface{}{
293+
"bucket": s3cl.target.Bucket.Name,
294+
"key": *s3Input.Key,
295+
"region": s3cl.target.Bucket.Region,
296+
})
297+
// Log
298+
logger.Debugf("Trying to get object")
299+
243300
obj, err := s3cl.svcClient.GetObjectWithContext(
244301
ctx,
245302
s3Input,
@@ -324,10 +381,21 @@ func (s3cl *s3client) GetObject(ctx context.Context, input *GetInput) (*GetOutpu
324381
Key: input.Key,
325382
}
326383

384+
// Log
385+
logger.Debugf("Get object done with success")
386+
327387
return output, info, nil
328388
}
329389

330390
func (s3cl *s3client) PutObject(ctx context.Context, input *PutInput) (*ResultInfo, error) {
391+
// Build input
392+
inp := &s3manager.UploadInput{
393+
Body: input.Body,
394+
Bucket: aws.String(s3cl.target.Bucket.Name),
395+
Key: aws.String(input.Key),
396+
Expires: input.Expires,
397+
}
398+
331399
// Get trace
332400
parentTrace := tracing.GetTraceFromContext(ctx)
333401
// Create child trace
@@ -336,16 +404,21 @@ func (s3cl *s3client) PutObject(ctx context.Context, input *PutInput) (*ResultIn
336404
childTrace.SetTag("s3-bucket.bucket-region", s3cl.target.Bucket.Region)
337405
childTrace.SetTag("s3-bucket.bucket-prefix", s3cl.target.Bucket.Prefix)
338406
childTrace.SetTag("s3-bucket.bucket-s3-endpoint", s3cl.target.Bucket.S3Endpoint)
407+
childTrace.SetTag("s3-bucket.bucket-key", *inp.Key)
339408
childTrace.SetTag("s3-proxy.target-name", s3cl.target.Name)
340409

341410
defer childTrace.Finish()
342411

343-
inp := &s3manager.UploadInput{
344-
Body: input.Body,
345-
Bucket: aws.String(s3cl.target.Bucket.Name),
346-
Key: aws.String(input.Key),
347-
Expires: input.Expires,
348-
}
412+
// Get logger
413+
logger := log.GetLoggerFromContext(ctx)
414+
// Build logger
415+
logger = logger.WithFields(map[string]interface{}{
416+
"bucket": s3cl.target.Bucket.Name,
417+
"key": *inp.Key,
418+
"region": s3cl.target.Bucket.Region,
419+
})
420+
// Log
421+
logger.Debugf("Trying to put object")
349422

350423
// Manage ACL
351424
if s3cl.target.Actions != nil &&
@@ -416,6 +489,9 @@ func (s3cl *s3client) PutObject(ctx context.Context, input *PutInput) (*ResultIn
416489
Key: input.Key,
417490
}
418491

492+
// Log
493+
logger.Debugf("Put object done with success")
494+
419495
// Return
420496
return info, nil
421497
}
@@ -429,10 +505,22 @@ func (s3cl *s3client) HeadObject(ctx context.Context, key string) (*HeadOutput,
429505
childTrace.SetTag("s3-bucket.bucket-region", s3cl.target.Bucket.Region)
430506
childTrace.SetTag("s3-bucket.bucket-prefix", s3cl.target.Bucket.Prefix)
431507
childTrace.SetTag("s3-bucket.bucket-s3-endpoint", s3cl.target.Bucket.S3Endpoint)
508+
childTrace.SetTag("s3-bucket.bucket-key", key)
432509
childTrace.SetTag("s3-proxy.target-name", s3cl.target.Name)
433510

434511
defer childTrace.Finish()
435512

513+
// Get logger
514+
logger := log.GetLoggerFromContext(ctx)
515+
// Build logger
516+
logger = logger.WithFields(map[string]interface{}{
517+
"bucket": s3cl.target.Bucket.Name,
518+
"key": key,
519+
"region": s3cl.target.Bucket.Region,
520+
})
521+
// Log
522+
logger.Debugf("Trying to head object")
523+
436524
// Init & get request headers
437525
var requestHeaders map[string]string
438526
if s3cl.target.Bucket.RequestConfig != nil {
@@ -469,6 +557,10 @@ func (s3cl *s3client) HeadObject(ctx context.Context, key string) (*HeadOutput,
469557
Type: FileType,
470558
Key: key,
471559
}
560+
561+
// Log
562+
logger.Debugf("Head object done with success")
563+
472564
// Return output
473565
return output, nil
474566
}
@@ -482,10 +574,22 @@ func (s3cl *s3client) DeleteObject(ctx context.Context, key string) (*ResultInfo
482574
childTrace.SetTag("s3-bucket.bucket-region", s3cl.target.Bucket.Region)
483575
childTrace.SetTag("s3-bucket.bucket-prefix", s3cl.target.Bucket.Prefix)
484576
childTrace.SetTag("s3-bucket.bucket-s3-endpoint", s3cl.target.Bucket.S3Endpoint)
577+
childTrace.SetTag("s3-bucket.bucket-key", key)
485578
childTrace.SetTag("s3-proxy.target-name", s3cl.target.Name)
486579

487580
defer childTrace.Finish()
488581

582+
// Get logger
583+
logger := log.GetLoggerFromContext(ctx)
584+
// Build logger
585+
logger = logger.WithFields(map[string]interface{}{
586+
"bucket": s3cl.target.Bucket.Name,
587+
"key": key,
588+
"region": s3cl.target.Bucket.Region,
589+
})
590+
// Log
591+
logger.Debugf("Trying to delete object")
592+
489593
// Init & get request headers
490594
var requestHeaders map[string]string
491595
if s3cl.target.Bucket.RequestConfig != nil {
@@ -517,6 +621,9 @@ func (s3cl *s3client) DeleteObject(ctx context.Context, key string) (*ResultInfo
517621
Key: key,
518622
}
519623

624+
// Log
625+
logger.Debugf("Delete object done with success")
626+
520627
// Return
521628
return info, nil
522629
}

pkg/s3-proxy/server/server_integration_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3698,6 +3698,7 @@ func TestPublicRouter(t *testing.T) {
36983698
cfgManagerMock.EXPECT().GetConfig().AnyTimes().Return(tt.args.cfg)
36993699

37003700
logger := log.NewLogger()
3701+
logger.Configure("DEBUG", "human", "")
37013702
// Create tracing service
37023703
tsvc, err := tracing.New(cfgManagerMock, logger)
37033704
assert.NoError(t, err)

0 commit comments

Comments
 (0)