Skip to content

Commit

Permalink
Add new localstack tracer to return tracing headers set by invoke (#31)
Browse files Browse the repository at this point in the history
  • Loading branch information
dfangl authored Feb 6, 2024
1 parent a252c82 commit e063557
Show file tree
Hide file tree
Showing 2 changed files with 66 additions and 1 deletion.
4 changes: 3 additions & 1 deletion cmd/localstack/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -178,6 +178,7 @@ func main() {

logCollector := NewLogCollector()
localStackLogsEgressApi := NewLocalStackLogsEgressAPI(logCollector)
tracer := NewLocalStackTracer()

// build sandbox
sandbox := rapidcore.
Expand All @@ -191,7 +192,8 @@ func main() {
}).
SetExtensionsFlag(true).
SetInitCachingFlag(true).
SetLogsEgressAPI(localStackLogsEgressApi)
SetLogsEgressAPI(localStackLogsEgressApi).
SetTracer(tracer)

// xray daemon
endpoint := "http://" + lsOpts.LocalstackIP + ":" + lsOpts.EdgePort
Expand Down
63 changes: 63 additions & 0 deletions cmd/localstack/tracer.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
package main

import (
"context"
"encoding/json"
"go.amzn.com/lambda/appctx"
"go.amzn.com/lambda/interop"
)

type LocalStackTracer struct {
invoke *interop.Invoke
}

func (t *LocalStackTracer) Configure(invoke *interop.Invoke) {
t.invoke = invoke
}

func (t *LocalStackTracer) CaptureInvokeSegment(ctx context.Context, criticalFunction func(context.Context) error) error {
return criticalFunction(ctx)
}

func (t *LocalStackTracer) CaptureInitSubsegment(ctx context.Context, criticalFunction func(context.Context) error) error {
return criticalFunction(ctx)
}

func (t *LocalStackTracer) CaptureInvokeSubsegment(ctx context.Context, criticalFunction func(context.Context) error) error {
return criticalFunction(ctx)
}

func (t *LocalStackTracer) CaptureOverheadSubsegment(ctx context.Context, criticalFunction func(context.Context) error) error {
return criticalFunction(ctx)
}

func (t *LocalStackTracer) RecordInitStartTime() {}
func (t *LocalStackTracer) RecordInitEndTime() {}
func (t *LocalStackTracer) SendInitSubsegmentWithRecordedTimesOnce(ctx context.Context) {}
func (t *LocalStackTracer) SendRestoreSubsegmentWithRecordedTimesOnce(ctx context.Context) {}
func (t *LocalStackTracer) MarkError(ctx context.Context) {}
func (t *LocalStackTracer) AttachErrorCause(ctx context.Context, errorCause json.RawMessage) {}

func (t *LocalStackTracer) WithErrorCause(ctx context.Context, appCtx appctx.ApplicationContext, criticalFunction func(ctx context.Context) error) func(ctx context.Context) error {
return criticalFunction
}
func (t *LocalStackTracer) WithError(ctx context.Context, appCtx appctx.ApplicationContext, criticalFunction func(ctx context.Context) error) func(ctx context.Context) error {
return criticalFunction
}
func (t *LocalStackTracer) BuildTracingHeader() func(context.Context) string {
// extract root trace ID and parent from context and build the tracing header
return func(ctx context.Context) string {
return t.invoke.TraceID
}
}

func (t *LocalStackTracer) BuildTracingCtxForStart() *interop.TracingCtx {
return nil
}
func (t *LocalStackTracer) BuildTracingCtxAfterInvokeComplete() *interop.TracingCtx {
return nil
}

func NewLocalStackTracer() *LocalStackTracer {
return &LocalStackTracer{}
}

0 comments on commit e063557

Please sign in to comment.