[servlet] change the resource name for servlet integration (404 grouping)
This commit is contained in:
parent
7430296691
commit
16aba0ac7a
|
@ -11,3 +11,5 @@ decorators:
|
||||||
- type: DBTypeDecorator
|
- type: DBTypeDecorator
|
||||||
- type: DBStatementAsResourceName
|
- type: DBStatementAsResourceName
|
||||||
- type: OperationDecorator
|
- type: OperationDecorator
|
||||||
|
- type: Status404Decorator
|
||||||
|
- type: URLAsResourceName
|
||||||
|
|
|
@ -11,7 +11,7 @@ public abstract class AbstractDecorator {
|
||||||
|
|
||||||
private String matchingTag;
|
private String matchingTag;
|
||||||
|
|
||||||
private String matchingValue;
|
private Object matchingValue;
|
||||||
|
|
||||||
private String setTag;
|
private String setTag;
|
||||||
|
|
||||||
|
@ -45,11 +45,11 @@ public abstract class AbstractDecorator {
|
||||||
this.matchingTag = tag;
|
this.matchingTag = tag;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getMatchingValue() {
|
public Object getMatchingValue() {
|
||||||
return matchingValue;
|
return matchingValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setMatchingValue(final String value) {
|
public void setMatchingValue(final Object value) {
|
||||||
this.matchingValue = value;
|
this.matchingValue = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,16 @@
|
||||||
|
package com.datadoghq.trace.integration;
|
||||||
|
|
||||||
|
import com.datadoghq.trace.DDTags;
|
||||||
|
import io.opentracing.tag.Tags;
|
||||||
|
|
||||||
|
/** This span decorator protect against spam on the resource name */
|
||||||
|
public class Status404Decorator extends AbstractDecorator {
|
||||||
|
|
||||||
|
public Status404Decorator() {
|
||||||
|
super();
|
||||||
|
this.setMatchingTag(Tags.HTTP_STATUS.getKey());
|
||||||
|
this.setMatchingValue(404);
|
||||||
|
this.setSetTag(DDTags.RESOURCE_NAME);
|
||||||
|
this.setSetValue("404");
|
||||||
|
}
|
||||||
|
}
|
|
@ -5,6 +5,7 @@ import com.datadoghq.trace.DDTags;
|
||||||
import io.opentracing.tag.Tags;
|
import io.opentracing.tag.Tags;
|
||||||
import java.net.MalformedURLException;
|
import java.net.MalformedURLException;
|
||||||
|
|
||||||
|
/** Decorator for servlet contrib */
|
||||||
public class URLAsResourceName extends AbstractDecorator {
|
public class URLAsResourceName extends AbstractDecorator {
|
||||||
|
|
||||||
public URLAsResourceName() {
|
public URLAsResourceName() {
|
||||||
|
@ -16,12 +17,15 @@ public class URLAsResourceName extends AbstractDecorator {
|
||||||
@Override
|
@Override
|
||||||
public boolean afterSetTag(final DDSpanContext context, final String tag, final Object value) {
|
public boolean afterSetTag(final DDSpanContext context, final String tag, final Object value) {
|
||||||
//Assign resource name
|
//Assign resource name
|
||||||
|
if (context.getTags().containsKey(Tags.COMPONENT.getKey())
|
||||||
|
&& "java-web-servlet".equals(context.getTags().get(Tags.COMPONENT.getKey()))) {
|
||||||
try {
|
try {
|
||||||
final String path = new java.net.URL(String.valueOf(value)).getPath();
|
final String path = new java.net.URL(String.valueOf(value)).getPath();
|
||||||
context.setResourceName(path);
|
context.setResourceName(path);
|
||||||
} catch (final MalformedURLException e) {
|
} catch (final MalformedURLException e) {
|
||||||
context.setResourceName(String.valueOf(value));
|
context.setResourceName(String.valueOf(value));
|
||||||
}
|
}
|
||||||
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -109,4 +109,45 @@ class SpanDecoratorTest extends Specification {
|
||||||
where:
|
where:
|
||||||
something = "fake-query"
|
something = "fake-query"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def "set 404 as a resource on a 404 issue"() {
|
||||||
|
setup:
|
||||||
|
def tracer = new DDTracer()
|
||||||
|
def span = SpanFactory.newSpanOf(tracer)
|
||||||
|
tracer.addDecorator(new Status404Decorator())
|
||||||
|
|
||||||
|
when:
|
||||||
|
Tags.HTTP_STATUS.set(span, 404)
|
||||||
|
|
||||||
|
then:
|
||||||
|
span.getResourceName() == "404"
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
def "set url as a resource only for the servlet integration"() {
|
||||||
|
setup:
|
||||||
|
def tracer = new DDTracer()
|
||||||
|
def span = SpanFactory.newSpanOf(tracer)
|
||||||
|
tracer.addDecorator(new URLAsResourceName())
|
||||||
|
|
||||||
|
when:
|
||||||
|
span.setResourceName("change-me")
|
||||||
|
Tags.COMPONENT.set(span, "java-web-servlet")
|
||||||
|
Tags.HTTP_URL.set(span, something)
|
||||||
|
|
||||||
|
then:
|
||||||
|
span.getResourceName() == something
|
||||||
|
|
||||||
|
when:
|
||||||
|
span.setResourceName("change-me")
|
||||||
|
Tags.COMPONENT.set(span, "other-contrib")
|
||||||
|
Tags.HTTP_URL.set(span, something)
|
||||||
|
|
||||||
|
then:
|
||||||
|
span.getResourceName() == "change-me"
|
||||||
|
|
||||||
|
|
||||||
|
where:
|
||||||
|
something = "fake"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue