@@ -6,9 +6,10 @@ package awsxrayexporter // import "github.com/open-telemetry/opentelemetry-colle
6
6
import (
7
7
"context"
8
8
"errors"
9
+ "fmt"
9
10
10
- "github.com/aws/aws-sdk-go/aws/awserr "
11
- "github.com/aws/aws-sdk-go/service/xray "
11
+ "github.com/aws/aws-sdk-go-v2/service/xray "
12
+ "github.com/aws/smithy-go "
12
13
"go.opentelemetry.io/collector/component"
13
14
"go.opentelemetry.io/collector/consumer/consumererror"
14
15
"go.opentelemetry.io/collector/exporter"
@@ -28,31 +29,23 @@ const (
28
29
29
30
// newTracesExporter creates an exporter.Traces that converts to an X-Ray PutTraceSegments
30
31
// request and then posts the request to the configured region's X-Ray endpoint.
31
- func newTracesExporter (
32
- cfg * Config ,
33
- set exporter.Settings ,
34
- cn awsutil.ConnAttr ,
35
- registry telemetry.Registry ,
36
- ) (exporter.Traces , error ) {
32
+ func newTracesExporter (ctx context.Context , cfg * Config , set exporter.Settings , registry telemetry.Registry ) (exporter.Traces , error ) {
37
33
typeLog := zap .String ("type" , set .ID .Type ().String ())
38
34
nameLog := zap .String ("name" , set .ID .String ())
39
35
logger := set .Logger
40
- awsConfig , session , err := awsutil .GetAWSConfigSession (logger , cn , & cfg .AWSSessionSettings )
36
+ awsConfig , err := awsutil .GetAWSConfig (logger , & cfg .AWSSessionSettings )
41
37
if err != nil {
42
38
return nil , err
43
39
}
44
- xrayClient := awsxray .NewXRayClient (logger , awsConfig , set .BuildInfo , session )
40
+ xrayClient := awsxray .NewXRayClient (logger , awsConfig , set .BuildInfo )
45
41
sender := telemetry .NewNopSender ()
46
42
if cfg .TelemetryConfig .Enabled {
47
- opts := telemetry .ToOptions (cfg .TelemetryConfig , session , & cfg .AWSSessionSettings )
43
+ opts := telemetry .ToOptions (ctx , cfg .TelemetryConfig , awsConfig , & cfg .AWSSessionSettings )
48
44
opts = append (opts , telemetry .WithLogger (set .Logger ))
49
45
sender = registry .Register (set .ID , cfg .TelemetryConfig , xrayClient , opts ... )
50
46
}
51
- return exporterhelper .NewTraces (
52
- context .TODO (),
53
- set ,
54
- cfg ,
55
- func (_ context.Context , td ptrace.Traces ) error {
47
+ return exporterhelper .NewTraces (context .Background (), set , cfg ,
48
+ func (ctx context.Context , td ptrace.Traces ) error {
56
49
var err error
57
50
logger .Debug ("TracesExporter" , typeLog , nameLog , zap .Int ("#spans" , td .SpanCount ()))
58
51
@@ -65,9 +58,9 @@ func newTracesExporter(
65
58
} else {
66
59
nextOffset = offset + maxSegmentsPerPut
67
60
}
68
- input := xray.PutTraceSegmentsInput {TraceSegmentDocuments : documents [offset :nextOffset ]}
69
- logger .Debug ("request: " + input . String ( ))
70
- output , localErr := xrayClient .PutTraceSegments (& input )
61
+ input := & xray.PutTraceSegmentsInput {TraceSegmentDocuments : documents [offset :nextOffset ]}
62
+ logger .Debug ("request: " + fmt . Sprintf ( "%+v" , input ))
63
+ output , localErr := xrayClient .PutTraceSegments (ctx , input )
71
64
if localErr != nil {
72
65
logger .Debug ("response error" , zap .Error (localErr ))
73
66
err = wrapErrorIfBadRequest (localErr ) // record error
@@ -76,7 +69,7 @@ func newTracesExporter(
76
69
sender .RecordSegmentsSent (len (input .TraceSegmentDocuments ))
77
70
}
78
71
if output != nil {
79
- logger .Debug ("response: " + output . String ( ))
72
+ logger .Debug ("response: " + fmt . Sprintf ( "%+v" , output ))
80
73
}
81
74
if err != nil {
82
75
break
@@ -85,7 +78,7 @@ func newTracesExporter(
85
78
return err
86
79
},
87
80
exporterhelper .WithStart (func (context.Context , component.Host ) error {
88
- sender .Start ()
81
+ sender .Start (ctx )
89
82
return nil
90
83
}),
91
84
exporterhelper .WithShutdown (func (context.Context ) error {
@@ -96,8 +89,8 @@ func newTracesExporter(
96
89
)
97
90
}
98
91
99
- func extractResourceSpans (config component.Config , logger * zap.Logger , td ptrace.Traces ) []* string {
100
- documents := make ([]* string , 0 , td .SpanCount ())
92
+ func extractResourceSpans (config component.Config , logger * zap.Logger , td ptrace.Traces ) []string {
93
+ documents := make ([]string , 0 , td .SpanCount ())
101
94
102
95
for i := 0 ; i < td .ResourceSpans ().Len (); i ++ {
103
96
rspans := td .ResourceSpans ().At (i )
@@ -117,19 +110,18 @@ func extractResourceSpans(config component.Config, logger *zap.Logger, td ptrace
117
110
continue
118
111
}
119
112
120
- for l := range documentsForSpan {
121
- documents = append (documents , & documentsForSpan [l ])
122
- }
113
+ documents = append (documents , documentsForSpan ... )
123
114
}
124
115
}
125
116
}
126
117
return documents
127
118
}
128
119
129
120
func wrapErrorIfBadRequest (err error ) error {
130
- var rfErr awserr. RequestFailure
131
- if errors .As (err , & rfErr ) && rfErr . StatusCode () < 500 {
121
+ var ae smithy. APIError
122
+ if errors .As (err , & ae ) && ae . ErrorFault () == smithy . FaultClient {
132
123
return consumererror .NewPermanent (err )
133
124
}
125
+
134
126
return err
135
127
}
0 commit comments