From 1af5e9a19b09cf7c5eafbde0b366378bc2570c30 Mon Sep 17 00:00:00 2001 From: Yongseok Kang Date: Mon, 28 Nov 2022 15:17:48 +0900 Subject: [PATCH] [#9380] add location field Fix intelliJ warning * Warning:(91, 29) 'StringBuilder sb' can be replaced with 'String' --- .../grpc/GrpcApiMetaDataHandlerTest.java | 4 +- .../web/mapper/ApiMetaDataMapper.java | 10 +++- .../web/mapper/ApiMetaDataMapperTest.java | 56 +++++++++++++++++++ 3 files changed, 67 insertions(+), 3 deletions(-) create mode 100644 web/src/test/java/com/navercorp/pinpoint/web/mapper/ApiMetaDataMapperTest.java diff --git a/collector/src/test/java/com/navercorp/pinpoint/collector/handler/grpc/GrpcApiMetaDataHandlerTest.java b/collector/src/test/java/com/navercorp/pinpoint/collector/handler/grpc/GrpcApiMetaDataHandlerTest.java index 2a59332fa651..5a1e11468c36 100644 --- a/collector/src/test/java/com/navercorp/pinpoint/collector/handler/grpc/GrpcApiMetaDataHandlerTest.java +++ b/collector/src/test/java/com/navercorp/pinpoint/collector/handler/grpc/GrpcApiMetaDataHandlerTest.java @@ -13,10 +13,10 @@ import static org.mockito.Mockito.*; public class GrpcApiMetaDataHandlerTest { + // ApiMetaDataBo{agentId='express-node-sample-id', startTime=1668495162817, apiId=11, apiInfo='express.Function.proto.get(path, callback)', lineNumber=177, methodTypeEnum=DEFAULT} + // from Node agent [11, 'express.Function.proto.get(path, callback)', 24, null, '/Users/workspace/pinpoint/@pinpoint-naver-apm/pinpoint-agent-node/samples/express/src/routes/index.js'] @Test public void stubToApiMetaData() { - // ApiMetaDataBo{agentId='express-node-sample-id', startTime=1668495162817, apiId=11, apiInfo='express.Function.proto.get(path, callback)', lineNumber=177, methodTypeEnum=DEFAULT} - // from Node agent [11, 'express.Function.proto.get(path, callback)', 24, null, '/Users/workspace/pinpoint/@pinpoint-naver-apm/pinpoint-agent-node/samples/express/src/routes/index.js'] ApiMetaDataService mockedService = mock(ApiMetaDataService.class); GrpcApiMetaDataHandler dut = new GrpcApiMetaDataHandler(mockedService); diff --git a/web/src/main/java/com/navercorp/pinpoint/web/mapper/ApiMetaDataMapper.java b/web/src/main/java/com/navercorp/pinpoint/web/mapper/ApiMetaDataMapper.java index 332769c72324..d48802c05bf9 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/mapper/ApiMetaDataMapper.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/mapper/ApiMetaDataMapper.java @@ -80,8 +80,16 @@ public List mapRow(Result result, int rowNum) throws Exception { if (buffer.hasRemaining()) { methodTypeEnum = MethodTypeEnum.valueOf(buffer.readInt()); } + String location = null; + if (buffer.hasRemaining()) { + location = buffer.readPrefixedString(); + } - ApiMetaDataBo apiMetaDataBo = new ApiMetaDataBo(key.getAgentId(), key.getAgentStartTime(), key.getId(), lineNumber, methodTypeEnum, apiInfo); + ApiMetaDataBo.Builder builder = new ApiMetaDataBo.Builder(key.getAgentId(), key.getAgentStartTime(), key.getId(), lineNumber, methodTypeEnum, apiInfo); + if (location != null) { + builder.setLocation(location); + } + ApiMetaDataBo apiMetaDataBo = builder.build(); apiMetaDataList.add(apiMetaDataBo); if (logger.isDebugEnabled()) { diff --git a/web/src/test/java/com/navercorp/pinpoint/web/mapper/ApiMetaDataMapperTest.java b/web/src/test/java/com/navercorp/pinpoint/web/mapper/ApiMetaDataMapperTest.java new file mode 100644 index 000000000000..d729925aaa97 --- /dev/null +++ b/web/src/test/java/com/navercorp/pinpoint/web/mapper/ApiMetaDataMapperTest.java @@ -0,0 +1,56 @@ +package com.navercorp.pinpoint.web.mapper; + +import com.navercorp.pinpoint.common.buffer.AutomaticBuffer; +import com.navercorp.pinpoint.common.buffer.Buffer; +import com.navercorp.pinpoint.common.server.bo.ApiMetaDataBo; +import com.navercorp.pinpoint.common.server.bo.MethodTypeEnum; +import com.navercorp.pinpoint.common.server.bo.serializer.metadata.MetadataEncoder; +import com.navercorp.pinpoint.common.server.hbase.DistributorConfiguration; +import com.sematext.hbase.wd.RowKeyDistributorByHashPrefix; +import org.apache.hadoop.hbase.Cell; +import org.apache.hadoop.hbase.CellUtil; +import org.apache.hadoop.hbase.HConstants; +import org.apache.hadoop.hbase.KeyValue; +import org.apache.hadoop.hbase.client.Result; +import org.apache.hadoop.hbase.util.Bytes; +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +public class ApiMetaDataMapperTest { + // from node: ApiMetaDataBo{agentId='express-node-sample-id', startTime=1669280767548, apiId=12, apiInfo='express.Function.proto.get(path, callback)', lineNumber=169, methodTypeEnum=DEFAULT, location='/Users/workspace/pinpoint/@pinpoint-naver-apm/pinpoint-agent-node/samples/express/src/routes/index.js'} + @Test + public void testMapRow() throws Exception { + 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(); + + RowKeyDistributorByHashPrefix givenRowKeyDistributorByHashPrefix = new DistributorConfiguration().getMetadataRowKeyDistributor(); + final byte[] rowKey = givenRowKeyDistributorByHashPrefix.getDistributedKey(new MetadataEncoder().encodeRowKey(expected)); + final Buffer buffer = new AutomaticBuffer(64); + final String api = expected.getApiInfo(); + buffer.putPrefixedString(api); + buffer.putInt(expected.getLineNumber()); + buffer.putInt(expected.getMethodTypeEnum().getCode()); + + String location = expected.getLocation(); + if (location != null) { + buffer.putPrefixedString(location); + } + byte[] bufferArray = buffer.getBuffer(); + byte[] valueArray = Bytes.toBytes(1L); + Cell cell = CellUtil.createCell(HConstants.EMPTY_BYTE_ARRAY, HConstants.EMPTY_BYTE_ARRAY, bufferArray, HConstants.LATEST_TIMESTAMP, KeyValue.Type.Maximum.getCode(), valueArray); + + Result mockedResult = mock(Result.class); + when(mockedResult.rawCells()).thenReturn(new Cell[] { cell }); + when(mockedResult.getRow()).thenReturn(rowKey); + + ApiMetaDataMapper dut = new ApiMetaDataMapper(givenRowKeyDistributorByHashPrefix); + ApiMetaDataBo actual = dut.mapRow(mockedResult, 0).get(0); + + assertThat(actual).extracting("agentId", "startTime", "apiId", "apiInfo", "lineNumber", "methodTypeEnum", "location") + .contains(expected.getAgentId(), expected.getAgentStartTime(), expected.getId(), expected.getApiInfo(), expected.getLineNumber(), expected.getMethodTypeEnum(), expected.getLocation()); + } +}