Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

contrib/aws/{aws-sdk-go/aws, aws-sdk-go-v2/aws}: add context example #1504

Merged
merged 12 commits into from
Nov 28, 2023
74 changes: 74 additions & 0 deletions contrib/aws/aws-sdk-go-v2/aws/doc.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
// Unless explicitly stated otherwise all files in this repository are licensed
// under the Apache License Version 2.0.
// This product includes software developed at Datadog (https://www.datadoghq.com/).
// Copyright 2016 Datadog, Inc.

// Package aws provides functions to trace aws/aws-sdk-go-v2 (https://github.com/aws/aws-sdk-go-v2).
//
// Usage Example:
//
// import (
// "context"
// "log"
// "os"
//
// "github.com/aws/aws-sdk-go-v2/aws"
// awscfg "github.com/aws/aws-sdk-go-v2/config"
// "github.com/aws/aws-sdk-go-v2/feature/s3/manager"
// "github.com/aws/aws-sdk-go-v2/service/s3"
// "github.com/aws/aws-sdk-go-v2/service/sqs"
//
// awstrace "gopkg.in/DataDog/dd-trace-go.v1/contrib/aws/aws-sdk-go-v2/aws"
// "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext"
// "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer"
// )
//
// func Example() {
// awsCfg, err := awscfg.LoadDefaultConfig(context.Background())
// if err != nil {
// log.Fatalf(err.Error())
// }
// awstrace.AppendMiddleware(&awsCfg)
// sqsClient := sqs.NewFromConfig(awsCfg)
// sqsClient.ListQueues(context.Background(), &sqs.ListQueuesInput{})
// }
//
// // An example of the aws span inheriting a parent span from context.
// func Example_context() {
// cfg, err := awscfg.LoadDefaultConfig(context.TODO(), awscfg.WithRegion("us-west-2"))
// if err != nil {
// log.Fatalf("error: %v", err)
// }
// awstrace.AppendMiddleware(&cfg)
// client := s3.NewFromConfig(cfg)
// uploader := manager.NewUploader(client)
//
// // Create a root span.
// span, ctx := tracer.StartSpanFromContext(context.Background(), "parent.request",
// tracer.SpanType(ext.SpanTypeWeb),
// tracer.ServiceName("web"),
// tracer.ResourceName("/upload"),
// )
// defer span.Finish()
//
// // Open image file.
// filename := "my_image.png"
// file, err := os.Open(filename)
// if err != nil {
// log.Fatalf("error: %v", err)
// }
// defer file.Close()
//
// uploadParams := &s3.PutObjectInput{
// Bucket: aws.String("my_bucket"),
// Key: aws.String(filename),
// Body: file,
// ContentType: aws.String("image/png"),
// }
// // Inherit parent span from context.
// _, err = uploader.Upload(ctx, uploadParams)
// if err != nil {
// log.Fatalf("error: %v", err)
// }
// }
Comment on lines +6 to +73
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If this is just a copy of the example we already have in example_test, then I'm not sure it adds too much extra value. I'm not sure if @ajgajg1134 was suggesting this during his last comment, or if he was suggesting something else...
I'd personally just remove this but keep the example code.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

func Example is a copy from example_test, but func Example_context was added, which is an example that demonstrate how to pass context.

The reason we moved all of this out of from example_test is to avoid adding entries to the go.mod that are necessary for func Example_context (for github.com/aws/aws-sdk-go-v2/feature/s3/manager and github.com/aws/aws-sdk-go-v2/service/s3)

package aws
22 changes: 1 addition & 21 deletions contrib/aws/aws-sdk-go-v2/aws/example_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,24 +5,4 @@

package aws_test

import (
"context"
"log"

awstrace "gopkg.in/DataDog/dd-trace-go.v1/contrib/aws/aws-sdk-go-v2/aws"

awscfg "github.com/aws/aws-sdk-go-v2/config"
"github.com/aws/aws-sdk-go-v2/service/sqs"
)

func Example() {
awsCfg, err := awscfg.LoadDefaultConfig(context.Background())
if err != nil {
log.Fatalf(err.Error())
}

awstrace.AppendMiddleware(&awsCfg)

sqsClient := sqs.NewFromConfig(awsCfg)
sqsClient.ListQueues(context.Background(), &sqs.ListQueuesInput{})
}
// The example was moved into the package godoc to avoid adding its dependencies into dd-trace-go's go.mod file.
43 changes: 43 additions & 0 deletions contrib/aws/aws-sdk-go/aws/example_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,18 @@
package aws_test

import (
"context"
"log"
"os"

awstrace "gopkg.in/DataDog/dd-trace-go.v1/contrib/aws/aws-sdk-go/aws"
"gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext"
"gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer"

"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/session"
"github.com/aws/aws-sdk-go/service/s3"
"github.com/aws/aws-sdk-go/service/s3/s3manager"
)

// To start tracing requests, wrap the AWS session.Session by invoking
Expand All @@ -25,3 +32,39 @@ func Example() {
Bucket: aws.String("some-bucket-name"),
})
}

// An example of the aws span inheriting a parent span from context.
func Example_context() {
cfg := aws.NewConfig().WithRegion("us-west-2")
sess := session.Must(session.NewSession(cfg))
sess = awstrace.WrapSession(sess)
uploader := s3manager.NewUploader(sess)

// Create a root span.
span, ctx := tracer.StartSpanFromContext(context.Background(), "parent.request",
tracer.SpanType(ext.SpanTypeWeb),
tracer.ServiceName("web"),
tracer.ResourceName("/upload"),
)
defer span.Finish()

// Open image file.
filename := "my_image.png"
file, err := os.Open(filename)
if err != nil {
log.Fatalf("error: %v", err)
}
defer file.Close()

uploadParams := &s3manager.UploadInput{
Bucket: aws.String("my_bucket"),
Key: aws.String(filename),
Body: file,
ContentType: aws.String("image/png"),
}
// Inherit parent span from context.
_, err = uploader.UploadWithContext(ctx, uploadParams)
if err != nil {
log.Fatalf("error: %v", err)
}
}
Loading