You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@skywalking.apache.org by GitBox <gi...@apache.org> on 2018/03/03 22:58:19 UTC

[GitHub] wu-sheng closed pull request #865: Fixed/855

wu-sheng closed pull request #865: Fixed/855
URL: https://github.com/apache/incubator-skywalking/pull/865
 
 
   

This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:

As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):

diff --git a/apm-collector/apm-collector-agent/agent-grpc/agent-grpc-provider/src/main/java/org/apache/skywalking/apm/collector/agent/grpc/provider/handler/JVMMetricsServiceHandler.java b/apm-collector/apm-collector-agent/agent-grpc/agent-grpc-provider/src/main/java/org/apache/skywalking/apm/collector/agent/grpc/provider/handler/JVMMetricsServiceHandler.java
index 1ff4a7f94..555884224 100644
--- a/apm-collector/apm-collector-agent/agent-grpc/agent-grpc-provider/src/main/java/org/apache/skywalking/apm/collector/agent/grpc/provider/handler/JVMMetricsServiceHandler.java
+++ b/apm-collector/apm-collector-agent/agent-grpc/agent-grpc-provider/src/main/java/org/apache/skywalking/apm/collector/agent/grpc/provider/handler/JVMMetricsServiceHandler.java
@@ -25,6 +25,8 @@
 import org.apache.skywalking.apm.collector.analysis.jvm.define.service.IGCMetricService;
 import org.apache.skywalking.apm.collector.analysis.jvm.define.service.IMemoryMetricService;
 import org.apache.skywalking.apm.collector.analysis.jvm.define.service.IMemoryPoolMetricService;
+import org.apache.skywalking.apm.collector.analysis.metric.define.AnalysisMetricModule;
+import org.apache.skywalking.apm.collector.analysis.metric.define.service.IInstanceHeartBeatService;
 import org.apache.skywalking.apm.collector.core.module.ModuleManager;
 import org.apache.skywalking.apm.collector.core.util.TimeBucketUtils;
 import org.apache.skywalking.apm.collector.server.grpc.GRPCHandler;
@@ -49,12 +51,14 @@
     private final IGCMetricService gcMetricService;
     private final IMemoryMetricService memoryMetricService;
     private final IMemoryPoolMetricService memoryPoolMetricService;
+    private final IInstanceHeartBeatService instanceHeartBeatService;
 
     public JVMMetricsServiceHandler(ModuleManager moduleManager) {
         this.cpuMetricService = moduleManager.find(AnalysisJVMModule.NAME).getService(ICpuMetricService.class);
         this.gcMetricService = moduleManager.find(AnalysisJVMModule.NAME).getService(IGCMetricService.class);
         this.memoryMetricService = moduleManager.find(AnalysisJVMModule.NAME).getService(IMemoryMetricService.class);
         this.memoryPoolMetricService = moduleManager.find(AnalysisJVMModule.NAME).getService(IMemoryPoolMetricService.class);
+        this.instanceHeartBeatService = moduleManager.find(AnalysisMetricModule.NAME).getService(IInstanceHeartBeatService.class);
     }
 
     @Override public void collect(JVMMetrics request, StreamObserver<Downstream> responseObserver) {
@@ -67,6 +71,7 @@ public JVMMetricsServiceHandler(ModuleManager moduleManager) {
             sendToMemoryMetricService(instanceId, time, metric.getMemoryList());
             sendToMemoryPoolMetricService(instanceId, time, metric.getMemoryPoolList());
             sendToGCMetricService(instanceId, time, metric.getGcList());
+            sendToInstanceHeartBeatService(instanceId, metric.getTime());
         });
 
         responseObserver.onNext(Downstream.newBuilder().build());
@@ -90,4 +95,8 @@ private void sendToCpuMetricService(int instanceId, long timeBucket, CPU cpu) {
     private void sendToGCMetricService(int instanceId, long timeBucket, List<GC> gcs) {
         gcs.forEach(gc -> gcMetricService.send(instanceId, timeBucket, gc.getPhraseValue(), gc.getCount(), gc.getTime()));
     }
+
+    private void sendToInstanceHeartBeatService(int instanceId, long heartBeatTime) {
+        instanceHeartBeatService.heartBeat(instanceId, heartBeatTime);
+    }
 }
diff --git a/apm-collector/apm-collector-agent/agent-grpc/agent-grpc-provider/src/main/java/org/apache/skywalking/apm/collector/agent/grpc/provider/handler/ServiceNameDiscoveryServiceHandler.java b/apm-collector/apm-collector-agent/agent-grpc/agent-grpc-provider/src/main/java/org/apache/skywalking/apm/collector/agent/grpc/provider/handler/ServiceNameDiscoveryServiceHandler.java
index bd644ebb3..35dedf385 100644
--- a/apm-collector/apm-collector-agent/agent-grpc/agent-grpc-provider/src/main/java/org/apache/skywalking/apm/collector/agent/grpc/provider/handler/ServiceNameDiscoveryServiceHandler.java
+++ b/apm-collector/apm-collector-agent/agent-grpc/agent-grpc-provider/src/main/java/org/apache/skywalking/apm/collector/agent/grpc/provider/handler/ServiceNameDiscoveryServiceHandler.java
@@ -54,7 +54,7 @@ public ServiceNameDiscoveryServiceHandler(ModuleManager moduleManager) {
             int applicationId = serviceNameElement.getApplicationId();
             String serviceName = serviceNameElement.getServiceName();
             int srcSpanType = serviceNameElement.getSrcSpanTypeValue();
-            int serviceId = serviceNameService.getOrCreate(applicationId, srcSpanType, serviceName);
+            int serviceId = serviceNameService.get(applicationId, srcSpanType, serviceName);
 
             if (serviceId != 0) {
                 ServiceNameMappingElement.Builder mappingElement = ServiceNameMappingElement.newBuilder();
diff --git a/apm-collector/apm-collector-analysis/analysis-register/register-define/src/main/java/org/apache/skywalking/apm/collector/analysis/register/define/service/IServiceNameService.java b/apm-collector/apm-collector-analysis/analysis-register/register-define/src/main/java/org/apache/skywalking/apm/collector/analysis/register/define/service/IServiceNameService.java
index 42656c397..184a397c6 100644
--- a/apm-collector/apm-collector-analysis/analysis-register/register-define/src/main/java/org/apache/skywalking/apm/collector/analysis/register/define/service/IServiceNameService.java
+++ b/apm-collector/apm-collector-analysis/analysis-register/register-define/src/main/java/org/apache/skywalking/apm/collector/analysis/register/define/service/IServiceNameService.java
@@ -24,5 +24,8 @@
  * @author peng-yongsheng
  */
 public interface IServiceNameService extends Service {
+
     int getOrCreate(int applicationId, int srcSpanType, String serviceName);
+
+    int get(int applicationId, int srcSpanType, String serviceName);
 }
diff --git a/apm-collector/apm-collector-analysis/analysis-register/register-provider/src/main/java/org/apache/skywalking/apm/collector/analysis/register/provider/service/ServiceNameService.java b/apm-collector/apm-collector-analysis/analysis-register/register-provider/src/main/java/org/apache/skywalking/apm/collector/analysis/register/provider/service/ServiceNameService.java
index 7e0579b2a..ac751bfc4 100644
--- a/apm-collector/apm-collector-analysis/analysis-register/register-provider/src/main/java/org/apache/skywalking/apm/collector/analysis/register/provider/service/ServiceNameService.java
+++ b/apm-collector/apm-collector-analysis/analysis-register/register-provider/src/main/java/org/apache/skywalking/apm/collector/analysis/register/provider/service/ServiceNameService.java
@@ -74,4 +74,8 @@ private ServiceIdCacheService getServiceIdCacheService() {
         }
         return serviceId;
     }
+
+    @Override public int get(int applicationId, int srcSpanType, String serviceName) {
+        return getServiceIdCacheService().get(applicationId, srcSpanType, serviceName);
+    }
 }
diff --git a/apm-collector/apm-collector-analysis/analysis-segment-parser/segment-parser-define/src/main/java/org/apache/skywalking/apm/collector/analysis/segment/parser/define/decorator/ReferenceDecorator.java b/apm-collector/apm-collector-analysis/analysis-segment-parser/segment-parser-define/src/main/java/org/apache/skywalking/apm/collector/analysis/segment/parser/define/decorator/ReferenceDecorator.java
index 1c005c796..5f21f8229 100644
--- a/apm-collector/apm-collector-analysis/analysis-segment-parser/segment-parser-define/src/main/java/org/apache/skywalking/apm/collector/analysis/segment/parser/define/decorator/ReferenceDecorator.java
+++ b/apm-collector/apm-collector-analysis/analysis-segment-parser/segment-parser-define/src/main/java/org/apache/skywalking/apm/collector/analysis/segment/parser/define/decorator/ReferenceDecorator.java
@@ -27,6 +27,7 @@
  * @author peng-yongsheng
  */
 public class ReferenceDecorator implements StandardBuilder {
+
     private boolean isOrigin = true;
     private StandardBuilder standardBuilder;
     private TraceSegmentReference referenceObject;
diff --git a/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/ui/MemoryMetricEsUIDAO.java b/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/ui/MemoryMetricEsUIDAO.java
index 66f2290d4..6e5e891d4 100644
--- a/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/ui/MemoryMetricEsUIDAO.java
+++ b/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/ui/MemoryMetricEsUIDAO.java
@@ -66,8 +66,14 @@ private Trend getMemoryTrend(int instanceId, Step step, List<DurationPoint> dura
                 long max = ((Number)response.getResponse().getSource().get(MemoryMetricTable.COLUMN_MAX)).longValue();
                 long used = ((Number)response.getResponse().getSource().get(MemoryMetricTable.COLUMN_USED)).longValue();
                 long times = ((Number)response.getResponse().getSource().get(MemoryMetricTable.COLUMN_TIMES)).longValue();
+
                 trend.getMetrics().add((int)(used / times));
-                trend.getMaxMetrics().add((int)(max / times));
+
+                if (max < 0) {
+                    trend.getMaxMetrics().add((int)(used / times));
+                } else {
+                    trend.getMaxMetrics().add((int)(max / times));
+                }
             } else {
                 trend.getMetrics().add(0);
                 trend.getMaxMetrics().add(0);
diff --git a/apm-collector/apm-collector-storage/collector-storage-h2-provider/src/main/java/org/apache/skywalking/apm/collector/storage/h2/dao/ui/MemoryMetricH2UIDAO.java b/apm-collector/apm-collector-storage/collector-storage-h2-provider/src/main/java/org/apache/skywalking/apm/collector/storage/h2/dao/ui/MemoryMetricH2UIDAO.java
index bc84318cf..87c733d83 100644
--- a/apm-collector/apm-collector-storage/collector-storage-h2-provider/src/main/java/org/apache/skywalking/apm/collector/storage/h2/dao/ui/MemoryMetricH2UIDAO.java
+++ b/apm-collector/apm-collector-storage/collector-storage-h2-provider/src/main/java/org/apache/skywalking/apm/collector/storage/h2/dao/ui/MemoryMetricH2UIDAO.java
@@ -71,7 +71,12 @@ private Trend getMemoryTrend(int instanceId, Step step, List<DurationPoint> dura
                     long used = rs.getLong(MemoryMetricTable.COLUMN_USED);
                     long times = rs.getLong(MemoryMetricTable.COLUMN_TIMES);
                     trend.getMetrics().add((int)(used / times));
-                    trend.getMaxMetrics().add((int)(max / times));
+
+                    if (max < 0) {
+                        trend.getMaxMetrics().add((int)(used / times));
+                    } else {
+                        trend.getMaxMetrics().add((int)(max / times));
+                    }
                 } else {
                     trend.getMetrics().add(0);
                     trend.getMaxMetrics().add(0);
diff --git a/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/query/TraceQuery.java b/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/query/TraceQuery.java
index 74c002e9b..0ce17ee84 100644
--- a/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/query/TraceQuery.java
+++ b/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/query/TraceQuery.java
@@ -31,6 +31,7 @@
 import org.apache.skywalking.apm.collector.ui.service.SegmentTopService;
 import org.apache.skywalking.apm.collector.ui.service.TraceStackService;
 import org.apache.skywalking.apm.collector.ui.utils.DurationUtils;
+import org.apache.skywalking.apm.collector.ui.utils.PaginationUtils;
 
 /**
  * @author peng-yongsheng
@@ -77,10 +78,9 @@ public TraceBrief queryBasicTraces(TraceQueryCondition condition) throws ParseEx
         long maxDuration = condition.getMaxTraceDuration();
         String operationName = condition.getOperationName();
         int applicationId = condition.getApplicationId();
-        int limit = condition.getPaging().getPageSize();
-        int from = condition.getPaging().getPageSize() * condition.getPaging().getPageNum();
 
-        return getSegmentTopService().loadTop(startSecondTimeBucket, endSecondTimeBucket, minDuration, maxDuration, operationName, traceId, applicationId, limit, from);
+        PaginationUtils.Page page = PaginationUtils.INSTANCE.exchange(condition.getPaging());
+        return getSegmentTopService().loadTop(startSecondTimeBucket, endSecondTimeBucket, minDuration, maxDuration, operationName, traceId, applicationId, page.getLimit(), page.getFrom());
     }
 
     public Trace queryTrace(String traceId) {
diff --git a/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/ApplicationService.java b/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/ApplicationService.java
index 4493781c6..bb69d9b3c 100644
--- a/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/ApplicationService.java
+++ b/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/ApplicationService.java
@@ -72,11 +72,12 @@ public ApplicationService(ModuleManager moduleManager) {
         int... applicationIds) {
         List<Application> applications = instanceDAO.getApplications(startSecondTimeBucket, endSecondTimeBucket, applicationIds);
 
-        applications.forEach(application -> {
+        for (int i = applications.size() - 1; i >= 0; i--) {
+            Application application = applications.get(i);
             if (application.getId() == Const.NONE_APPLICATION_ID) {
-                applications.remove(application);
+                applications.remove(i);
             }
-        });
+        }
 
         applications.forEach(application -> {
             String applicationCode = applicationCacheService.getApplicationById(application.getId()).getApplicationCode();
@@ -112,11 +113,12 @@ public ApplicationService(ModuleManager moduleManager) {
         return applicationThroughput;
     }
 
-    public ConjecturalAppBrief getConjecturalApps(Step step, long startSecondTimeBucket, long endSecondTimeBucket) throws ParseException {
+    public ConjecturalAppBrief getConjecturalApps(Step step, long startSecondTimeBucket,
+        long endSecondTimeBucket) throws ParseException {
         List<ConjecturalApp> conjecturalApps = networkAddressUIDAO.getConjecturalApps();
         conjecturalApps.forEach(conjecturalApp -> {
-            String name = ServerTypeDefine.getInstance().getServerType(conjecturalApp.getId());
-            conjecturalApp.setName(name);
+            String serverType = ServerTypeDefine.getInstance().getServerType(conjecturalApp.getId());
+            conjecturalApp.setName(serverType);
         });
 
         ConjecturalAppBrief conjecturalAppBrief = new ConjecturalAppBrief();
diff --git a/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/SecondBetweenService.java b/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/SecondBetweenService.java
index f4db0a00a..63de26189 100644
--- a/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/SecondBetweenService.java
+++ b/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/SecondBetweenService.java
@@ -53,6 +53,10 @@ int calculate(int applicationId, long startSecondTimeBucket,
         Date startDate = new SimpleDateFormat("yyyyMMddHHmmss").parse(String.valueOf(startSecondTimeBucket));
         Date endDate = new SimpleDateFormat("yyyyMMddHHmmss").parse(String.valueOf(endSecondTimeBucket));
 
-        return Seconds.secondsBetween(new DateTime(startDate), new DateTime(endDate)).getSeconds();
+        int seconds = Seconds.secondsBetween(new DateTime(startDate), new DateTime(endDate)).getSeconds();
+        if (seconds == 0) {
+            seconds = 1;
+        }
+        return seconds;
     }
 }
diff --git a/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/ServerService.java b/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/ServerService.java
index 93528977a..667c1b864 100644
--- a/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/ServerService.java
+++ b/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/ServerService.java
@@ -26,7 +26,6 @@
 import java.util.List;
 import org.apache.skywalking.apm.collector.cache.CacheModule;
 import org.apache.skywalking.apm.collector.cache.service.ApplicationCacheService;
-import org.apache.skywalking.apm.collector.cache.service.InstanceCacheService;
 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.StringUtils;
@@ -59,7 +58,6 @@
     private final ICpuMetricUIDAO cpuMetricUIDAO;
     private final IGCMetricUIDAO gcMetricUIDAO;
     private final IMemoryMetricUIDAO memoryMetricUIDAO;
-    private final InstanceCacheService instanceCacheService;
     private final ApplicationCacheService applicationCacheService;
     private final SecondBetweenService secondBetweenService;
 
@@ -69,18 +67,18 @@ public ServerService(ModuleManager moduleManager) {
         this.cpuMetricUIDAO = moduleManager.find(StorageModule.NAME).getService(ICpuMetricUIDAO.class);
         this.gcMetricUIDAO = moduleManager.find(StorageModule.NAME).getService(IGCMetricUIDAO.class);
         this.memoryMetricUIDAO = moduleManager.find(StorageModule.NAME).getService(IMemoryMetricUIDAO.class);
-        this.instanceCacheService = moduleManager.find(CacheModule.NAME).getService(InstanceCacheService.class);
         this.applicationCacheService = moduleManager.find(CacheModule.NAME).getService(ApplicationCacheService.class);
         this.secondBetweenService = new SecondBetweenService(moduleManager);
     }
 
     public List<AppServerInfo> searchServer(String keyword, long startSecondTimeBucket, long endSecondTimeBucket) {
         List<AppServerInfo> serverInfos = instanceUIDAO.searchServer(keyword, startSecondTimeBucket, endSecondTimeBucket);
-        serverInfos.forEach(serverInfo -> {
-            if (serverInfo.getId() == Const.NONE_INSTANCE_ID) {
-                serverInfos.remove(serverInfo);
+
+        for (int i = serverInfos.size() - 1; i >= 0; i--) {
+            if (serverInfos.get(i).getId() == Const.NONE_INSTANCE_ID) {
+                serverInfos.remove(i);
             }
-        });
+        }
 
         buildAppServerInfo(serverInfos);
         return serverInfos;
@@ -164,6 +162,8 @@ public MemoryTrend getMemoryTrend(int instanceId, Step step, long startTimeBucke
     private void buildAppServerInfo(List<AppServerInfo> serverInfos) {
         serverInfos.forEach(serverInfo -> {
             serverInfo.setApplicationCode(applicationCacheService.getApplicationById(serverInfo.getApplicationId()).getApplicationCode());
+            StringBuilder nameBuilder = new StringBuilder();
+            nameBuilder.append(serverInfo.getApplicationCode());
             if (StringUtils.isNotEmpty(serverInfo.getOsInfo())) {
                 JsonObject osInfoJson = gson.fromJson(serverInfo.getOsInfo(), JsonObject.class);
                 if (osInfoJson.has("osName")) {
@@ -180,10 +180,14 @@ private void buildAppServerInfo(List<AppServerInfo> serverInfos) {
                     JsonArray ipv4Array = osInfoJson.get("ipv4s").getAsJsonArray();
 
                     List<String> ipv4s = new LinkedList<>();
-                    ipv4Array.forEach(ipv4 -> ipv4s.add(ipv4.getAsString()));
+                    ipv4Array.forEach(ipv4 -> {
+                        ipv4s.add(ipv4.getAsString());
+                        nameBuilder.append(Const.ID_SPLIT).append(ipv4.getAsString());
+                    });
                     serverInfo.setIpv4(ipv4s);
                 }
             }
+            serverInfo.setName(nameBuilder.toString());
         });
     }
 }
diff --git a/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/ServiceTopologyService.java b/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/ServiceTopologyService.java
index c8f54712b..1eb54b359 100644
--- a/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/ServiceTopologyService.java
+++ b/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/ServiceTopologyService.java
@@ -73,8 +73,8 @@ public Topology getServiceTopology(Step step, int serviceId, long startTimeBucke
         Map<Integer, String> components = new HashMap<>();
         applicationComponents.forEach(component -> components.put(component.getApplicationId(), ComponentsDefine.getInstance().getComponentName(component.getComponentId())));
 
-        List<IServiceReferenceMetricUIDAO.ServiceReferenceMetric> referenceMetrics = serviceReferenceMetricUIDAO.getFrontServices(step, startTimeBucket, endTimeBucket, MetricSource.Callee, serviceId);
-        referenceMetrics.addAll(serviceReferenceMetricUIDAO.getBehindServices(step, startTimeBucket, endTimeBucket, MetricSource.Caller, serviceId));
+        List<IServiceReferenceMetricUIDAO.ServiceReferenceMetric> referenceMetrics = serviceReferenceMetricUIDAO.getFrontServices(step, startTimeBucket, endTimeBucket, MetricSource.Caller, serviceId);
+        referenceMetrics.addAll(serviceReferenceMetricUIDAO.getBehindServices(step, startTimeBucket, endTimeBucket, MetricSource.Callee, serviceId));
 
         Set<Integer> nodeIds = new HashSet<>();
 
diff --git a/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/utils/ApdexCalculator.java b/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/utils/ApdexCalculator.java
index 126e0dea2..33e9cf059 100644
--- a/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/utils/ApdexCalculator.java
+++ b/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/utils/ApdexCalculator.java
@@ -25,6 +25,10 @@
     INSTANCE;
 
     public int calculate(long satisfiedCount, long toleratingCount, long frustratedCount) {
-        return (int)(((satisfiedCount + toleratingCount / 2) * 100) / (satisfiedCount + toleratingCount + frustratedCount));
+        if (satisfiedCount + toleratingCount + frustratedCount == 0) {
+            return 100;
+        } else {
+            return (int)(((satisfiedCount + toleratingCount / 2) * 100) / (satisfiedCount + toleratingCount + frustratedCount));
+        }
     }
 }
diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/dictionary/OperationNameDictionary.java b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/dictionary/OperationNameDictionary.java
index 7075f2860..ed4832f32 100644
--- a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/dictionary/OperationNameDictionary.java
+++ b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/dictionary/OperationNameDictionary.java
@@ -74,6 +74,7 @@ public void syncRemoteDictionary(
                 ServiceNameElement serviceNameElement = ServiceNameElement.newBuilder()
                     .setApplicationId(operationNameKey.getApplicationId())
                     .setServiceName(operationNameKey.getOperationName())
+                    .setSrcSpanType(operationNameKey.getSpanType())
                     .build();
                 builder.addElements(serviceNameElement);
             }
@@ -122,9 +123,14 @@ public String getOperationName() {
 
             OperationNameKey key = (OperationNameKey)o;
 
-            if (applicationId != key.applicationId)
-                return false;
-            return operationName.equals(key.operationName);
+            boolean isApplicationMatch = false;
+            if (applicationId == key.applicationId) {
+                isApplicationMatch = true;
+            } else if (operationName.equals(key.operationName)) {
+                isApplicationMatch = true;
+            }
+            return isApplicationMatch && isEntry == key.isEntry
+                && isExit == key.isExit;
         }
 
         @Override public int hashCode() {
@@ -140,5 +146,15 @@ boolean isEntry() {
         boolean isExit() {
             return isExit;
         }
+
+        SpanType getSpanType() {
+            if (isEntry) {
+                return SpanType.Entry;
+            } else if (isExit) {
+                return SpanType.Exit;
+            } else {
+                return SpanType.Local;
+            }
+        }
     }
 }


 

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


With regards,
Apache Git Services