Skip to content

Commit

Permalink
Include more span attributes
Browse files Browse the repository at this point in the history
  • Loading branch information
josephwoodward committed Oct 25, 2022
1 parent 75bec98 commit e5f0273
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 19 deletions.
33 changes: 18 additions & 15 deletions client/opentelemetry.go
Expand Up @@ -7,6 +7,8 @@ import (
"github.com/go-openapi/strfmt"
"go.opentelemetry.io/otel"
"go.opentelemetry.io/otel/attribute"
"go.opentelemetry.io/otel/codes"
semconv "go.opentelemetry.io/otel/semconv/v1.12.0"
"go.opentelemetry.io/otel/trace"
)

Expand All @@ -16,8 +18,7 @@ type openTelemetryTransport struct {
opts []trace.SpanStartOption
}

func newOpenTelemetryTransport(transport runtime.ClientTransport, host string, opts []trace.SpanStartOption,
) runtime.ClientTransport {
func newOpenTelemetryTransport(transport runtime.ClientTransport, host string, opts []trace.SpanStartOption) runtime.ClientTransport {
return &openTelemetryTransport{
transport: transport,
host: host,
Expand Down Expand Up @@ -46,21 +47,21 @@ func (t *openTelemetryTransport) Submit(op *runtime.ClientOperation) (interface{
})

op.Reader = runtime.ClientResponseReaderFunc(func(response runtime.ClientResponse, consumer runtime.Consumer) (interface{}, error) {
// if span != nil {
// code := response.Code()
// ext.HTTPStatusCode.Set(span, uint16(code))
// if code >= http.StatusBadRequest {
// ext.Error.Set(span, true)
// }
// }
if span != nil {
statusCode := response.Code()
span.SetAttributes(attribute.Int(string(semconv.HTTPStatusCodeKey), statusCode))
span.SetStatus(semconv.SpanStatusFromHTTPStatusCodeAndSpanKind(statusCode, trace.SpanKindClient))
}

return reader.ReadResponse(response, consumer)
})

submit, err := t.transport.Submit(op)
// if err != nil && span != nil {
// ext.Error.Set(span, true)
// span.LogFields(log.Error(err))
// }
if err != nil && span != nil {
span.RecordError(err)
span.SetStatus(codes.Error, "")
}

return submit, err
}

Expand All @@ -76,9 +77,11 @@ func createOpenTelemetryClientSpan(op *runtime.ClientOperation, _ http.Header, _
op.Context = ctx

span.SetAttributes(
attribute.String("http.path", op.PathPattern),
attribute.String("http.method", op.Method),
attribute.String(string(semconv.HTTPRouteKey), op.PathPattern),
attribute.String(string(semconv.HTTPMethodKey), op.Method),
attribute.String("span.kind", trace.SpanKindClient.String()),
//TODO: Get scheme reliably from header
attribute.String("http.scheme", "https"),
)

return span
Expand Down
11 changes: 7 additions & 4 deletions client/opentelemetry_test.go
Expand Up @@ -10,6 +10,7 @@ import (

"go.opentelemetry.io/otel"
"go.opentelemetry.io/otel/attribute"
"go.opentelemetry.io/otel/codes"
tracesdk "go.opentelemetry.io/otel/sdk/trace"
"go.opentelemetry.io/otel/sdk/trace/tracetest"
"go.opentelemetry.io/otel/trace"
Expand All @@ -30,7 +31,7 @@ func Test_OpenTelemetryRuntime_submit(t *testing.T) {
tracer := tp.Tracer("go-runtime")
ctx, _ := tracer.Start(context.Background(), "op")

testOpenTelemetrySubmit(t, testOperation(ctx), exporter, 1)
assertOpenTelemetrySubmit(t, testOperation(ctx), exporter, 1)
}

// func Test_OpenTelemetryRuntime_submit_nilAuthInfo(t *testing.T) {
Expand Down Expand Up @@ -62,7 +63,7 @@ func Test_OpenTelemetryRuntime_submit(t *testing.T) {
// assert.Len(t, header, 3)
// }

func testOpenTelemetrySubmit(t *testing.T, operation *runtime.ClientOperation, exporter *tracetest.InMemoryExporter, expectedSpanCount int) {
func assertOpenTelemetrySubmit(t *testing.T, operation *runtime.ClientOperation, exporter *tracetest.InMemoryExporter, expectedSpanCount int) {
header := map[string][]string{}
r := newOpenTelemetryTransport(&mockRuntime{runtime.TestClientRequest{Headers: header}},
"remote_host",
Expand All @@ -82,12 +83,14 @@ func testOpenTelemetrySubmit(t *testing.T, operation *runtime.ClientOperation, e
if expectedSpanCount == 1 {
span := spans[0]
assert.Equal(t, "getCluster", span.Name)
assert.Equal(t, span.Status.Code, codes.Error)
assert.Equal(t, []attribute.KeyValue{
// "component": "go-openapi",
attribute.String("http.path", "/kubernetes-clusters/{cluster_id}"),
attribute.String("http.route", "/kubernetes-clusters/{cluster_id}"),
attribute.String("http.method", "GET"),
attribute.String("span.kind", trace.SpanKindClient.String()),
// // "http.status_code": uint16(490),
attribute.String("http.scheme", "https"),
attribute.Int("http.status_code", 490),
// "peer.hostname": "remote_host",
// "peer.service": "service",
// "error": true,
Expand Down

0 comments on commit e5f0273

Please sign in to comment.