Skip to content

remove obselete code, make sqs simpler #73

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

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 0 additions & 17 deletions example/strsvc/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,21 +26,13 @@ func main() {
)
ep := mw(strsvc.NewEndpoint())

// connect endpoint to SQS
sqsTransport := awslambdago.NewSQSTransport(
false,
strsvc.DecodeSQS,
ep,
)

// connect endpoint to APIGateway
apiGWTransport := awslambdago.NewAPIGatewayTransport(
strsvc.DecodeAPIGateway,
strsvc.EncodeAPIGateway,
strsvc.EncodeErrorAPIGateway,
ep,
)
apiGWTransport = awslambdago.NewAPIGatewayTracingMiddleware(apiGWTransport, otel.GetTracerProvider())

// connect to HTTP
httpServer := boxhttp.NewHTTPServer(
Expand Down Expand Up @@ -83,15 +75,6 @@ func main() {
}
body := base64.StdEncoding.EncodeToString(marshalledM)

// simulate SQS invocation
sqsResp, _ := sqsTransport(
context.Background(),
&events.SQSEvent{Records: []events.SQSMessage{
{Body: body, MessageId: "the message"},
}},
)
log.Printf("sqs: %#v", sqsResp)

// simulate APIGateway invocation
apiGWResp, err := apiGWTransport(
context.Background(),
Expand Down
9 changes: 1 addition & 8 deletions go.mod
Original file line number Diff line number Diff line change
@@ -1,21 +1,14 @@
module github.com/jan-xyz/box

go 1.20
go 1.23

require (
github.com/aws/aws-lambda-go v1.47.0
go.opentelemetry.io/otel v1.24.0
go.opentelemetry.io/otel/metric v1.24.0
go.opentelemetry.io/otel/sdk v1.24.0
go.opentelemetry.io/otel/trace v1.24.0
)

require (
github.com/go-logr/logr v1.4.1 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
golang.org/x/sys v0.17.0 // indirect
)

require (
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
Expand Down
6 changes: 1 addition & 5 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,12 @@ github.com/aws/aws-lambda-go v1.47.0 h1:0H8s0vumYx/YKs4sE7YM0ktwL2eWse+kfopsRI1s
github.com/aws/aws-lambda-go v1.47.0/go.mod h1:dpMpZgvWx5vuQJfBt0zqBha60q7Dd7RfgJv23DymV8A=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ=
github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
Expand All @@ -16,12 +16,8 @@ go.opentelemetry.io/otel v1.24.0 h1:0LAOdjNmQeSTzGBzduGe/rU4tZhMwL5rWgtp9Ku5Jfo=
go.opentelemetry.io/otel v1.24.0/go.mod h1:W7b9Ozg4nkF5tWI5zsXkaKKDjdVjpD4oAt9Qi/MArHo=
go.opentelemetry.io/otel/metric v1.24.0 h1:6EhoGWWK28x1fbpA4tYTOWBkPefTDQnb8WSGXlc88kI=
go.opentelemetry.io/otel/metric v1.24.0/go.mod h1:VYhLe1rFfxuTXLgj4CBiyz+9WYBA8pNGJgDcSFRKBco=
go.opentelemetry.io/otel/sdk v1.24.0 h1:YMPPDNymmQN3ZgczicBY3B6sf9n62Dlj9pWD3ucgoDw=
go.opentelemetry.io/otel/sdk v1.24.0/go.mod h1:KVrIYw6tEubO9E96HQpcmpTKDVn9gdv35HoYiQWGDFg=
go.opentelemetry.io/otel/trace v1.24.0 h1:CsKnnL4dUAr/0llH9FKuc698G04IrpWV0MQA/Y1YELI=
go.opentelemetry.io/otel/trace v1.24.0/go.mod h1:HPc3Xr/cOApsBI154IU0OI0HJexz+aw5uPdbs3UCjNU=
golang.org/x/sys v0.17.0 h1:25cE3gD+tdBA7lp7QfhuV+rJiE9YXTcS3VG1SqssI/Y=
golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
Expand Down
4 changes: 4 additions & 0 deletions go.work.sum
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
25 changes: 0 additions & 25 deletions transports/github.com/aws/aws-lambda-go/api_gateway.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,6 @@ import (

"github.com/aws/aws-lambda-go/events"
"github.com/jan-xyz/box"
"go.opentelemetry.io/otel/codes"
semconv "go.opentelemetry.io/otel/semconv/v1.18.0"
"go.opentelemetry.io/otel/trace"
)

type APIGatewayTransport = func(ctx context.Context, req *events.APIGatewayProxyRequest) (*events.APIGatewayProxyResponse, error)
Expand Down Expand Up @@ -37,28 +34,6 @@ func NewAPIGatewayTransport[TIn, TOut any](
}
}

// implements https://opentelemetry.io/docs/reference/specification/trace/semantic_conventions/instrumentation/aws-lambda/#api-gateway
func NewAPIGatewayTracingMiddleware(transport APIGatewayTransport, tp trace.TracerProvider) APIGatewayTransport {
tracer := tp.Tracer(box.TracerName)

return func(ctx context.Context, req *events.APIGatewayProxyRequest) (*events.APIGatewayProxyResponse, error) {
ctx, span := tracer.Start(ctx, req.Resource, trace.WithAttributes(
semconv.HTTPRoute(req.Resource),
semconv.FaaSTriggerHTTP,
semconv.HTTPScheme(req.Headers["x-forwarded-proto"]),
semconv.HTTPMethod(req.HTTPMethod),
))
defer span.End()

resp, err := transport(ctx, req)
span.SetAttributes(semconv.HTTPStatusCode(resp.StatusCode))
if resp.StatusCode >= 500 {
span.SetStatus(codes.Error, "")
}
return resp, err
}
}

// adds a default HSTS header to the APIGateway response. If the maxAge is 0, it will default to `63072000` seconds
func NewAPIGatewayHSTSMiddleware(transport APIGatewayTransport, maxAge time.Duration) APIGatewayTransport {
if maxAge == 0 {
Expand Down
42 changes: 0 additions & 42 deletions transports/github.com/aws/aws-lambda-go/api_gateway_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,6 @@ import (
"github.com/aws/aws-lambda-go/events"
"github.com/aws/aws-lambda-go/lambda"
"github.com/stretchr/testify/assert"
"go.opentelemetry.io/otel/attribute"
sdktrace "go.opentelemetry.io/otel/sdk/trace"
"go.opentelemetry.io/otel/sdk/trace/tracetest"
semconv "go.opentelemetry.io/otel/semconv/v1.18.0"
)

func makeSureAPIGatewayTransportHasCorrectSignature() {
Expand Down Expand Up @@ -111,44 +107,6 @@ func Test_APIGateway_Handle(t *testing.T) {
}
}

func Test_APIGateway_TracingMiddleware(t *testing.T) {
// given
sr := tracetest.NewSpanRecorder()
tp := sdktrace.NewTracerProvider(sdktrace.WithSpanProcessor(sr))
h := NewAPIGatewayTransport(
func(*events.APIGatewayProxyRequest) (string, error) { return "", nil },
func(string) (*events.APIGatewayProxyResponse, error) { return &events.APIGatewayProxyResponse{}, nil },
func(error) *events.APIGatewayProxyResponse { return &events.APIGatewayProxyResponse{} },
func(context.Context, string) (string, error) { return "", nil },
)
mw := NewAPIGatewayTracingMiddleware(h, tp)

// when
input := &events.APIGatewayProxyRequest{
Resource: "some-resource",
HTTPMethod: "POST",
Headers: map[string]string{"x-forwarded-proto": "https"},
}
got, err := mw(context.Background(), input)

// then
assert.NoError(t, err)
want := &events.APIGatewayProxyResponse{}
assert.Equal(t, want, got)

spans := sr.Ended()
wantSpanAttributes := []attribute.KeyValue{
semconv.HTTPRoute("some-resource"),
semconv.FaaSTriggerHTTP,
semconv.HTTPScheme("https"),
semconv.HTTPMethod("POST"),
semconv.HTTPStatusCode(0),
}
assert.Len(t, spans, 1)
assert.ElementsMatch(t, wantSpanAttributes, spans[0].Attributes())
assert.Equal(t, "some-resource", spans[0].Name())
}

func Test_APIGateway_HSTSMiddleware(t *testing.T) {
testCases := []struct {
desc string
Expand Down
21 changes: 2 additions & 19 deletions transports/github.com/aws/aws-lambda-go/sqs.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,16 +5,14 @@ import (

"github.com/aws/aws-lambda-go/events"
"github.com/jan-xyz/box"
semconv "go.opentelemetry.io/otel/semconv/v1.18.0"
"go.opentelemetry.io/otel/trace"
)

type SQSTransport = func(ctx context.Context, e *events.SQSEvent) (*events.SQSEventResponse, error)

func NewSQSTransport[TIn, TOut any](
func NewSQSTransport[TIn any](
fifo bool,
decode func(events.SQSMessage) (TIn, error),
endpoint box.Endpoint[TIn, TOut],
endpoint box.Endpoint[TIn, any],
) SQSTransport {
return func(ctx context.Context, e *events.SQSEvent) (*events.SQSEventResponse, error) {
resp := &events.SQSEventResponse{}
Expand All @@ -39,18 +37,3 @@ func NewSQSTransport[TIn, TOut any](
return resp, nil
}
}

// implementation of https://opentelemetry.io/docs/reference/specification/trace/semantic_conventions/instrumentation/aws-lambda/#sqs
func NewSQSTracingMiddleware(transport SQSTransport, tp trace.TracerProvider) SQSTransport {
tracer := tp.Tracer(box.TracerName)
return func(ctx context.Context, e *events.SQSEvent) (*events.SQSEventResponse, error) {
ctx, span := tracer.Start(ctx, "multiple_sources process", trace.WithAttributes(
semconv.FaaSTriggerPubsub,
semconv.MessagingOperationProcess,
semconv.MessagingSystem("AmazonSQS"),
semconv.MessagingSourceKindQueue,
))
defer span.End()
return transport(ctx, e)
}
}
47 changes: 6 additions & 41 deletions transports/github.com/aws/aws-lambda-go/sqs_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,17 +8,13 @@ import (
"github.com/aws/aws-lambda-go/events"
"github.com/aws/aws-lambda-go/lambda"
"github.com/stretchr/testify/assert"
"go.opentelemetry.io/otel/attribute"
sdktrace "go.opentelemetry.io/otel/sdk/trace"
"go.opentelemetry.io/otel/sdk/trace/tracetest"
semconv "go.opentelemetry.io/otel/semconv/v1.18.0"
)

func makeSureSQSTransportHasCorrectSignature() {
h := NewSQSTransport(
true,
func(events.SQSMessage) (string, error) { return "", nil },
func(context.Context, string) (string, error) { return "", nil },
func(context.Context, string) (any, error) { return nil, nil },
)
lambda.StartHandlerFunc(h)
}
Expand All @@ -28,7 +24,7 @@ func Test_SQS_Handle(t *testing.T) {
desc string
fifo bool
decodeFunc func(events.SQSMessage) (string, error)
ep func(context.Context, string) (string, error)
ep func(context.Context, string) (any, error)
input *events.SQSEvent
want *events.SQSEventResponse
}{
Expand All @@ -38,7 +34,7 @@ func Test_SQS_Handle(t *testing.T) {
decodeFunc: func(events.SQSMessage) (string, error) {
return "", nil
},
ep: func(context.Context, string) (string, error) {
ep: func(context.Context, string) (any, error) {
return "", nil
},
input: &events.SQSEvent{
Expand All @@ -52,7 +48,7 @@ func Test_SQS_Handle(t *testing.T) {
decodeFunc: func(ev events.SQSMessage) (string, error) {
return "", errors.New("boom")
},
ep: func(context.Context, string) (string, error) {
ep: func(context.Context, string) (any, error) {
panic("don't call this")
},
input: &events.SQSEvent{
Expand All @@ -70,7 +66,7 @@ func Test_SQS_Handle(t *testing.T) {
decodeFunc: func(ev events.SQSMessage) (string, error) {
return ev.Body, nil
},
ep: func(_ context.Context, input string) (string, error) {
ep: func(_ context.Context, input string) (any, error) {
if input == "first" {
return "", errors.New("boom")
}
Expand All @@ -92,7 +88,7 @@ func Test_SQS_Handle(t *testing.T) {
decodeFunc: func(ev events.SQSMessage) (string, error) {
return ev.Body, nil
},
ep: func(_ context.Context, input string) (string, error) {
ep: func(_ context.Context, input string) (any, error) {
if input == "first" {
return "", errors.New("boom")
}
Expand Down Expand Up @@ -124,34 +120,3 @@ func Test_SQS_Handle(t *testing.T) {
})
}
}

func Test_SQS_TracingMiddleware(t *testing.T) {
// given
sr := tracetest.NewSpanRecorder()
tp := sdktrace.NewTracerProvider(sdktrace.WithSpanProcessor(sr))
h := NewSQSTransport(
true,
func(events.SQSMessage) (string, error) { return "", nil },
func(context.Context, string) (string, error) { return "", nil },
)
mw := NewSQSTracingMiddleware(h, tp)

// when
got, err := mw(context.Background(), &events.SQSEvent{})

// then
assert.NoError(t, err)
want := &events.SQSEventResponse{}
assert.Equal(t, want, got)

spans := sr.Ended()
wantSpanAttributes := []attribute.KeyValue{
semconv.FaaSTriggerPubsub,
semconv.MessagingOperationProcess,
semconv.MessagingSystem("AmazonSQS"),
semconv.MessagingSourceKindQueue,
}
assert.Len(t, spans, 1)
assert.ElementsMatch(t, wantSpanAttributes, spans[0].Attributes())
assert.Equal(t, "multiple_sources process", spans[0].Name())
}
Loading