()
| 190 | } |
| 191 | |
| 192 | func (m *Manager) otHandler() func(*request.Request) { |
| 193 | tracer := m.tracer |
| 194 | |
| 195 | return func(r *request.Request) { |
| 196 | var sp opentracing.Span |
| 197 | |
| 198 | ctx := r.Context() |
| 199 | if ctx == nil || opentracing.IsGlobalTracerRegistered() { |
| 200 | sp = tracer.StartSpan(r.Operation.Name) |
| 201 | } else { |
| 202 | sp, ctx = opentracing.StartSpanFromContextWithTracer(ctx, tracer, r.Operation.Name) |
| 203 | r.SetContext(ctx) |
| 204 | } |
| 205 | ext.SpanKindRPCClient.Set(sp) |
| 206 | ext.Component.Set(sp, "go-aws") |
| 207 | ext.HTTPMethod.Set(sp, r.Operation.HTTPMethod) |
| 208 | ext.HTTPUrl.Set(sp, r.HTTPRequest.URL.String()) |
| 209 | ext.PeerService.Set(sp, r.ClientInfo.ServiceName) |
| 210 | |
| 211 | _ = inject(tracer, sp, r.HTTPRequest.Header) |
| 212 | |
| 213 | r.Handlers.Complete.PushBack(func(req *request.Request) { |
| 214 | if req.HTTPResponse != nil { |
| 215 | ext.HTTPStatusCode.Set(sp, uint16(req.HTTPResponse.StatusCode)) |
| 216 | } else { |
| 217 | ext.LogError(sp, errors.New("PushBack HTTPResponse is Nil")) |
| 218 | } |
| 219 | sp.Finish() |
| 220 | }) |
| 221 | |
| 222 | r.Handlers.Retry.PushBack(func(req *request.Request) { |
| 223 | sp.LogFields(log.String("event", "retry")) |
| 224 | }) |
| 225 | } |
| 226 | } |
| 227 | |
| 228 | func inject(tracer opentracing.Tracer, span opentracing.Span, header http.Header) error { |
| 229 | return tracer.Inject(span.Context(), opentracing.HTTPHeaders, opentracing.HTTPHeadersCarrier(header)) |
no test coverage detected