From 58259141f9911704257ccd1699f427c3130e3f50 Mon Sep 17 00:00:00 2001 From: peng-yongsheng <8082209@qq.com> Date: Sat, 3 Mar 2018 15:16:52 +0800 Subject: [PATCH 01/19] Fixed the Dashboard and Topology bug. --- .../apm/collector/ui/service/ApplicationService.java | 10 ++++++---- .../apm/collector/ui/service/SecondBetweenService.java | 6 +++++- .../apm/collector/ui/utils/ApdexCalculator.java | 6 +++++- 3 files changed, 16 insertions(+), 6 deletions(-) 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..fff6d2a25 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 class ApplicationService { int... applicationIds) { List 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,7 +113,8 @@ public class ApplicationService { 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 conjecturalApps = networkAddressUIDAO.getConjecturalApps(); conjecturalApps.forEach(conjecturalApp -> { String name = ServerTypeDefine.getInstance().getServerType(conjecturalApp.getId()); 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 @@ class SecondBetweenService { 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/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 @@ public enum ApdexCalculator { 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)); + } } } From 6ba5453086ab0bf3c84132b6dbf3e6eee1d85f0f Mon Sep 17 00:00:00 2001 From: peng-yongsheng <8082209@qq.com> Date: Sat, 3 Mar 2018 15:22:35 +0800 Subject: [PATCH 02/19] Use JVM metric to update instance heart beat time when using java agent. --- .../grpc/provider/handler/JVMMetricsServiceHandler.java | 9 +++++++++ 1 file changed, 9 insertions(+) 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.ICpuMetri 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 @@ public class JVMMetricsServiceHandler extends JVMMetricsServiceGrpc.JVMMetricsSe 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 responseObserver) { @@ -67,6 +71,7 @@ public class JVMMetricsServiceHandler extends JVMMetricsServiceGrpc.JVMMetricsSe 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 @@ public class JVMMetricsServiceHandler extends JVMMetricsServiceGrpc.JVMMetricsSe private void sendToGCMetricService(int instanceId, long timeBucket, List 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); + } } From 41840ce85164106f3b5a7485664828841104c5cd Mon Sep 17 00:00:00 2001 From: peng-yongsheng <8082209@qq.com> Date: Sat, 3 Mar 2018 16:05:21 +0800 Subject: [PATCH 03/19] Fixed the bug which the memory max non heap metric value is -1 when using JDK 1.8. --- .../es/dao/ui/MemoryMetricEsUIDAO.java | 8 +++++++- .../h2/dao/ui/MemoryMetricH2UIDAO.java | 7 ++++++- .../collector/ui/service/ServerService.java | 20 +++++++++++-------- 3 files changed, 25 insertions(+), 10 deletions(-) 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 @@ public class MemoryMetricEsUIDAO extends EsDAO implements IMemoryMetricUIDAO { 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 @@ public class MemoryMetricH2UIDAO extends H2DAO implements IMemoryMetricUIDAO { 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/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.LinkedList; 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 @@ public class ServerService { 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 class ServerService { 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 searchServer(String keyword, long startSecondTimeBucket, long endSecondTimeBucket) { List 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 class ServerService { private void buildAppServerInfo(List 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 @@ public class ServerService { JsonArray ipv4Array = osInfoJson.get("ipv4s").getAsJsonArray(); List 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()); }); } } From bdc0601c6d28c2377a4fd0ead494db7144e83793 Mon Sep 17 00:00:00 2001 From: peng-yongsheng <8082209@qq.com> Date: Sat, 3 Mar 2018 20:03:45 +0800 Subject: [PATCH 04/19] Fixed the call type in calls of topology. --- .../standardization/SpanIdExchanger.java | 2 +- .../storage/table/register/ServerType.java | 14 ++-- .../table/register/ServerTypeDefine.java | 78 ++++++++++--------- .../register/ServerTypeDefineTestCase.java | 2 +- .../ui/service/ApplicationService.java | 5 +- .../collector/ui/service/TopologyBuilder.java | 25 ++++-- 6 files changed, 71 insertions(+), 55 deletions(-) diff --git a/apm-collector/apm-collector-analysis/analysis-segment-parser/segment-parser-provider/src/main/java/org/apache/skywalking/apm/collector/analysis/segment/parser/provider/parser/standardization/SpanIdExchanger.java b/apm-collector/apm-collector-analysis/analysis-segment-parser/segment-parser-provider/src/main/java/org/apache/skywalking/apm/collector/analysis/segment/parser/provider/parser/standardization/SpanIdExchanger.java index 704d724f5..a30e4d103 100644 --- a/apm-collector/apm-collector-analysis/analysis-segment-parser/segment-parser-provider/src/main/java/org/apache/skywalking/apm/collector/analysis/segment/parser/provider/parser/standardization/SpanIdExchanger.java +++ b/apm-collector/apm-collector-analysis/analysis-segment-parser/segment-parser-provider/src/main/java/org/apache/skywalking/apm/collector/analysis/segment/parser/provider/parser/standardization/SpanIdExchanger.java @@ -65,7 +65,7 @@ public class SpanIdExchanger implements IdExchanger { standardBuilder.setPeer(Const.EMPTY_STRING); int spanLayer = standardBuilder.getSpanLayerValue(); - int serverType = ServerTypeDefine.getInstance().getServerTypeId(standardBuilder.getComponentId()); + int serverType = ServerTypeDefine.getInstance().getServerTypeByComponentId(standardBuilder.getComponentId()).getId(); networkAddressIDService.update(peerId, spanLayer, serverType); } } diff --git a/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/table/register/ServerType.java b/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/table/register/ServerType.java index b7b71a22b..73449353b 100644 --- a/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/table/register/ServerType.java +++ b/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/table/register/ServerType.java @@ -22,25 +22,25 @@ package org.apache.skywalking.apm.collector.storage.table.register; * @author peng-yongsheng */ public class ServerType { - private int componentId; private int id; + private int componentId; private String name; - public ServerType(int componentId, int id, String name) { - this.componentId = componentId; + public ServerType(int id, String name) { this.id = id; this.name = name; + this.componentId = id; } public int getId() { return id; } - public String getName() { - return name; - } - public int getComponentId() { return componentId; } + + public String getName() { + return name; + } } diff --git a/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/table/register/ServerTypeDefine.java b/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/table/register/ServerTypeDefine.java index 61a91fb66..df5662283 100644 --- a/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/table/register/ServerTypeDefine.java +++ b/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/table/register/ServerTypeDefine.java @@ -28,41 +28,46 @@ public class ServerTypeDefine { private static ServerTypeDefine INSTANCE = new ServerTypeDefine(); - private String[] serverTypeNames; private ServerType[] serverTypes; + private static final String HTTP = "http"; + private static final String GRPC = "gRPC"; + private static final String DUBBO = "dubbo"; + private static final String MOTAN = "motan"; + private static final String CLIENT = "client"; + private static final String JDBC_DRIVER = "JDBC driver"; + private ServerTypeDefine() { this.serverTypes = new ServerType[30]; - this.serverTypeNames = new String[11]; - addServerType(new ServerType(ComponentsDefine.TOMCAT.getId(), Const.NONE, Const.EMPTY_STRING)); - addServerType(new ServerType(ComponentsDefine.HTTPCLIENT.getId(), Const.NONE, Const.EMPTY_STRING)); - addServerType(new ServerType(ComponentsDefine.DUBBO.getId(), Const.NONE, Const.EMPTY_STRING)); - addServerType(new ServerType(ComponentsDefine.H2.getId(), 1, ComponentsDefine.H2.getName())); - addServerType(new ServerType(ComponentsDefine.MYSQL.getId(), 2, ComponentsDefine.MYSQL.getName())); - addServerType(new ServerType(ComponentsDefine.ORACLE.getId(), 3, ComponentsDefine.ORACLE.getName())); - addServerType(new ServerType(ComponentsDefine.REDIS.getId(), 4, ComponentsDefine.REDIS.getName())); - addServerType(new ServerType(ComponentsDefine.MOTAN.getId(), Const.NONE, Const.EMPTY_STRING)); - addServerType(new ServerType(ComponentsDefine.MONGODB.getId(), 5, ComponentsDefine.MONGODB.getName())); - addServerType(new ServerType(ComponentsDefine.RESIN.getId(), Const.NONE, Const.EMPTY_STRING)); - addServerType(new ServerType(ComponentsDefine.FEIGN.getId(), Const.NONE, Const.EMPTY_STRING)); - addServerType(new ServerType(ComponentsDefine.OKHTTP.getId(), Const.NONE, Const.EMPTY_STRING)); - addServerType(new ServerType(ComponentsDefine.SPRING_REST_TEMPLATE.getId(), Const.NONE, Const.EMPTY_STRING)); - addServerType(new ServerType(ComponentsDefine.SPRING_MVC_ANNOTATION.getId(), Const.NONE, Const.EMPTY_STRING)); - addServerType(new ServerType(ComponentsDefine.STRUTS2.getId(), Const.NONE, Const.EMPTY_STRING)); - addServerType(new ServerType(ComponentsDefine.NUTZ_MVC_ANNOTATION.getId(), Const.NONE, Const.EMPTY_STRING)); - addServerType(new ServerType(ComponentsDefine.NUTZ_HTTP.getId(), Const.NONE, Const.EMPTY_STRING)); - addServerType(new ServerType(ComponentsDefine.JETTY_CLIENT.getId(), Const.NONE, Const.EMPTY_STRING)); - addServerType(new ServerType(ComponentsDefine.JETTY_SERVER.getId(), Const.NONE, Const.EMPTY_STRING)); - addServerType(new ServerType(ComponentsDefine.MEMCACHED.getId(), 6, ComponentsDefine.MEMCACHED.getName())); - addServerType(new ServerType(ComponentsDefine.SHARDING_JDBC.getId(), 7, ComponentsDefine.SHARDING_JDBC.getName())); - addServerType(new ServerType(ComponentsDefine.POSTGRESQL.getId(), 8, ComponentsDefine.POSTGRESQL.getName())); - addServerType(new ServerType(ComponentsDefine.GRPC.getId(), Const.NONE, Const.EMPTY_STRING)); - addServerType(new ServerType(ComponentsDefine.ELASTIC_JOB.getId(), Const.NONE, Const.EMPTY_STRING)); - addServerType(new ServerType(ComponentsDefine.ROCKET_MQ.getId(), 9, ComponentsDefine.ROCKET_MQ.getName())); - addServerType(new ServerType(ComponentsDefine.HTTP_ASYNC_CLIENT.getId(), Const.NONE, Const.EMPTY_STRING)); - addServerType(new ServerType(ComponentsDefine.KAFKA.getId(), 10, ComponentsDefine.KAFKA.getName())); - addServerType(new ServerType(ComponentsDefine.SERVICECOMB.getId(), Const.NONE, ComponentsDefine.SERVICECOMB.getName())); - addServerType(new ServerType(ComponentsDefine.HYSTRIX.getId(), Const.NONE, ComponentsDefine.HYSTRIX.getName())); + addServerType(new ServerType(ComponentsDefine.TOMCAT.getId(), Const.EMPTY_STRING)); + addServerType(new ServerType(ComponentsDefine.HTTPCLIENT.getId(), Const.EMPTY_STRING)); + addServerType(new ServerType(ComponentsDefine.DUBBO.getId(), DUBBO)); + addServerType(new ServerType(ComponentsDefine.H2.getId(), JDBC_DRIVER)); + addServerType(new ServerType(ComponentsDefine.MYSQL.getId(), JDBC_DRIVER)); + addServerType(new ServerType(ComponentsDefine.ORACLE.getId(), JDBC_DRIVER)); + addServerType(new ServerType(ComponentsDefine.REDIS.getId(), CLIENT)); + addServerType(new ServerType(ComponentsDefine.MOTAN.getId(), MOTAN)); + addServerType(new ServerType(ComponentsDefine.MONGODB.getId(), CLIENT)); + addServerType(new ServerType(ComponentsDefine.RESIN.getId(), Const.EMPTY_STRING)); + addServerType(new ServerType(ComponentsDefine.FEIGN.getId(), Const.EMPTY_STRING)); + addServerType(new ServerType(ComponentsDefine.OKHTTP.getId(), Const.EMPTY_STRING)); + addServerType(new ServerType(ComponentsDefine.SPRING_REST_TEMPLATE.getId(), Const.EMPTY_STRING)); + addServerType(new ServerType(ComponentsDefine.SPRING_MVC_ANNOTATION.getId(), Const.EMPTY_STRING)); + addServerType(new ServerType(ComponentsDefine.STRUTS2.getId(), Const.EMPTY_STRING)); + addServerType(new ServerType(ComponentsDefine.NUTZ_MVC_ANNOTATION.getId(), Const.EMPTY_STRING)); + addServerType(new ServerType(ComponentsDefine.NUTZ_HTTP.getId(), HTTP)); + addServerType(new ServerType(ComponentsDefine.JETTY_CLIENT.getId(), HTTP)); + addServerType(new ServerType(ComponentsDefine.JETTY_SERVER.getId(), Const.EMPTY_STRING)); + addServerType(new ServerType(ComponentsDefine.MEMCACHED.getId(), CLIENT)); + addServerType(new ServerType(ComponentsDefine.SHARDING_JDBC.getId(), JDBC_DRIVER)); + addServerType(new ServerType(ComponentsDefine.POSTGRESQL.getId(), JDBC_DRIVER)); + addServerType(new ServerType(ComponentsDefine.GRPC.getId(), GRPC)); + addServerType(new ServerType(ComponentsDefine.ELASTIC_JOB.getId(), Const.EMPTY_STRING)); + addServerType(new ServerType(ComponentsDefine.ROCKET_MQ.getId(), CLIENT)); + addServerType(new ServerType(ComponentsDefine.HTTP_ASYNC_CLIENT.getId(), HTTP)); + addServerType(new ServerType(ComponentsDefine.KAFKA.getId(), CLIENT)); + addServerType(new ServerType(ComponentsDefine.SERVICECOMB.getId(), Const.EMPTY_STRING)); + addServerType(new ServerType(ComponentsDefine.HYSTRIX.getId(), Const.EMPTY_STRING)); } public static ServerTypeDefine getInstance() { @@ -70,15 +75,14 @@ public class ServerTypeDefine { } private void addServerType(ServerType serverType) { - serverTypeNames[serverType.getId()] = serverType.getName(); - serverTypes[serverType.getComponentId()] = serverType; + serverTypes[serverType.getId()] = serverType; } - public int getServerTypeId(int componentId) { - return serverTypes[componentId].getId(); + public ServerType getServerTypeByComponentId(int componentId) { + return serverTypes[componentId]; } - public String getServerType(int serverTypeId) { - return serverTypeNames[serverTypeId]; + public ServerType getServerType(int serverTypeId) { + return serverTypes[serverTypeId]; } } diff --git a/apm-collector/apm-collector-storage/collector-storage-define/src/test/java/org/apache/skywalking/apm/collector/storage/table/register/ServerTypeDefineTestCase.java b/apm-collector/apm-collector-storage/collector-storage-define/src/test/java/org/apache/skywalking/apm/collector/storage/table/register/ServerTypeDefineTestCase.java index 015eff79b..1ccc4534f 100644 --- a/apm-collector/apm-collector-storage/collector-storage-define/src/test/java/org/apache/skywalking/apm/collector/storage/table/register/ServerTypeDefineTestCase.java +++ b/apm-collector/apm-collector-storage/collector-storage-define/src/test/java/org/apache/skywalking/apm/collector/storage/table/register/ServerTypeDefineTestCase.java @@ -35,7 +35,7 @@ public class ServerTypeDefineTestCase { for (Field field : fields) { if (field.getType().equals(OfficialComponent.class)) { OfficialComponent component = (OfficialComponent)field.get(ComponentsDefine.getInstance()); - ServerTypeDefine.getInstance().getServerTypeId(component.getId()); + ServerTypeDefine.getInstance().getServerTypeByComponentId(component.getId()); } } } 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 fff6d2a25..e9082d53c 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 @@ -40,6 +40,7 @@ import org.apache.skywalking.apm.collector.storage.ui.overview.ConjecturalApp; import org.apache.skywalking.apm.collector.storage.ui.overview.ConjecturalAppBrief; import org.apache.skywalking.apm.collector.storage.ui.service.ServiceMetric; import org.apache.skywalking.apm.collector.ui.utils.DurationUtils; +import org.apache.skywalking.apm.network.trace.component.ComponentsDefine; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -117,8 +118,8 @@ public class ApplicationService { long endSecondTimeBucket) throws ParseException { List conjecturalApps = networkAddressUIDAO.getConjecturalApps(); conjecturalApps.forEach(conjecturalApp -> { - String name = ServerTypeDefine.getInstance().getServerType(conjecturalApp.getId()); - conjecturalApp.setName(name); + int componentId = ServerTypeDefine.getInstance().getServerType(conjecturalApp.getId()).getComponentId(); + conjecturalApp.setName(ComponentsDefine.getInstance().getComponentName(componentId)); }); 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/TopologyBuilder.java b/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/TopologyBuilder.java index cbd013e2d..74c7148b2 100644 --- a/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/TopologyBuilder.java +++ b/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/TopologyBuilder.java @@ -33,6 +33,7 @@ import org.apache.skywalking.apm.collector.storage.dao.ui.IApplicationMappingUID import org.apache.skywalking.apm.collector.storage.dao.ui.IApplicationMetricUIDAO; import org.apache.skywalking.apm.collector.storage.dao.ui.IApplicationReferenceMetricUIDAO; import org.apache.skywalking.apm.collector.storage.table.register.Application; +import org.apache.skywalking.apm.collector.storage.table.register.ServerTypeDefine; import org.apache.skywalking.apm.collector.storage.ui.alarm.Alarm; import org.apache.skywalking.apm.collector.storage.ui.application.ApplicationNode; import org.apache.skywalking.apm.collector.storage.ui.application.ConjecturalNode; @@ -71,7 +72,8 @@ class TopologyBuilder { List callerReferenceMetric, List calleeReferenceMetric, long startTimeBucket, long endTimeBucket, long startSecondTimeBucket, long endSecondTimeBucket) { - Map components = changeNodeComp2Map(applicationComponents); + Map componentNames = changeNodeCompName2Map(applicationComponents); + Map componentIds = changeNodeCompId2Map(applicationComponents); Map mappings = changeMapping2Map(applicationMappings); calleeReferenceMetric = calleeReferenceMetricFilter(calleeReferenceMetric); @@ -83,7 +85,7 @@ class TopologyBuilder { ApplicationNode applicationNode = new ApplicationNode(); applicationNode.setId(applicationId); applicationNode.setName(application.getApplicationCode()); - applicationNode.setType(components.getOrDefault(application.getApplicationId(), Const.UNKNOWN)); + applicationNode.setType(componentNames.getOrDefault(application.getApplicationId(), Const.UNKNOWN)); applicationNode.setSla(SLACalculator.INSTANCE.calculate(applicationMetric.getErrorCalls(), applicationMetric.getCalls())); try { @@ -129,7 +131,7 @@ class TopologyBuilder { ConjecturalNode conjecturalNode = new ConjecturalNode(); conjecturalNode.setId(target.getApplicationId()); conjecturalNode.setName(target.getApplicationCode()); - conjecturalNode.setType(components.getOrDefault(target.getApplicationId(), Const.UNKNOWN)); + conjecturalNode.setType(componentNames.getOrDefault(target.getApplicationId(), Const.UNKNOWN)); nodes.add(conjecturalNode); } @@ -141,7 +143,7 @@ class TopologyBuilder { call.setTarget(actualTargetId); call.setTargetName(applicationCacheService.getApplicationById(actualTargetId).getApplicationCode()); call.setAlert(false); - call.setCallType(components.get(referenceMetric.getTarget())); + call.setCallType(ServerTypeDefine.getInstance().getServerTypeByComponentId(componentIds.get(referenceMetric.getTarget())).getName()); try { call.setCallsPerSec(referenceMetric.getCalls() / secondBetweenService.calculate(source.getApplicationId(), startSecondTimeBucket, endSecondTimeBucket)); } catch (ParseException e) { @@ -167,7 +169,7 @@ class TopologyBuilder { ConjecturalNode conjecturalNode = new ConjecturalNode(); conjecturalNode.setId(source.getApplicationId()); conjecturalNode.setName(source.getApplicationCode()); - conjecturalNode.setType(components.getOrDefault(source.getApplicationId(), Const.UNKNOWN)); + conjecturalNode.setType(componentNames.getOrDefault(source.getApplicationId(), Const.UNKNOWN)); nodes.add(conjecturalNode); } @@ -181,7 +183,7 @@ class TopologyBuilder { if (source.getApplicationId() == Const.NONE_APPLICATION_ID) { call.setCallType(Const.EMPTY_STRING); } else { - call.setCallType(components.get(referenceMetric.getTarget())); + call.setCallType(ServerTypeDefine.getInstance().getServerTypeByComponentId(componentIds.get(referenceMetric.getTarget())).getName()); } try { call.setCallsPerSec(referenceMetric.getCalls() / secondBetweenService.calculate(target.getApplicationId(), startSecondTimeBucket, endSecondTimeBucket)); @@ -219,7 +221,7 @@ class TopologyBuilder { return mappings; } - private Map changeNodeComp2Map( + private Map changeNodeCompName2Map( List applicationComponents) { Map components = new HashMap<>(); applicationComponents.forEach(applicationComponent -> { @@ -228,4 +230,13 @@ class TopologyBuilder { }); return components; } + + private Map changeNodeCompId2Map( + List applicationComponents) { + Map components = new HashMap<>(); + applicationComponents.forEach(applicationComponent -> { + components.put(applicationComponent.getApplicationId(), applicationComponent.getComponentId()); + }); + return components; + } } From 09f9c1200eea09419c3f39d26c2d1fc78e296269 Mon Sep 17 00:00:00 2001 From: peng-yongsheng <8082209@qq.com> Date: Sat, 3 Mar 2018 20:15:49 +0800 Subject: [PATCH 05/19] Fixed the pagination bug. --- .../skywalking/apm/collector/ui/query/TraceQuery.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) 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.graphql.Query; 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 class TraceQuery implements Query { 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) { From a7bbe2f4bc36fda48b202e32eb6b664a20ac4f81 Mon Sep 17 00:00:00 2001 From: wusheng Date: Sat, 3 Mar 2018 23:51:10 +0800 Subject: [PATCH 06/19] Sync UI updates. --- skywalking-ui | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/skywalking-ui b/skywalking-ui index d785fc123..122df58cf 160000 --- a/skywalking-ui +++ b/skywalking-ui @@ -1 +1 @@ -Subproject commit d785fc123850605e2506e18f749aa14337878d0d +Subproject commit 122df58cff515dedf205b6497e7d8a2b57aba22f From 40eeb8739ab6e4e5f9debcc9868022f73798c354 Mon Sep 17 00:00:00 2001 From: peng-yongsheng <8082209@qq.com> Date: Sun, 4 Mar 2018 00:22:45 +0800 Subject: [PATCH 07/19] 1. Get the service id only when agent register service name. 2. Setting the src span type when agent register service name. 3. Revert the topology build logic. --- .../ServiceNameDiscoveryServiceHandler.java | 2 +- .../define/service/IServiceNameService.java | 3 + .../provider/service/ServiceNameService.java | 4 + .../define/decorator/ReferenceDecorator.java | 1 + .../standardization/SpanIdExchanger.java | 2 +- .../storage/table/register/ServerType.java | 14 ++-- .../table/register/ServerTypeDefine.java | 78 +++++++++---------- .../register/ServerTypeDefineTestCase.java | 2 +- .../ui/service/ApplicationService.java | 5 +- .../ui/service/ServiceTopologyService.java | 4 +- .../collector/ui/service/TopologyBuilder.java | 25 ++---- .../dictionary/OperationNameDictionary.java | 22 +++++- 12 files changed, 85 insertions(+), 77 deletions(-) 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 class ServiceNameDiscoveryServiceHandler extends ServiceNameDiscoveryServ 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 @@ import org.apache.skywalking.apm.collector.core.module.Service; * @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 @@ public class ServiceNameService implements IServiceNameService { } 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 @@ import org.apache.skywalking.apm.network.proto.UniqueId; * @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-analysis/analysis-segment-parser/segment-parser-provider/src/main/java/org/apache/skywalking/apm/collector/analysis/segment/parser/provider/parser/standardization/SpanIdExchanger.java b/apm-collector/apm-collector-analysis/analysis-segment-parser/segment-parser-provider/src/main/java/org/apache/skywalking/apm/collector/analysis/segment/parser/provider/parser/standardization/SpanIdExchanger.java index a30e4d103..704d724f5 100644 --- a/apm-collector/apm-collector-analysis/analysis-segment-parser/segment-parser-provider/src/main/java/org/apache/skywalking/apm/collector/analysis/segment/parser/provider/parser/standardization/SpanIdExchanger.java +++ b/apm-collector/apm-collector-analysis/analysis-segment-parser/segment-parser-provider/src/main/java/org/apache/skywalking/apm/collector/analysis/segment/parser/provider/parser/standardization/SpanIdExchanger.java @@ -65,7 +65,7 @@ public class SpanIdExchanger implements IdExchanger { standardBuilder.setPeer(Const.EMPTY_STRING); int spanLayer = standardBuilder.getSpanLayerValue(); - int serverType = ServerTypeDefine.getInstance().getServerTypeByComponentId(standardBuilder.getComponentId()).getId(); + int serverType = ServerTypeDefine.getInstance().getServerTypeId(standardBuilder.getComponentId()); networkAddressIDService.update(peerId, spanLayer, serverType); } } diff --git a/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/table/register/ServerType.java b/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/table/register/ServerType.java index 73449353b..b7b71a22b 100644 --- a/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/table/register/ServerType.java +++ b/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/table/register/ServerType.java @@ -22,25 +22,25 @@ package org.apache.skywalking.apm.collector.storage.table.register; * @author peng-yongsheng */ public class ServerType { - private int id; private int componentId; + private int id; private String name; - public ServerType(int id, String name) { + public ServerType(int componentId, int id, String name) { + this.componentId = componentId; this.id = id; this.name = name; - this.componentId = id; } public int getId() { return id; } - public int getComponentId() { - return componentId; - } - public String getName() { return name; } + + public int getComponentId() { + return componentId; + } } diff --git a/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/table/register/ServerTypeDefine.java b/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/table/register/ServerTypeDefine.java index df5662283..61a91fb66 100644 --- a/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/table/register/ServerTypeDefine.java +++ b/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/table/register/ServerTypeDefine.java @@ -28,46 +28,41 @@ public class ServerTypeDefine { private static ServerTypeDefine INSTANCE = new ServerTypeDefine(); + private String[] serverTypeNames; private ServerType[] serverTypes; - private static final String HTTP = "http"; - private static final String GRPC = "gRPC"; - private static final String DUBBO = "dubbo"; - private static final String MOTAN = "motan"; - private static final String CLIENT = "client"; - private static final String JDBC_DRIVER = "JDBC driver"; - private ServerTypeDefine() { this.serverTypes = new ServerType[30]; - addServerType(new ServerType(ComponentsDefine.TOMCAT.getId(), Const.EMPTY_STRING)); - addServerType(new ServerType(ComponentsDefine.HTTPCLIENT.getId(), Const.EMPTY_STRING)); - addServerType(new ServerType(ComponentsDefine.DUBBO.getId(), DUBBO)); - addServerType(new ServerType(ComponentsDefine.H2.getId(), JDBC_DRIVER)); - addServerType(new ServerType(ComponentsDefine.MYSQL.getId(), JDBC_DRIVER)); - addServerType(new ServerType(ComponentsDefine.ORACLE.getId(), JDBC_DRIVER)); - addServerType(new ServerType(ComponentsDefine.REDIS.getId(), CLIENT)); - addServerType(new ServerType(ComponentsDefine.MOTAN.getId(), MOTAN)); - addServerType(new ServerType(ComponentsDefine.MONGODB.getId(), CLIENT)); - addServerType(new ServerType(ComponentsDefine.RESIN.getId(), Const.EMPTY_STRING)); - addServerType(new ServerType(ComponentsDefine.FEIGN.getId(), Const.EMPTY_STRING)); - addServerType(new ServerType(ComponentsDefine.OKHTTP.getId(), Const.EMPTY_STRING)); - addServerType(new ServerType(ComponentsDefine.SPRING_REST_TEMPLATE.getId(), Const.EMPTY_STRING)); - addServerType(new ServerType(ComponentsDefine.SPRING_MVC_ANNOTATION.getId(), Const.EMPTY_STRING)); - addServerType(new ServerType(ComponentsDefine.STRUTS2.getId(), Const.EMPTY_STRING)); - addServerType(new ServerType(ComponentsDefine.NUTZ_MVC_ANNOTATION.getId(), Const.EMPTY_STRING)); - addServerType(new ServerType(ComponentsDefine.NUTZ_HTTP.getId(), HTTP)); - addServerType(new ServerType(ComponentsDefine.JETTY_CLIENT.getId(), HTTP)); - addServerType(new ServerType(ComponentsDefine.JETTY_SERVER.getId(), Const.EMPTY_STRING)); - addServerType(new ServerType(ComponentsDefine.MEMCACHED.getId(), CLIENT)); - addServerType(new ServerType(ComponentsDefine.SHARDING_JDBC.getId(), JDBC_DRIVER)); - addServerType(new ServerType(ComponentsDefine.POSTGRESQL.getId(), JDBC_DRIVER)); - addServerType(new ServerType(ComponentsDefine.GRPC.getId(), GRPC)); - addServerType(new ServerType(ComponentsDefine.ELASTIC_JOB.getId(), Const.EMPTY_STRING)); - addServerType(new ServerType(ComponentsDefine.ROCKET_MQ.getId(), CLIENT)); - addServerType(new ServerType(ComponentsDefine.HTTP_ASYNC_CLIENT.getId(), HTTP)); - addServerType(new ServerType(ComponentsDefine.KAFKA.getId(), CLIENT)); - addServerType(new ServerType(ComponentsDefine.SERVICECOMB.getId(), Const.EMPTY_STRING)); - addServerType(new ServerType(ComponentsDefine.HYSTRIX.getId(), Const.EMPTY_STRING)); + this.serverTypeNames = new String[11]; + addServerType(new ServerType(ComponentsDefine.TOMCAT.getId(), Const.NONE, Const.EMPTY_STRING)); + addServerType(new ServerType(ComponentsDefine.HTTPCLIENT.getId(), Const.NONE, Const.EMPTY_STRING)); + addServerType(new ServerType(ComponentsDefine.DUBBO.getId(), Const.NONE, Const.EMPTY_STRING)); + addServerType(new ServerType(ComponentsDefine.H2.getId(), 1, ComponentsDefine.H2.getName())); + addServerType(new ServerType(ComponentsDefine.MYSQL.getId(), 2, ComponentsDefine.MYSQL.getName())); + addServerType(new ServerType(ComponentsDefine.ORACLE.getId(), 3, ComponentsDefine.ORACLE.getName())); + addServerType(new ServerType(ComponentsDefine.REDIS.getId(), 4, ComponentsDefine.REDIS.getName())); + addServerType(new ServerType(ComponentsDefine.MOTAN.getId(), Const.NONE, Const.EMPTY_STRING)); + addServerType(new ServerType(ComponentsDefine.MONGODB.getId(), 5, ComponentsDefine.MONGODB.getName())); + addServerType(new ServerType(ComponentsDefine.RESIN.getId(), Const.NONE, Const.EMPTY_STRING)); + addServerType(new ServerType(ComponentsDefine.FEIGN.getId(), Const.NONE, Const.EMPTY_STRING)); + addServerType(new ServerType(ComponentsDefine.OKHTTP.getId(), Const.NONE, Const.EMPTY_STRING)); + addServerType(new ServerType(ComponentsDefine.SPRING_REST_TEMPLATE.getId(), Const.NONE, Const.EMPTY_STRING)); + addServerType(new ServerType(ComponentsDefine.SPRING_MVC_ANNOTATION.getId(), Const.NONE, Const.EMPTY_STRING)); + addServerType(new ServerType(ComponentsDefine.STRUTS2.getId(), Const.NONE, Const.EMPTY_STRING)); + addServerType(new ServerType(ComponentsDefine.NUTZ_MVC_ANNOTATION.getId(), Const.NONE, Const.EMPTY_STRING)); + addServerType(new ServerType(ComponentsDefine.NUTZ_HTTP.getId(), Const.NONE, Const.EMPTY_STRING)); + addServerType(new ServerType(ComponentsDefine.JETTY_CLIENT.getId(), Const.NONE, Const.EMPTY_STRING)); + addServerType(new ServerType(ComponentsDefine.JETTY_SERVER.getId(), Const.NONE, Const.EMPTY_STRING)); + addServerType(new ServerType(ComponentsDefine.MEMCACHED.getId(), 6, ComponentsDefine.MEMCACHED.getName())); + addServerType(new ServerType(ComponentsDefine.SHARDING_JDBC.getId(), 7, ComponentsDefine.SHARDING_JDBC.getName())); + addServerType(new ServerType(ComponentsDefine.POSTGRESQL.getId(), 8, ComponentsDefine.POSTGRESQL.getName())); + addServerType(new ServerType(ComponentsDefine.GRPC.getId(), Const.NONE, Const.EMPTY_STRING)); + addServerType(new ServerType(ComponentsDefine.ELASTIC_JOB.getId(), Const.NONE, Const.EMPTY_STRING)); + addServerType(new ServerType(ComponentsDefine.ROCKET_MQ.getId(), 9, ComponentsDefine.ROCKET_MQ.getName())); + addServerType(new ServerType(ComponentsDefine.HTTP_ASYNC_CLIENT.getId(), Const.NONE, Const.EMPTY_STRING)); + addServerType(new ServerType(ComponentsDefine.KAFKA.getId(), 10, ComponentsDefine.KAFKA.getName())); + addServerType(new ServerType(ComponentsDefine.SERVICECOMB.getId(), Const.NONE, ComponentsDefine.SERVICECOMB.getName())); + addServerType(new ServerType(ComponentsDefine.HYSTRIX.getId(), Const.NONE, ComponentsDefine.HYSTRIX.getName())); } public static ServerTypeDefine getInstance() { @@ -75,14 +70,15 @@ public class ServerTypeDefine { } private void addServerType(ServerType serverType) { - serverTypes[serverType.getId()] = serverType; + serverTypeNames[serverType.getId()] = serverType.getName(); + serverTypes[serverType.getComponentId()] = serverType; } - public ServerType getServerTypeByComponentId(int componentId) { - return serverTypes[componentId]; + public int getServerTypeId(int componentId) { + return serverTypes[componentId].getId(); } - public ServerType getServerType(int serverTypeId) { - return serverTypes[serverTypeId]; + public String getServerType(int serverTypeId) { + return serverTypeNames[serverTypeId]; } } diff --git a/apm-collector/apm-collector-storage/collector-storage-define/src/test/java/org/apache/skywalking/apm/collector/storage/table/register/ServerTypeDefineTestCase.java b/apm-collector/apm-collector-storage/collector-storage-define/src/test/java/org/apache/skywalking/apm/collector/storage/table/register/ServerTypeDefineTestCase.java index 1ccc4534f..015eff79b 100644 --- a/apm-collector/apm-collector-storage/collector-storage-define/src/test/java/org/apache/skywalking/apm/collector/storage/table/register/ServerTypeDefineTestCase.java +++ b/apm-collector/apm-collector-storage/collector-storage-define/src/test/java/org/apache/skywalking/apm/collector/storage/table/register/ServerTypeDefineTestCase.java @@ -35,7 +35,7 @@ public class ServerTypeDefineTestCase { for (Field field : fields) { if (field.getType().equals(OfficialComponent.class)) { OfficialComponent component = (OfficialComponent)field.get(ComponentsDefine.getInstance()); - ServerTypeDefine.getInstance().getServerTypeByComponentId(component.getId()); + ServerTypeDefine.getInstance().getServerTypeId(component.getId()); } } } 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 e9082d53c..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 @@ -40,7 +40,6 @@ import org.apache.skywalking.apm.collector.storage.ui.overview.ConjecturalApp; import org.apache.skywalking.apm.collector.storage.ui.overview.ConjecturalAppBrief; import org.apache.skywalking.apm.collector.storage.ui.service.ServiceMetric; import org.apache.skywalking.apm.collector.ui.utils.DurationUtils; -import org.apache.skywalking.apm.network.trace.component.ComponentsDefine; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -118,8 +117,8 @@ public class ApplicationService { long endSecondTimeBucket) throws ParseException { List conjecturalApps = networkAddressUIDAO.getConjecturalApps(); conjecturalApps.forEach(conjecturalApp -> { - int componentId = ServerTypeDefine.getInstance().getServerType(conjecturalApp.getId()).getComponentId(); - conjecturalApp.setName(ComponentsDefine.getInstance().getComponentName(componentId)); + 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/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 class ServiceTopologyService { Map components = new HashMap<>(); applicationComponents.forEach(component -> components.put(component.getApplicationId(), ComponentsDefine.getInstance().getComponentName(component.getComponentId()))); - List referenceMetrics = serviceReferenceMetricUIDAO.getFrontServices(step, startTimeBucket, endTimeBucket, MetricSource.Callee, serviceId); - referenceMetrics.addAll(serviceReferenceMetricUIDAO.getBehindServices(step, startTimeBucket, endTimeBucket, MetricSource.Caller, serviceId)); + List referenceMetrics = serviceReferenceMetricUIDAO.getFrontServices(step, startTimeBucket, endTimeBucket, MetricSource.Caller, serviceId); + referenceMetrics.addAll(serviceReferenceMetricUIDAO.getBehindServices(step, startTimeBucket, endTimeBucket, MetricSource.Callee, serviceId)); Set nodeIds = new HashSet<>(); diff --git a/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/TopologyBuilder.java b/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/TopologyBuilder.java index 74c7148b2..cbd013e2d 100644 --- a/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/TopologyBuilder.java +++ b/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/TopologyBuilder.java @@ -33,7 +33,6 @@ import org.apache.skywalking.apm.collector.storage.dao.ui.IApplicationMappingUID import org.apache.skywalking.apm.collector.storage.dao.ui.IApplicationMetricUIDAO; import org.apache.skywalking.apm.collector.storage.dao.ui.IApplicationReferenceMetricUIDAO; import org.apache.skywalking.apm.collector.storage.table.register.Application; -import org.apache.skywalking.apm.collector.storage.table.register.ServerTypeDefine; import org.apache.skywalking.apm.collector.storage.ui.alarm.Alarm; import org.apache.skywalking.apm.collector.storage.ui.application.ApplicationNode; import org.apache.skywalking.apm.collector.storage.ui.application.ConjecturalNode; @@ -72,8 +71,7 @@ class TopologyBuilder { List callerReferenceMetric, List calleeReferenceMetric, long startTimeBucket, long endTimeBucket, long startSecondTimeBucket, long endSecondTimeBucket) { - Map componentNames = changeNodeCompName2Map(applicationComponents); - Map componentIds = changeNodeCompId2Map(applicationComponents); + Map components = changeNodeComp2Map(applicationComponents); Map mappings = changeMapping2Map(applicationMappings); calleeReferenceMetric = calleeReferenceMetricFilter(calleeReferenceMetric); @@ -85,7 +83,7 @@ class TopologyBuilder { ApplicationNode applicationNode = new ApplicationNode(); applicationNode.setId(applicationId); applicationNode.setName(application.getApplicationCode()); - applicationNode.setType(componentNames.getOrDefault(application.getApplicationId(), Const.UNKNOWN)); + applicationNode.setType(components.getOrDefault(application.getApplicationId(), Const.UNKNOWN)); applicationNode.setSla(SLACalculator.INSTANCE.calculate(applicationMetric.getErrorCalls(), applicationMetric.getCalls())); try { @@ -131,7 +129,7 @@ class TopologyBuilder { ConjecturalNode conjecturalNode = new ConjecturalNode(); conjecturalNode.setId(target.getApplicationId()); conjecturalNode.setName(target.getApplicationCode()); - conjecturalNode.setType(componentNames.getOrDefault(target.getApplicationId(), Const.UNKNOWN)); + conjecturalNode.setType(components.getOrDefault(target.getApplicationId(), Const.UNKNOWN)); nodes.add(conjecturalNode); } @@ -143,7 +141,7 @@ class TopologyBuilder { call.setTarget(actualTargetId); call.setTargetName(applicationCacheService.getApplicationById(actualTargetId).getApplicationCode()); call.setAlert(false); - call.setCallType(ServerTypeDefine.getInstance().getServerTypeByComponentId(componentIds.get(referenceMetric.getTarget())).getName()); + call.setCallType(components.get(referenceMetric.getTarget())); try { call.setCallsPerSec(referenceMetric.getCalls() / secondBetweenService.calculate(source.getApplicationId(), startSecondTimeBucket, endSecondTimeBucket)); } catch (ParseException e) { @@ -169,7 +167,7 @@ class TopologyBuilder { ConjecturalNode conjecturalNode = new ConjecturalNode(); conjecturalNode.setId(source.getApplicationId()); conjecturalNode.setName(source.getApplicationCode()); - conjecturalNode.setType(componentNames.getOrDefault(source.getApplicationId(), Const.UNKNOWN)); + conjecturalNode.setType(components.getOrDefault(source.getApplicationId(), Const.UNKNOWN)); nodes.add(conjecturalNode); } @@ -183,7 +181,7 @@ class TopologyBuilder { if (source.getApplicationId() == Const.NONE_APPLICATION_ID) { call.setCallType(Const.EMPTY_STRING); } else { - call.setCallType(ServerTypeDefine.getInstance().getServerTypeByComponentId(componentIds.get(referenceMetric.getTarget())).getName()); + call.setCallType(components.get(referenceMetric.getTarget())); } try { call.setCallsPerSec(referenceMetric.getCalls() / secondBetweenService.calculate(target.getApplicationId(), startSecondTimeBucket, endSecondTimeBucket)); @@ -221,7 +219,7 @@ class TopologyBuilder { return mappings; } - private Map changeNodeCompName2Map( + private Map changeNodeComp2Map( List applicationComponents) { Map components = new HashMap<>(); applicationComponents.forEach(applicationComponent -> { @@ -230,13 +228,4 @@ class TopologyBuilder { }); return components; } - - private Map changeNodeCompId2Map( - List applicationComponents) { - Map components = new HashMap<>(); - applicationComponents.forEach(applicationComponent -> { - components.put(applicationComponent.getApplicationId(), applicationComponent.getComponentId()); - }); - return components; - } } 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 enum OperationNameDictionary { ServiceNameElement serviceNameElement = ServiceNameElement.newBuilder() .setApplicationId(operationNameKey.getApplicationId()) .setServiceName(operationNameKey.getOperationName()) + .setSrcSpanType(operationNameKey.getSpanType()) .build(); builder.addElements(serviceNameElement); } @@ -122,9 +123,14 @@ public enum OperationNameDictionary { 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 @@ public enum OperationNameDictionary { boolean isExit() { return isExit; } + + SpanType getSpanType() { + if (isEntry) { + return SpanType.Entry; + } else if (isExit) { + return SpanType.Exit; + } else { + return SpanType.Local; + } + } } } From 8e3e0a3c5536ea01eaed6826b4b2954ffeeef1b8 Mon Sep 17 00:00:00 2001 From: peng-yongsheng <8082209@qq.com> Date: Sun, 4 Mar 2018 11:30:08 +0800 Subject: [PATCH 08/19] Clear the duration in query condition when trace id is not empty. --- .../skywalking/apm/collector/ui/query/TraceQuery.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) 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 0ce17ee84..a39c1cf0d 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 @@ -65,11 +65,11 @@ public class TraceQuery implements Query { long endSecondTimeBucket = 0; String traceId = Const.EMPTY_STRING; - if (ObjectUtils.isNotEmpty(condition.getQueryDuration())) { + if (StringUtils.isNotEmpty(condition.getTraceId())) { + traceId = condition.getTraceId(); + } else if (ObjectUtils.isNotEmpty(condition.getQueryDuration())) { startSecondTimeBucket = DurationUtils.INSTANCE.durationToSecondTimeBucket(condition.getQueryDuration().getStep(), condition.getQueryDuration().getStart()); endSecondTimeBucket = DurationUtils.INSTANCE.durationToSecondTimeBucket(condition.getQueryDuration().getStep(), condition.getQueryDuration().getEnd()); - } else if (StringUtils.isNotEmpty(condition.getTraceId())) { - traceId = condition.getTraceId(); } else { throw new UnexpectedException("The condition must contains either queryDuration or traceId."); } From c7dae338f053892ff0d50e94f4e4fb6d8b14bb5a Mon Sep 17 00:00:00 2001 From: peng-yongsheng <8082209@qq.com> Date: Sun, 4 Mar 2018 11:35:07 +0800 Subject: [PATCH 09/19] Make the alarm trend rate value is 0 when application size equal to 0. --- .../skywalking/apm/collector/ui/service/AlarmService.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/AlarmService.java b/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/AlarmService.java index 62bd60bfa..0af55fa97 100644 --- a/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/AlarmService.java +++ b/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/AlarmService.java @@ -146,7 +146,11 @@ public class AlarmService { AlarmTrend alarmTrend = new AlarmTrend(); durationPoints.forEach(durationPoint -> { - alarmTrend.getNumOfAlarmRate().add((trendsMap.getOrDefault(durationPoint.getPoint(), 0) * 10000) / (applications.size())); + if (applications.size() == 0) { + alarmTrend.getNumOfAlarmRate().add(0); + } else { + alarmTrend.getNumOfAlarmRate().add((trendsMap.getOrDefault(durationPoint.getPoint(), 0) * 10000) / (applications.size())); + } }); return alarmTrend; } From da3d993e4ddf969787777c80c55394d3ba5c31ee Mon Sep 17 00:00:00 2001 From: peng-yongsheng <8082209@qq.com> Date: Sun, 4 Mar 2018 13:56:59 +0800 Subject: [PATCH 10/19] Add application node when the source of reference is not have application metric. --- .../service/SegmentBase64Printer.java | 78 +++++++++++++++++++ .../src/test/resources/log4j2.xml | 37 +++++++++ .../collector/ui/service/TopologyBuilder.java | 19 +++++ 3 files changed, 134 insertions(+) create mode 100644 apm-collector/apm-collector-analysis/analysis-segment-parser/segment-parser-provider/src/test/java/org/apache/skywalking/apm/collector/analysis/segment/parser/provider/service/SegmentBase64Printer.java create mode 100644 apm-collector/apm-collector-analysis/analysis-segment-parser/segment-parser-provider/src/test/resources/log4j2.xml diff --git a/apm-collector/apm-collector-analysis/analysis-segment-parser/segment-parser-provider/src/test/java/org/apache/skywalking/apm/collector/analysis/segment/parser/provider/service/SegmentBase64Printer.java b/apm-collector/apm-collector-analysis/analysis-segment-parser/segment-parser-provider/src/test/java/org/apache/skywalking/apm/collector/analysis/segment/parser/provider/service/SegmentBase64Printer.java new file mode 100644 index 000000000..c729bf142 --- /dev/null +++ b/apm-collector/apm-collector-analysis/analysis-segment-parser/segment-parser-provider/src/test/java/org/apache/skywalking/apm/collector/analysis/segment/parser/provider/service/SegmentBase64Printer.java @@ -0,0 +1,78 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.skywalking.apm.collector.analysis.segment.parser.provider.service; + +import com.google.protobuf.InvalidProtocolBufferException; +import java.util.Base64; +import java.util.List; +import org.apache.skywalking.apm.network.proto.SpanObject; +import org.apache.skywalking.apm.network.proto.TraceSegmentObject; +import org.apache.skywalking.apm.network.proto.UniqueId; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * @author peng-yongsheng + */ +public class SegmentBase64Printer { + + private static final Logger LOGGER = LoggerFactory.getLogger(SegmentBase64Printer.class); + + public static void main(String[] args) throws InvalidProtocolBufferException { + String segmentBase64 = "CgwKCgIBsv/x1L2vgBsSggEQ////////////ARirnsP1niwg9Z7D9Z4sOhhIMi9KREJJL0Nvbm5lY3Rpb24vY2xvc2VKDGxvY2FsaG9zdDotMVABWAFgBHoOCgdkYi50eXBlEgNzcWx6GQoLZGIuaW5zdGFuY2USCmRhdGFTb3VyY2V6DgoMZGIuc3RhdGVtZW50GP///////////wEgAg=="; + byte[] binarySegment = Base64.getDecoder().decode(segmentBase64); + TraceSegmentObject segmentObject = TraceSegmentObject.parseFrom(binarySegment); + + UniqueId segmentId = segmentObject.getTraceSegmentId(); + StringBuilder segmentIdBuilder = new StringBuilder(); + for (int i = 0; i < segmentId.getIdPartsList().size(); i++) { + if (i == 0) { + segmentIdBuilder.append(segmentId.getIdPartsList().get(i)); + } else { + segmentIdBuilder.append(".").append(segmentId.getIdPartsList().get(i)); + } + } + LOGGER.info("SegmentId: {}", segmentIdBuilder.toString()); + LOGGER.info("ApplicationId: {}", segmentObject.getApplicationId()); + LOGGER.info("ApplicationInstanceId: {}", segmentObject.getApplicationInstanceId()); + List spansList = segmentObject.getSpansList(); + LOGGER.info("Spans:"); + spansList.forEach(span -> { + LOGGER.info(" Span:"); + LOGGER.info(" SpanId: {}", span.getSpanId()); + LOGGER.info(" ParentSpanId: {}", span.getParentSpanId()); + LOGGER.info(" SpanLayer: {}", span.getSpanLayer()); + LOGGER.info(" SpanType: {}", span.getSpanType()); + LOGGER.info(" StartTime: {}", span.getStartTime()); + LOGGER.info(" EndTime: {}", span.getEndTime()); + LOGGER.info(" ComponentId: {}", span.getComponentId()); + LOGGER.info(" Component: {}", span.getComponent()); + LOGGER.info(" OperationNameId: {}", span.getOperationNameId()); + LOGGER.info(" OperationName: {}", span.getOperationName()); + LOGGER.info(" PeerId: {}", span.getPeerId()); + LOGGER.info(" Peer: {}", span.getPeer()); + LOGGER.info(" IsError: {}", span.getIsError()); + + LOGGER.info(" reference:"); + span.getRefsList().forEach(reference -> { + LOGGER.info(" EntryApplicationInstanceId: {}", reference.getEntryApplicationInstanceId()); + }); + }); + } +} diff --git a/apm-collector/apm-collector-analysis/analysis-segment-parser/segment-parser-provider/src/test/resources/log4j2.xml b/apm-collector/apm-collector-analysis/analysis-segment-parser/segment-parser-provider/src/test/resources/log4j2.xml new file mode 100644 index 000000000..6697ebf27 --- /dev/null +++ b/apm-collector/apm-collector-analysis/analysis-segment-parser/segment-parser-provider/src/test/resources/log4j2.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/TopologyBuilder.java b/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/TopologyBuilder.java index cbd013e2d..80caa04e3 100644 --- a/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/TopologyBuilder.java +++ b/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/TopologyBuilder.java @@ -20,9 +20,11 @@ package org.apache.skywalking.apm.collector.ui.service; import java.text.ParseException; import java.util.HashMap; +import java.util.HashSet; import java.util.LinkedList; import java.util.List; import java.util.Map; +import java.util.Set; import org.apache.skywalking.apm.collector.cache.CacheModule; import org.apache.skywalking.apm.collector.cache.service.ApplicationCacheService; import org.apache.skywalking.apm.collector.core.module.ModuleManager; @@ -133,6 +135,17 @@ class TopologyBuilder { nodes.add(conjecturalNode); } + Set nodeIds = buildNodeIds(nodes); + if (!nodeIds.contains(source.getApplicationId())) { + ApplicationNode applicationNode = new ApplicationNode(); + applicationNode.setId(source.getApplicationId()); + applicationNode.setName(source.getApplicationCode()); + applicationNode.setType(components.getOrDefault(source.getApplicationId(), Const.UNKNOWN)); + applicationNode.setApdex(100); + applicationNode.setSla(100); + nodes.add(applicationNode); + } + Call call = new Call(); call.setSource(source.getApplicationId()); call.setSourceName(source.getApplicationCode()); @@ -198,6 +211,12 @@ class TopologyBuilder { return topology; } + private Set buildNodeIds(List nodes) { + Set nodeIds = new HashSet<>(); + nodes.forEach(node -> nodeIds.add(node.getId())); + return nodeIds; + } + private List calleeReferenceMetricFilter( List calleeReferenceMetric) { List filteredMetrics = new LinkedList<>(); From 0006cb4b10072a05c6c2f45d5065ae56272ebc89 Mon Sep 17 00:00:00 2001 From: peng-yongsheng <8082209@qq.com> Date: Sun, 4 Mar 2018 14:10:51 +0800 Subject: [PATCH 11/19] Fixed the NullPointerException in getServerThroughput method. --- .../skywalking/apm/collector/ui/service/ServerService.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) 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 667c1b864..dd5f3ca05 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,6 +26,7 @@ import java.util.LinkedList; 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,6 +60,7 @@ public class ServerService { private final IGCMetricUIDAO gcMetricUIDAO; private final IMemoryMetricUIDAO memoryMetricUIDAO; private final ApplicationCacheService applicationCacheService; + private final InstanceCacheService instanceCacheService; private final SecondBetweenService secondBetweenService; public ServerService(ModuleManager moduleManager) { @@ -68,6 +70,7 @@ public class ServerService { this.gcMetricUIDAO = moduleManager.find(StorageModule.NAME).getService(IGCMetricUIDAO.class); this.memoryMetricUIDAO = moduleManager.find(StorageModule.NAME).getService(IMemoryMetricUIDAO.class); this.applicationCacheService = moduleManager.find(CacheModule.NAME).getService(ApplicationCacheService.class); + this.instanceCacheService = moduleManager.find(CacheModule.NAME).getService(InstanceCacheService.class); this.secondBetweenService = new SecondBetweenService(moduleManager); } @@ -105,7 +108,8 @@ public class ServerService { List serverThroughput = instanceMetricUIDAO.getServerThroughput(applicationId, step, startTimeBucket, endTimeBucket, secondBetween, topN, MetricSource.Callee); serverThroughput.forEach(appServerInfo -> { - String applicationCode = applicationCacheService.getApplicationById(applicationId).getApplicationCode(); + appServerInfo.setApplicationId(instanceCacheService.getApplicationId(appServerInfo.getId())); + String applicationCode = applicationCacheService.getApplicationById(appServerInfo.getApplicationId()).getApplicationCode(); appServerInfo.setApplicationCode(applicationCode); Instance instance = instanceUIDAO.getInstance(appServerInfo.getId()); appServerInfo.setOsInfo(instance.getOsInfo()); From ca20d088377bca4d209db0642eeb4a18d1a254ed Mon Sep 17 00:00:00 2001 From: peng-yongsheng <8082209@qq.com> Date: Sun, 4 Mar 2018 14:29:26 +0800 Subject: [PATCH 12/19] Use application mapping to get the actual application id for the alarm title. --- .../apm/collector/ui/query/AlarmQuery.java | 6 ++-- .../collector/ui/service/AlarmService.java | 29 +++++++++++++++---- .../service/ApplicationTopologyService.java | 2 +- .../ui/service/ClusterTopologyService.java | 2 +- .../collector/ui/service/TopologyBuilder.java | 5 ++-- 5 files changed, 31 insertions(+), 13 deletions(-) diff --git a/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/query/AlarmQuery.java b/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/query/AlarmQuery.java index 678ab69d7..c56ae44a3 100644 --- a/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/query/AlarmQuery.java +++ b/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/query/AlarmQuery.java @@ -58,11 +58,11 @@ public class AlarmQuery implements Query { switch (alarmType) { case APPLICATION: - return getAlarmService().loadApplicationAlarmList(keyword, startTimeBucket, endTimeBucket, page.getLimit(), page.getFrom()); + return getAlarmService().loadApplicationAlarmList(keyword, duration.getStep(), startTimeBucket, endTimeBucket, page.getLimit(), page.getFrom()); case SERVER: - return getAlarmService().loadInstanceAlarmList(keyword, startTimeBucket, endTimeBucket, page.getLimit(), page.getFrom()); + return getAlarmService().loadInstanceAlarmList(keyword, duration.getStep(), startTimeBucket, endTimeBucket, page.getLimit(), page.getFrom()); case SERVICE: - return getAlarmService().loadServiceAlarmList(keyword, startTimeBucket, endTimeBucket, page.getLimit(), page.getFrom()); + return getAlarmService().loadServiceAlarmList(keyword, duration.getStep(), startTimeBucket, endTimeBucket, page.getLimit(), page.getFrom()); default: return new Alarm(); } diff --git a/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/AlarmService.java b/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/AlarmService.java index 0af55fa97..f9080794f 100644 --- a/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/AlarmService.java +++ b/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/AlarmService.java @@ -32,6 +32,7 @@ import org.apache.skywalking.apm.collector.core.util.Const; import org.apache.skywalking.apm.collector.storage.StorageModule; import org.apache.skywalking.apm.collector.storage.dao.ui.IApplicationAlarmListUIDAO; import org.apache.skywalking.apm.collector.storage.dao.ui.IApplicationAlarmUIDAO; +import org.apache.skywalking.apm.collector.storage.dao.ui.IApplicationMappingUIDAO; import org.apache.skywalking.apm.collector.storage.dao.ui.IInstanceAlarmUIDAO; import org.apache.skywalking.apm.collector.storage.dao.ui.IInstanceUIDAO; import org.apache.skywalking.apm.collector.storage.dao.ui.IServiceAlarmUIDAO; @@ -56,6 +57,7 @@ public class AlarmService { private final Gson gson = new Gson(); private final IInstanceUIDAO instanceDAO; private final IApplicationAlarmUIDAO applicationAlarmUIDAO; + private final IApplicationMappingUIDAO applicationMappingUIDAO; private final IInstanceAlarmUIDAO instanceAlarmUIDAO; private final IServiceAlarmUIDAO serviceAlarmUIDAO; private final IApplicationAlarmListUIDAO applicationAlarmListUIDAO; @@ -67,6 +69,7 @@ public class AlarmService { public AlarmService(ModuleManager moduleManager) { this.instanceDAO = moduleManager.find(StorageModule.NAME).getService(IInstanceUIDAO.class); this.applicationAlarmUIDAO = moduleManager.find(StorageModule.NAME).getService(IApplicationAlarmUIDAO.class); + this.applicationMappingUIDAO = moduleManager.find(StorageModule.NAME).getService(IApplicationMappingUIDAO.class); this.instanceAlarmUIDAO = moduleManager.find(StorageModule.NAME).getService(IInstanceAlarmUIDAO.class); this.serviceAlarmUIDAO = moduleManager.find(StorageModule.NAME).getService(IServiceAlarmUIDAO.class); this.applicationAlarmListUIDAO = moduleManager.find(StorageModule.NAME).getService(IApplicationAlarmListUIDAO.class); @@ -74,12 +77,16 @@ public class AlarmService { this.serviceNameCacheService = moduleManager.find(CacheModule.NAME).getService(ServiceNameCacheService.class); } - public Alarm loadApplicationAlarmList(String keyword, long startTimeBucket, long endTimeBucket, + public Alarm loadApplicationAlarmList(String keyword, Step step, long startTimeBucket, long endTimeBucket, int limit, int from) throws ParseException { logger.debug("keyword: {}, startTimeBucket: {}, endTimeBucket: {}, limit: {}, from: {}", keyword, startTimeBucket, endTimeBucket, limit, from); Alarm alarm = applicationAlarmUIDAO.loadAlarmList(keyword, startTimeBucket, endTimeBucket, limit, from); + List applicationMappings = applicationMappingUIDAO.load(step, startTimeBucket, endTimeBucket); + Map mappings = new HashMap<>(); + applicationMappings.forEach(applicationMapping -> mappings.put(applicationMapping.getMappingApplicationId(), applicationMapping.getApplicationId())); + alarm.getItems().forEach(item -> { - String applicationCode = applicationCacheService.getApplicationById(item.getId()).getApplicationCode(); + String applicationCode = applicationCacheService.getApplicationById(mappings.getOrDefault(item.getId(), item.getId())).getApplicationCode(); switch (item.getCauseType()) { case SLOW_RESPONSE: item.setTitle("Application " + applicationCode + RESPONSE_TIME_ALARM); @@ -92,13 +99,18 @@ public class AlarmService { return alarm; } - public Alarm loadInstanceAlarmList(String keyword, long startTimeBucket, long endTimeBucket, + public Alarm loadInstanceAlarmList(String keyword, Step step, long startTimeBucket, long endTimeBucket, int limit, int from) throws ParseException { logger.debug("keyword: {}, startTimeBucket: {}, endTimeBucket: {}, limit: {}, from: {}", keyword, startTimeBucket, endTimeBucket, limit, from); Alarm alarm = instanceAlarmUIDAO.loadAlarmList(keyword, startTimeBucket, endTimeBucket, limit, from); + + List applicationMappings = applicationMappingUIDAO.load(step, startTimeBucket, endTimeBucket); + Map mappings = new HashMap<>(); + applicationMappings.forEach(applicationMapping -> mappings.put(applicationMapping.getMappingApplicationId(), applicationMapping.getApplicationId())); + alarm.getItems().forEach(item -> { Instance instance = instanceDAO.getInstance(item.getId()); - String applicationCode = applicationCacheService.getApplicationById(instance.getApplicationId()).getApplicationCode(); + String applicationCode = applicationCacheService.getApplicationById(mappings.getOrDefault(instance.getApplicationId(), instance.getApplicationId())).getApplicationCode(); String serverName = buildServerName(instance.getOsInfo()); switch (item.getCauseType()) { case SLOW_RESPONSE: @@ -113,13 +125,18 @@ public class AlarmService { return alarm; } - public Alarm loadServiceAlarmList(String keyword, long startTimeBucket, long endTimeBucket, + public Alarm loadServiceAlarmList(String keyword, Step step, long startTimeBucket, long endTimeBucket, int limit, int from) throws ParseException { logger.debug("keyword: {}, startTimeBucket: {}, endTimeBucket: {}, limit: {}, from: {}", keyword, startTimeBucket, endTimeBucket, limit, from); Alarm alarm = serviceAlarmUIDAO.loadAlarmList(keyword, startTimeBucket, endTimeBucket, limit, from); + + List applicationMappings = applicationMappingUIDAO.load(step, startTimeBucket, endTimeBucket); + Map mappings = new HashMap<>(); + applicationMappings.forEach(applicationMapping -> mappings.put(applicationMapping.getMappingApplicationId(), applicationMapping.getApplicationId())); + alarm.getItems().forEach(item -> { ServiceName serviceName = serviceNameCacheService.get(item.getId()); - String applicationCode = applicationCacheService.getApplicationById(serviceName.getApplicationId()).getApplicationCode(); + String applicationCode = applicationCacheService.getApplicationById(mappings.getOrDefault(serviceName.getApplicationId(), serviceName.getApplicationId())).getApplicationCode(); switch (item.getCauseType()) { case SLOW_RESPONSE: item.setTitle("Service " + serviceName.getServiceName() + " of Application " + applicationCode + RESPONSE_TIME_ALARM); diff --git a/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/ApplicationTopologyService.java b/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/ApplicationTopologyService.java index 7d4fe4180..d50b431b8 100644 --- a/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/ApplicationTopologyService.java +++ b/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/ApplicationTopologyService.java @@ -82,6 +82,6 @@ public class ApplicationTopologyService { TopologyBuilder builder = new TopologyBuilder(moduleManager); - return builder.build(applicationComponents, applicationMappings, applicationMetrics, callerReferenceMetric, calleeReferenceMetric, startTimeBucket, endTimeBucket, startSecondTimeBucket, endSecondTimeBucket); + return builder.build(applicationComponents, applicationMappings, applicationMetrics, callerReferenceMetric, calleeReferenceMetric, step, startTimeBucket, endTimeBucket, startSecondTimeBucket, endSecondTimeBucket); } } diff --git a/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/ClusterTopologyService.java b/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/ClusterTopologyService.java index 8e1609c72..fe9fa09bf 100644 --- a/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/ClusterTopologyService.java +++ b/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/ClusterTopologyService.java @@ -72,6 +72,6 @@ public class ClusterTopologyService { TopologyBuilder builder = new TopologyBuilder(moduleManager); - return builder.build(applicationComponents, applicationMappings, applicationMetrics, callerReferenceMetric, calleeReferenceMetric, startTimeBucket, endTimeBucket, startSecondTimeBucket, endSecondTimeBucket); + return builder.build(applicationComponents, applicationMappings, applicationMetrics, callerReferenceMetric, calleeReferenceMetric, step, startTimeBucket, endTimeBucket, startSecondTimeBucket, endSecondTimeBucket); } } diff --git a/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/TopologyBuilder.java b/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/TopologyBuilder.java index 80caa04e3..7cb451362 100644 --- a/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/TopologyBuilder.java +++ b/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/TopologyBuilder.java @@ -40,6 +40,7 @@ import org.apache.skywalking.apm.collector.storage.ui.application.ApplicationNod import org.apache.skywalking.apm.collector.storage.ui.application.ConjecturalNode; import org.apache.skywalking.apm.collector.storage.ui.common.Call; import org.apache.skywalking.apm.collector.storage.ui.common.Node; +import org.apache.skywalking.apm.collector.storage.ui.common.Step; import org.apache.skywalking.apm.collector.storage.ui.common.Topology; import org.apache.skywalking.apm.collector.storage.ui.common.VisualUserNode; import org.apache.skywalking.apm.collector.ui.utils.ApdexCalculator; @@ -72,7 +73,7 @@ class TopologyBuilder { List applicationMetrics, List callerReferenceMetric, List calleeReferenceMetric, - long startTimeBucket, long endTimeBucket, long startSecondTimeBucket, long endSecondTimeBucket) { + Step step, long startTimeBucket, long endTimeBucket, long startSecondTimeBucket, long endSecondTimeBucket) { Map components = changeNodeComp2Map(applicationComponents); Map mappings = changeMapping2Map(applicationMappings); @@ -97,7 +98,7 @@ class TopologyBuilder { applicationNode.setApdex(ApdexCalculator.INSTANCE.calculate(applicationMetric.getSatisfiedCount(), applicationMetric.getToleratingCount(), applicationMetric.getFrustratedCount())); applicationNode.setAlarm(false); try { - Alarm alarm = alarmService.loadApplicationAlarmList(Const.EMPTY_STRING, startTimeBucket, endTimeBucket, 1, 0); + Alarm alarm = alarmService.loadApplicationAlarmList(Const.EMPTY_STRING, step, startTimeBucket, endTimeBucket, 1, 0); if (alarm.getItems().size() > 0) { applicationNode.setAlarm(true); } From 610edfe42662c0d709c9c74907285348b2c476ed Mon Sep 17 00:00:00 2001 From: peng-yongsheng <8082209@qq.com> Date: Sun, 4 Mar 2018 14:32:01 +0800 Subject: [PATCH 13/19] Fixed compile error. --- .../skywalking/apm/collector/ui/service/TopologyBuilder.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/TopologyBuilder.java b/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/TopologyBuilder.java index 7cb451362..5e7f699d4 100644 --- a/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/TopologyBuilder.java +++ b/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/TopologyBuilder.java @@ -108,14 +108,14 @@ class TopologyBuilder { applicationNode.setNumOfServer(serverService.getAllServer(applicationId, startSecondTimeBucket, endSecondTimeBucket).size()); try { - Alarm alarm = alarmService.loadInstanceAlarmList(Const.EMPTY_STRING, startTimeBucket, endTimeBucket, 1000, 0); + Alarm alarm = alarmService.loadInstanceAlarmList(Const.EMPTY_STRING, step, startTimeBucket, endTimeBucket, 1000, 0); applicationNode.setNumOfServerAlarm(alarm.getItems().size()); } catch (ParseException e) { logger.error(e.getMessage(), e); } try { - Alarm alarm = alarmService.loadServiceAlarmList(Const.EMPTY_STRING, startTimeBucket, endTimeBucket, 1000, 0); + Alarm alarm = alarmService.loadServiceAlarmList(Const.EMPTY_STRING, step, startTimeBucket, endTimeBucket, 1000, 0); applicationNode.setNumOfServiceAlarm(alarm.getItems().size()); } catch (ParseException e) { logger.error(e.getMessage(), e); From ad31bf24ba35226fb11d74cf213cbb8e08c4ea76 Mon Sep 17 00:00:00 2001 From: gaohongtao Date: Sun, 4 Mar 2018 21:30:09 +0800 Subject: [PATCH 14/19] Update skywalking-ui submodule --- skywalking-ui | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/skywalking-ui b/skywalking-ui index d785fc123..8655c0dfb 160000 --- a/skywalking-ui +++ b/skywalking-ui @@ -1 +1 @@ -Subproject commit d785fc123850605e2506e18f749aa14337878d0d +Subproject commit 8655c0dfb991f7c5cf2fecc235a50c9cbb09c97d From cc3000977fb7ccb8e08f503b1e2ac5e02c697134 Mon Sep 17 00:00:00 2001 From: hanahmily Date: Mon, 5 Mar 2018 11:33:55 +0800 Subject: [PATCH 15/19] Update submodule/skywaling-ui --- skywalking-ui | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/skywalking-ui b/skywalking-ui index 8655c0dfb..e36a6bf93 160000 --- a/skywalking-ui +++ b/skywalking-ui @@ -1 +1 @@ -Subproject commit 8655c0dfb991f7c5cf2fecc235a50c9cbb09c97d +Subproject commit e36a6bf93503881a1d7abf7386558a776b3e2153 From 7a73e3b6dab45ee96f8a7880ffd02b59dc13ba67 Mon Sep 17 00:00:00 2001 From: peng-yongsheng <8082209@qq.com> Date: Mon, 5 Mar 2018 12:46:00 +0800 Subject: [PATCH 16/19] Add the third Party Components description into notice file. --- NOTICE.txt | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/NOTICE.txt b/NOTICE.txt index 36ebf1d03..fec74574b 100644 --- a/NOTICE.txt +++ b/NOTICE.txt @@ -19,3 +19,10 @@ mockito: http://site.mockito.org/ , MIT QOS.ch (slf4j): https://www.slf4j.org/ , MIT powermock: https://github.com/powermock/powermock , Apache 2.0 Eclipse (Jetty): https://www.eclipse.org/jetty/ , Apache 2.0 and Eclipse Public License 1.0 +Apache: +- Log4j 2: https://logging.apache.org/log4j/2.x/ , Apache 2.0 +- ZooKeeper: http://zookeeper.apache.org , Apache 2.0 +SnakeYAML: http://www.snakeyaml.org , Apache 2.0 +Jedis: https://github.com/xetorthio/jedis , MIT +Joda-Time: http://www.joda.org/joda-time/ , Apache 2.0 +GraphQL Java Tools: https://github.com/graphql-java/graphql-java-tools , MIT \ No newline at end of file From c587b9f009de8bc2e182765410395063d92b07ed Mon Sep 17 00:00:00 2001 From: peng-yongsheng <8082209@qq.com> Date: Mon, 5 Mar 2018 13:01:52 +0800 Subject: [PATCH 17/19] Report @ 2018/03/04 23:00, Dashboard [COLLECTOR] The /api/dashboard response is incorrect . Fixed the number of application bug. --- .../apm/collector/storage/es/dao/ui/InstanceEsUIDAO.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/ui/InstanceEsUIDAO.java b/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/ui/InstanceEsUIDAO.java index 8a08047d2..e3a048fb8 100644 --- a/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/ui/InstanceEsUIDAO.java +++ b/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/ui/InstanceEsUIDAO.java @@ -105,7 +105,13 @@ public class InstanceEsUIDAO extends EsDAO implements IInstanceUIDAO { searchRequestBuilder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH); BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery(); - boolQueryBuilder.must().add(QueryBuilders.rangeQuery(InstanceTable.COLUMN_HEARTBEAT_TIME).gte(startSecondTimeBucket)); + + BoolQueryBuilder timeBoolQuery = QueryBuilders.boolQuery(); + timeBoolQuery.should().add(QueryBuilders.rangeQuery(InstanceTable.COLUMN_REGISTER_TIME).gte(startSecondTimeBucket).lte(endSecondTimeBucket)); + timeBoolQuery.should().add(QueryBuilders.rangeQuery(InstanceTable.COLUMN_HEARTBEAT_TIME).gte(startSecondTimeBucket).lte(endSecondTimeBucket)); + + boolQueryBuilder.must().add(timeBoolQuery); + boolQueryBuilder.must().add(QueryBuilders.termQuery(InstanceTable.COLUMN_IS_ADDRESS, BooleanUtils.FALSE)); if (applicationIds.length > 0) { boolQueryBuilder.must().add(QueryBuilders.termsQuery(InstanceTable.COLUMN_APPLICATION_ID, applicationIds)); From a9850c136ef686d2fb8f0354faef250662e7e670 Mon Sep 17 00:00:00 2001 From: peng-yongsheng <8082209@qq.com> Date: Mon, 5 Mar 2018 13:18:42 +0800 Subject: [PATCH 18/19] Report @ 2018/03/04 23:00, Application, [COLLECTOR] The topology is incorrect. Fixed the getApplicationTopology bug, remove the application node which not contains the source or target of calls. --- .../ui/service/ApplicationTopologyService.java | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/ApplicationTopologyService.java b/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/ApplicationTopologyService.java index d50b431b8..5d310d27d 100644 --- a/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/ApplicationTopologyService.java +++ b/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/ApplicationTopologyService.java @@ -82,6 +82,20 @@ public class ApplicationTopologyService { TopologyBuilder builder = new TopologyBuilder(moduleManager); - return builder.build(applicationComponents, applicationMappings, applicationMetrics, callerReferenceMetric, calleeReferenceMetric, step, startTimeBucket, endTimeBucket, startSecondTimeBucket, endSecondTimeBucket); + Topology topology = builder.build(applicationComponents, applicationMappings, applicationMetrics, callerReferenceMetric, calleeReferenceMetric, step, startTimeBucket, endTimeBucket, startSecondTimeBucket, endSecondTimeBucket); + + Set nodeIds = new HashSet<>(); + topology.getCalls().forEach(call -> { + nodeIds.add(call.getSource()); + nodeIds.add(call.getTarget()); + }); + + for (int i = topology.getNodes().size() - 1; i >= 0; i--) { + if (!nodeIds.contains(topology.getNodes().get(i).getId())) { + topology.getNodes().remove(i); + } + } + + return topology; } } From ae6a739d0ddd95fd562f2335a81de0701a58fb2f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=90=B4=E6=99=9F=20Wu=20Sheng?= Date: Mon, 5 Mar 2018 15:20:53 +0800 Subject: [PATCH 19/19] Update NOTICE.txt Remove Apache projects from NOTICE --- NOTICE.txt | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/NOTICE.txt b/NOTICE.txt index fec74574b..ee305bd27 100644 --- a/NOTICE.txt +++ b/NOTICE.txt @@ -19,10 +19,7 @@ mockito: http://site.mockito.org/ , MIT QOS.ch (slf4j): https://www.slf4j.org/ , MIT powermock: https://github.com/powermock/powermock , Apache 2.0 Eclipse (Jetty): https://www.eclipse.org/jetty/ , Apache 2.0 and Eclipse Public License 1.0 -Apache: -- Log4j 2: https://logging.apache.org/log4j/2.x/ , Apache 2.0 -- ZooKeeper: http://zookeeper.apache.org , Apache 2.0 SnakeYAML: http://www.snakeyaml.org , Apache 2.0 Jedis: https://github.com/xetorthio/jedis , MIT Joda-Time: http://www.joda.org/joda-time/ , Apache 2.0 -GraphQL Java Tools: https://github.com/graphql-java/graphql-java-tools , MIT \ No newline at end of file +GraphQL Java Tools: https://github.com/graphql-java/graphql-java-tools , MIT