diff --git a/apm-collector/apm-collector-analysis/analysis-metric/metric-provider/src/main/java/org/apache/skywalking/apm/collector/analysis/metric/provider/worker/application/mapping/ApplicationMappingSpanListener.java b/apm-collector/apm-collector-analysis/analysis-metric/metric-provider/src/main/java/org/apache/skywalking/apm/collector/analysis/metric/provider/worker/application/mapping/ApplicationMappingSpanListener.java index eda62f9fd07d26f8e28cb86d3a3562954e86e828..15de2c77cacaf1be7e8d732d85d432cc6654461f 100644 --- a/apm-collector/apm-collector-analysis/analysis-metric/metric-provider/src/main/java/org/apache/skywalking/apm/collector/analysis/metric/provider/worker/application/mapping/ApplicationMappingSpanListener.java +++ b/apm-collector/apm-collector-analysis/analysis-metric/metric-provider/src/main/java/org/apache/skywalking/apm/collector/analysis/metric/provider/worker/application/mapping/ApplicationMappingSpanListener.java @@ -34,6 +34,7 @@ import org.apache.skywalking.apm.collector.core.module.ModuleManager; import org.apache.skywalking.apm.collector.core.util.Const; import org.apache.skywalking.apm.collector.core.util.TimeBucketUtils; import org.apache.skywalking.apm.collector.storage.table.application.ApplicationMapping; +import org.apache.skywalking.apm.network.proto.SpanLayer; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -54,18 +55,20 @@ public class ApplicationMappingSpanListener implements FirstSpanListener, EntryS @Override public void parseEntry(SpanDecorator spanDecorator, int applicationId, int instanceId, String segmentId) { logger.debug("application mapping listener parse reference"); - if (spanDecorator.getRefsCount() > 0) { - for (int i = 0; i < spanDecorator.getRefsCount(); i++) { - ApplicationMapping applicationMapping = new ApplicationMapping(); - applicationMapping.setApplicationId(applicationId); + if (!spanDecorator.getSpanLayer().equals(SpanLayer.MQ)) { + if (spanDecorator.getRefsCount() > 0) { + for (int i = 0; i < spanDecorator.getRefsCount(); i++) { + ApplicationMapping applicationMapping = new ApplicationMapping(); + applicationMapping.setApplicationId(applicationId); - int addressId = spanDecorator.getRefs(i).getNetworkAddressId(); - int mappingApplicationId = applicationCacheService.getApplicationIdByAddressId(addressId); - applicationMapping.setMappingApplicationId(mappingApplicationId); + int addressId = spanDecorator.getRefs(i).getNetworkAddressId(); + int mappingApplicationId = applicationCacheService.getApplicationIdByAddressId(addressId); + applicationMapping.setMappingApplicationId(mappingApplicationId); - String metricId = String.valueOf(applicationId) + Const.ID_SPLIT + String.valueOf(applicationMapping.getMappingApplicationId()); - applicationMapping.setMetricId(metricId); - applicationMappings.add(applicationMapping); + String metricId = String.valueOf(applicationId) + Const.ID_SPLIT + String.valueOf(applicationMapping.getMappingApplicationId()); + applicationMapping.setMetricId(metricId); + applicationMappings.add(applicationMapping); + } } } } diff --git a/apm-collector/apm-collector-analysis/analysis-metric/metric-provider/src/main/java/org/apache/skywalking/apm/collector/analysis/metric/provider/worker/service/refmetric/ServiceReferenceMetricSpanListener.java b/apm-collector/apm-collector-analysis/analysis-metric/metric-provider/src/main/java/org/apache/skywalking/apm/collector/analysis/metric/provider/worker/service/refmetric/ServiceReferenceMetricSpanListener.java index 8c7d0433334931f556e073f4b3b8bb40938966ae..91f502ba76453017b12a20a851f7fd409b930e56 100644 --- a/apm-collector/apm-collector-analysis/analysis-metric/metric-provider/src/main/java/org/apache/skywalking/apm/collector/analysis/metric/provider/worker/service/refmetric/ServiceReferenceMetricSpanListener.java +++ b/apm-collector/apm-collector-analysis/analysis-metric/metric-provider/src/main/java/org/apache/skywalking/apm/collector/analysis/metric/provider/worker/service/refmetric/ServiceReferenceMetricSpanListener.java @@ -20,7 +20,6 @@ package org.apache.skywalking.apm.collector.analysis.metric.provider.worker.serv import java.util.LinkedList; import java.util.List; -import org.apache.skywalking.apm.collector.storage.table.MetricSource; import org.apache.skywalking.apm.collector.analysis.metric.define.graph.MetricGraphIdDefine; import org.apache.skywalking.apm.collector.analysis.segment.parser.define.decorator.ReferenceDecorator; import org.apache.skywalking.apm.collector.analysis.segment.parser.define.decorator.SpanDecorator; @@ -38,6 +37,7 @@ import org.apache.skywalking.apm.collector.core.module.ModuleManager; import org.apache.skywalking.apm.collector.core.util.Const; import org.apache.skywalking.apm.collector.core.util.ObjectUtils; import org.apache.skywalking.apm.collector.core.util.TimeBucketUtils; +import org.apache.skywalking.apm.collector.storage.table.MetricSource; import org.apache.skywalking.apm.collector.storage.table.service.ServiceReferenceMetric; import org.apache.skywalking.apm.network.proto.SpanLayer; import org.slf4j.Logger; @@ -78,8 +78,17 @@ public class ServiceReferenceMetricSpanListener implements FirstSpanListener, En ReferenceDecorator reference = spanDecorator.getRefs(i); ServiceReferenceMetric serviceReferenceMetric = new ServiceReferenceMetric(); serviceReferenceMetric.setFrontServiceId(reference.getParentServiceId()); - serviceReferenceMetric.setFrontInstanceId(reference.getParentApplicationInstanceId()); - serviceReferenceMetric.setFrontApplicationId(instanceCacheService.getApplicationId(reference.getParentApplicationInstanceId())); + + if (spanDecorator.getSpanLayer().equals(SpanLayer.MQ)) { + int peerId = spanDecorator.getPeerId(); + int applicationIdByPeerId = applicationCacheService.getApplicationIdByAddressId(peerId); + int instanceIdByPeerId = instanceCacheService.getInstanceIdByAddressId(applicationIdByPeerId, peerId); + serviceReferenceMetric.setFrontInstanceId(instanceIdByPeerId); + serviceReferenceMetric.setFrontApplicationId(applicationIdByPeerId); + } else { + serviceReferenceMetric.setFrontInstanceId(reference.getParentApplicationInstanceId()); + serviceReferenceMetric.setFrontApplicationId(instanceCacheService.getApplicationId(reference.getParentApplicationInstanceId())); + } serviceReferenceMetric.setBehindServiceId(spanDecorator.getOperationNameId()); serviceReferenceMetric.setBehindInstanceId(instanceId); serviceReferenceMetric.setBehindApplicationId(applicationId); diff --git a/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/utils/PaginationUtils.java b/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/utils/PaginationUtils.java index 9250b138aac7b60913f1d7f6f7dbe2870cb8d379..3bf00a36abb46f6ecdc9884a22c09ff8a9463ab8 100644 --- a/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/utils/PaginationUtils.java +++ b/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/utils/PaginationUtils.java @@ -28,7 +28,7 @@ public enum PaginationUtils { public Page exchange(Pagination paging) { int limit = paging.getPageSize(); - int from = paging.getPageSize() * (paging.getPageNum() - 1); + int from = paging.getPageSize() * ((paging.getPageNum() == 0 ? 1 : paging.getPageNum()) - 1); return new Page(from, limit); } diff --git a/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/test/java/org/apache/skywalking/apm/collector/ui/utils/PaginationUtilsTestCase.java b/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/test/java/org/apache/skywalking/apm/collector/ui/utils/PaginationUtilsTestCase.java index 782d5ff1c3b7206d1c162f53d0d446f5a04ae993..324e30f7faf42649fe73d1000aedae75a9798b9c 100644 --- a/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/test/java/org/apache/skywalking/apm/collector/ui/utils/PaginationUtilsTestCase.java +++ b/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/test/java/org/apache/skywalking/apm/collector/ui/utils/PaginationUtilsTestCase.java @@ -37,6 +37,13 @@ public class PaginationUtilsTestCase { Assert.assertEquals(0, page.getFrom()); Assert.assertEquals(10, page.getLimit()); + pagination = new Pagination(); + pagination.setPageSize(10); + + page = PaginationUtils.INSTANCE.exchange(pagination); + Assert.assertEquals(0, page.getFrom()); + Assert.assertEquals(10, page.getLimit()); + pagination = new Pagination(); pagination.setPageSize(10); pagination.setPageNum(2); 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 808bc1a746ea46b3d98d0fed08540bbbe269a39a..659297c0f723296b348b9e30a53291e4cc0c9600 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 @@ -6,6 +6,7 @@ type TraceBrief { # Trace basic info type BasicTrace { + segmentId: String! operationName: String! duration: Int! start: String!