Skip to content

Commit

Permalink
[pinpoint-apm#9380] add location field
Browse files Browse the repository at this point in the history
Fix intelliJ warning
   * Warning:(91, 29) 'StringBuilder sb' can be replaced with 'String'
  • Loading branch information
feelform committed Nov 30, 2022
1 parent f255d0d commit 3f3382c
Show file tree
Hide file tree
Showing 6 changed files with 106 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@

import com.navercorp.pinpoint.common.server.bo.serializer.metadata.MetaDataRowKey;
import com.navercorp.pinpoint.common.util.LineNumber;
import com.navercorp.pinpoint.common.util.StringUtils;

import java.util.Objects;

Expand Down Expand Up @@ -120,6 +121,9 @@ public Builder(String agentId, long startTime, int apiId, int lineNumber,
}

public Builder setLocation(String location) {
if (StringUtils.isEmpty(location)) {
return this;
}
this.location = location;
return this;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.navercorp.pinpoint.common.server.trace;

import com.navercorp.pinpoint.common.server.bo.MethodTypeEnum;
import com.navercorp.pinpoint.common.util.StringUtils;

import java.util.Objects;

Expand All @@ -9,8 +10,10 @@ public class Api {
private final String className;
private final String description;
private final MethodTypeEnum methodTypeEnum;
private int lineNumber;
private String location;

public Api(String method, String className, String description, MethodTypeEnum methodTypeEnum) {
private Api(String method, String className, String description, MethodTypeEnum methodTypeEnum) {
this.method = Objects.requireNonNull(method, "title");
this.className = Objects.requireNonNull(className, "className");
this.description = Objects.requireNonNull(description, "description");
Expand All @@ -32,4 +35,47 @@ public String getDescription() {
public MethodTypeEnum getMethodTypeEnum() {
return methodTypeEnum;
}

public int getLineNumber() {
return lineNumber;
}

public String getLocation() {
return location;
}

public static class Builder {
private final String method;
private final String className;
private final String description;
private final MethodTypeEnum methodTypeEnum;
private String location;
private int lineNumber;

public Builder(String method, String className, String description, MethodTypeEnum methodTypeEnum) {
this.method = Objects.requireNonNull(method, "title");
this.className = Objects.requireNonNull(className, "className");
this.description = Objects.requireNonNull(description, "description");
this.methodTypeEnum = Objects.requireNonNull(methodTypeEnum, "methodTypeEnum");
this.lineNumber = 0;
this.location = null;
}

public Builder setLocation(String location) {
this.location = location;
return this;
}

public Builder setLineNumber(int lineNumber) {
this.lineNumber = lineNumber;
return this;
}

public Api build() {
Api result = new Api(this.method, this.className, this.description, this.methodTypeEnum);
result.lineNumber = Math.max(this.lineNumber, 0);
result.location = StringUtils.defaultIfEmpty(this.location, "");
return result;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -28,12 +28,15 @@ public Api parse(ApiMetaDataBo apiMetadata) {
String className = apiDescription.getSimpleClassName();
String apiInfo = apiDescription.getApiDescription();

return new Api(method, className, apiInfo, MethodTypeEnum.DEFAULT);
return new Api.Builder(method, className, apiInfo, MethodTypeEnum.DEFAULT)
.setLineNumber(apiMetadata.getLineNumber())
.setLocation(apiMetadata.getLocation())
.build();
} catch (Exception ignored) {
// ignore
}

String description = apiMetadata.getDescription();
return new Api(description, "", description, apiMetadata.getMethodTypeEnum());
return new Api.Builder(description, "", description, apiMetadata.getMethodTypeEnum()).build();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package com.navercorp.pinpoint.common.server.trace;

import com.navercorp.pinpoint.common.server.bo.ApiMetaDataBo;
import com.navercorp.pinpoint.common.server.bo.MethodTypeEnum;
import org.junit.jupiter.api.Test;

import static org.assertj.core.api.Assertions.assertThat;

public class DefaultApiParserTest {
@Test
public void testParse() {
ApiDescriptionParser apiDescriptionParser = new ApiDescriptionParser();
DefaultApiParser dut = new DefaultApiParser(apiDescriptionParser);
ApiMetaDataBo expected = new ApiMetaDataBo.Builder("express-node-sample-id", 1669280767548L, 12, 169, MethodTypeEnum.DEFAULT, "express.Function.proto.get(path, callback)")
.setLocation("/Users/workspace/pinpoint/@pinpoint-naver-apm/pinpoint-agent-node/samples/express/src/routes/index.js")
.build();

Api actual = dut.parse(expected);

assertThat(actual).extracting("method", "className", "description", "methodTypeEnum", "lineNumber", "location")
.contains("get(path, callback)", "proto", "express.Function.proto.get(path, callback)", MethodTypeEnum.DEFAULT, 169, "/Users/workspace/pinpoint/@pinpoint-naver-apm/pinpoint-agent-node/samples/express/src/routes/index.js");
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -220,11 +220,14 @@ private Api getApi(final Align align) {
return parser.parse(apiMetaData);
}
// parse error
return new Api(apiInfo, "", apiInfo, apiMetaData.getMethodTypeEnum());
return new Api.Builder(apiInfo, "", apiInfo, apiMetaData.getMethodTypeEnum())
.setLineNumber(apiMetaData.getLineNumber())
.setLocation(apiMetaData.getLocation())
.build();
} else {
AnnotationKey apiMetaDataError = getApiMetaDataError(align.getAnnotationBoList());

return new Api(apiMetaDataError.getName(), "", "", MethodTypeEnum.DEFAULT);
return new Api.Builder(apiMetaDataError.getName(), "", "", MethodTypeEnum.DEFAULT).build();
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
import com.navercorp.pinpoint.loader.service.AnnotationKeyRegistryService;
import com.navercorp.pinpoint.loader.service.ServiceTypeRegistryService;
import com.navercorp.pinpoint.web.calltree.span.Align;
import com.navercorp.pinpoint.web.calltree.span.CallTreeNode;
import com.navercorp.pinpoint.web.calltree.span.SpanAlign;
import com.navercorp.pinpoint.web.service.AnnotationKeyMatcherService;
import com.navercorp.pinpoint.web.service.ProxyRequestTypeRegistryService;
Expand Down Expand Up @@ -89,4 +90,25 @@ public void getParameter_check_argument() {
Assertions.assertEquals(exceptionRecord.getArguments(), "null");
}

// 0 = {CallTreeNode@12622} "{depth=0, child=true, sibling=false, align=SpanAlign{spanBo=5997054625569493, hasChild=true, meta=false, id=1, gap=0, depth=0, executionMilliseconds=574}}"
// 1 = {CallTreeNode@14600} "{depth=1, child=false, sibling=true, align=SpanEventAlign{spanBo=5997054625569493, spanEventBo={version=0, sequence=0, startElapsed=4, endElapsed=3, serviceType=6600, destinationId=localhost:3000, endPoint=localhost:3000, apiId=17, annotationBoList=[AnnotationBo{key=-1, value=/, isAuthorized=true}, AnnotationBo{key=13, value=ApiMetaDataBo{agentId='express-node-sample-id', startTime=1669746947722, apiId=17, apiInfo='express.Function.use(logger)', lineNumber=42, methodTypeEnum=DEFAULT, location='/Users/workspace/pinpoint/@pinpoint-naver-apm/pinpoint-agent-node/samples/express/src/app.js'}, isAuthorized=true}, AnnotationBo{key=12, value=express.Function.use(logger):42, isAuthorized=true}], depth=1, nextSpanId=-1, hasException=false, exceptionClass=null, nextAsyncId=0}, id=0, gap=4, depth=1, executionMilliseconds=3}}"
// 2 = {CallTreeNode@14601} "{depth=1, child=false, sibling=true, align=SpanEventAlign{spanBo=5997054625569493, spanEventBo={version=0, sequence=1, startElapsed=7, endElapsed=0, serviceType=6600, destinationId=localhost:3000, endPoint=localhost:3000, apiId=18, annotationBoList=[AnnotationBo{key=-1, value=/, isAuthorized=true}, AnnotationBo{key=13, value=ApiMetaDataBo{agentId='express-node-sample-id', startTime=1669746947722, apiId=18, apiInfo='express.Function.use(jsonParser)', lineNumber=43, methodTypeEnum=DEFAULT, location='/Users/workspace/pinpoint/@pinpoint-naver-apm/pinpoint-agent-node/samples/express/src/app.js'}, isAuthorized=true}, AnnotationBo{key=12, value=express.Function.use(jsonParser):43, isAuthorized=true}], depth=1, nextSpanId=-1, hasException=false, exceptionClass=null, nextAsyncId=0}, id=0, gap=0, depth=1, executionMilliseconds=0}}"
// 3 = {CallTreeNode@14602} "{depth=1, child=false, sibling=true, align=SpanEventAlign{spanBo=5997054625569493, spanEventBo={version=0, sequence=2, startElapsed=7, endElapsed=0, serviceType=6600, destinationId=localhost:3000, endPoint=localhost:3000, apiId=19, annotationBoList=[AnnotationBo{key=-1, value=/, isAuthorized=true}, AnnotationBo{key=13, value=ApiMetaDataBo{agentId='express-node-sample-id', startTime=1669746947722, apiId=19, apiInfo='express.Function.use(urlencodedParser)', lineNumber=44, methodTypeEnum=DEFAULT, location='/Users/workspace/pinpoint/@pinpoint-naver-apm/pinpoint-agent-node/samples/express/src/app.js'}, isAuthorized=true}, AnnotationBo{key=12, value=express.Function.use(urlencodedParser):44, isAuthorized=true}], depth=1, nextSpanId=-1, hasException=false, exceptionClass=null, nextAsyncId=0}, id=0, gap=0, depth=1, executionMilliseconds=0}}"
// 4 = {CallTreeNode@14603} "{depth=1, child=false, sibling=true, align=SpanEventAlign{spanBo=5997054625569493, spanEventBo={version=0, sequence=3, startElapsed=7, endElapsed=1, serviceType=6600, destinationId=localhost:3000, endPoint=localhost:3000, apiId=20, annotationBoList=[AnnotationBo{key=-1, value=/, isAuthorized=true}, AnnotationBo{key=13, value=ApiMetaDataBo{agentId='express-node-sample-id', startTime=1669746947722, apiId=20, apiInfo='express.Function.use(cookieParser)', lineNumber=45, methodTypeEnum=DEFAULT, location='/Users/workspace/pinpoint/@pinpoint-naver-apm/pinpoint-agent-node/samples/express/src/app.js'}, isAuthorized=true}, AnnotationBo{key=12, value=express.Function.use(cookieParser):45, isAuthorized=true}], depth=1, nextSpanId=-1, hasException=false, exceptionClass=null, nextAsyncId=0}, id=0, gap=0, depth=1, executionMilliseconds=1}}"
// 5 = {CallTreeNode@14604} "{depth=1, child=false, sibling=true, align=SpanEventAlign{spanBo=5997054625569493, spanEventBo={version=0, sequence=4, startElapsed=8, endElapsed=2, serviceType=6600, destinationId=localhost:3000, endPoint=localhost:3000, apiId=21, annotationBoList=[AnnotationBo{key=-1, value=/, isAuthorized=true}, AnnotationBo{key=13, value=ApiMetaDataBo{agentId='express-node-sample-id', startTime=1669746947722, apiId=21, apiInfo='express.Function.use(serveStatic)', lineNumber=46, methodTypeEnum=DEFAULT, location='/Users/workspace/pinpoint/@pinpoint-naver-apm/pinpoint-agent-node/samples/express/src/app.js'}, isAuthorized=true}, AnnotationBo{key=12, value=express.Function.use(serveStatic):46, isAuthorized=true}], depth=1, nextSpanId=-1, hasException=false, exceptionClass=null, nextAsyncId=0}, id=0, gap=0, depth=1, executionMilliseconds=2}}"
// 6 = {CallTreeNode@14605} "{depth=1, child=true, sibling=false, align=SpanEventAlign{spanBo=5997054625569493, spanEventBo={version=0, sequence=5, startElapsed=12, endElapsed=4, serviceType=6600, destinationId=localhost:3000, endPoint=localhost:3000, apiId=11, annotationBoList=[AnnotationBo{key=-1, value=/, isAuthorized=true}, AnnotationBo{key=13, value=ApiMetaDataBo{agentId='express-node-sample-id', startTime=1669746947722, apiId=11, apiInfo='express.Function.proto.get(path, callback)', lineNumber=24, methodTypeEnum=DEFAULT, location='/Users/workspace/pinpoint/@pinpoint-naver-apm/pinpoint-agent-node/samples/express/src/routes/index.js'}, isAuthorized=true}, AnnotationBo{key=12, value=express.Function.proto.get(path, callback):24, isAuthorized=true}], depth=1, nextSpanId=-1, hasException=false, exceptionClass=null, nextAsyncId=0}, id=0, gap=2, depth=1, executionMilliseconds=4}}"
// 7 = {CallTreeNode@14606} "{depth=2, child=true, sibling=true, align=SpanEventAlign{spanBo=5997054625569493, spanEventBo={version=0, sequence=6, startElapsed=13, endElapsed=0, serviceType=8200, destinationId=Redis, endPoint=127.0.0.1:6379, apiId=0, annotationBoList=[AnnotationBo{key=12, value=redis.set.call, isAuthorized=true}, AnnotationBo{key=13, value=ApiMetaDataBo{agentId='express-node-sample-id', startTime=1669747061820, apiId=0, apiInfo='redis.set.call', lineNumber=0, methodTypeEnum=DEFAULT, location='null'}, isAuthorized=true}], depth=2, nextSpanId=-1, hasException=false, exceptionClass=null, nextAsyncId=1}, id=0, gap=1, depth=2, executionMilliseconds=0}}"
// 8 = {CallTreeNode@14607} "{depth=3, child=true, sibling=false, align=SpanEventAlign{spanBo=5997054625569493, spanEventBo={version=0, sequence=0, startElapsed=0, endElapsed=0, serviceType=100, destinationId=null, endPoint=null, apiId=2, annotationBoList=[AnnotationBo{key=13, value=ApiMetaDataBo{agentId='express-node-sample-id', startTime=1669746947722, apiId=2, apiInfo='Asynchronous Invocation', lineNumber=0, methodTypeEnum=INVOCATION, location='null'}, isAuthorized=true}, AnnotationBo{key=10015, value=Asynchronous Invocation, isAuthorized=true}], depth=1, nextSpanId=-1, hasException=false, exceptionClass=null, nextAsyncId=0}, id=0, gap=0, depth=3, executionMilliseconds=0}}"
// 9 = {CallTreeNode@14608} "{depth=4, child=false, sibling=false, align=SpanEventAlign{spanBo=5997054625569493, spanEventBo={version=0, sequence=1, startElapsed=0, endElapsed=0, serviceType=8200, destinationId=Redis, endPoint=127.0.0.1:6379, apiId=0, annotationBoList=[AnnotationBo{key=12, value=redis.set.end, isAuthorized=true}, AnnotationBo{key=13, value=ApiMetaDataBo{agentId='express-node-sample-id', startTime=1669747061820, apiId=0, apiInfo='redis.set.end', lineNumber=0, methodTypeEnum=DEFAULT, location='null'}, isAuthorized=true}], depth=2, nextSpanId=8082279540288497, hasException=false, exceptionClass=null, nextAsyncId=0}, id=0, gap=0, depth=4, executionMilliseconds=0}}"
// 10 = {CallTreeNode@14609} "{depth=2, child=true, sibling=false, align=SpanEventAlign{spanBo=5997054625569493, spanEventBo={version=0, sequence=7, startElapsed=14, endElapsed=0, serviceType=8200, destinationId=Redis, endPoint=127.0.0.1:6379, apiId=0, annotationBoList=[AnnotationBo{key=12, value=redis.get.call, isAuthorized=true}, AnnotationBo{key=13, value=ApiMetaDataBo{agentId='express-node-sample-id', startTime=1669747061821, apiId=0, apiInfo='redis.get.call', lineNumber=0, methodTypeEnum=DEFAULT, location='null'}, isAuthorized=true}], depth=2, nextSpanId=-1, hasException=false, exceptionClass=null, nextAsyncId=2}, id=0, gap=1, depth=2, executionMilliseconds=0}}"
// 11 = {CallTreeNode@14610} "{depth=3, child=true, sibling=false, align=SpanEventAlign{spanBo=5997054625569493, spanEventBo={version=0, sequence=0, startElapsed=0, endElapsed=0, serviceType=100, destinationId=null, endPoint=null, apiId=2, annotationBoList=[AnnotationBo{key=13, value=ApiMetaDataBo{agentId='express-node-sample-id', startTime=1669746947722, apiId=2, apiInfo='Asynchronous Invocation', lineNumber=0, methodTypeEnum=INVOCATION, location='null'}, isAuthorized=true}, AnnotationBo{key=10015, value=Asynchronous Invocation, isAuthorized=true}], depth=1, nextSpanId=-1, hasException=false, exceptionClass=null, nextAsyncId=0}, id=0, gap=0, depth=3, executionMilliseconds=0}}"
// 12 = {CallTreeNode@14611} "{depth=4, child=false, sibling=false, align=SpanEventAlign{spanBo=5997054625569493, spanEventBo={version=0, sequence=1, startElapsed=0, endElapsed=0, serviceType=8200, destinationId=Redis, endPoint=127.0.0.1:6379, apiId=0, annotationBoList=[AnnotationBo{key=12, value=redis.get.end, isAuthorized=true}, AnnotationBo{key=13, value=ApiMetaDataBo{agentId='express-node-sample-id', startTime=1669747061821, apiId=0, apiInfo='redis.get.end', lineNumber=0, methodTypeEnum=DEFAULT, location='null'}, isAuthorized=true}], depth=2, nextSpanId=7264920545515817, hasException=false, exceptionClass=null, nextAsyncId=0}, id=0, gap=0, depth=4, executionMilliseconds=0}}"
@Test
public void testMakeRecord() {
RecordFactory dut = newRecordFactory();

CallTreeNode node = new CallTreeNode(null, new SpanAlign(new SpanBo()));
// CallTreeNode root = new CallTreeNode(null);
// dut.get();
}
}

0 comments on commit 3f3382c

Please sign in to comment.