diff --git a/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/ui/trace/BasicTrace.java b/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/ui/trace/BasicTrace.java index 127157babc78fb9d7915f632f55cd226b6b23bd4..0d21d3ee34cad407215a60f9ac45c83a017f6c59 100644 --- a/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/ui/trace/BasicTrace.java +++ b/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/ui/trace/BasicTrace.java @@ -18,15 +18,32 @@ package org.apache.skywalking.apm.collector.storage.ui.trace; +import java.util.LinkedList; +import java.util.List; + /** * @author peng-yongsheng */ public class BasicTrace { + + private String segmentId; private String operationName; private int duration; private long start; private Boolean isError; - private String traceId; + private List traceIds; + + public String getSegmentId() { + return segmentId; + } + + public void setSegmentId(String segmentId) { + this.segmentId = segmentId; + } + + public BasicTrace() { + this.traceIds = new LinkedList<>(); + } public String getOperationName() { return operationName; @@ -60,11 +77,11 @@ public class BasicTrace { isError = error; } - public String getTraceId() { - return traceId; + public List getTraceIds() { + return traceIds; } - public void setTraceId(String traceId) { - this.traceId = traceId; + public void setTraceIds(List traceIds) { + this.traceIds = traceIds; } } diff --git a/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/ui/SegmentDurationEsUIDAO.java b/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/ui/SegmentDurationEsUIDAO.java index 058b106a816c763a4f2693dd2f742d0a2a93e76d..90046b2d38c50355275c7fcc52dffd569f319a19 100644 --- a/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/ui/SegmentDurationEsUIDAO.java +++ b/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/ui/SegmentDurationEsUIDAO.java @@ -91,7 +91,7 @@ public class SegmentDurationEsUIDAO extends EsDAO implements ISegmentDurationUID for (SearchHit searchHit : searchResponse.getHits().getHits()) { BasicTrace basicTrace = new BasicTrace(); - basicTrace.setTraceId((String)searchHit.getSource().get(SegmentDurationTable.COLUMN_TRACE_ID)); + basicTrace.setSegmentId((String)searchHit.getSource().get(SegmentDurationTable.COLUMN_SEGMENT_ID)); basicTrace.setStart(((Number)searchHit.getSource().get(SegmentDurationTable.COLUMN_START_TIME)).longValue()); basicTrace.setOperationName((String)searchHit.getSource().get(SegmentDurationTable.COLUMN_SERVICE_NAME)); basicTrace.setDuration(((Number)searchHit.getSource().get(SegmentDurationTable.COLUMN_DURATION)).intValue()); diff --git a/apm-collector/apm-collector-storage/collector-storage-h2-provider/src/main/java/org/apache/skywalking/apm/collector/storage/h2/dao/ui/SegmentDurationH2UIDAO.java b/apm-collector/apm-collector-storage/collector-storage-h2-provider/src/main/java/org/apache/skywalking/apm/collector/storage/h2/dao/ui/SegmentDurationH2UIDAO.java index 7699f0903a8b61f5abe1bd58c224fe46e9b367f4..b47fd66176733aa8300697f2e32944e440d69419 100644 --- a/apm-collector/apm-collector-storage/collector-storage-h2-provider/src/main/java/org/apache/skywalking/apm/collector/storage/h2/dao/ui/SegmentDurationH2UIDAO.java +++ b/apm-collector/apm-collector-storage/collector-storage-h2-provider/src/main/java/org/apache/skywalking/apm/collector/storage/h2/dao/ui/SegmentDurationH2UIDAO.java @@ -101,9 +101,9 @@ public class SegmentDurationH2UIDAO extends H2DAO implements ISegmentDurationUID try (ResultSet rs = client.executeQuery(sql, p)) { while (rs.next()) { BasicTrace basicTrace = new BasicTrace(); + basicTrace.setSegmentId(rs.getString(SegmentDurationTable.COLUMN_SEGMENT_ID)); basicTrace.setDuration(rs.getInt(SegmentDurationTable.COLUMN_DURATION)); basicTrace.setStart(rs.getLong(SegmentDurationTable.COLUMN_START_TIME)); - basicTrace.setTraceId(rs.getString(SegmentDurationTable.COLUMN_TRACE_ID)); basicTrace.setOperationName(rs.getString(SegmentDurationTable.COLUMN_SERVICE_NAME)); basicTrace.setError(BooleanUtils.valueToBoolean(rs.getInt(SegmentDurationTable.COLUMN_IS_ERROR))); traceBrief.getTraces().add(basicTrace); diff --git a/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/SegmentTopService.java b/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/SegmentTopService.java index 750a8ee54825b5d5ad9f611c387d39f1a2cf1445..3b547b125e063f5ce8a9c19ea55e03088ab3a188 100644 --- a/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/SegmentTopService.java +++ b/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/SegmentTopService.java @@ -51,11 +51,19 @@ public class SegmentTopService { startSecondTimeBucket, endSecondTimeBucket, minDuration, maxDuration, operationName, traceId, applicationId, limit, from); + TraceBrief traceBrief; if (StringUtils.isNotEmpty(traceId)) { List segmentIds = globalTraceUIDAO.getSegmentIds(traceId); - return segmentDurationUIDAO.loadTop(startSecondTimeBucket, endSecondTimeBucket, minDuration, maxDuration, operationName, applicationId, limit, from, segmentIds.toArray(new String[0])); + traceBrief = segmentDurationUIDAO.loadTop(startSecondTimeBucket, endSecondTimeBucket, minDuration, maxDuration, operationName, applicationId, limit, from, segmentIds.toArray(new String[0])); } else { - return segmentDurationUIDAO.loadTop(startSecondTimeBucket, endSecondTimeBucket, minDuration, maxDuration, operationName, applicationId, limit, from); + traceBrief = segmentDurationUIDAO.loadTop(startSecondTimeBucket, endSecondTimeBucket, minDuration, maxDuration, operationName, applicationId, limit, from); } + + traceBrief.getTraces().forEach(trace -> { + List traceIds = globalTraceUIDAO.getGlobalTraceId(trace.getSegmentId()); + trace.getTraceIds().addAll(traceIds); + }); + + return traceBrief; } } diff --git a/apm-protocol/apm-ui-protocol/src/main/resources/ui-graphql/trace.graphqls b/apm-protocol/apm-ui-protocol/src/main/resources/ui-graphql/trace.graphqls index 9188cfedb5f9856f8bc2cd10e002985fe032ffe6..808bc1a746ea46b3d98d0fed08540bbbe269a39a 100644 --- a/apm-protocol/apm-ui-protocol/src/main/resources/ui-graphql/trace.graphqls +++ b/apm-protocol/apm-ui-protocol/src/main/resources/ui-graphql/trace.graphqls @@ -10,7 +10,7 @@ type BasicTrace { duration: Int! start: String! isError: Boolean - traceId: String + traceIds: [String!]! } # Represent the conditions used for query TraceBrief