Skip to content

Commit

Permalink
Collect additional new attributes and add tests
Browse files Browse the repository at this point in the history
  • Loading branch information
stevejgordon committed Aug 29, 2023
1 parent 8d5e52c commit bba4230
Show file tree
Hide file tree
Showing 2 changed files with 83 additions and 18 deletions.
32 changes: 20 additions & 12 deletions input/otlp/traces.go
Original file line number Diff line number Diff line change
Expand Up @@ -70,8 +70,12 @@ const (
attributeNetworkMNC = "net.host.carrier.mnc"
attributeNetworkCarrierName = "net.host.carrier.name"
attributeNetworkICC = "net.host.carrier.icc"

attributeUrlFull = "url.full"
attributeHttpRequestMethod = "http.request.method"
attributeHttpResponseStatusCode = "http.response.status_code"
attributeServerAddress = "server.address"
attributeServerPort = "server.port"
attributeUrlFull = "url.full"
attributeUserAgentOriginal = "user_agent.original"
)

// ConsumeTraces consumes OpenTelemetry trace data,
Expand Down Expand Up @@ -259,11 +263,11 @@ func TranslateTransaction(
setLabel(k, event, ifaceAttributeValue(v))
case pcommon.ValueTypeInt:
switch kDots {
case semconv.AttributeHTTPStatusCode:
case semconv.AttributeHTTPStatusCode, attributeHttpResponseStatusCode:
isHTTP = true
httpResponse.StatusCode = uint32(v.Int())
http.Response = &httpResponse
case semconv.AttributeNetPeerPort:
case semconv.AttributeNetPeerPort, attributeServerPort:
event.Source = populateNil(event.Source)
event.Source.Port = uint32(v.Int())
case semconv.AttributeNetHostPort:
Expand All @@ -279,11 +283,11 @@ func TranslateTransaction(
stringval := truncate(v.Str())
switch kDots {
// http.*
case semconv.AttributeHTTPMethod:
case semconv.AttributeHTTPMethod, attributeHttpRequestMethod:
isHTTP = true
httpRequest.Method = stringval
http.Request = &httpRequest
case semconv.AttributeHTTPURL, semconv.AttributeHTTPTarget, "http.path":
case semconv.AttributeHTTPURL, semconv.AttributeHTTPTarget, "http.path", attributeUrlFull:
isHTTP = true
httpURL = stringval
case semconv.AttributeHTTPHost:
Expand All @@ -292,7 +296,7 @@ func TranslateTransaction(
case semconv.AttributeHTTPScheme:
isHTTP = true
httpScheme = stringval
case semconv.AttributeHTTPStatusCode:
case semconv.AttributeHTTPStatusCode, attributeHttpResponseStatusCode:
if intv, err := strconv.Atoi(stringval); err == nil {
isHTTP = true
httpResponse.StatusCode = uint32(intv)
Expand All @@ -317,7 +321,7 @@ func TranslateTransaction(
event.Client = populateNil(event.Client)
event.Client.Ip = ip
}
case semconv.AttributeHTTPUserAgent:
case semconv.AttributeHTTPUserAgent, attributeUserAgentOriginal:
event.UserAgent = populateNil(event.UserAgent)
event.UserAgent.Original = stringval

Expand All @@ -327,7 +331,7 @@ func TranslateTransaction(
if ip, err := modelpb.ParseIP(stringval); err == nil {
event.Source.Ip = ip
}
case semconv.AttributeNetPeerName:
case semconv.AttributeNetPeerName, attributeServerAddress:
event.Source = populateNil(event.Source)
event.Source.Domain = stringval
case semconv.AttributeNetHostName:
Expand Down Expand Up @@ -535,11 +539,11 @@ func TranslateSpan(spanKind ptrace.SpanKind, attributes pcommon.Map, event *mode
setLabel(k, event, v.Double())
case pcommon.ValueTypeInt:
switch kDots {
case "http.status_code":
case "http.status_code", attributeHttpResponseStatusCode:
httpResponse.StatusCode = uint32(v.Int())
http.Response = &httpResponse
isHTTP = true
case semconv.AttributeNetPeerPort, "peer.port":
case semconv.AttributeNetPeerPort, "peer.port", attributeServerPort:
netPeerPort = int(v.Int())
case semconv.AttributeRPCGRPCStatusCode:
rpcSystem = "grpc"
Expand All @@ -564,7 +568,7 @@ func TranslateSpan(spanKind ptrace.SpanKind, attributes pcommon.Map, event *mode
case semconv.AttributeHTTPURL:
httpURL = stringval
isHTTP = true
case semconv.AttributeHTTPMethod:
case semconv.AttributeHTTPMethod, attributeHttpRequestMethod:
httpRequest.Method = stringval
http.Request = &httpRequest
isHTTP = true
Expand Down Expand Up @@ -621,6 +625,10 @@ func TranslateSpan(spanKind ptrace.SpanKind, attributes pcommon.Map, event *mode
event.Network.Carrier = populateNil(event.Network.Carrier)
event.Network.Carrier.Icc = stringval

// server.*
case attributeServerAddress:
netPeerName = stringval

// session.*
case "session.id":
event.Session = populateNil(event.Session)
Expand Down
69 changes: 63 additions & 6 deletions input/otlp/traces_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -246,6 +246,19 @@ func TestHTTPTransactionURL(t *testing.T) {
"http.target": "/foo",
})
})
t.Run("url.full", func(t *testing.T) {
test(t, &modelpb.URL{
Scheme: "https",
Original: "https://testing.invalid:80/foo?bar",
Full: "https://testing.invalid:80/foo?bar",
Path: "/foo",
Query: "bar",
Domain: "testing.invalid",
Port: 80,
}, map[string]interface{}{
"url.full": "https://testing.invalid:80/foo?bar",
})
})
}

func TestHTTPSpanURL(t *testing.T) {
Expand Down Expand Up @@ -416,10 +429,23 @@ func TestHTTPTransactionFlavor(t *testing.T) {
}

func TestHTTPTransactionUserAgent(t *testing.T) {
event := transformTransactionWithAttributes(t, map[string]interface{}{
"http.user_agent": "Foo/bar (baz)",
test := func(t *testing.T, attrs map[string]interface{}) {
t.Helper()
event := transformTransactionWithAttributes(t, attrs)
assert.Equal(t, &modelpb.UserAgent{Original: "Foo/bar (baz)"}, event.UserAgent)
}

t.Run("http.user_agent", func(t *testing.T) {
test(t, map[string]interface{}{
"http.user_agent": "Foo/bar (baz)",
})
})

t.Run("user_agent.original", func(t *testing.T) {
test(t, map[string]interface{}{
"user_agent.original": "Foo/bar (baz)",
})
})
assert.Equal(t, &modelpb.UserAgent{Original: "Foo/bar (baz)"}, event.UserAgent)
}

func TestHTTPTransactionClientIP(t *testing.T) {
Expand All @@ -435,10 +461,23 @@ func TestHTTPTransactionClientIP(t *testing.T) {
}

func TestHTTPTransactionStatusCode(t *testing.T) {
event := transformTransactionWithAttributes(t, map[string]interface{}{
"http.status_code": 200,
test := func(t *testing.T, expected uint32, attrs map[string]interface{}) {
t.Helper()
event := transformSpanWithAttributes(t, attrs)
assert.Equal(t, expected, event.Http.Response.StatusCode)
}

t.Run("http.status_code", func(t *testing.T) {
test(t, 200, map[string]interface{}{
"http.status_code": 200,
})
})

t.Run("http.response.status_code", func(t *testing.T) {
test(t, 200, map[string]interface{}{
"http.response.status_code": 200,
})
})
assert.Equal(t, uint32(200), event.Http.Response.StatusCode)
}

func TestDatabaseSpan(t *testing.T) {
Expand Down Expand Up @@ -485,6 +524,24 @@ func TestDatabaseSpan(t *testing.T) {
}, event.Span.DestinationService, protocmp.Transform()))
}

func TestDatabaseSpanWithServerAttributes(t *testing.T) {
event := transformSpanWithAttributes(t, map[string]interface{}{
"db.system": "mysql",
"db.name": "ShopDb",
"server.address": "shopdb.example.com",
"server.port": 3306,
})

assert.Equal(t, "db", event.Span.Type)
assert.Equal(t, "mysql", event.Span.Subtype)
assert.Equal(t, "", event.Span.Action)

assert.Equal(t, &modelpb.Destination{
Address: "shopdb.example.com",
Port: 3306,
}, event.Destination)
}

func TestInstrumentationLibrary(t *testing.T) {
traces, spans := newTracesSpans()
spans.Scope().SetName("library-name")
Expand Down

0 comments on commit bba4230

Please sign in to comment.