Merge pull request #1952 from emeroad/TraceV2/TraceFormatV2

#1819 trace format v2
This commit is contained in:
Woonduk Kang
2016-08-02 19:13:37 +09:00
committed by GitHub
50 changed files with 160 additions and 427 deletions
@@ -29,7 +29,7 @@ import com.navercorp.pinpoint.common.hbase.HBaseTables;
import com.navercorp.pinpoint.common.hbase.HbaseOperations2;
import com.navercorp.pinpoint.common.server.util.AgentEventType;
import com.navercorp.pinpoint.common.util.BytesUtils;
import com.navercorp.pinpoint.common.util.RowKeyUtils;
import com.navercorp.pinpoint.common.server.util.RowKeyUtils;
import com.navercorp.pinpoint.common.util.TimeUtils;
/**
@@ -23,7 +23,7 @@ import com.navercorp.pinpoint.common.server.bo.JvmInfoBo;
import com.navercorp.pinpoint.common.server.bo.ServerMetaDataBo;
import com.navercorp.pinpoint.common.hbase.HBaseTables;
import com.navercorp.pinpoint.common.hbase.HbaseOperations2;
import com.navercorp.pinpoint.common.util.RowKeyUtils;
import com.navercorp.pinpoint.common.server.util.RowKeyUtils;
import com.navercorp.pinpoint.common.util.TimeUtils;
import com.navercorp.pinpoint.thrift.dto.TAgentInfo;
import com.navercorp.pinpoint.thrift.dto.TJvmInfo;
@@ -30,7 +30,7 @@ import org.springframework.stereotype.Repository;
import com.navercorp.pinpoint.collector.dao.AgentStatDao;
import com.navercorp.pinpoint.common.hbase.HbaseOperations2;
import com.navercorp.pinpoint.common.util.BytesUtils;
import com.navercorp.pinpoint.common.util.RowKeyUtils;
import com.navercorp.pinpoint.common.server.util.RowKeyUtils;
import com.navercorp.pinpoint.common.util.TimeUtils;
import com.navercorp.pinpoint.thrift.dto.TAgentStat;
import com.navercorp.pinpoint.thrift.dto.TCpuLoad;
@@ -18,7 +18,7 @@ package com.navercorp.pinpoint.common.server.bo;
import com.navercorp.pinpoint.common.PinpointConstants;
import com.navercorp.pinpoint.common.util.BytesUtils;
import com.navercorp.pinpoint.common.util.RowKeyUtils;
import com.navercorp.pinpoint.common.server.util.RowKeyUtils;
import com.navercorp.pinpoint.common.util.TimeUtils;
/**
@@ -18,7 +18,7 @@ package com.navercorp.pinpoint.common.server.bo;
import com.navercorp.pinpoint.common.PinpointConstants;
import com.navercorp.pinpoint.common.util.BytesUtils;
import com.navercorp.pinpoint.common.util.RowKeyUtils;
import com.navercorp.pinpoint.common.server.util.RowKeyUtils;
import com.navercorp.pinpoint.common.util.TimeUtils;
/**
@@ -18,7 +18,7 @@ package com.navercorp.pinpoint.common.server.bo;
import com.navercorp.pinpoint.common.PinpointConstants;
import com.navercorp.pinpoint.common.util.BytesUtils;
import com.navercorp.pinpoint.common.util.RowKeyUtils;
import com.navercorp.pinpoint.common.server.util.RowKeyUtils;
import com.navercorp.pinpoint.common.util.TimeUtils;
/**
@@ -14,7 +14,10 @@
* limitations under the License.
*/
package com.navercorp.pinpoint.common.util;
package com.navercorp.pinpoint.common.server.util;
import com.navercorp.pinpoint.common.util.BytesUtils;
import com.navercorp.pinpoint.common.util.TimeUtils;
import static com.navercorp.pinpoint.common.PinpointConstants.AGENT_NAME_MAX_LEN;
import static com.navercorp.pinpoint.common.util.BytesUtils.INT_BYTE_LENGTH;
@@ -23,7 +23,6 @@ import com.navercorp.pinpoint.common.buffer.Buffer;
import com.navercorp.pinpoint.common.server.bo.SpanBo;
import com.navercorp.pinpoint.common.server.bo.SpanChunkBo;
import com.navercorp.pinpoint.common.util.BytesUtils;
import com.navercorp.pinpoint.common.util.RowKeyUtils;
import com.navercorp.pinpoint.common.util.TimeUtils;
import com.navercorp.pinpoint.common.util.TransactionId;
import com.navercorp.pinpoint.common.util.TransactionIdUtils;
@@ -1,101 +0,0 @@
/*
* Copyright 2014 NAVER Corp.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.navercorp.pinpoint.common.util;
import static com.navercorp.pinpoint.common.PinpointConstants.*;
import com.navercorp.pinpoint.common.buffer.AutomaticBuffer;
import com.navercorp.pinpoint.common.buffer.Buffer;
import com.navercorp.pinpoint.thrift.dto.TSpan;
import com.navercorp.pinpoint.thrift.dto.TSpanChunk;
/**
* @author emeroad
*/
public final class SpanUtils {
private SpanUtils() {
}
@Deprecated
public static byte[] getAgentIdTraceIndexRowKey(String agentId, long timestamp) {
if (agentId == null) {
throw new IllegalArgumentException("agentId must not null");
}
final byte[] bAgentId = BytesUtils.toBytes(agentId);
return RowKeyUtils.concatFixedByteAndLong(bAgentId, AGENT_NAME_MAX_LEN, TimeUtils.reverseTimeMillis(timestamp));
}
public static byte[] getApplicationTraceIndexRowKey(String applicationName, long timestamp) {
if (applicationName == null) {
throw new IllegalArgumentException("agentId must not null");
}
final byte[] bApplicationName = BytesUtils.toBytes(applicationName);
return RowKeyUtils.concatFixedByteAndLong(bApplicationName, AGENT_NAME_MAX_LEN, TimeUtils.reverseTimeMillis(timestamp));
}
public static byte[] getTraceIndexRowKey(byte[] agentId, long timestamp) {
if (agentId == null) {
throw new NullPointerException("agentId must not be null");
}
return RowKeyUtils.concatFixedByteAndLong(agentId, AGENT_NAME_MAX_LEN, TimeUtils.reverseTimeMillis(timestamp));
}
public static byte[] getVarTransactionId(TSpan span) {
if (span == null) {
throw new NullPointerException("span must not be null");
}
final byte[] transactionIdBytes = span.getTransactionId();
TransactionId transactionId = TransactionIdUtils.parseTransactionId(transactionIdBytes);
String agentId = transactionId.getAgentId();
if (agentId == null) {
agentId = span.getAgentId();
}
final Buffer buffer= new AutomaticBuffer(32);
buffer.putPrefixedString(agentId);
buffer.putSVLong(transactionId.getAgentStartTime());
buffer.putVLong(transactionId.getTransactionSequence());
return buffer.getBuffer();
}
public static byte[] getTransactionId(TSpan span) {
if (span == null) {
throw new NullPointerException("span must not be null");
}
final byte[] transactionIdBytes = span.getTransactionId();
TransactionId transactionId = TransactionIdUtils.parseTransactionId(transactionIdBytes);
String agentId = transactionId.getAgentId();
if (agentId == null) {
agentId = span.getAgentId();
}
return BytesUtils.stringLongLongToBytes(agentId, AGENT_NAME_MAX_LEN, transactionId.getAgentStartTime(), transactionId.getTransactionSequence());
}
public static byte[] getTransactionId(TSpanChunk spanChunk) {
if (spanChunk == null) {
throw new NullPointerException("spanChunk must not be null");
}
final byte[] transactionIdBytes = spanChunk.getTransactionId();
final TransactionId transactionId = TransactionIdUtils.parseTransactionId(transactionIdBytes);
String agentId = transactionId.getAgentId();
if (agentId == null) {
agentId = spanChunk.getAgentId();
}
return BytesUtils.stringLongLongToBytes(agentId, AGENT_NAME_MAX_LEN, transactionId.getAgentStartTime(), transactionId.getTransactionSequence());
}
}
@@ -21,9 +21,9 @@ package com.navercorp.pinpoint.common.util;
*/
public class TransactionId {
protected String agentId;
protected long agentStartTime;
protected long transactionSequence;
private String agentId;
private long agentStartTime;
private long transactionSequence;
public TransactionId(String agentId, long agentStartTime, long transactionSequence) {
if (agentId == null) {
@@ -0,0 +1,34 @@
package com.navercorp.pinpoint.common.util;
import java.util.Comparator;
/**
* @author Woonduk Kang(emeroad)
*/
public class TransactionIdComparator implements Comparator<TransactionId> {
public static final TransactionIdComparator INSTANCE = new TransactionIdComparator();
@Override
public int compare(TransactionId o1, TransactionId o2) {
int r1 = o1.getAgentId().compareTo(o2.getAgentId());
if (r1 == 0) {
if (o1.getAgentStartTime() > o2.getAgentStartTime()) {
return 1;
} else if (o1.getAgentStartTime() < o2.getAgentStartTime()) {
return -1;
} else {
if (o1.getTransactionSequence() > o2.getTransactionSequence()) {
return 1;
} else if (o1.getTransactionSequence() < o2.getTransactionSequence()) {
return -1;
} else {
return 0;
}
}
} else {
return r1;
}
}
}
@@ -20,6 +20,8 @@ import com.navercorp.pinpoint.common.buffer.AutomaticBuffer;
import com.navercorp.pinpoint.common.buffer.Buffer;
import com.navercorp.pinpoint.common.buffer.FixedBuffer;
import java.nio.ByteBuffer;
/**
* @author emeroad
*/
@@ -31,6 +33,10 @@ public final class TransactionIdUtils {
private TransactionIdUtils() {
}
public static String formatString(TransactionId transactionId) {
return formatString(transactionId.getAgentId(), transactionId.getAgentStartTime(), transactionId.getTransactionSequence());
}
public static String formatString(String agentId, long agentStartTime, long transactionSequence) {
if (agentId == null) {
throw new NullPointerException("agentId must not be null");
@@ -45,6 +51,16 @@ public final class TransactionIdUtils {
}
public static byte[] formatBytes(String agentId, long agentStartTime, long transactionSequence) {
final Buffer buffer = writeTransactionId(agentId, agentStartTime, transactionSequence);
return buffer.getBuffer();
}
public static ByteBuffer formatByteBuffer(String agentId, long agentStartTime, long transactionSequence) {
final Buffer buffer = writeTransactionId(agentId, agentStartTime, transactionSequence);
return buffer.wrapByteBuffer();
}
private static Buffer writeTransactionId(String agentId, long agentStartTime, long transactionSequence) {
// agentId may be null
// version + prefixed size + string + long + long
final Buffer buffer = new AutomaticBuffer(1 + 5 + 24 + 10 + 10);
@@ -52,7 +68,7 @@ public final class TransactionIdUtils {
buffer.putPrefixedString(agentId);
buffer.putVLong(agentStartTime);
buffer.putVLong(transactionSequence);
return buffer.getBuffer();
return buffer;
}
public static TransactionId parseTransactionId(final byte[] transactionId) {
@@ -1,86 +0,0 @@
/*
* Copyright 2014 NAVER Corp.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.navercorp.pinpoint.common.util;
import java.util.Arrays;
import com.google.common.primitives.Longs;
import com.navercorp.pinpoint.common.PinpointConstants;
import com.navercorp.pinpoint.thrift.dto.TSpan;
import org.junit.Assert;
import org.junit.Test;
/**
* @author emeroad
*/
public class SpanUtilsTest {
@Test
public void testGetTraceIndexRowKeyWhiteSpace() throws Exception {
String agentId = "test test";
long time = System.currentTimeMillis();
check(agentId, time);
}
@Test
public void testGetTraceIndexRowKey1() throws Exception {
String agentId = "test";
long time = System.currentTimeMillis();
check(agentId, time);
}
@Test
public void testGetTraceIndexRowKey2() throws Exception {
String agentId = "";
for (int i = 0; i < PinpointConstants.AGENT_NAME_MAX_LEN; i++) {
agentId += "1";
}
long time = System.currentTimeMillis();
check(agentId, time);
}
@Test
public void testGetTraceIndexRowKey3() throws Exception {
String agentId = "";
for (int i = 0; i < PinpointConstants.AGENT_NAME_MAX_LEN + 1; i++) {
agentId += "1";
}
long time = System.currentTimeMillis();
try {
check(agentId, time);
Assert.fail("error");
} catch (IndexOutOfBoundsException ignore) {
}
}
private void check(String agentId0, long l1) {
TSpan span = new TSpan();
span.setAgentId(agentId0);
span.setStartTime(l1);
byte[] traceIndexRowKey = SpanUtils.getAgentIdTraceIndexRowKey(span.getAgentId(), span.getStartTime());
String agentId = BytesUtils.toString(traceIndexRowKey, 0, PinpointConstants.AGENT_NAME_MAX_LEN).trim();
Assert.assertEquals(agentId0, agentId);
long time = Longs.fromByteArray(Arrays.copyOfRange(traceIndexRowKey, PinpointConstants.AGENT_NAME_MAX_LEN, PinpointConstants.AGENT_NAME_MAX_LEN + 8));
time = TimeUtils.recoveryTimeMillis(time);
Assert.assertEquals(time, l1);
}
}
@@ -14,13 +14,12 @@
* limitations under the License.
*/
package com.navercorp.pinpoint.web.vo;
package com.navercorp.pinpoint.common.util;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.SortedSet;
import java.util.TreeSet;
import org.junit.Assert;
@@ -28,44 +27,45 @@ import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.navercorp.pinpoint.web.vo.TransactionId;
public class TransactionIdTest {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
private final Comparator<TransactionId> comparator = TransactionIdComparator.INSTANCE;
@Test
public void sameAll() {
TransactionId id1 = new TransactionId("A1", 1, 1);
TransactionId id2 = new TransactionId("A1", 1, 1);
Assert.assertEquals(0, id1.compareTo(id2));
Assert.assertEquals(0, comparator.compare(id1, id2));
}
@Test
public void diffAgentStartTimeAsc() {
TransactionId id1 = new TransactionId("A1", 1, 1);
TransactionId id2 = new TransactionId("A1", 2, 1);
Assert.assertEquals(-1, id1.compareTo(id2));
Assert.assertEquals(-1, comparator.compare(id1, id2));
}
@Test
public void diffAgentStartTimeDesc() {
TransactionId id1 = new TransactionId("A1", 2, 1);
TransactionId id2 = new TransactionId("A1", 1, 1);
Assert.assertEquals(1, id1.compareTo(id2));
Assert.assertEquals(1, comparator.compare(id1, id2));
}
@Test
public void diffSeqAsc() {
TransactionId id1 = new TransactionId("A1", 1, 1);
TransactionId id2 = new TransactionId("A1", 1, 2);
Assert.assertEquals(-1, id1.compareTo(id2));
Assert.assertEquals(-1, comparator.compare(id1, id2));
}
@Test
public void diffSeqDesc() {
TransactionId id1 = new TransactionId("A1", 1, 2);
TransactionId id2 = new TransactionId("A1", 1, 1);
Assert.assertEquals(1, id1.compareTo(id2));
Assert.assertEquals(1, comparator.compare(id1, id2));
}
@Test
@@ -82,11 +82,12 @@ public class TransactionIdTest {
}
logger.debug("{}", list);
SortedSet<TransactionId> set = new TreeSet<TransactionId>(list);
for (int i = 0; i < 10; i++) {
set.add(list.get(i));
Collections.sort(list, comparator);
int i = 0;
for (TransactionId transactionId : list) {
Assert.assertEquals(i, transactionId.getTransactionSequence());
i++;
}
logger.debug("{}", set);
logger.debug("{}", list);
}
}
@@ -20,8 +20,6 @@ import org.junit.Assert;
import org.junit.Test;
import com.navercorp.pinpoint.common.util.TransactionId;
import com.navercorp.pinpoint.common.util.TransactionIdUtils;
/**
* @author emeroad
@@ -47,9 +47,9 @@ public class Span extends TSpan implements FrameAttachment {
final String transactionAgentId = traceId.getAgentId();
if (!agentId.equals(transactionAgentId)) {
this.setTransactionId(TransactionIdUtils.formatBytes(transactionAgentId, traceId.getAgentStartTime(), traceId.getTransactionSequence()));
this.setTransactionId(TransactionIdUtils.formatByteBuffer(transactionAgentId, traceId.getAgentStartTime(), traceId.getTransactionSequence()));
} else {
this.setTransactionId(TransactionIdUtils.formatBytes(null, traceId.getAgentStartTime(), traceId.getTransactionSequence()));
this.setTransactionId(TransactionIdUtils.formatByteBuffer(null, traceId.getAgentStartTime(), traceId.getTransactionSequence()));
}
this.setSpanId(traceId.getSpanId());
@@ -24,6 +24,8 @@ import javax.servlet.http.HttpServletResponse;
import com.navercorp.pinpoint.common.util.DefaultSqlParser;
import com.navercorp.pinpoint.common.util.OutputParameterParser;
import com.navercorp.pinpoint.common.util.SqlParser;
import com.navercorp.pinpoint.common.util.TransactionId;
import com.navercorp.pinpoint.common.util.TransactionIdUtils;
import com.navercorp.pinpoint.web.view.TransactionInfoViewModel;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -43,7 +45,6 @@ import com.navercorp.pinpoint.web.service.FilteredMapService;
import com.navercorp.pinpoint.web.service.SpanResult;
import com.navercorp.pinpoint.web.service.SpanService;
import com.navercorp.pinpoint.web.service.TransactionInfoService;
import com.navercorp.pinpoint.web.vo.TransactionId;
import com.navercorp.pinpoint.web.vo.callstacks.RecordSet;
/**
@@ -96,7 +97,8 @@ public class BusinessTransactionController {
@RequestParam(value = "v", required = false, defaultValue = "0") int viewVersion,
HttpServletResponse response) {
logger.debug("traceId:{}", traceIdParam);
final TransactionId traceId = new TransactionId(traceIdParam);
final TransactionId traceId = TransactionIdUtils.parseTransactionId(traceIdParam);
// select spans
final SpanResult spanResult = this.spanService.selectSpan(traceId, focusTimestamp);
@@ -18,6 +18,7 @@ package com.navercorp.pinpoint.web.controller;
import com.navercorp.pinpoint.common.service.ServiceTypeRegistryService;
import com.navercorp.pinpoint.common.util.DateUtils;
import com.navercorp.pinpoint.common.util.TransactionId;
import com.navercorp.pinpoint.web.applicationmap.ApplicationMap;
import com.navercorp.pinpoint.web.applicationmap.FilterMapWrap;
import com.navercorp.pinpoint.web.filter.Filter;
@@ -27,7 +28,6 @@ import com.navercorp.pinpoint.web.util.LimitUtils;
import com.navercorp.pinpoint.web.util.TimeUtils;
import com.navercorp.pinpoint.web.vo.LimitedScanResult;
import com.navercorp.pinpoint.web.vo.Range;
import com.navercorp.pinpoint.web.vo.TransactionId;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -18,6 +18,8 @@ package com.navercorp.pinpoint.web.controller;
import com.navercorp.pinpoint.common.server.bo.SpanBo;
import com.navercorp.pinpoint.common.util.DateUtils;
import com.navercorp.pinpoint.common.util.TransactionId;
import com.navercorp.pinpoint.common.util.TransactionIdComparator;
import com.navercorp.pinpoint.web.filter.Filter;
import com.navercorp.pinpoint.web.filter.FilterBuilder;
import com.navercorp.pinpoint.web.scatter.ScatterData;
@@ -28,7 +30,6 @@ import com.navercorp.pinpoint.web.view.ServerTime;
import com.navercorp.pinpoint.web.view.TransactionMetaDataViewModel;
import com.navercorp.pinpoint.web.vo.LimitedScanResult;
import com.navercorp.pinpoint.web.vo.Range;
import com.navercorp.pinpoint.web.vo.TransactionId;
import com.navercorp.pinpoint.web.vo.TransactionMetadataQuery;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
@@ -45,9 +46,8 @@ import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Collections;
import java.util.List;
import java.util.SortedSet;
import java.util.TreeSet;
/**
* @author netspider
@@ -205,15 +205,12 @@ public class ScatterChartController {
boolean requestComplete = traceIdList.size() < limit;
// TODO just need sorted? we need range check with tree-based structure.
SortedSet<TransactionId> traceIdSet = new TreeSet<>(traceIdList);
logger.debug("unified traceIdSet size={}", traceIdSet.size());
Collections.sort(traceIdList, TransactionIdComparator.INSTANCE);
Filter filter = filterBuilder.build(filterText);
ModelAndView mv;
if (version == 1) {
ScatterData scatterData = scatter.selectScatterData(traceIdSet, applicationName, range, xGroupUnit, yGroupUnit, filter);
ScatterData scatterData = scatter.selectScatterData(traceIdList, applicationName, range, xGroupUnit, yGroupUnit, filter);
if (logger.isDebugEnabled()) {
logger.debug("getScatterData range scan(limited:{}, backwardDirection:{}) from ~ to:{} ~ {}, limited:{}, filterDataSize:{}",
limit, backwardDirection, DateUtils.longToDateStr(range.getFrom()), DateUtils.longToDateStr(range.getTo()), DateUtils.longToDateStr(limitedScanResult.getLimitedTime()), traceIdList.size());
@@ -16,11 +16,11 @@
package com.navercorp.pinpoint.web.dao;
import com.navercorp.pinpoint.common.util.TransactionId;
import com.navercorp.pinpoint.web.scatter.ScatterData;
import com.navercorp.pinpoint.web.vo.LimitedScanResult;
import com.navercorp.pinpoint.web.vo.Range;
import com.navercorp.pinpoint.web.vo.SelectedScatterArea;
import com.navercorp.pinpoint.web.vo.TransactionId;
import com.navercorp.pinpoint.web.vo.scatter.Dot;
import java.util.List;
@@ -21,7 +21,7 @@ import java.util.Collection;
import java.util.List;
import com.navercorp.pinpoint.common.server.bo.SpanBo;
import com.navercorp.pinpoint.web.vo.TransactionId;
import com.navercorp.pinpoint.common.util.TransactionId;
/**
* @author emeroad
@@ -42,7 +42,7 @@ import com.navercorp.pinpoint.common.hbase.ResultsExtractor;
import com.navercorp.pinpoint.common.hbase.RowMapper;
import com.navercorp.pinpoint.common.server.util.AgentEventType;
import com.navercorp.pinpoint.common.util.BytesUtils;
import com.navercorp.pinpoint.common.util.RowKeyUtils;
import com.navercorp.pinpoint.common.server.util.RowKeyUtils;
import com.navercorp.pinpoint.common.util.TimeUtils;
import com.navercorp.pinpoint.web.dao.AgentEventDao;
import com.navercorp.pinpoint.web.vo.Range;
@@ -19,7 +19,7 @@ package com.navercorp.pinpoint.web.dao.hbase;
import com.navercorp.pinpoint.common.hbase.HBaseTables;
import com.navercorp.pinpoint.common.hbase.HbaseOperations2;
import com.navercorp.pinpoint.common.hbase.ResultsExtractor;
import com.navercorp.pinpoint.common.util.RowKeyUtils;
import com.navercorp.pinpoint.common.server.util.RowKeyUtils;
import com.navercorp.pinpoint.common.util.TimeUtils;
import com.navercorp.pinpoint.web.dao.AgentInfoDao;
@@ -37,7 +37,7 @@ import com.navercorp.pinpoint.common.hbase.HBaseTables;
import com.navercorp.pinpoint.common.hbase.HbaseOperations2;
import com.navercorp.pinpoint.common.hbase.ResultsExtractor;
import com.navercorp.pinpoint.common.hbase.RowMapper;
import com.navercorp.pinpoint.common.util.RowKeyUtils;
import com.navercorp.pinpoint.common.server.util.RowKeyUtils;
import com.navercorp.pinpoint.common.util.TimeUtils;
import com.navercorp.pinpoint.web.dao.AgentLifeCycleDao;
@@ -36,7 +36,7 @@ import com.navercorp.pinpoint.common.hbase.HbaseOperations2;
import com.navercorp.pinpoint.common.hbase.ResultsExtractor;
import com.navercorp.pinpoint.common.hbase.RowMapper;
import com.navercorp.pinpoint.common.util.BytesUtils;
import com.navercorp.pinpoint.common.util.RowKeyUtils;
import com.navercorp.pinpoint.common.server.util.RowKeyUtils;
import com.navercorp.pinpoint.common.util.TimeUtils;
import com.navercorp.pinpoint.web.dao.AgentStatDao;
import com.navercorp.pinpoint.web.util.AgentStats;
@@ -27,6 +27,7 @@ import com.navercorp.pinpoint.common.util.BytesUtils;
import com.navercorp.pinpoint.common.util.DateUtils;
import com.navercorp.pinpoint.common.server.util.SpanUtils;
import com.navercorp.pinpoint.common.util.TimeUtils;
import com.navercorp.pinpoint.common.util.TransactionId;
import com.navercorp.pinpoint.rpc.util.ListUtils;
import com.navercorp.pinpoint.web.dao.ApplicationTraceIndexDao;
import com.navercorp.pinpoint.web.mapper.TraceIndexScatterMapper2;
@@ -37,7 +38,6 @@ import com.navercorp.pinpoint.web.vo.LimitedScanResult;
import com.navercorp.pinpoint.web.vo.Range;
import com.navercorp.pinpoint.web.vo.ResponseTimeRange;
import com.navercorp.pinpoint.web.vo.SelectedScatterArea;
import com.navercorp.pinpoint.web.vo.TransactionId;
import com.navercorp.pinpoint.web.vo.scatter.Dot;
import com.sematext.hbase.wd.AbstractRowKeyDistributor;
import org.apache.hadoop.hbase.Cell;
@@ -2,8 +2,8 @@ package com.navercorp.pinpoint.web.dao.hbase;
import com.google.common.annotations.Beta;
import com.navercorp.pinpoint.common.server.bo.SpanBo;
import com.navercorp.pinpoint.common.util.TransactionId;
import com.navercorp.pinpoint.web.dao.TraceDao;
import com.navercorp.pinpoint.web.vo.TransactionId;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -1,8 +1,8 @@
package com.navercorp.pinpoint.web.dao.hbase;
import com.navercorp.pinpoint.common.server.bo.SpanBo;
import com.navercorp.pinpoint.common.util.TransactionId;
import com.navercorp.pinpoint.web.dao.TraceDao;
import com.navercorp.pinpoint.web.vo.TransactionId;
import org.apache.commons.collections.CollectionUtils;
import java.util.Collection;
@@ -16,13 +16,15 @@
package com.navercorp.pinpoint.web.dao.hbase;
import com.navercorp.pinpoint.common.PinpointConstants;
import com.navercorp.pinpoint.common.server.bo.SpanBo;
import com.navercorp.pinpoint.common.hbase.HBaseTables;
import com.navercorp.pinpoint.common.hbase.HbaseOperations2;
import com.navercorp.pinpoint.common.hbase.RowMapper;
import com.navercorp.pinpoint.common.util.BytesUtils;
import com.navercorp.pinpoint.common.util.TransactionId;
import com.navercorp.pinpoint.web.dao.TraceDao;
import com.navercorp.pinpoint.web.mapper.CellTraceMapper;
import com.navercorp.pinpoint.web.vo.TransactionId;
import com.sematext.hbase.wd.AbstractRowKeyDistributor;
import org.apache.hadoop.hbase.client.Get;
import org.slf4j.Logger;
@@ -78,8 +80,8 @@ public class HbaseTraceDao implements TraceDao {
if (transactionId == null) {
throw new NullPointerException("transactionId must not be null");
}
byte[] traceIdBytes = rowKeyDistributor.getDistributedKey(transactionId.getBytes());
byte[] rowKey = newRowKey(transactionId);
byte[] traceIdBytes = rowKeyDistributor.getDistributedKey(rowKey);
return template2.get(HBaseTables.TRACES, traceIdBytes, HBaseTables.TRACES_CF_SPAN, spanMapper);
}
@@ -87,8 +89,8 @@ public class HbaseTraceDao implements TraceDao {
if (transactionId == null) {
throw new NullPointerException("transactionId must not be null");
}
final byte[] traceIdBytes = rowKeyDistributor.getDistributedKey(transactionId.getBytes());
byte[] rowKey = newRowKey(transactionId);
final byte[] traceIdBytes = rowKeyDistributor.getDistributedKey(rowKey);
Get get = new Get(traceIdBytes);
get.addFamily(HBaseTables.TRACES_CF_SPAN);
get.addFamily(HBaseTables.TRACES_CF_ANNOTATION);
@@ -182,7 +184,8 @@ public class HbaseTraceDao implements TraceDao {
final List<Get> getList = new ArrayList<>(transactionIdList.size());
for (TransactionId transactionId : transactionIdList) {
final byte[] transactionIdBytes = rowKeyDistributor.getDistributedKey(transactionId.getBytes());
byte[] rowKey = newRowKey(transactionId);
final byte[] transactionIdBytes = rowKeyDistributor.getDistributedKey(rowKey);
final Get get = new Get(transactionIdBytes);
for (byte[] hbaseFamily : hBaseFamiliyList) {
get.addFamily(hbaseFamily);
@@ -197,12 +200,16 @@ public class HbaseTraceDao implements TraceDao {
if (transactionId == null) {
throw new NullPointerException("transactionId must not be null");
}
final byte[] transactionIdBytes = rowKeyDistributor.getDistributedKey(transactionId.getBytes());
byte[] rowKey = newRowKey(transactionId);
final byte[] transactionIdBytes = rowKeyDistributor.getDistributedKey(rowKey);
Get get = new Get(transactionIdBytes);
get.addFamily(HBaseTables.TRACES_CF_SPAN);
get.addFamily(HBaseTables.TRACES_CF_TERMINALSPAN);
return template2.get(HBaseTables.TRACES, get, spanMapper);
}
private byte[] newRowKey(TransactionId transactionId) {
return BytesUtils.stringLongLongToBytes(transactionId.getAgentId(), PinpointConstants.AGENT_NAME_MAX_LEN, transactionId.getAgentStartTime(), transactionId.getTransactionSequence());
}
}
@@ -2,13 +2,15 @@ package com.navercorp.pinpoint.web.dao.hbase;
import com.google.common.annotations.Beta;
import com.google.common.collect.Lists;
import com.navercorp.pinpoint.common.PinpointConstants;
import com.navercorp.pinpoint.common.hbase.HBaseTables;
import com.navercorp.pinpoint.common.hbase.HbaseOperations2;
import com.navercorp.pinpoint.common.hbase.RowMapper;
import com.navercorp.pinpoint.common.server.bo.SpanBo;
import com.navercorp.pinpoint.common.util.BytesUtils;
import com.navercorp.pinpoint.common.util.TransactionId;
import com.navercorp.pinpoint.web.dao.TraceDao;
import com.navercorp.pinpoint.web.mapper.CellTraceMapper;
import com.navercorp.pinpoint.web.vo.TransactionId;
import com.sematext.hbase.wd.AbstractRowKeyDistributor;
import org.apache.hadoop.hbase.client.Get;
import org.slf4j.Logger;
@@ -65,10 +67,15 @@ public class HbaseTraceDaoV2 implements TraceDao {
throw new NullPointerException("transactionId must not be null");
}
byte[] traceIdBytes = rowKeyDistributor.getDistributedKey(transactionId.getBytes());
byte[] rowKey = newRowKey(transactionId);
byte[] traceIdBytes = rowKeyDistributor.getDistributedKey(rowKey);
return template2.get(HBaseTables.TRACE_V2, traceIdBytes, HBaseTables.TRACE_V2_CF_SPAN, spanMapperV2);
}
private byte[] newRowKey(TransactionId transactionId) {
return BytesUtils.stringLongLongToBytes(transactionId.getAgentId(), PinpointConstants.AGENT_NAME_MAX_LEN, transactionId.getAgentStartTime(), transactionId.getTransactionSequence());
}
@Deprecated
@Override
public List<SpanBo> selectSpanAndAnnotation(TransactionId transactionId) {
@@ -153,8 +160,8 @@ public class HbaseTraceDaoV2 implements TraceDao {
final List<Get> getList = new ArrayList<>(transactionIdList.size());
for (TransactionId transactionId : transactionIdList) {
final byte[] transactionIdBytes = rowKeyDistributor.getDistributedKey(transactionId.getBytes());
byte[] rowKey = newRowKey(transactionId);
final byte[] transactionIdBytes = rowKeyDistributor.getDistributedKey(rowKey);
final Get get = new Get(transactionIdBytes);
get.addFamily(columnFamily);
@@ -26,7 +26,7 @@ import com.navercorp.pinpoint.common.hbase.HBaseTables;
import com.navercorp.pinpoint.common.hbase.RowMapper;
import com.navercorp.pinpoint.common.util.BytesUtils;
import com.navercorp.pinpoint.common.util.TimeUtils;
import com.navercorp.pinpoint.web.vo.TransactionId;
import com.navercorp.pinpoint.common.util.TransactionId;
import com.navercorp.pinpoint.web.vo.scatter.Dot;
import org.apache.hadoop.hbase.Cell;
@@ -20,6 +20,7 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import com.navercorp.pinpoint.common.util.TransactionId;
import org.apache.hadoop.hbase.Cell;
import org.apache.hadoop.hbase.client.Result;
@@ -29,7 +30,6 @@ import com.navercorp.pinpoint.common.hbase.HBaseTables;
import com.navercorp.pinpoint.common.hbase.RowMapper;
import com.navercorp.pinpoint.common.util.BytesUtils;
import com.navercorp.pinpoint.common.util.TimeUtils;
import com.navercorp.pinpoint.web.vo.TransactionId;
import com.navercorp.pinpoint.web.vo.scatter.Dot;
/**
@@ -21,8 +21,8 @@ import com.navercorp.pinpoint.common.hbase.HBaseTables;
import com.navercorp.pinpoint.common.hbase.RowMapper;
import com.navercorp.pinpoint.common.util.BytesUtils;
import com.navercorp.pinpoint.common.util.TimeUtils;
import com.navercorp.pinpoint.common.util.TransactionId;
import com.navercorp.pinpoint.web.scatter.ScatterData;
import com.navercorp.pinpoint.web.vo.TransactionId;
import com.navercorp.pinpoint.web.vo.scatter.Dot;
import org.apache.hadoop.hbase.Cell;
import org.apache.hadoop.hbase.client.Result;
@@ -23,8 +23,8 @@ import java.util.List;
import com.navercorp.pinpoint.common.buffer.Buffer;
import com.navercorp.pinpoint.common.buffer.OffsetFixedBuffer;
import com.navercorp.pinpoint.common.hbase.RowMapper;
import com.navercorp.pinpoint.web.vo.TransactionId;
import com.navercorp.pinpoint.common.util.TransactionId;
import org.apache.hadoop.hbase.Cell;
import org.apache.hadoop.hbase.client.Result;
import org.slf4j.Logger;
@@ -22,6 +22,7 @@ import com.navercorp.pinpoint.web.vo.*;
import com.navercorp.pinpoint.web.vo.scatter.ApplicationScatterScanResult;
import com.navercorp.pinpoint.web.vo.scatter.Dot;
import com.navercorp.pinpoint.web.vo.scatter.ScatterScanResult;
import com.navercorp.pinpoint.common.util.TransactionId;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -70,7 +71,7 @@ public class DotExtractor {
private List<Dot> getDotList(Application spanApplication) {
List<Dot> dotList = this.dotMap.get(spanApplication);
if(dotList == null) {
if (dotList == null) {
dotList = new ArrayList<>();
this.dotMap.put(spanApplication, dotList);
}
@@ -16,6 +16,7 @@
package com.navercorp.pinpoint.web.service;
import com.navercorp.pinpoint.common.util.TransactionId;
import com.navercorp.pinpoint.web.applicationmap.ApplicationMap;
import com.navercorp.pinpoint.web.filter.Filter;
import com.navercorp.pinpoint.web.vo.Application;
@@ -23,7 +24,6 @@ import com.navercorp.pinpoint.web.vo.LimitedScanResult;
import com.navercorp.pinpoint.web.vo.LoadFactor;
import com.navercorp.pinpoint.web.vo.Range;
import com.navercorp.pinpoint.web.vo.SelectedScatterArea;
import com.navercorp.pinpoint.web.vo.TransactionId;
import java.util.List;
@@ -22,6 +22,7 @@ import com.navercorp.pinpoint.common.service.ServiceTypeRegistryService;
import com.navercorp.pinpoint.common.trace.HistogramSchema;
import com.navercorp.pinpoint.common.trace.HistogramSlot;
import com.navercorp.pinpoint.common.trace.ServiceType;
import com.navercorp.pinpoint.common.util.TransactionId;
import com.navercorp.pinpoint.web.applicationmap.ApplicationMap;
import com.navercorp.pinpoint.web.applicationmap.ApplicationMapBuilder;
import com.navercorp.pinpoint.web.applicationmap.ApplicationMapWithScatterData;
@@ -40,7 +41,6 @@ import com.navercorp.pinpoint.web.vo.LoadFactor;
import com.navercorp.pinpoint.web.vo.Range;
import com.navercorp.pinpoint.web.vo.ResponseHistogramBuilder;
import com.navercorp.pinpoint.web.vo.SelectedScatterArea;
import com.navercorp.pinpoint.web.vo.TransactionId;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
@@ -17,11 +17,11 @@
package com.navercorp.pinpoint.web.service;
import com.navercorp.pinpoint.common.server.bo.SpanBo;
import com.navercorp.pinpoint.common.util.TransactionId;
import com.navercorp.pinpoint.web.filter.Filter;
import com.navercorp.pinpoint.web.scatter.ScatterData;
import com.navercorp.pinpoint.web.vo.Range;
import com.navercorp.pinpoint.web.vo.SelectedScatterArea;
import com.navercorp.pinpoint.web.vo.TransactionId;
import com.navercorp.pinpoint.web.vo.TransactionMetadataQuery;
import com.navercorp.pinpoint.web.vo.scatter.Dot;
@@ -17,13 +17,13 @@
package com.navercorp.pinpoint.web.service;
import com.navercorp.pinpoint.common.server.bo.SpanBo;
import com.navercorp.pinpoint.common.util.TransactionId;
import com.navercorp.pinpoint.web.dao.ApplicationTraceIndexDao;
import com.navercorp.pinpoint.web.dao.TraceDao;
import com.navercorp.pinpoint.web.filter.Filter;
import com.navercorp.pinpoint.web.scatter.ScatterData;
import com.navercorp.pinpoint.web.vo.Range;
import com.navercorp.pinpoint.web.vo.SelectedScatterArea;
import com.navercorp.pinpoint.web.vo.TransactionId;
import com.navercorp.pinpoint.web.vo.TransactionMetadataQuery;
import com.navercorp.pinpoint.web.vo.scatter.Dot;
import org.slf4j.Logger;
@@ -16,7 +16,7 @@
package com.navercorp.pinpoint.web.service;
import com.navercorp.pinpoint.web.vo.TransactionId;
import com.navercorp.pinpoint.common.util.TransactionId;
/**
* @author emeroad
@@ -31,6 +31,7 @@ import com.navercorp.pinpoint.common.util.DefaultSqlParser;
import com.navercorp.pinpoint.common.util.IntStringStringValue;
import com.navercorp.pinpoint.common.util.OutputParameterParser;
import com.navercorp.pinpoint.common.util.SqlParser;
import com.navercorp.pinpoint.common.util.TransactionId;
import com.navercorp.pinpoint.web.calltree.span.CallTree;
import com.navercorp.pinpoint.web.calltree.span.CallTreeIterator;
import com.navercorp.pinpoint.web.calltree.span.SpanAlign;
@@ -41,7 +42,6 @@ import com.navercorp.pinpoint.web.dao.StringMetaDataDao;
import com.navercorp.pinpoint.web.dao.TraceDao;
import com.navercorp.pinpoint.web.security.MetaDataFilter;
import com.navercorp.pinpoint.web.security.MetaDataFilter.MetaData;
import com.navercorp.pinpoint.web.vo.TransactionId;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
@@ -18,11 +18,11 @@ package com.navercorp.pinpoint.web.service;
import java.util.List;
import com.navercorp.pinpoint.common.util.TransactionId;
import com.navercorp.pinpoint.web.calltree.span.CallTreeIterator;
import com.navercorp.pinpoint.web.filter.Filter;
import com.navercorp.pinpoint.web.vo.BusinessTransactions;
import com.navercorp.pinpoint.web.vo.Range;
import com.navercorp.pinpoint.web.vo.TransactionId;
import com.navercorp.pinpoint.web.vo.callstacks.RecordSet;
/**
@@ -28,6 +28,7 @@ import com.navercorp.pinpoint.common.service.AnnotationKeyRegistryService;
import com.navercorp.pinpoint.common.service.ServiceTypeRegistryService;
import com.navercorp.pinpoint.common.trace.AnnotationKeyMatcher;
import com.navercorp.pinpoint.common.trace.LoggingInfo;
import com.navercorp.pinpoint.common.util.TransactionId;
import com.navercorp.pinpoint.web.calltree.span.CallTreeIterator;
import com.navercorp.pinpoint.web.calltree.span.CallTreeNode;
import com.navercorp.pinpoint.web.calltree.span.SpanAlign;
@@ -37,7 +38,6 @@ import com.navercorp.pinpoint.web.security.MetaDataFilter;
import com.navercorp.pinpoint.web.security.MetaDataFilter.MetaData;
import com.navercorp.pinpoint.web.vo.BusinessTransactions;
import com.navercorp.pinpoint.web.vo.Range;
import com.navercorp.pinpoint.web.vo.TransactionId;
import com.navercorp.pinpoint.web.vo.callstacks.Record;
import com.navercorp.pinpoint.web.vo.callstacks.RecordFactory;
import com.navercorp.pinpoint.web.vo.callstacks.RecordSet;
@@ -21,6 +21,8 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.navercorp.pinpoint.common.util.TransactionId;
import com.navercorp.pinpoint.common.util.TransactionIdUtils;
import org.json.simple.JSONObject;
import com.fasterxml.jackson.annotation.JsonProperty;
@@ -28,7 +30,6 @@ import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.navercorp.pinpoint.common.util.DateUtils;
import com.navercorp.pinpoint.web.applicationmap.Link;
import com.navercorp.pinpoint.web.applicationmap.Node;
import com.navercorp.pinpoint.web.vo.TransactionId;
import com.navercorp.pinpoint.web.vo.callstacks.Record;
import com.navercorp.pinpoint.web.vo.callstacks.RecordSet;
@@ -38,7 +39,7 @@ import com.navercorp.pinpoint.web.vo.callstacks.RecordSet;
*/
public class TransactionInfoViewModel {
private TransactionId traceId;
private TransactionId transactionId;
private Collection<Node> nodes;
private Collection<Link> links;
private RecordSet recordSet;
@@ -48,8 +49,8 @@ public class TransactionInfoViewModel {
private String logPageUrl;
private String disableButtonMessage;
public TransactionInfoViewModel(TransactionId traceId, Collection<Node> nodes, Collection<Link> links, RecordSet recordSet, String completeState, boolean logLinkEnable, String logButtonName, String logPageUrl, String disableButtonMessage) {
this.traceId = traceId;
public TransactionInfoViewModel(TransactionId transactionId, Collection<Node> nodes, Collection<Link> links, RecordSet recordSet, String completeState, boolean logLinkEnable, String logButtonName, String logPageUrl, String disableButtonMessage) {
this.transactionId = transactionId;
this.nodes = nodes;
this.links = links;
this.recordSet = recordSet;
@@ -67,7 +68,7 @@ public class TransactionInfoViewModel {
@JsonProperty("transactionId")
public String getTransactionId() {
return traceId.getFormatString();
return TransactionIdUtils.formatString(transactionId);
}
@JsonProperty("agentId")
@@ -114,7 +115,7 @@ public class TransactionInfoViewModel {
public String getLogPageUrl() {
if (logPageUrl != null && logPageUrl.length() > 0) {
StringBuilder sb = new StringBuilder();
sb.append("transactionId=").append(traceId.getFormatString());
sb.append("transactionId=").append(getTransactionId());
sb.append("&time=").append(recordSet.getStartTime());
return logPageUrl + "?" + sb.toString();
}
@@ -1,151 +0,0 @@
/*
* Copyright 2014 NAVER Corp.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.navercorp.pinpoint.web.vo;
import com.navercorp.pinpoint.common.PinpointConstants;
import com.navercorp.pinpoint.common.util.BytesUtils;
import com.navercorp.pinpoint.common.util.TransactionIdUtils;
/**
* @author emeroad
*/
// FIXME Remove Comparable interface
public class TransactionId implements Comparable<TransactionId> {
public static final int AGENT_NAME_MAX_LEN = PinpointConstants.AGENT_NAME_MAX_LEN;
public static final int DISTRIBUTE_HASH_SIZE = 1;
protected final String agentId;
protected final long agentStartTime;
protected final long transactionSequence;
public TransactionId(byte[] transactionId) {
if (transactionId == null) {
throw new NullPointerException("transactionId must not be null");
}
if (transactionId.length < BytesUtils.LONG_LONG_BYTE_LENGTH + AGENT_NAME_MAX_LEN) {
throw new IllegalArgumentException("invalid transactionId length:" + transactionId.length);
}
this.agentId = BytesUtils.toStringAndRightTrim(transactionId, 0, AGENT_NAME_MAX_LEN);
this.agentStartTime = BytesUtils.bytesToLong(transactionId, AGENT_NAME_MAX_LEN);
this.transactionSequence = BytesUtils.bytesToLong(transactionId, BytesUtils.LONG_BYTE_LENGTH + AGENT_NAME_MAX_LEN);
}
public TransactionId(byte[] transactionId, int offset) {
if (transactionId == null) {
throw new NullPointerException("transactionId must not be null");
}
if (transactionId.length < BytesUtils.LONG_LONG_BYTE_LENGTH + AGENT_NAME_MAX_LEN + offset) {
throw new IllegalArgumentException("invalid transactionId length:" + transactionId.length);
}
this.agentId = BytesUtils.toStringAndRightTrim(transactionId, offset, AGENT_NAME_MAX_LEN);
this.agentStartTime = BytesUtils.bytesToLong(transactionId, offset + AGENT_NAME_MAX_LEN);
this.transactionSequence = BytesUtils.bytesToLong(transactionId, offset + BytesUtils.LONG_BYTE_LENGTH + AGENT_NAME_MAX_LEN);
}
public TransactionId(String agentId, long agentStartTime, long transactionSequence) {
if (agentId == null) {
throw new NullPointerException("agentId must not be null");
}
this.agentId = agentId;
this.agentStartTime = agentStartTime;
this.transactionSequence = transactionSequence;
}
public TransactionId(String transactionId) {
if (transactionId == null) {
throw new NullPointerException("transactionId must not be null");
}
com.navercorp.pinpoint.common.util.TransactionId parsedId = TransactionIdUtils.parseTransactionId(transactionId);
this.agentId = parsedId.getAgentId();
this.agentStartTime = parsedId.getAgentStartTime();
this.transactionSequence = parsedId.getTransactionSequence();
}
public String getAgentId() {
return agentId;
}
public long getAgentStartTime() {
return agentStartTime;
}
public long getTransactionSequence() {
return transactionSequence;
}
public byte[] getBytes() {
return BytesUtils.stringLongLongToBytes(agentId, PinpointConstants.AGENT_NAME_MAX_LEN, agentStartTime, transactionSequence);
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
TransactionId traceId = (TransactionId) o;
if (agentStartTime != traceId.agentStartTime) return false;
if (transactionSequence != traceId.transactionSequence) return false;
if (!agentId.equals(traceId.agentId)) return false;
return true;
}
@Override
public int hashCode() {
int result = agentId.hashCode();
result = 31 * result + (int) (agentStartTime ^ (agentStartTime >>> 32));
result = 31 * result + (int) (transactionSequence ^ (transactionSequence >>> 32));
return result;
}
@Override
public String toString() {
String traceId = TransactionIdUtils.formatString(agentId, agentStartTime, transactionSequence);
return "TransactionId [" + traceId + "]";
}
public String getFormatString() {
return TransactionIdUtils.formatString(agentId, agentStartTime, transactionSequence);
}
// FIXME remove
@Override
public int compareTo(TransactionId transactionId) {
int r1 = this.agentId.compareTo(transactionId.agentId);
if (r1 == 0) {
if (this.agentStartTime > transactionId.agentStartTime) {
return 1;
} else if (this.agentStartTime < transactionId.agentStartTime) {
return -1;
} else {
if (this.transactionSequence > transactionId.transactionSequence) {
return 1;
} else if (this.transactionSequence < transactionId.transactionSequence) {
return -1;
} else {
return 0;
}
}
} else {
return r1;
}
}
}
@@ -18,6 +18,8 @@ package com.navercorp.pinpoint.web.vo;
import java.util.ArrayList;
import java.util.List;
import com.navercorp.pinpoint.common.util.TransactionId;
import com.navercorp.pinpoint.common.util.TransactionIdUtils;
/**
* @author netspider
@@ -35,7 +37,7 @@ public class TransactionMetadataQuery {
if (transactionId == null) {
throw new NullPointerException("transactionId must not be null");
}
TransactionId traceId = new TransactionId(transactionId);
TransactionId traceId = TransactionIdUtils.parseTransactionId(transactionId);
QueryCondition condition = new QueryCondition(traceId, collectorAcceptTime, responseTime);
queryConditionList.add(condition);
}
@@ -17,8 +17,10 @@
package com.navercorp.pinpoint.web.vo.scatter;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.navercorp.pinpoint.common.util.TransactionId;
import com.navercorp.pinpoint.common.util.TransactionIdUtils;
import com.navercorp.pinpoint.web.view.DotSerializer;
import com.navercorp.pinpoint.web.vo.TransactionId;
@JsonSerialize(using = DotSerializer.class)
public class Dot {
@@ -60,7 +62,7 @@ public class Dot {
}
public String getTransactionIdAsString() {
return transactionId.getFormatString();
return TransactionIdUtils.formatString(transactionId);
}
public int getExceptionCode() {
@@ -43,7 +43,7 @@ import org.mockito.MockitoAnnotations;
import com.navercorp.pinpoint.common.server.bo.AgentStatCpuLoadBo;
import com.navercorp.pinpoint.common.server.bo.AgentStatMemoryGcBo;
import com.navercorp.pinpoint.common.util.BytesUtils;
import com.navercorp.pinpoint.common.util.RowKeyUtils;
import com.navercorp.pinpoint.common.server.util.RowKeyUtils;
import com.navercorp.pinpoint.common.util.TimeUtils;
import com.navercorp.pinpoint.thrift.dto.TAgentStat;
import com.navercorp.pinpoint.thrift.dto.TJvmGc;
@@ -15,7 +15,7 @@
package com.navercorp.pinpoint.web.scatter;
import com.navercorp.pinpoint.web.vo.TransactionId;
import com.navercorp.pinpoint.common.util.TransactionId;
import com.navercorp.pinpoint.web.vo.scatter.Dot;
import org.junit.Assert;
import org.junit.Test;
@@ -17,7 +17,8 @@
package com.navercorp.pinpoint.web.view;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.navercorp.pinpoint.web.vo.TransactionId;
import com.navercorp.pinpoint.common.util.TransactionId;
import com.navercorp.pinpoint.common.util.TransactionIdUtils;
import com.navercorp.pinpoint.web.vo.scatter.Dot;
import org.junit.Assert;
@@ -37,7 +38,7 @@ public class DotSerializerTest {
@Test
public void testSerialize() throws Exception {
TransactionId transactionId = new TransactionId("aigw.dev.1^1395798795017^1527177");
TransactionId transactionId = TransactionIdUtils.parseTransactionId("aigw.dev.1^1395798795017^1527177");
Dot dot = new Dot(transactionId, 100, 99, 1, "agent");
String jsonValue = mapper.writeValueAsString(dot);
Assert.assertEquals("[100,99,\"aigw.dev.1^1395798795017^1527177\",0]", jsonValue);