Skip to content

Commit 107788f

Browse files
authored
Twilio: allow service name flattening (#8025)
1 parent 7bd70a5 commit 107788f

File tree

2 files changed

+102
-51
lines changed

2 files changed

+102
-51
lines changed

dd-java-agent/instrumentation/twilio/src/main/java/datadog/trace/instrumentation/twilio/TwilioClientDecorator.java

+7-1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import com.twilio.rest.api.v2010.account.Message;
66
import datadog.trace.api.Functions;
77
import datadog.trace.api.cache.QualifiedClassNameCache;
8+
import datadog.trace.api.naming.SpanNaming;
89
import datadog.trace.bootstrap.instrumentation.api.AgentSpan;
910
import datadog.trace.bootstrap.instrumentation.api.InternalSpanTypes;
1011
import datadog.trace.bootstrap.instrumentation.api.UTF8BytesString;
@@ -24,6 +25,11 @@ public class TwilioClientDecorator extends ClientDecorator {
2425

2526
private static final CharSequence COMPONENT_NAME = UTF8BytesString.create("twilio-sdk");
2627

28+
private static final String SERVICE_NAME =
29+
SpanNaming.instance().namingSchema().allowInferredServices()
30+
? COMPONENT_NAME.toString()
31+
: null;
32+
2733
private static final QualifiedClassNameCache NAMES =
2834
new QualifiedClassNameCache(
2935
new Function<Class<?>, CharSequence>() {
@@ -54,7 +60,7 @@ protected CharSequence component() {
5460

5561
@Override
5662
protected String service() {
57-
return COMPONENT_NAME.toString();
63+
return SERVICE_NAME;
5864
}
5965

6066
/** Decorate trace based on service execution metadata. */

dd-java-agent/instrumentation/twilio/src/test/groovy/test/TwilioClientTest.groovy

+95-50
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package test
22

3+
import static datadog.trace.agent.test.utils.TraceUtils.runUnderTrace
4+
35
import com.fasterxml.jackson.databind.ObjectMapper
46
import com.google.common.util.concurrent.ListenableFuture
57
import com.twilio.Twilio
@@ -10,7 +12,9 @@ import com.twilio.http.TwilioRestClient
1012
import com.twilio.rest.api.v2010.account.Call
1113
import com.twilio.rest.api.v2010.account.Message
1214
import com.twilio.type.PhoneNumber
13-
import datadog.trace.agent.test.AgentTestRunner
15+
import datadog.trace.agent.test.naming.TestingGenericHttpNamingConventions
16+
import datadog.trace.agent.test.naming.VersionedNamingTestBase
17+
import datadog.trace.api.Config
1418
import datadog.trace.api.DDSpanTypes
1519
import datadog.trace.bootstrap.instrumentation.api.Tags
1620
import org.apache.http.HttpEntity
@@ -23,9 +27,7 @@ import org.apache.http.impl.client.HttpClientBuilder
2327
import java.util.concurrent.ExecutionException
2428
import java.util.concurrent.TimeUnit
2529

26-
import static datadog.trace.agent.test.utils.TraceUtils.runUnderTrace
27-
28-
class TwilioClientTest extends AgentTestRunner {
30+
abstract class TwilioClientTest extends VersionedNamingTestBase {
2931

3032
// Made up Twilio Account IDs and Auth token
3133
final static String SHORT_SID = "abc"
@@ -113,6 +115,13 @@ class TwilioClientTest extends AgentTestRunner {
113115
Twilio.setRestClient(null)
114116
}
115117

118+
abstract String httpClientOperation()
119+
120+
@Override
121+
String operation() {
122+
return "twilio.sdk"
123+
}
124+
116125
def "synchronous message"() {
117126
setup:
118127
twilioRestClient.getObjectMapper() >> new ObjectMapper()
@@ -143,8 +152,8 @@ class TwilioClientTest extends AgentTestRunner {
143152
}
144153
}
145154
span {
146-
serviceName "twilio-sdk"
147-
operationName "twilio.sdk"
155+
serviceName service()
156+
operationName operation()
148157
resourceName "api.v2010.account.MessageCreator.create"
149158
spanType DDSpanTypes.HTTP_CLIENT
150159
errored false
@@ -156,7 +165,7 @@ class TwilioClientTest extends AgentTestRunner {
156165
"twilio.account" "$LONG_SID"
157166
"twilio.sid" "MMXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
158167
"twilio.status" "sent"
159-
defaultTags()
168+
defaultTagsNoPeerService()
160169
}
161170
}
162171
}
@@ -195,8 +204,8 @@ class TwilioClientTest extends AgentTestRunner {
195204
}
196205
}
197206
span {
198-
serviceName "twilio-sdk"
199-
operationName "twilio.sdk"
207+
serviceName service()
208+
operationName operation()
200209
resourceName "api.v2010.account.CallCreator.create"
201210
spanType DDSpanTypes.HTTP_CLIENT
202211
errored false
@@ -208,7 +217,7 @@ class TwilioClientTest extends AgentTestRunner {
208217
"twilio.account" "ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
209218
"twilio.sid" "CAXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
210219
"twilio.status" "completed"
211-
defaultTags()
220+
defaultTagsNoPeerService()
212221
}
213222
}
214223
}
@@ -269,8 +278,8 @@ class TwilioClientTest extends AgentTestRunner {
269278
}
270279
}
271280
span {
272-
serviceName "twilio-sdk"
273-
operationName "twilio.sdk"
281+
serviceName service()
282+
operationName operation()
274283
resourceName "api.v2010.account.MessageCreator.create"
275284
spanType DDSpanTypes.HTTP_CLIENT
276285
errored false
@@ -282,12 +291,12 @@ class TwilioClientTest extends AgentTestRunner {
282291
"twilio.account" "$LONG_SID"
283292
"twilio.sid" "MMXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
284293
"twilio.status" "sent"
285-
defaultTags()
294+
defaultTagsNoPeerService()
286295
}
287296
}
288297
span {
289-
serviceName "twilio-sdk"
290-
operationName "http.request"
298+
serviceName service()
299+
operationName httpClientOperation()
291300
resourceName "POST /?/Accounts/abc/Messages.json"
292301
spanType DDSpanTypes.HTTP_CLIENT
293302
errored false
@@ -375,8 +384,8 @@ class TwilioClientTest extends AgentTestRunner {
375384
}
376385
}
377386
span {
378-
serviceName "twilio-sdk"
379-
operationName "twilio.sdk"
387+
serviceName service()
388+
operationName operation()
380389
resourceName "api.v2010.account.MessageCreator.create"
381390
spanType DDSpanTypes.HTTP_CLIENT
382391
errored false
@@ -388,12 +397,12 @@ class TwilioClientTest extends AgentTestRunner {
388397
"twilio.account" "$LONG_SID"
389398
"twilio.sid" "MMXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
390399
"twilio.status" "sent"
391-
defaultTags()
400+
defaultTagsNoPeerService()
392401
}
393402
}
394403
span {
395-
serviceName "twilio-sdk"
396-
operationName "http.request"
404+
serviceName service()
405+
operationName httpClientOperation()
397406
resourceName "POST /?/Accounts/abc/Messages.json"
398407
spanType DDSpanTypes.HTTP_CLIENT
399408
errored false
@@ -409,8 +418,8 @@ class TwilioClientTest extends AgentTestRunner {
409418
}
410419
}
411420
span {
412-
serviceName "twilio-sdk"
413-
operationName "http.request"
421+
serviceName service()
422+
operationName httpClientOperation()
414423
resourceName "POST /?/Accounts/abc/Messages.json"
415424
spanType DDSpanTypes.HTTP_CLIENT
416425
errored false
@@ -505,8 +514,8 @@ class TwilioClientTest extends AgentTestRunner {
505514
}
506515
}
507516
span {
508-
serviceName "twilio-sdk"
509-
operationName "twilio.sdk"
517+
serviceName service()
518+
operationName operation()
510519
resourceName "api.v2010.account.MessageCreator.createAsync"
511520
spanType DDSpanTypes.HTTP_CLIENT
512521
errored false
@@ -518,12 +527,12 @@ class TwilioClientTest extends AgentTestRunner {
518527
"twilio.account" "$LONG_SID"
519528
"twilio.sid" "MMXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
520529
"twilio.status" "sent"
521-
defaultTags()
530+
defaultTagsNoPeerService()
522531
}
523532
}
524533
span {
525-
serviceName "twilio-sdk"
526-
operationName "twilio.sdk"
534+
serviceName service()
535+
operationName operation()
527536
resourceName "api.v2010.account.MessageCreator.create"
528537
spanType DDSpanTypes.HTTP_CLIENT
529538
errored false
@@ -535,14 +544,14 @@ class TwilioClientTest extends AgentTestRunner {
535544
"twilio.account" "$LONG_SID"
536545
"twilio.sid" "MMXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
537546
"twilio.status" "sent"
538-
defaultTags()
547+
defaultTagsNoPeerService()
539548
}
540549
}
541550
// Spans are reported in reverse order of completion,
542551
// so the error span is last even though it happened first.
543552
span {
544-
serviceName "twilio-sdk"
545-
operationName "http.request"
553+
serviceName service()
554+
operationName httpClientOperation()
546555
resourceName "POST /?/Accounts/abc/Messages.json"
547556
spanType DDSpanTypes.HTTP_CLIENT
548557
errored false
@@ -558,8 +567,8 @@ class TwilioClientTest extends AgentTestRunner {
558567
}
559568
}
560569
span {
561-
serviceName "twilio-sdk"
562-
operationName "http.request"
570+
serviceName service()
571+
operationName httpClientOperation()
563572
resourceName "POST /?/Accounts/abc/Messages.json"
564573
spanType DDSpanTypes.HTTP_CLIENT
565574
errored false
@@ -616,8 +625,8 @@ class TwilioClientTest extends AgentTestRunner {
616625
}
617626
}
618627
span {
619-
serviceName "twilio-sdk"
620-
operationName "twilio.sdk"
628+
serviceName service()
629+
operationName operation()
621630
resourceName "api.v2010.account.MessageCreator.create"
622631
spanType DDSpanTypes.HTTP_CLIENT
623632
errored true
@@ -626,7 +635,7 @@ class TwilioClientTest extends AgentTestRunner {
626635
"$Tags.COMPONENT" "twilio-sdk"
627636
"$Tags.SPAN_KIND" Tags.SPAN_KIND_CLIENT
628637
errorTags(ApiException, "Testing Failure")
629-
defaultTags()
638+
defaultTagsNoPeerService()
630639
}
631640
}
632641
}
@@ -652,8 +661,8 @@ class TwilioClientTest extends AgentTestRunner {
652661
assertTraces(1) {
653662
trace(1) {
654663
span {
655-
serviceName "twilio-sdk"
656-
operationName "twilio.sdk"
664+
serviceName service()
665+
operationName operation()
657666
resourceName "api.v2010.account.MessageCreator.create"
658667
parent()
659668
spanType DDSpanTypes.HTTP_CLIENT
@@ -666,7 +675,7 @@ class TwilioClientTest extends AgentTestRunner {
666675
"twilio.account" "$LONG_SID"
667676
"twilio.sid" "MMXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
668677
"twilio.status" "sent"
669-
defaultTags()
678+
defaultTagsNoPeerService()
670679
}
671680
}
672681
}
@@ -714,8 +723,8 @@ class TwilioClientTest extends AgentTestRunner {
714723
}
715724
}
716725
span {
717-
serviceName "twilio-sdk"
718-
operationName "twilio.sdk"
726+
serviceName service()
727+
operationName operation()
719728
resourceName "api.v2010.account.MessageCreator.createAsync"
720729
spanType DDSpanTypes.HTTP_CLIENT
721730
errored false
@@ -727,12 +736,12 @@ class TwilioClientTest extends AgentTestRunner {
727736
"twilio.account" "$LONG_SID"
728737
"twilio.sid" "MMXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
729738
"twilio.status" "sent"
730-
defaultTags()
739+
defaultTagsNoPeerService()
731740
}
732741
}
733742
span {
734-
serviceName "twilio-sdk"
735-
operationName "twilio.sdk"
743+
serviceName service()
744+
operationName operation()
736745
resourceName "api.v2010.account.MessageCreator.create"
737746
spanType DDSpanTypes.HTTP_CLIENT
738747
errored false
@@ -744,7 +753,7 @@ class TwilioClientTest extends AgentTestRunner {
744753
"twilio.account" "$LONG_SID"
745754
"twilio.sid" "MMXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
746755
"twilio.status" "sent"
747-
defaultTags()
756+
defaultTagsNoPeerService()
748757
}
749758
}
750759
}
@@ -800,8 +809,8 @@ class TwilioClientTest extends AgentTestRunner {
800809
}
801810
}
802811
span {
803-
serviceName "twilio-sdk"
804-
operationName "twilio.sdk"
812+
serviceName service()
813+
operationName operation()
805814
resourceName "api.v2010.account.MessageCreator.createAsync"
806815
spanType DDSpanTypes.HTTP_CLIENT
807816
errored true
@@ -810,12 +819,12 @@ class TwilioClientTest extends AgentTestRunner {
810819
"$Tags.COMPONENT" "twilio-sdk"
811820
"$Tags.SPAN_KIND" Tags.SPAN_KIND_CLIENT
812821
errorTags(ApiException, "Testing Failure")
813-
defaultTags()
822+
defaultTagsNoPeerService()
814823
}
815824
}
816825
span {
817-
serviceName "twilio-sdk"
818-
operationName "twilio.sdk"
826+
serviceName service()
827+
operationName operation()
819828
resourceName "api.v2010.account.MessageCreator.create"
820829
spanType DDSpanTypes.HTTP_CLIENT
821830
errored true
@@ -824,10 +833,46 @@ class TwilioClientTest extends AgentTestRunner {
824833
"$Tags.COMPONENT" "twilio-sdk"
825834
"$Tags.SPAN_KIND" Tags.SPAN_KIND_CLIENT
826835
errorTags(ApiException, "Testing Failure")
827-
defaultTags()
836+
defaultTagsNoPeerService()
828837
}
829838
}
830839
}
831840
}
832841
}
833842
}
843+
844+
class TwilioClientV0Test extends TwilioClientTest {
845+
846+
@Override
847+
int version() {
848+
return 0
849+
}
850+
851+
@Override
852+
String service() {
853+
return "twilio-sdk"
854+
}
855+
856+
@Override
857+
String httpClientOperation() {
858+
return new TestingGenericHttpNamingConventions.ClientV0(){}.operation()
859+
}
860+
}
861+
862+
class TwilioClientV1ForkedTest extends TwilioClientTest {
863+
864+
@Override
865+
int version() {
866+
return 1
867+
}
868+
869+
@Override
870+
String service() {
871+
return Config.get().getServiceName()
872+
}
873+
874+
@Override
875+
String httpClientOperation() {
876+
return new TestingGenericHttpNamingConventions.ClientV1(){}.operation()
877+
}
878+
}

0 commit comments

Comments
 (0)