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 ee7cab7e6793f84288ae781ecee924d35dfa5e5e..bd644ebb3a9e82a342206b6efbeb225f22c22817 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 @@ -53,7 +53,8 @@ public class ServiceNameDiscoveryServiceHandler extends ServiceNameDiscoveryServ for (ServiceNameElement serviceNameElement : serviceNameElementList) { int applicationId = serviceNameElement.getApplicationId(); String serviceName = serviceNameElement.getServiceName(); - int serviceId = serviceNameService.getOrCreate(applicationId, serviceName); + int srcSpanType = serviceNameElement.getSrcSpanTypeValue(); + int serviceId = serviceNameService.getOrCreate(applicationId, srcSpanType, serviceName); if (serviceId != 0) { ServiceNameMappingElement.Builder mappingElement = ServiceNameMappingElement.newBuilder(); diff --git a/apm-collector/apm-collector-agent/agent-grpc/agent-grpc-provider/src/test/java/org/apache/skywalking/apm/collector/agent/grpc/provider/handler/mock/RegisterMock.java b/apm-collector/apm-collector-agent/agent-grpc/agent-grpc-provider/src/test/java/org/apache/skywalking/apm/collector/agent/grpc/provider/handler/mock/RegisterMock.java index 11c7f070aaada95c646503d161f78b9b44ce29dd..0611d6e897e71d2f7ecda0ef5d883c8a2c5d16a7 100644 --- a/apm-collector/apm-collector-agent/agent-grpc/agent-grpc-provider/src/test/java/org/apache/skywalking/apm/collector/agent/grpc/provider/handler/mock/RegisterMock.java +++ b/apm-collector/apm-collector-agent/agent-grpc/agent-grpc-provider/src/test/java/org/apache/skywalking/apm/collector/agent/grpc/provider/handler/mock/RegisterMock.java @@ -34,6 +34,7 @@ import org.apache.skywalking.apm.network.proto.ServiceNameCollection; import org.apache.skywalking.apm.network.proto.ServiceNameDiscoveryServiceGrpc; import org.apache.skywalking.apm.network.proto.ServiceNameElement; import org.apache.skywalking.apm.network.proto.ServiceNameMappingCollection; +import org.apache.skywalking.apm.network.proto.SpanType; import org.apache.skywalking.apm.util.RunnableWithExceptionProtection; import org.joda.time.DateTime; import org.slf4j.Logger; @@ -95,6 +96,7 @@ class RegisterMock { ServiceNameElement.Builder serviceNameElement = ServiceNameElement.newBuilder(); serviceNameElement.setApplicationId(applicationMapping.getApplication().getValue()); serviceNameElement.setServiceName("org.skywaking.apm.testcase.dubbo.services.GreetService.doBusiness()"); + serviceNameElement.setSrcSpanType(SpanType.Exit); serviceNameCollection.addElements(serviceNameElement); registerServiceName(serviceNameCollection); @@ -139,6 +141,7 @@ class RegisterMock { ServiceNameElement.Builder serviceNameElement = ServiceNameElement.newBuilder(); serviceNameElement.setApplicationId(applicationMapping.getApplication().getValue()); serviceNameElement.setServiceName("org.skywaking.apm.testcase.dubbo.services.GreetService.doBusiness()"); + serviceNameElement.setSrcSpanType(SpanType.Entry); serviceNameCollection.addElements(serviceNameElement); registerServiceName(serviceNameCollection); diff --git a/apm-collector/apm-collector-agent/agent-jetty/agent-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/agent/jetty/provider/handler/ServiceNameDiscoveryServiceHandler.java b/apm-collector/apm-collector-agent/agent-jetty/agent-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/agent/jetty/provider/handler/ServiceNameDiscoveryServiceHandler.java index 15cc4c0659d68c4070c8ef60bb78b1ccb9fd3a98..f89f6092f254a3eb143056a645b3515926dd4139 100644 --- a/apm-collector/apm-collector-agent/agent-jetty/agent-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/agent/jetty/provider/handler/ServiceNameDiscoveryServiceHandler.java +++ b/apm-collector/apm-collector-agent/agent-jetty/agent-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/agent/jetty/provider/handler/ServiceNameDiscoveryServiceHandler.java @@ -44,6 +44,7 @@ public class ServiceNameDiscoveryServiceHandler extends JettyHandler { private static final String APPLICATION_ID = "ai"; private static final String SERVICE_NAME = "sn"; + private static final String SRC_SPAN_TYPE = "st"; private static final String SERVICE_ID = "si"; private static final String ELEMENT = "el"; @@ -66,8 +67,9 @@ public class ServiceNameDiscoveryServiceHandler extends JettyHandler { for (JsonElement service : services) { int applicationId = service.getAsJsonObject().get(APPLICATION_ID).getAsInt(); String serviceName = service.getAsJsonObject().get(SERVICE_NAME).getAsString(); + int srcSpanType = service.getAsJsonObject().get(SRC_SPAN_TYPE).getAsInt(); - int serviceId = serviceNameService.getOrCreate(applicationId, serviceName); + int serviceId = serviceNameService.getOrCreate(applicationId, srcSpanType, serviceName); if (serviceId != 0) { JsonObject responseJson = new JsonObject(); responseJson.addProperty(SERVICE_ID, serviceId); 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 a91f7dd2d6c8af54484f204de87df9e3a0fbd7db..42656c397366b8fc8074f0bed15b8e9e5d3b03fe 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 @@ -16,7 +16,6 @@ * */ - package org.apache.skywalking.apm.collector.analysis.register.define.service; import org.apache.skywalking.apm.collector.core.module.Service; @@ -25,5 +24,5 @@ import org.apache.skywalking.apm.collector.core.module.Service; * @author peng-yongsheng */ public interface IServiceNameService extends Service { - int getOrCreate(int applicationId, String serviceName); + int getOrCreate(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/register/ServiceNameRegisterSerialWorker.java b/apm-collector/apm-collector-analysis/analysis-register/register-provider/src/main/java/org/apache/skywalking/apm/collector/analysis/register/provider/register/ServiceNameRegisterSerialWorker.java index 26869fa6b3664c95e771df2004ebb84a77557c6e..77e396d2bddc06e3bfc578958c10b2cee35672ac 100644 --- a/apm-collector/apm-collector-analysis/analysis-register/register-provider/src/main/java/org/apache/skywalking/apm/collector/analysis/register/provider/register/ServiceNameRegisterSerialWorker.java +++ b/apm-collector/apm-collector-analysis/analysis-register/register-provider/src/main/java/org/apache/skywalking/apm/collector/analysis/register/provider/register/ServiceNameRegisterSerialWorker.java @@ -42,7 +42,7 @@ public class ServiceNameRegisterSerialWorker extends AbstractLocalAsyncWorker { @Override public boolean exchange(ReferenceDecorator standardBuilder, int applicationId) { if (standardBuilder.getEntryServiceId() == 0 && StringUtils.isNotEmpty(standardBuilder.getEntryServiceName())) { - int entryServiceId = serviceNameService.getOrCreate(instanceCacheService.getApplicationId(standardBuilder.getEntryApplicationInstanceId()), standardBuilder.getEntryServiceName()); + int entryServiceId = serviceNameService.getOrCreate(instanceCacheService.getApplicationId(standardBuilder.getEntryApplicationInstanceId()), SpanType.Entry_VALUE, standardBuilder.getEntryServiceName()); if (entryServiceId == 0) { if (logger.isDebugEnabled()) { @@ -73,7 +74,7 @@ public class ReferenceIdExchanger implements IdExchanger { } if (standardBuilder.getParentServiceId() == 0 && StringUtils.isNotEmpty(standardBuilder.getParentServiceName())) { - int parentServiceId = serviceNameService.getOrCreate(instanceCacheService.getApplicationId(standardBuilder.getParentApplicationInstanceId()), standardBuilder.getParentServiceName()); + int parentServiceId = serviceNameService.getOrCreate(instanceCacheService.getApplicationId(standardBuilder.getParentApplicationInstanceId()), SpanType.Entry_VALUE, standardBuilder.getParentServiceName()); if (parentServiceId == 0) { if (logger.isDebugEnabled()) { 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 9236c2d144b84a7ccdae04eedd7c93bd0348b276..704d724f5e7bbfcde5755bbba62f3118875c4b95 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 @@ -71,7 +71,7 @@ public class SpanIdExchanger implements IdExchanger { } if (standardBuilder.getOperationNameId() == 0 && StringUtils.isNotEmpty(standardBuilder.getOperationName())) { - int operationNameId = serviceNameService.getOrCreate(applicationId, standardBuilder.getOperationName()); + int operationNameId = serviceNameService.getOrCreate(applicationId, standardBuilder.getSpanTypeValue(), standardBuilder.getOperationName()); if (operationNameId == 0) { logger.debug("service name: {} from application id: {} exchange failed", standardBuilder.getOperationName(), applicationId); diff --git a/apm-collector/apm-collector-cache/collector-cache-define/src/main/java/org/apache/skywalking/apm/collector/cache/service/ServiceIdCacheService.java b/apm-collector/apm-collector-cache/collector-cache-define/src/main/java/org/apache/skywalking/apm/collector/cache/service/ServiceIdCacheService.java index 06ddc0313b81f32667df4cb364b334ad8a2828a7..7aef5102c9a9a74b09ec4eaf8df78e7194cd695a 100644 --- a/apm-collector/apm-collector-cache/collector-cache-define/src/main/java/org/apache/skywalking/apm/collector/cache/service/ServiceIdCacheService.java +++ b/apm-collector/apm-collector-cache/collector-cache-define/src/main/java/org/apache/skywalking/apm/collector/cache/service/ServiceIdCacheService.java @@ -16,7 +16,6 @@ * */ - package org.apache.skywalking.apm.collector.cache.service; import org.apache.skywalking.apm.collector.core.module.Service; @@ -25,5 +24,5 @@ import org.apache.skywalking.apm.collector.core.module.Service; * @author peng-yongsheng */ public interface ServiceIdCacheService extends Service { - int get(int applicationId, String serviceName); + int get(int applicationId, int srcSpanType, String serviceName); } diff --git a/apm-collector/apm-collector-cache/collector-cache-guava-provider/src/main/java/org/apache/skywalking/apm/collector/cache/guava/service/ServiceIdCacheGuavaService.java b/apm-collector/apm-collector-cache/collector-cache-guava-provider/src/main/java/org/apache/skywalking/apm/collector/cache/guava/service/ServiceIdCacheGuavaService.java index 5c5a618b93fccc76e120687158268fbcc6207b86..fdb9eba501b3a2313819348e74e74b384ec818a1 100644 --- a/apm-collector/apm-collector-cache/collector-cache-guava-provider/src/main/java/org/apache/skywalking/apm/collector/cache/guava/service/ServiceIdCacheGuavaService.java +++ b/apm-collector/apm-collector-cache/collector-cache-guava-provider/src/main/java/org/apache/skywalking/apm/collector/cache/guava/service/ServiceIdCacheGuavaService.java @@ -16,15 +16,14 @@ * */ - package org.apache.skywalking.apm.collector.cache.guava.service; import com.google.common.cache.Cache; import com.google.common.cache.CacheBuilder; -import org.apache.skywalking.apm.collector.core.util.Const; -import org.apache.skywalking.apm.collector.core.util.ObjectUtils; import org.apache.skywalking.apm.collector.cache.service.ServiceIdCacheService; import org.apache.skywalking.apm.collector.core.module.ModuleManager; +import org.apache.skywalking.apm.collector.core.util.Const; +import org.apache.skywalking.apm.collector.core.util.ObjectUtils; import org.apache.skywalking.apm.collector.storage.StorageModule; import org.apache.skywalking.apm.collector.storage.dao.cache.IServiceNameCacheDAO; import org.slf4j.Logger; @@ -53,18 +52,19 @@ public class ServiceIdCacheGuavaService implements ServiceIdCacheService { return this.serviceNameCacheDAO; } - public int get(int applicationId, String serviceName) { + @Override public int get(int applicationId, int srcSpanType, String serviceName) { int serviceId = 0; + String id = applicationId + Const.ID_SPLIT + srcSpanType + Const.ID_SPLIT + serviceName; try { - serviceId = serviceIdCache.get(applicationId + Const.ID_SPLIT + serviceName, () -> getServiceNameCacheDAO().getServiceId(applicationId, serviceName)); + serviceId = serviceIdCache.get(id, () -> getServiceNameCacheDAO().getServiceId(applicationId, srcSpanType, serviceName)); } catch (Throwable e) { logger.error(e.getMessage(), e); } if (serviceId == 0) { - serviceId = getServiceNameCacheDAO().getServiceId(applicationId, serviceName); + serviceId = getServiceNameCacheDAO().getServiceId(applicationId, srcSpanType, serviceName); if (serviceId != 0) { - serviceIdCache.put(applicationId + Const.ID_SPLIT + serviceName, serviceId); + serviceIdCache.put(id, serviceId); } } return serviceId; diff --git a/apm-collector/apm-collector-core/src/main/java/org/apache/skywalking/apm/collector/core/util/Const.java b/apm-collector/apm-collector-core/src/main/java/org/apache/skywalking/apm/collector/core/util/Const.java index 6030c2bb673369739c03104984dacb821b0bbf8f..739ddc9ad3f0f7f4f6e1b8e8e88398076c91d3ce 100644 --- a/apm-collector/apm-collector-core/src/main/java/org/apache/skywalking/apm/collector/core/util/Const.java +++ b/apm-collector/apm-collector-core/src/main/java/org/apache/skywalking/apm/collector/core/util/Const.java @@ -34,4 +34,5 @@ public class Const { public static final String EXCEPTION = "Exception"; public static final String EMPTY_STRING = ""; public static final String FILE_SUFFIX = "sw"; + public static final int SPAN_TYPE_VIRTUAL = 9; } diff --git a/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/dao/cache/IServiceNameCacheDAO.java b/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/dao/cache/IServiceNameCacheDAO.java index d9b34d8288a88c4b6d2bd9dc5dc27e5c811d39e9..67e7b3bd01da5d5b16df4108eee598d3217fbf6a 100644 --- a/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/dao/cache/IServiceNameCacheDAO.java +++ b/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/dao/cache/IServiceNameCacheDAO.java @@ -27,5 +27,5 @@ import org.apache.skywalking.apm.collector.storage.table.register.ServiceName; public interface IServiceNameCacheDAO extends DAO { ServiceName get(int serviceId); - int getServiceId(int applicationId, String serviceName); + int getServiceId(int applicationId, int srcSpanType, String serviceName); } diff --git a/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/dao/ui/IApplicationMetricUIDAO.java b/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/dao/ui/IApplicationMetricUIDAO.java index 2ced95a3601f4768e6347d0fc22ca889a5d762fe..3a1d09864b3b4d0df5fd50491f7c1d926ef1517b 100644 --- a/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/dao/ui/IApplicationMetricUIDAO.java +++ b/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/dao/ui/IApplicationMetricUIDAO.java @@ -30,4 +30,82 @@ import org.apache.skywalking.apm.collector.storage.ui.overview.ApplicationTPS; public interface IApplicationMetricUIDAO extends DAO { List getTopNApplicationThroughput(Step step, long start, long end, long betweenSecond, int topN, MetricSource metricSource); + + List getApplications(Step step, long startTimeBucket, long endTimeBucket, + MetricSource metricSource); + + class ApplicationMetric { + private int id; + private long calls; + private long errorCalls; + private long durations; + private long errorDurations; + private long satisfiedCount; + private long toleratingCount; + private long frustratedCount; + + public void setId(int id) { + this.id = id; + } + + public void setCalls(long calls) { + this.calls = calls; + } + + public void setErrorCalls(long errorCalls) { + this.errorCalls = errorCalls; + } + + public void setDurations(long durations) { + this.durations = durations; + } + + public void setErrorDurations(long errorDurations) { + this.errorDurations = errorDurations; + } + + public int getId() { + return id; + } + + public long getCalls() { + return calls; + } + + public long getErrorCalls() { + return errorCalls; + } + + public long getDurations() { + return durations; + } + + public long getErrorDurations() { + return errorDurations; + } + + public long getSatisfiedCount() { + return satisfiedCount; + } + + public void setSatisfiedCount(long satisfiedCount) { + this.satisfiedCount = satisfiedCount; + } + + public long getToleratingCount() { + return toleratingCount; + } + + public void setToleratingCount(long toleratingCount) { + this.toleratingCount = toleratingCount; + } + + public long getFrustratedCount() { + return frustratedCount; + } + + public void setFrustratedCount(long frustratedCount) { + this.frustratedCount = frustratedCount; + } + } } diff --git a/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/dao/ui/IApplicationReferenceMetricUIDAO.java b/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/dao/ui/IApplicationReferenceMetricUIDAO.java index 64c984c71c5088c729b1f3cffed030ddee4fcad7..1d60dddc7499bd2ee8a9784623db175c6c88ddb7 100644 --- a/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/dao/ui/IApplicationReferenceMetricUIDAO.java +++ b/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/dao/ui/IApplicationReferenceMetricUIDAO.java @@ -21,18 +21,75 @@ package org.apache.skywalking.apm.collector.storage.dao.ui; import java.util.List; import org.apache.skywalking.apm.collector.storage.base.dao.DAO; import org.apache.skywalking.apm.collector.storage.table.MetricSource; -import org.apache.skywalking.apm.collector.storage.ui.common.Call; import org.apache.skywalking.apm.collector.storage.ui.common.Step; /** * @author peng-yongsheng */ public interface IApplicationReferenceMetricUIDAO extends DAO { - List getFrontApplications(Step step, int applicationId, long startTime, long endTime, + List getFrontApplications(Step step, int applicationId, long startTime, long endTime, MetricSource metricSource); - List getBehindApplications(Step step, int applicationId, long startTime, long endTime, + List getBehindApplications(Step step, int applicationId, long startTime, long endTime, MetricSource metricSource); - List getApplications(Step step, long startTime, long endTime, MetricSource metricSource); + List getReferences(Step step, long startTime, long endTime, + MetricSource metricSource); + + class ApplicationReferenceMetric { + private int source; + private int target; + private long calls; + private long errorCalls; + private long durations; + private long errorDurations; + + public int getSource() { + return source; + } + + public void setSource(int source) { + this.source = source; + } + + public int getTarget() { + return target; + } + + public void setTarget(int target) { + this.target = target; + } + + public long getCalls() { + return calls; + } + + public void setCalls(long calls) { + this.calls = calls; + } + + public long getErrorCalls() { + return errorCalls; + } + + public void setErrorCalls(long errorCalls) { + this.errorCalls = errorCalls; + } + + public long getDurations() { + return durations; + } + + public void setDurations(long durations) { + this.durations = durations; + } + + public long getErrorDurations() { + return errorDurations; + } + + public void setErrorDurations(long errorDurations) { + this.errorDurations = errorDurations; + } + } } diff --git a/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/dao/ui/IInstanceUIDAO.java b/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/dao/ui/IInstanceUIDAO.java index 2f713e654f258143fb2e202685562e1ac2068b8b..1027154777a5b65e7cdc4cfaaa18f95a6da138df 100644 --- a/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/dao/ui/IInstanceUIDAO.java +++ b/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/dao/ui/IInstanceUIDAO.java @@ -38,5 +38,9 @@ public interface IInstanceUIDAO extends DAO { List searchServer(String keyword, long start, long end); - List getAllServer(int applicationId, long start, long end); + List getAllServer(int applicationId, long startSecondTimeBucket, long endSecondTimeBucket); + + long getEarliestRegisterTime(int applicationId); + + long getLatestHeartBeatTime(int applicationId); } diff --git a/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/dao/ui/IServiceMetricUIDAO.java b/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/dao/ui/IServiceMetricUIDAO.java index d97396ddc3ffcfaa34a46c10d16df0e415223581..94bd6fcfa073c734cf535deb745ab371a422c93f 100644 --- a/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/dao/ui/IServiceMetricUIDAO.java +++ b/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/dao/ui/IServiceMetricUIDAO.java @@ -40,6 +40,6 @@ public interface IServiceMetricUIDAO extends DAO { List getServicesMetric(Step step, long startTime, long endTime, MetricSource metricSource, Collection serviceIds); - List getSlowService(int applicationId, Step step, long start, long end, - Integer top, MetricSource metricSource); + List getSlowService(int applicationId, Step step, long startTimeBucket, long endTimeBucket, + Integer topN, MetricSource metricSource); } 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 71e2ae346802bd6c2219ac441bb1a09f99633255..61a91fb667215187d7b58244615cdfbff85dacbd 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 @@ -32,7 +32,7 @@ public class ServerTypeDefine { private ServerType[] serverTypes; private ServerTypeDefine() { - this.serverTypes = new ServerType[29]; + 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)); @@ -62,6 +62,7 @@ public class ServerTypeDefine { 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() { diff --git a/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/table/register/ServiceName.java b/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/table/register/ServiceName.java index 8778e473a9689db7fe80f7a0bf67d1ae03f6a874..1e377f1ce841e8e096cbd7e82f7732cd586664e9 100644 --- a/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/table/register/ServiceName.java +++ b/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/table/register/ServiceName.java @@ -36,10 +36,11 @@ public class ServiceName extends StreamData { private static final Column[] LONG_COLUMNS = {}; private static final Column[] DOUBLE_COLUMNS = {}; - + private static final Column[] INTEGER_COLUMNS = { new Column(ServiceNameTable.COLUMN_APPLICATION_ID, new CoverOperation()), new Column(ServiceNameTable.COLUMN_SERVICE_ID, new CoverOperation()), + new Column(ServiceNameTable.COLUMN_SRC_SPAN_TYPE, new CoverOperation()), }; private static final Column[] BYTE_COLUMNS = {}; @@ -87,4 +88,12 @@ public class ServiceName extends StreamData { public void setServiceId(int serviceId) { setDataInteger(1, serviceId); } + + public int getSrcSpanType() { + return getDataInteger(2); + } + + public void setSrcSpanType(int srcSpanType) { + setDataInteger(2, srcSpanType); + } } diff --git a/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/table/register/ServiceNameTable.java b/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/table/register/ServiceNameTable.java index 1030f802b47a620689028d6eaa7734d24413178b..ae90e52c8c7f01fc2e6f0884cac3ceea56f4f8ac 100644 --- a/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/table/register/ServiceNameTable.java +++ b/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/table/register/ServiceNameTable.java @@ -16,7 +16,6 @@ * */ - package org.apache.skywalking.apm.collector.storage.table.register; import org.apache.skywalking.apm.collector.core.data.CommonTable; @@ -27,6 +26,8 @@ import org.apache.skywalking.apm.collector.core.data.CommonTable; public class ServiceNameTable extends CommonTable { public static final String TABLE = "service_name"; public static final String COLUMN_SERVICE_NAME = "service_name"; + public static final String COLUMN_SERVICE_NAME_KEYWORD = "service_name_keyword"; + public static final String COLUMN_SRC_SPAN_TYPE = "src_span_type"; public static final String COLUMN_APPLICATION_ID = "application_id"; public static final String COLUMN_SERVICE_ID = "service_id"; } diff --git a/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/ui/application/ApplicationNode.java b/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/ui/application/ApplicationNode.java index 66f3a8d82ba76b91bce2627c9a668a04d670102e..8e2170f2ac4ba05b2728427a03f454ce0a3d4463 100644 --- a/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/ui/application/ApplicationNode.java +++ b/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/ui/application/ApplicationNode.java @@ -25,76 +25,76 @@ import org.apache.skywalking.apm.collector.storage.ui.common.Node; */ public class ApplicationNode extends Node { - private Float sla; - private Long callsPerSec; - private Long responseTimePerSec; - private Float apdex; - private Boolean isAlarm; - private Integer numOfServer; - private Integer numOfServerAlarm; - private Integer numOfServiceAlarm; - - public Float getSla() { + private int sla; + private long callsPerSec; + private long avgResponseTime; + private int apdex; + private boolean isAlarm; + private int numOfServer; + private int numOfServerAlarm; + private int numOfServiceAlarm; + + public int getSla() { return sla; } - public void setSla(Float sla) { + public void setSla(int sla) { this.sla = sla; } - public Long getCallsPerSec() { + public long getCallsPerSec() { return callsPerSec; } - public void setCallsPerSec(Long callsPerSec) { + public void setCallsPerSec(long callsPerSec) { this.callsPerSec = callsPerSec; } - public Long getResponseTimePerSec() { - return responseTimePerSec; + public long getAvgResponseTime() { + return avgResponseTime; } - public void setResponseTimePerSec(Long responseTimePerSec) { - this.responseTimePerSec = responseTimePerSec; + public void setAvgResponseTime(long avgResponseTime) { + this.avgResponseTime = avgResponseTime; } - public Float getApdex() { + public int getApdex() { return apdex; } - public void setApdex(Float apdex) { + public void setApdex(int apdex) { this.apdex = apdex; } - public Boolean getAlarm() { + public boolean isAlarm() { return isAlarm; } - public void setAlarm(Boolean alarm) { + public void setAlarm(boolean alarm) { isAlarm = alarm; } - public Integer getNumOfServer() { + public int getNumOfServer() { return numOfServer; } - public void setNumOfServer(Integer numOfServer) { + public void setNumOfServer(int numOfServer) { this.numOfServer = numOfServer; } - public Integer getNumOfServerAlarm() { + public int getNumOfServerAlarm() { return numOfServerAlarm; } - public void setNumOfServerAlarm(Integer numOfServerAlarm) { + public void setNumOfServerAlarm(int numOfServerAlarm) { this.numOfServerAlarm = numOfServerAlarm; } - public Integer getNumOfServiceAlarm() { + public int getNumOfServiceAlarm() { return numOfServiceAlarm; } - public void setNumOfServiceAlarm(Integer numOfServiceAlarm) { + public void setNumOfServiceAlarm(int numOfServiceAlarm) { this.numOfServiceAlarm = numOfServiceAlarm; } } diff --git a/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/ui/common/Call.java b/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/ui/common/Call.java index 70956ef73ee66d9d6ef2a5214765dc2a635bd313..fec6dd7ed35590a2c4157a33299b31232f89a550 100644 --- a/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/ui/common/Call.java +++ b/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/ui/common/Call.java @@ -28,10 +28,8 @@ public class Call { private String targetName; private boolean isAlert; private String callType; - private long calls; private long callsPerSec; - private long responseTimes; - private long responseTimePerSec; + private long avgResponseTime; public int getSource() { return source; @@ -81,14 +79,6 @@ public class Call { this.callType = callType; } - public long getCalls() { - return calls; - } - - public void setCalls(long calls) { - this.calls = calls; - } - public long getCallsPerSec() { return callsPerSec; } @@ -97,19 +87,11 @@ public class Call { this.callsPerSec = callsPerSec; } - public long getResponseTimes() { - return responseTimes; - } - - public void setResponseTimes(long responseTimes) { - this.responseTimes = responseTimes; - } - - public long getResponseTimePerSec() { - return responseTimePerSec; + public long getAvgResponseTime() { + return avgResponseTime; } - public void setResponseTimePerSec(long responseTimePerSec) { - this.responseTimePerSec = responseTimePerSec; + public void setAvgResponseTime(long avgResponseTime) { + this.avgResponseTime = avgResponseTime; } } diff --git a/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/ui/service/ServiceMetric.java b/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/ui/service/ServiceMetric.java index 7db67f8b4c90f08c8f36a31545c7af2ffd3134f6..9993d88bfd9defbb1ad7242f4d99a3e4743b43af 100644 --- a/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/ui/service/ServiceMetric.java +++ b/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/ui/service/ServiceMetric.java @@ -24,8 +24,9 @@ package org.apache.skywalking.apm.collector.storage.ui.service; public class ServiceMetric { private int id; private String name; + private long calls; private int avgResponseTime; - private int tps; + private int callsPerSec; public int getId() { return id; @@ -51,11 +52,19 @@ public class ServiceMetric { this.avgResponseTime = avgResponseTime; } - public int getTps() { - return tps; + public int getCallsPerSec() { + return callsPerSec; } - public void setTps(int tps) { - this.tps = tps; + public void setCallsPerSec(int callsPerSec) { + this.callsPerSec = callsPerSec; + } + + public long getCalls() { + return calls; + } + + public void setCalls(long calls) { + this.calls = calls; } } diff --git a/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/InstanceHeartBeatEsPersistenceDAO.java b/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/InstanceHeartBeatEsPersistenceDAO.java index 373070135f8492056784c1340cb753c12cdaf277..0e99486ca059345de9f00430d6632c02f52d7b45 100644 --- a/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/InstanceHeartBeatEsPersistenceDAO.java +++ b/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/InstanceHeartBeatEsPersistenceDAO.java @@ -52,10 +52,10 @@ public class InstanceHeartBeatEsPersistenceDAO extends EsDAO implements IInstanc instance.setId(id); instance.setInstanceId(((Number)source.get(InstanceTable.COLUMN_INSTANCE_ID)).intValue()); instance.setHeartBeatTime(((Number)source.get(InstanceTable.COLUMN_HEARTBEAT_TIME)).longValue()); - logger.debug("getId: {} is exists", id); + logger.debug("getApplicationId: {} is exists", id); return instance; } else { - logger.debug("getId: {} is not exists", id); + logger.debug("getApplicationId: {} is not exists", id); return null; } } diff --git a/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/SegmentDurationEsPersistenceDAO.java b/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/SegmentDurationEsPersistenceDAO.java index a1602b47b68df991e62e147d13241c763d491271..611666eaa67c76c5a74108193428945f2a4a0170 100644 --- a/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/SegmentDurationEsPersistenceDAO.java +++ b/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/SegmentDurationEsPersistenceDAO.java @@ -53,7 +53,7 @@ public class SegmentDurationEsPersistenceDAO extends EsDAO implements ISegmentDu } @Override public IndexRequestBuilder prepareBatchInsert(SegmentDuration data) { - logger.debug("segment cost prepareBatchInsert, getId: {}", data.getId()); + logger.debug("segment cost prepareBatchInsert, getApplicationId: {}", data.getId()); Map source = new HashMap<>(); source.put(SegmentDurationTable.COLUMN_SEGMENT_ID, data.getSegmentId()); source.put(SegmentDurationTable.COLUMN_APPLICATION_ID, data.getApplicationId()); diff --git a/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/cache/ServiceNameEsCacheDAO.java b/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/cache/ServiceNameEsCacheDAO.java index 1d157667b77bad054ec9916f0fad2119b88ac5bc..6aaa62cdc8578e27fba38fcc16fe6a8c584b374c 100644 --- a/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/cache/ServiceNameEsCacheDAO.java +++ b/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/cache/ServiceNameEsCacheDAO.java @@ -56,14 +56,15 @@ public class ServiceNameEsCacheDAO extends EsDAO implements IServiceNameCacheDAO return null; } - @Override public int getServiceId(int applicationId, String serviceName) { + @Override public int getServiceId(int applicationId, int srcSpanType, String serviceName) { SearchRequestBuilder searchRequestBuilder = getClient().prepareSearch(ServiceNameTable.TABLE); searchRequestBuilder.setTypes(ServiceNameTable.TABLE_TYPE); searchRequestBuilder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH); BoolQueryBuilder boolQuery = QueryBuilders.boolQuery(); - boolQuery.must().add(QueryBuilders.matchQuery(ServiceNameTable.COLUMN_APPLICATION_ID, applicationId)); - boolQuery.must().add(QueryBuilders.matchQuery(ServiceNameTable.COLUMN_SERVICE_NAME, serviceName)); + boolQuery.must().add(QueryBuilders.termQuery(ServiceNameTable.COLUMN_APPLICATION_ID, applicationId)); + boolQuery.must().add(QueryBuilders.termQuery(ServiceNameTable.COLUMN_SRC_SPAN_TYPE, srcSpanType)); + boolQuery.must().add(QueryBuilders.termQuery(ServiceNameTable.COLUMN_SERVICE_NAME_KEYWORD, serviceName)); searchRequestBuilder.setQuery(boolQuery); searchRequestBuilder.setSize(1); diff --git a/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/register/ApplicationRegisterEsDAO.java b/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/register/ApplicationRegisterEsDAO.java index 9c3b80dada17064088b39ab7f9c507215e7cfd29..62627ccb712cb72e024993857ce95df41cf7e8ed 100644 --- a/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/register/ApplicationRegisterEsDAO.java +++ b/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/register/ApplicationRegisterEsDAO.java @@ -50,7 +50,7 @@ public class ApplicationRegisterEsDAO extends EsDAO implements IApplicationRegis } @Override public void save(Application application) { - logger.debug("save application register info, application getId: {}, application code: {}", application.getId(), application.getApplicationCode()); + logger.debug("save application register info, application getApplicationId: {}, application code: {}", application.getId(), application.getApplicationCode()); ElasticSearchClient client = getClient(); Map source = new HashMap<>(); source.put(ApplicationTable.COLUMN_APPLICATION_CODE, application.getApplicationCode()); @@ -59,6 +59,6 @@ public class ApplicationRegisterEsDAO extends EsDAO implements IApplicationRegis source.put(ApplicationTable.COLUMN_IS_ADDRESS, application.getIsAddress()); IndexResponse response = client.prepareIndex(ApplicationTable.TABLE, application.getId()).setSource(source).setRefreshPolicy(WriteRequest.RefreshPolicy.IMMEDIATE).get(); - logger.debug("save application register info, application getId: {}, application code: {}, status: {}", application.getApplicationId(), application.getApplicationCode(), response.status().name()); + logger.debug("save application register info, application getApplicationId: {}, application code: {}, status: {}", application.getApplicationId(), application.getApplicationCode(), response.status().name()); } } diff --git a/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/register/InstanceRegisterEsDAO.java b/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/register/InstanceRegisterEsDAO.java index 460b3e3fe45e06d3efd82bbfb827957cfbbd132d..98bf29c082aa63fb48e36ff8cbc0bd3b8678c291 100644 --- a/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/register/InstanceRegisterEsDAO.java +++ b/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/register/InstanceRegisterEsDAO.java @@ -52,7 +52,7 @@ public class InstanceRegisterEsDAO extends EsDAO implements IInstanceRegisterDAO } @Override public void save(Instance instance) { - logger.debug("save instance register info, application getId: {}, agentUUID: {}", instance.getApplicationId(), instance.getAgentUUID()); + logger.debug("save instance register info, application getApplicationId: {}, agentUUID: {}", instance.getApplicationId(), instance.getAgentUUID()); ElasticSearchClient client = getClient(); Map source = new HashMap<>(); source.put(InstanceTable.COLUMN_INSTANCE_ID, instance.getInstanceId()); @@ -65,7 +65,7 @@ public class InstanceRegisterEsDAO extends EsDAO implements IInstanceRegisterDAO source.put(InstanceTable.COLUMN_IS_ADDRESS, instance.getIsAddress()); IndexResponse response = client.prepareIndex(InstanceTable.TABLE, instance.getId()).setSource(source).setRefreshPolicy(WriteRequest.RefreshPolicy.IMMEDIATE).get(); - logger.debug("save instance register info, application getId: {}, agentUUID: {}, status: {}", instance.getApplicationId(), instance.getAgentUUID(), response.status().name()); + logger.debug("save instance register info, application getApplicationId: {}, agentUUID: {}, status: {}", instance.getApplicationId(), instance.getAgentUUID(), response.status().name()); } @Override public void updateHeartbeatTime(int instanceId, long heartbeatTime) { diff --git a/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/register/NetworkAddressRegisterEsDAO.java b/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/register/NetworkAddressRegisterEsDAO.java index b979f1603f37b712b8f4e91084657720c014bcb2..a585b113421d06ec50cc4197d47713107fa5cd3e 100644 --- a/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/register/NetworkAddressRegisterEsDAO.java +++ b/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/register/NetworkAddressRegisterEsDAO.java @@ -50,7 +50,7 @@ public class NetworkAddressRegisterEsDAO extends EsDAO implements INetworkAddres } @Override public void save(NetworkAddress networkAddress) { - logger.debug("save network address register info, address getId: {}, network address code: {}", networkAddress.getId(), networkAddress.getNetworkAddress()); + logger.debug("save network address register info, address getApplicationId: {}, network address code: {}", networkAddress.getId(), networkAddress.getNetworkAddress()); ElasticSearchClient client = getClient(); Map source = new HashMap<>(); source.put(NetworkAddressTable.COLUMN_NETWORK_ADDRESS, networkAddress.getNetworkAddress()); @@ -59,7 +59,7 @@ public class NetworkAddressRegisterEsDAO extends EsDAO implements INetworkAddres source.put(NetworkAddressTable.COLUMN_SERVER_TYPE, networkAddress.getServerType()); IndexResponse response = client.prepareIndex(NetworkAddressTable.TABLE, networkAddress.getId()).setSource(source).setRefreshPolicy(WriteRequest.RefreshPolicy.IMMEDIATE).get(); - logger.debug("save network address register info, address getId: {}, network address code: {}, status: {}", networkAddress.getAddressId(), networkAddress.getNetworkAddress(), response.status().name()); + logger.debug("save network address register info, address getApplicationId: {}, network address code: {}, status: {}", networkAddress.getAddressId(), networkAddress.getNetworkAddress(), response.status().name()); } @Override public void update(String id, int spanLayer, int serverType) { diff --git a/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/register/ServiceNameRegisterEsDAO.java b/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/register/ServiceNameRegisterEsDAO.java index 6be55e0a3d72136058ada650e43d608d9e35a701..bb84be214ba2d53171fe1a24a76661e692cffdf6 100644 --- a/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/register/ServiceNameRegisterEsDAO.java +++ b/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/register/ServiceNameRegisterEsDAO.java @@ -50,14 +50,16 @@ public class ServiceNameRegisterEsDAO extends EsDAO implements IServiceNameRegis } @Override public void save(ServiceName serviceName) { - logger.debug("save service name register info, application getId: {}, service name: {}", serviceName.getId(), serviceName.getServiceName()); + logger.debug("save service name register info, application getApplicationId: {}, service name: {}", serviceName.getId(), serviceName.getServiceName()); ElasticSearchClient client = getClient(); Map source = new HashMap<>(); source.put(ServiceNameTable.COLUMN_SERVICE_ID, serviceName.getServiceId()); source.put(ServiceNameTable.COLUMN_APPLICATION_ID, serviceName.getApplicationId()); source.put(ServiceNameTable.COLUMN_SERVICE_NAME, serviceName.getServiceName()); + source.put(ServiceNameTable.COLUMN_SERVICE_NAME_KEYWORD, serviceName.getServiceName()); + source.put(ServiceNameTable.COLUMN_SRC_SPAN_TYPE, serviceName.getSrcSpanType()); IndexResponse response = client.prepareIndex(ServiceNameTable.TABLE, serviceName.getId()).setSource(source).setRefreshPolicy(WriteRequest.RefreshPolicy.IMMEDIATE).get(); - logger.debug("save service name register info, application getId: {}, service name: {}, status: {}", serviceName.getId(), serviceName.getServiceName(), response.status().name()); + logger.debug("save service name register info, application getApplicationId: {}, service name: {}, status: {}", serviceName.getId(), serviceName.getServiceName(), response.status().name()); } } diff --git a/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/ui/ApplicationMetricEsUIDAO.java b/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/ui/ApplicationMetricEsUIDAO.java index 0f67efc23970623ab8fc8def2804d9249f682657..931de1d48a32d5fd0e8bba87e2fc6e8fb2682c24 100644 --- a/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/ui/ApplicationMetricEsUIDAO.java +++ b/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/ui/ApplicationMetricEsUIDAO.java @@ -39,6 +39,7 @@ import org.elasticsearch.script.Script; import org.elasticsearch.search.aggregations.AggregationBuilders; import org.elasticsearch.search.aggregations.bucket.terms.Terms; import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder; +import org.elasticsearch.search.aggregations.metrics.sum.Sum; import org.elasticsearch.search.aggregations.pipeline.InternalSimpleValue; import org.elasticsearch.search.aggregations.pipeline.PipelineAggregatorBuilders; @@ -88,17 +89,72 @@ public class ApplicationMetricEsUIDAO extends EsDAO implements IApplicationMetri SearchResponse searchResponse = searchRequestBuilder.execute().actionGet(); List applicationTPSs = new LinkedList<>(); - Terms serviceIdTerms = searchResponse.getAggregations().get(ApplicationMetricTable.COLUMN_APPLICATION_ID); - serviceIdTerms.getBuckets().forEach(serviceIdTerm -> { - int applicationId = serviceIdTerm.getKeyAsNumber().intValue(); + Terms applicationIdTerms = searchResponse.getAggregations().get(ApplicationMetricTable.COLUMN_APPLICATION_ID); + applicationIdTerms.getBuckets().forEach(applicationIdTerm -> { + int applicationId = applicationIdTerm.getKeyAsNumber().intValue(); - ApplicationTPS serviceMetric = new ApplicationTPS(); - InternalSimpleValue simpleValue = serviceIdTerm.getAggregations().get(AVG_TPS); + ApplicationTPS applicationTPS = new ApplicationTPS(); + InternalSimpleValue simpleValue = applicationIdTerm.getAggregations().get(AVG_TPS); - serviceMetric.setApplicationId(applicationId); - serviceMetric.setTps((int)simpleValue.getValue()); - applicationTPSs.add(serviceMetric); + applicationTPS.setApplicationId(applicationId); + applicationTPS.setTps((int)simpleValue.getValue()); + applicationTPSs.add(applicationTPS); }); return applicationTPSs; } + + @Override + public List getApplications(Step step, long startTimeBucket, long endTimeBucket, + MetricSource metricSource) { + String tableName = TimePyramidTableNameBuilder.build(step, ApplicationMetricTable.TABLE); + + SearchRequestBuilder searchRequestBuilder = getClient().prepareSearch(tableName); + searchRequestBuilder.setTypes(ApplicationMetricTable.TABLE_TYPE); + searchRequestBuilder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH); + + BoolQueryBuilder boolQuery = QueryBuilders.boolQuery(); + boolQuery.must().add(QueryBuilders.rangeQuery(ApplicationMetricTable.COLUMN_TIME_BUCKET).gte(startTimeBucket).lte(endTimeBucket)); + boolQuery.must().add(QueryBuilders.termQuery(ApplicationMetricTable.COLUMN_SOURCE_VALUE, metricSource.getValue())); + + searchRequestBuilder.setQuery(boolQuery); + searchRequestBuilder.setSize(0); + + TermsAggregationBuilder aggregationBuilder = AggregationBuilders.terms(ApplicationMetricTable.COLUMN_APPLICATION_ID).field(ApplicationMetricTable.COLUMN_APPLICATION_ID).size(100); + aggregationBuilder.subAggregation(AggregationBuilders.sum(ApplicationMetricTable.COLUMN_TRANSACTION_CALLS).field(ApplicationMetricTable.COLUMN_TRANSACTION_CALLS)); + aggregationBuilder.subAggregation(AggregationBuilders.sum(ApplicationMetricTable.COLUMN_TRANSACTION_ERROR_CALLS).field(ApplicationMetricTable.COLUMN_TRANSACTION_ERROR_CALLS)); + aggregationBuilder.subAggregation(AggregationBuilders.sum(ApplicationMetricTable.COLUMN_TRANSACTION_DURATION_SUM).field(ApplicationMetricTable.COLUMN_TRANSACTION_DURATION_SUM)); + aggregationBuilder.subAggregation(AggregationBuilders.sum(ApplicationMetricTable.COLUMN_TRANSACTION_ERROR_DURATION_SUM).field(ApplicationMetricTable.COLUMN_TRANSACTION_ERROR_DURATION_SUM)); + aggregationBuilder.subAggregation(AggregationBuilders.sum(ApplicationMetricTable.COLUMN_SATISFIED_COUNT).field(ApplicationMetricTable.COLUMN_SATISFIED_COUNT)); + aggregationBuilder.subAggregation(AggregationBuilders.sum(ApplicationMetricTable.COLUMN_TOLERATING_COUNT).field(ApplicationMetricTable.COLUMN_TOLERATING_COUNT)); + aggregationBuilder.subAggregation(AggregationBuilders.sum(ApplicationMetricTable.COLUMN_FRUSTRATED_COUNT).field(ApplicationMetricTable.COLUMN_FRUSTRATED_COUNT)); + + searchRequestBuilder.addAggregation(aggregationBuilder); + SearchResponse searchResponse = searchRequestBuilder.execute().actionGet(); + + List applicationMetrics = new LinkedList<>(); + Terms applicationIdTerms = searchResponse.getAggregations().get(ApplicationMetricTable.COLUMN_APPLICATION_ID); + applicationIdTerms.getBuckets().forEach(applicationIdTerm -> { + int applicationId = applicationIdTerm.getKeyAsNumber().intValue(); + + Sum calls = applicationIdTerm.getAggregations().get(ApplicationMetricTable.COLUMN_TRANSACTION_CALLS); + Sum errorCalls = applicationIdTerm.getAggregations().get(ApplicationMetricTable.COLUMN_TRANSACTION_ERROR_CALLS); + Sum durations = applicationIdTerm.getAggregations().get(ApplicationMetricTable.COLUMN_TRANSACTION_DURATION_SUM); + Sum errorDurations = applicationIdTerm.getAggregations().get(ApplicationMetricTable.COLUMN_TRANSACTION_ERROR_DURATION_SUM); + Sum satisfiedCount = applicationIdTerm.getAggregations().get(ApplicationMetricTable.COLUMN_SATISFIED_COUNT); + Sum toleratingCount = applicationIdTerm.getAggregations().get(ApplicationMetricTable.COLUMN_TOLERATING_COUNT); + Sum frustratedCount = applicationIdTerm.getAggregations().get(ApplicationMetricTable.COLUMN_FRUSTRATED_COUNT); + + ApplicationMetric applicationMetric = new ApplicationMetric(); + applicationMetric.setId(applicationId); + applicationMetric.setCalls((long)calls.getValue()); + applicationMetric.setErrorCalls((long)errorCalls.getValue()); + applicationMetric.setDurations((long)durations.getValue()); + applicationMetric.setErrorDurations((long)errorDurations.getValue()); + applicationMetric.setSatisfiedCount((long)satisfiedCount.getValue()); + applicationMetric.setToleratingCount((long)toleratingCount.getValue()); + applicationMetric.setToleratingCount((long)frustratedCount.getValue()); + applicationMetrics.add(applicationMetric); + }); + return applicationMetrics; + } } diff --git a/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/ui/ApplicationReferenceMetricEsUIDAO.java b/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/ui/ApplicationReferenceMetricEsUIDAO.java index 8ea887e85325e2af2ae309ddc73f7d46d870a485..efcbf137f7e1885af85f8d8a73ff31928afdba31 100644 --- a/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/ui/ApplicationReferenceMetricEsUIDAO.java +++ b/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/ui/ApplicationReferenceMetricEsUIDAO.java @@ -25,7 +25,6 @@ import org.apache.skywalking.apm.collector.storage.dao.ui.IApplicationReferenceM import org.apache.skywalking.apm.collector.storage.es.base.dao.EsDAO; import org.apache.skywalking.apm.collector.storage.table.MetricSource; import org.apache.skywalking.apm.collector.storage.table.application.ApplicationReferenceMetricTable; -import org.apache.skywalking.apm.collector.storage.ui.common.Call; import org.apache.skywalking.apm.collector.storage.ui.common.Step; import org.apache.skywalking.apm.collector.storage.utils.TimePyramidTableNameBuilder; import org.elasticsearch.action.search.SearchRequestBuilder; @@ -47,7 +46,8 @@ public class ApplicationReferenceMetricEsUIDAO extends EsDAO implements IApplica super(client); } - @Override public List getFrontApplications(Step step, int applicationId, long startTime, long endTime, + @Override public List getFrontApplications(Step step, int applicationId, long startTime, + long endTime, MetricSource metricSource) { String tableName = TimePyramidTableNameBuilder.build(step, ApplicationReferenceMetricTable.TABLE); @@ -63,32 +63,12 @@ public class ApplicationReferenceMetricEsUIDAO extends EsDAO implements IApplica searchRequestBuilder.setQuery(boolQuery); searchRequestBuilder.setSize(0); - TermsAggregationBuilder aggregationBuilder = AggregationBuilders.terms(ApplicationReferenceMetricTable.COLUMN_FRONT_APPLICATION_ID).field(ApplicationReferenceMetricTable.COLUMN_FRONT_APPLICATION_ID).size(100); - aggregationBuilder.subAggregation(AggregationBuilders.sum(ApplicationReferenceMetricTable.COLUMN_TRANSACTION_CALLS).field(ApplicationReferenceMetricTable.COLUMN_TRANSACTION_CALLS)); - aggregationBuilder.subAggregation(AggregationBuilders.sum(ApplicationReferenceMetricTable.COLUMN_TRANSACTION_DURATION_SUM).field(ApplicationReferenceMetricTable.COLUMN_TRANSACTION_DURATION_SUM)); - - searchRequestBuilder.addAggregation(aggregationBuilder); - SearchResponse searchResponse = searchRequestBuilder.execute().actionGet(); - - List nodes = new LinkedList<>(); - Terms frontApplicationIdTerms = searchResponse.getAggregations().get(ApplicationReferenceMetricTable.COLUMN_FRONT_APPLICATION_ID); - for (Terms.Bucket frontApplicationIdBucket : frontApplicationIdTerms.getBuckets()) { - int frontApplicationId = frontApplicationIdBucket.getKeyAsNumber().intValue(); - Sum calls = frontApplicationIdBucket.getAggregations().get(ApplicationReferenceMetricTable.COLUMN_TRANSACTION_CALLS); - Sum responseTimes = frontApplicationIdBucket.getAggregations().get(ApplicationReferenceMetricTable.COLUMN_TRANSACTION_DURATION_SUM); - - Call call = new Call(); - call.setSource(frontApplicationId); - call.setTarget(applicationId); - call.setCalls((int)calls.getValue()); - call.setResponseTimes((int)responseTimes.getValue()); - nodes.add(call); - } - - return nodes; + return buildMetrics(searchRequestBuilder); } - @Override public List getBehindApplications(Step step, int applicationId, long startTime, long endTime, + @Override + public List getBehindApplications(Step step, int applicationId, long startTime, + long endTime, MetricSource metricSource) { String tableName = TimePyramidTableNameBuilder.build(step, ApplicationReferenceMetricTable.TABLE); @@ -104,32 +84,11 @@ public class ApplicationReferenceMetricEsUIDAO extends EsDAO implements IApplica searchRequestBuilder.setQuery(boolQuery); searchRequestBuilder.setSize(0); - TermsAggregationBuilder aggregationBuilder = AggregationBuilders.terms(ApplicationReferenceMetricTable.COLUMN_BEHIND_APPLICATION_ID).field(ApplicationReferenceMetricTable.COLUMN_BEHIND_APPLICATION_ID).size(100); - aggregationBuilder.subAggregation(AggregationBuilders.sum(ApplicationReferenceMetricTable.COLUMN_TRANSACTION_CALLS).field(ApplicationReferenceMetricTable.COLUMN_TRANSACTION_CALLS)); - aggregationBuilder.subAggregation(AggregationBuilders.sum(ApplicationReferenceMetricTable.COLUMN_TRANSACTION_DURATION_SUM).field(ApplicationReferenceMetricTable.COLUMN_TRANSACTION_DURATION_SUM)); - - searchRequestBuilder.addAggregation(aggregationBuilder); - SearchResponse searchResponse = searchRequestBuilder.execute().actionGet(); - - List nodes = new LinkedList<>(); - Terms behindApplicationIdTerms = searchResponse.getAggregations().get(ApplicationReferenceMetricTable.COLUMN_BEHIND_APPLICATION_ID); - for (Terms.Bucket behindApplicationIdBucket : behindApplicationIdTerms.getBuckets()) { - int behindApplicationId = behindApplicationIdBucket.getKeyAsNumber().intValue(); - Sum calls = behindApplicationIdBucket.getAggregations().get(ApplicationReferenceMetricTable.COLUMN_TRANSACTION_CALLS); - Sum responseTimes = behindApplicationIdBucket.getAggregations().get(ApplicationReferenceMetricTable.COLUMN_TRANSACTION_DURATION_SUM); - - Call call = new Call(); - call.setTarget(behindApplicationId); - call.setSource(applicationId); - call.setCalls((int)calls.getValue()); - call.setResponseTimes((int)responseTimes.getValue()); - nodes.add(call); - } - - return nodes; + return buildMetrics(searchRequestBuilder); } - @Override public List getApplications(Step step, long startTime, long endTime, MetricSource metricSource) { + @Override public List getReferences(Step step, long startTime, long endTime, + MetricSource metricSource) { String tableName = TimePyramidTableNameBuilder.build(step, ApplicationReferenceMetricTable.TABLE); SearchRequestBuilder searchRequestBuilder = getClient().prepareSearch(tableName); @@ -143,35 +102,46 @@ public class ApplicationReferenceMetricEsUIDAO extends EsDAO implements IApplica searchRequestBuilder.setQuery(boolQuery); searchRequestBuilder.setSize(0); - TermsAggregationBuilder aggregationBuilder = AggregationBuilders.terms(ApplicationReferenceMetricTable.COLUMN_FRONT_APPLICATION_ID).field(ApplicationReferenceMetricTable.COLUMN_FRONT_APPLICATION_ID).size(100) - .subAggregation(AggregationBuilders.terms(ApplicationReferenceMetricTable.COLUMN_BEHIND_APPLICATION_ID).field(ApplicationReferenceMetricTable.COLUMN_BEHIND_APPLICATION_ID)); - aggregationBuilder.subAggregation(AggregationBuilders.sum(ApplicationReferenceMetricTable.COLUMN_TRANSACTION_CALLS).field(ApplicationReferenceMetricTable.COLUMN_TRANSACTION_CALLS)); - aggregationBuilder.subAggregation(AggregationBuilders.sum(ApplicationReferenceMetricTable.COLUMN_TRANSACTION_DURATION_SUM).field(ApplicationReferenceMetricTable.COLUMN_TRANSACTION_DURATION_SUM)); - - searchRequestBuilder.addAggregation(aggregationBuilder); - SearchResponse searchResponse = searchRequestBuilder.execute().actionGet(); - - List nodes = new LinkedList<>(); - Terms frontApplicationIdTerms = searchResponse.getAggregations().get(ApplicationReferenceMetricTable.COLUMN_FRONT_APPLICATION_ID); - for (Terms.Bucket frontApplicationIdBucket : frontApplicationIdTerms.getBuckets()) { - int frontApplicationId = frontApplicationIdBucket.getKeyAsNumber().intValue(); + return buildMetrics(searchRequestBuilder); + } - Terms behindApplicationIdTerms = frontApplicationIdBucket.getAggregations().get(ApplicationReferenceMetricTable.COLUMN_BEHIND_APPLICATION_ID); - for (Terms.Bucket behindApplicationIdBucket : behindApplicationIdTerms.getBuckets()) { - int behindApplicationId = behindApplicationIdBucket.getKeyAsNumber().intValue(); + private List buildMetrics(SearchRequestBuilder searchRequestBuilder) { + TermsAggregationBuilder frontAggregationBuilder = AggregationBuilders.terms(ApplicationReferenceMetricTable.COLUMN_FRONT_APPLICATION_ID).field(ApplicationReferenceMetricTable.COLUMN_FRONT_APPLICATION_ID).size(100); + TermsAggregationBuilder behindAggregationBuilder = AggregationBuilders.terms(ApplicationReferenceMetricTable.COLUMN_BEHIND_APPLICATION_ID).field(ApplicationReferenceMetricTable.COLUMN_BEHIND_APPLICATION_ID).size(100); + frontAggregationBuilder.subAggregation(behindAggregationBuilder); - Sum calls = behindApplicationIdBucket.getAggregations().get(ApplicationReferenceMetricTable.COLUMN_TRANSACTION_CALLS); - Sum responseTimes = behindApplicationIdBucket.getAggregations().get(ApplicationReferenceMetricTable.COLUMN_TRANSACTION_DURATION_SUM); + behindAggregationBuilder.subAggregation(AggregationBuilders.sum(ApplicationReferenceMetricTable.COLUMN_TRANSACTION_CALLS).field(ApplicationReferenceMetricTable.COLUMN_TRANSACTION_CALLS)); + behindAggregationBuilder.subAggregation(AggregationBuilders.sum(ApplicationReferenceMetricTable.COLUMN_TRANSACTION_ERROR_CALLS).field(ApplicationReferenceMetricTable.COLUMN_TRANSACTION_ERROR_CALLS)); + behindAggregationBuilder.subAggregation(AggregationBuilders.sum(ApplicationReferenceMetricTable.COLUMN_TRANSACTION_DURATION_SUM).field(ApplicationReferenceMetricTable.COLUMN_TRANSACTION_DURATION_SUM)); + behindAggregationBuilder.subAggregation(AggregationBuilders.sum(ApplicationReferenceMetricTable.COLUMN_TRANSACTION_ERROR_DURATION_SUM).field(ApplicationReferenceMetricTable.COLUMN_TRANSACTION_ERROR_DURATION_SUM)); - Call call = new Call(); - call.setResponseTimes((int)responseTimes.getValue()); - call.setSource(frontApplicationId); - call.setTarget(behindApplicationId); - call.setCalls((int)calls.getValue()); - nodes.add(call); + searchRequestBuilder.addAggregation(frontAggregationBuilder); + SearchResponse searchResponse = searchRequestBuilder.execute().actionGet(); + List referenceMetrics = new LinkedList<>(); + Terms sourceApplicationIdTerms = searchResponse.getAggregations().get(ApplicationReferenceMetricTable.COLUMN_FRONT_APPLICATION_ID); + for (Terms.Bucket sourceApplicationIdBucket : sourceApplicationIdTerms.getBuckets()) { + int sourceApplicationId = sourceApplicationIdBucket.getKeyAsNumber().intValue(); + + Terms targetApplicationIdTerms = sourceApplicationIdBucket.getAggregations().get(ApplicationReferenceMetricTable.COLUMN_BEHIND_APPLICATION_ID); + for (Terms.Bucket targetApplicationIdBucket : targetApplicationIdTerms.getBuckets()) { + int targetApplicationId = targetApplicationIdBucket.getKeyAsNumber().intValue(); + + Sum calls = targetApplicationIdBucket.getAggregations().get(ApplicationReferenceMetricTable.COLUMN_TRANSACTION_CALLS); + Sum errorCalls = targetApplicationIdBucket.getAggregations().get(ApplicationReferenceMetricTable.COLUMN_TRANSACTION_ERROR_CALLS); + Sum durations = targetApplicationIdBucket.getAggregations().get(ApplicationReferenceMetricTable.COLUMN_TRANSACTION_DURATION_SUM); + Sum errorDurations = targetApplicationIdBucket.getAggregations().get(ApplicationReferenceMetricTable.COLUMN_TRANSACTION_ERROR_DURATION_SUM); + + ApplicationReferenceMetric referenceMetric = new ApplicationReferenceMetric(); + referenceMetric.setSource(sourceApplicationId); + referenceMetric.setTarget(targetApplicationId); + referenceMetric.setCalls((long)calls.getValue()); + referenceMetric.setErrorCalls((long)errorCalls.getValue()); + referenceMetric.setDurations((long)durations.getValue()); + referenceMetric.setErrorDurations((long)errorDurations.getValue()); + referenceMetrics.add(referenceMetric); } } - return nodes; + return referenceMetrics; } } 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 e60da8b006116a42bc8d75e04ea715338663e069..918945f8c36924b02ed3b998e0b45b002260db68 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 @@ -171,15 +171,18 @@ public class InstanceEsUIDAO extends EsDAO implements IInstanceUIDAO { return buildAppServerInfo(searchHits); } - @Override public List getAllServer(int applicationId, long start, long end) { - logger.debug("get instances info, applicationId: {}, start: {}, end: {}", applicationId, start, end); + @Override + public List getAllServer(int applicationId, long startSecondTimeBucket, long endSecondTimeBucket) { + logger.debug("get instances info, applicationId: {}, start: {}, end: {}", applicationId, startSecondTimeBucket, endSecondTimeBucket); SearchRequestBuilder searchRequestBuilder = getClient().prepareSearch(InstanceTable.TABLE); searchRequestBuilder.setTypes(InstanceTable.TABLE_TYPE); searchRequestBuilder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH); searchRequestBuilder.setSize(1000); BoolQueryBuilder boolQuery = QueryBuilders.boolQuery(); - boolQuery.must().add(QueryBuilders.rangeQuery(InstanceTable.COLUMN_HEARTBEAT_TIME).gte(start).lte(end)); + boolQuery.must().add(QueryBuilders.rangeQuery(InstanceTable.COLUMN_REGISTER_TIME).gte(startSecondTimeBucket).lte(endSecondTimeBucket)); + boolQuery.must().add(QueryBuilders.rangeQuery(InstanceTable.COLUMN_HEARTBEAT_TIME).gte(startSecondTimeBucket)); + boolQuery.must().add(QueryBuilders.termQuery(InstanceTable.COLUMN_APPLICATION_ID, applicationId)); boolQuery.must().add(QueryBuilders.termQuery(InstanceTable.COLUMN_IS_ADDRESS, BooleanUtils.FALSE)); searchRequestBuilder.setQuery(boolQuery); @@ -190,6 +193,46 @@ public class InstanceEsUIDAO extends EsDAO implements IInstanceUIDAO { return buildAppServerInfo(searchHits); } + @Override public long getEarliestRegisterTime(int applicationId) { + SearchRequestBuilder searchRequestBuilder = getClient().prepareSearch(InstanceTable.TABLE); + searchRequestBuilder.setTypes(InstanceTable.TABLE_TYPE); + searchRequestBuilder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH); + searchRequestBuilder.setSize(1); + + searchRequestBuilder.setQuery(QueryBuilders.termQuery(InstanceTable.COLUMN_APPLICATION_ID, applicationId)); + searchRequestBuilder.addSort(SortBuilders.fieldSort(InstanceTable.COLUMN_REGISTER_TIME).sortMode(SortMode.MIN)); + + SearchResponse searchResponse = searchRequestBuilder.execute().actionGet(); + + SearchHit[] searchHits = searchResponse.getHits().getHits(); + + if (searchHits.length > 0) { + return ((Number)searchHits[0].getSource().get(InstanceTable.COLUMN_REGISTER_TIME)).longValue(); + } + + return Long.MIN_VALUE; + } + + @Override public long getLatestHeartBeatTime(int applicationId) { + SearchRequestBuilder searchRequestBuilder = getClient().prepareSearch(InstanceTable.TABLE); + searchRequestBuilder.setTypes(InstanceTable.TABLE_TYPE); + searchRequestBuilder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH); + searchRequestBuilder.setSize(1); + + searchRequestBuilder.setQuery(QueryBuilders.termQuery(InstanceTable.COLUMN_APPLICATION_ID, applicationId)); + searchRequestBuilder.addSort(SortBuilders.fieldSort(InstanceTable.COLUMN_HEARTBEAT_TIME).sortMode(SortMode.MAX)); + + SearchResponse searchResponse = searchRequestBuilder.execute().actionGet(); + + SearchHit[] searchHits = searchResponse.getHits().getHits(); + + if (searchHits.length > 0) { + return ((Number)searchHits[0].getSource().get(InstanceTable.COLUMN_HEARTBEAT_TIME)).longValue(); + } + + return Long.MAX_VALUE; + } + private List buildAppServerInfo(SearchHit[] searchHits) { List appServerInfos = new LinkedList<>(); for (SearchHit searchHit : searchHits) { diff --git a/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/ui/ServiceMetricEsUIDAO.java b/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/ui/ServiceMetricEsUIDAO.java index 96ad55993adc4e491c6d7d7d73fda3d555dda7be..111355240466a8f16409e4f090212cccf8f630ac 100644 --- a/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/ui/ServiceMetricEsUIDAO.java +++ b/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/ui/ServiceMetricEsUIDAO.java @@ -175,7 +175,9 @@ public class ServiceMetricEsUIDAO extends EsDAO implements IServiceMetricUIDAO { return nodes; } - @Override public List getSlowService(int applicationId, Step step, long start, long end, Integer top, + @Override + public List getSlowService(int applicationId, Step step, long startTimeBucket, long endTimeBucket, + Integer topN, MetricSource metricSource) { String tableName = TimePyramidTableNameBuilder.build(step, ServiceMetricTable.TABLE); @@ -184,7 +186,7 @@ public class ServiceMetricEsUIDAO extends EsDAO implements IServiceMetricUIDAO { searchRequestBuilder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH); BoolQueryBuilder boolQuery = QueryBuilders.boolQuery(); - boolQuery.must().add(QueryBuilders.rangeQuery(ServiceMetricTable.COLUMN_TIME_BUCKET).gte(start).lte(end)); + boolQuery.must().add(QueryBuilders.rangeQuery(ServiceMetricTable.COLUMN_TIME_BUCKET).gte(startTimeBucket).lte(endTimeBucket)); if (applicationId != 0) { boolQuery.must().add(QueryBuilders.termQuery(ServiceMetricTable.COLUMN_APPLICATION_ID, applicationId)); } @@ -193,7 +195,7 @@ public class ServiceMetricEsUIDAO extends EsDAO implements IServiceMetricUIDAO { searchRequestBuilder.setQuery(boolQuery); searchRequestBuilder.setSize(0); - TermsAggregationBuilder aggregationBuilder = AggregationBuilders.terms(ServiceMetricTable.COLUMN_SERVICE_ID).field(ServiceMetricTable.COLUMN_SERVICE_ID).size(top); + TermsAggregationBuilder aggregationBuilder = AggregationBuilders.terms(ServiceMetricTable.COLUMN_SERVICE_ID).field(ServiceMetricTable.COLUMN_SERVICE_ID).size(topN); aggregationBuilder.subAggregation(AggregationBuilders.sum(ServiceMetricTable.COLUMN_TRANSACTION_CALLS).field(ServiceMetricTable.COLUMN_TRANSACTION_CALLS)); aggregationBuilder.subAggregation(AggregationBuilders.sum(ServiceMetricTable.COLUMN_TRANSACTION_ERROR_CALLS).field(ServiceMetricTable.COLUMN_TRANSACTION_ERROR_CALLS)); aggregationBuilder.subAggregation(AggregationBuilders.sum(ServiceMetricTable.COLUMN_TRANSACTION_DURATION_SUM).field(ServiceMetricTable.COLUMN_TRANSACTION_DURATION_SUM)); @@ -221,7 +223,9 @@ public class ServiceMetricEsUIDAO extends EsDAO implements IServiceMetricUIDAO { ServiceMetric serviceMetric = new ServiceMetric(); InternalSimpleValue simpleValue = serviceIdTerm.getAggregations().get(AVG_DURATION); + Sum calls = serviceIdTerm.getAggregations().get(ServiceMetricTable.COLUMN_TRANSACTION_CALLS); + serviceMetric.setCalls((long)calls.getValue()); serviceMetric.setId(serviceId); serviceMetric.setAvgResponseTime((int)simpleValue.getValue()); serviceMetrics.add(serviceMetric); diff --git a/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/ui/ServiceNameServiceEsUIDAO.java b/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/ui/ServiceNameServiceEsUIDAO.java index f050e0a1635f98d9db59206cd4fcad9dc02f9ea0..3775bf28166a4b8790a42839d3ecefa139f2f498 100644 --- a/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/ui/ServiceNameServiceEsUIDAO.java +++ b/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/ui/ServiceNameServiceEsUIDAO.java @@ -25,6 +25,7 @@ import org.apache.skywalking.apm.collector.storage.dao.ui.IServiceNameServiceUID import org.apache.skywalking.apm.collector.storage.es.base.dao.EsDAO; import org.apache.skywalking.apm.collector.storage.table.register.ServiceNameTable; import org.apache.skywalking.apm.collector.storage.ui.service.ServiceInfo; +import org.apache.skywalking.apm.network.proto.SpanType; import org.elasticsearch.action.search.SearchRequestBuilder; import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.action.search.SearchType; @@ -44,6 +45,7 @@ public class ServiceNameServiceEsUIDAO extends EsDAO implements IServiceNameServ SearchRequestBuilder searchRequestBuilder = getClient().prepareSearch(ServiceNameTable.TABLE); searchRequestBuilder.setTypes(ServiceNameTable.TABLE_TYPE); searchRequestBuilder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH); + searchRequestBuilder.setQuery(QueryBuilders.termQuery(ServiceNameTable.COLUMN_SRC_SPAN_TYPE, SpanType.Entry_VALUE)); searchRequestBuilder.setSize(0); SearchResponse searchResponse = searchRequestBuilder.execute().actionGet(); diff --git a/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/ui/ServiceReferenceEsMetricUIDAO.java b/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/ui/ServiceReferenceEsMetricUIDAO.java index 87995228274bf4cb40a8993481e7ba7cc97d0a17..73da9543281b68da9cf2571437c96dd3719e5bdd 100644 --- a/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/ui/ServiceReferenceEsMetricUIDAO.java +++ b/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/ui/ServiceReferenceEsMetricUIDAO.java @@ -177,8 +177,8 @@ public class ServiceReferenceEsMetricUIDAO extends EsDAO implements IServiceRefe Call call = new Call(); call.setSource(frontServiceId); call.setTarget(behindServiceId); - call.setCalls((int)callsSum.getValue()); - call.setResponseTimes((int)responseTimes.getValue()); +// call.setCalls((int)callsSum.getValue()); +// call.setResponseTimes((int)responseTimes.getValue()); calls.add(call); }); } @@ -192,8 +192,8 @@ public class ServiceReferenceEsMetricUIDAO extends EsDAO implements IServiceRefe Call call = new Call(); call.setTarget(behindServiceId); call.setSource(frontServiceId); - call.setCalls((int)callsSum.getValue()); - call.setResponseTimes((int)responseTimes.getValue()); +// call.setCalls((int)callsSum.getValue()); +// call.setResponseTimes((int)responseTimes.getValue()); calls.add(call); }); } diff --git a/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/define/register/ServiceNameEsTableDefine.java b/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/define/register/ServiceNameEsTableDefine.java index 2a5dc39c0bfe8abee80ad3a5675fe1dddd46afb0..7a29d63e374300c7bd7f22bf2536031dfa9189ee 100644 --- a/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/define/register/ServiceNameEsTableDefine.java +++ b/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/define/register/ServiceNameEsTableDefine.java @@ -38,6 +38,8 @@ public class ServiceNameEsTableDefine extends ElasticSearchTableDefine { @Override public void initialize() { addColumn(new ElasticSearchColumnDefine(ServiceNameTable.COLUMN_APPLICATION_ID, ElasticSearchColumnDefine.Type.Integer.name())); addColumn(new ElasticSearchColumnDefine(ServiceNameTable.COLUMN_SERVICE_NAME, ElasticSearchColumnDefine.Type.Text.name())); + addColumn(new ElasticSearchColumnDefine(ServiceNameTable.COLUMN_SERVICE_NAME_KEYWORD, ElasticSearchColumnDefine.Type.Keyword.name())); addColumn(new ElasticSearchColumnDefine(ServiceNameTable.COLUMN_SERVICE_ID, ElasticSearchColumnDefine.Type.Integer.name())); + addColumn(new ElasticSearchColumnDefine(ServiceNameTable.COLUMN_SRC_SPAN_TYPE, ElasticSearchColumnDefine.Type.Integer.name())); } } diff --git a/apm-collector/apm-collector-storage/collector-storage-h2-provider/src/main/java/org/apache/skywalking/apm/collector/storage/h2/dao/SegmentDurationH2PersistenceDAO.java b/apm-collector/apm-collector-storage/collector-storage-h2-provider/src/main/java/org/apache/skywalking/apm/collector/storage/h2/dao/SegmentDurationH2PersistenceDAO.java index 30f70f50c55108bfd91c1a15fa38ac96d058135d..928ba87f47a70119121b073854b706436b44e5e0 100644 --- a/apm-collector/apm-collector-storage/collector-storage-h2-provider/src/main/java/org/apache/skywalking/apm/collector/storage/h2/dao/SegmentDurationH2PersistenceDAO.java +++ b/apm-collector/apm-collector-storage/collector-storage-h2-provider/src/main/java/org/apache/skywalking/apm/collector/storage/h2/dao/SegmentDurationH2PersistenceDAO.java @@ -47,7 +47,7 @@ public class SegmentDurationH2PersistenceDAO extends H2DAO implements ISegmentDu } @Override public H2SqlEntity prepareBatchInsert(SegmentDuration data) { - logger.debug("segment cost prepareBatchInsert, getId: {}", data.getId()); + logger.debug("segment cost prepareBatchInsert, getApplicationId: {}", data.getId()); H2SqlEntity entity = new H2SqlEntity(); Map source = new HashMap<>(); source.put(SegmentDurationTable.COLUMN_ID, data.getId()); diff --git a/apm-collector/apm-collector-storage/collector-storage-h2-provider/src/main/java/org/apache/skywalking/apm/collector/storage/h2/dao/cache/ServiceNameH2CacheDAO.java b/apm-collector/apm-collector-storage/collector-storage-h2-provider/src/main/java/org/apache/skywalking/apm/collector/storage/h2/dao/cache/ServiceNameH2CacheDAO.java index 88c0853828119e9ebd53fe12c5207c6d0bf50f97..f406f77d35afafc169456b1fe5dd5655b7bbb1d9 100644 --- a/apm-collector/apm-collector-storage/collector-storage-h2-provider/src/main/java/org/apache/skywalking/apm/collector/storage/h2/dao/cache/ServiceNameH2CacheDAO.java +++ b/apm-collector/apm-collector-storage/collector-storage-h2-provider/src/main/java/org/apache/skywalking/apm/collector/storage/h2/dao/cache/ServiceNameH2CacheDAO.java @@ -38,7 +38,7 @@ public class ServiceNameH2CacheDAO extends H2DAO implements IServiceNameCacheDAO private final Logger logger = LoggerFactory.getLogger(ServiceNameH2CacheDAO.class); private static final String GET_SERVICE_NAME_SQL = "select {0},{1} from {2} where {3} = ?"; - private static final String GET_SERVICE_ID_SQL = "select {0} from {1} where {2} = ? and {3} = ? limit 1"; + private static final String GET_SERVICE_ID_SQL = "select {0} from {1} where {2} = ? and {3} = ? and {4} = ? limit 1"; public ServiceNameH2CacheDAO(H2Client client) { super(client); @@ -63,11 +63,12 @@ public class ServiceNameH2CacheDAO extends H2DAO implements IServiceNameCacheDAO return null; } - @Override public int getServiceId(int applicationId, String serviceName) { + @Override public int getServiceId(int applicationId, int srcSpanType, String serviceName) { H2Client client = getClient(); - String sql = SqlBuilder.buildSql(GET_SERVICE_ID_SQL, ServiceNameTable.COLUMN_SERVICE_ID, - ServiceNameTable.TABLE, ServiceNameTable.COLUMN_APPLICATION_ID, ServiceNameTable.COLUMN_SERVICE_NAME); - Object[] params = new Object[] {applicationId, serviceName}; + String sql = SqlBuilder.buildSql(GET_SERVICE_ID_SQL, ServiceNameTable.COLUMN_SERVICE_ID, ServiceNameTable.TABLE, + ServiceNameTable.COLUMN_APPLICATION_ID, ServiceNameTable.COLUMN_SRC_SPAN_TYPE, ServiceNameTable.COLUMN_SERVICE_NAME); + + Object[] params = new Object[] {applicationId, srcSpanType, serviceName}; try (ResultSet rs = client.executeQuery(sql, params)) { if (rs.next()) { return rs.getInt(ServiceNameTable.COLUMN_SERVICE_ID); diff --git a/apm-collector/apm-collector-storage/collector-storage-h2-provider/src/main/java/org/apache/skywalking/apm/collector/storage/h2/dao/register/ServiceNameRegisterH2DAO.java b/apm-collector/apm-collector-storage/collector-storage-h2-provider/src/main/java/org/apache/skywalking/apm/collector/storage/h2/dao/register/ServiceNameRegisterH2DAO.java index d2cb5b7ec4615d95e03dc8812c054f0493ecefde..f77487410d0b467662b3425832c94c7768ae1037 100644 --- a/apm-collector/apm-collector-storage/collector-storage-h2-provider/src/main/java/org/apache/skywalking/apm/collector/storage/h2/dao/register/ServiceNameRegisterH2DAO.java +++ b/apm-collector/apm-collector-storage/collector-storage-h2-provider/src/main/java/org/apache/skywalking/apm/collector/storage/h2/dao/register/ServiceNameRegisterH2DAO.java @@ -16,18 +16,17 @@ * */ - package org.apache.skywalking.apm.collector.storage.h2.dao.register; import java.util.HashMap; import java.util.Map; -import org.apache.skywalking.apm.collector.storage.base.sql.SqlBuilder; -import org.apache.skywalking.apm.collector.storage.dao.register.IServiceNameRegisterDAO; -import org.apache.skywalking.apm.collector.storage.table.register.ServiceNameTable; import org.apache.skywalking.apm.collector.client.h2.H2Client; import org.apache.skywalking.apm.collector.client.h2.H2ClientException; +import org.apache.skywalking.apm.collector.storage.base.sql.SqlBuilder; +import org.apache.skywalking.apm.collector.storage.dao.register.IServiceNameRegisterDAO; import org.apache.skywalking.apm.collector.storage.h2.base.dao.H2DAO; import org.apache.skywalking.apm.collector.storage.table.register.ServiceName; +import org.apache.skywalking.apm.collector.storage.table.register.ServiceNameTable; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -54,13 +53,14 @@ public class ServiceNameRegisterH2DAO extends H2DAO implements IServiceNameRegis @Override public void save(ServiceName serviceName) { - logger.debug("save service name register info, application getId: {}, service name: {}", serviceName.getId(), serviceName.getServiceName()); + logger.debug("save service name register info, application getApplicationId: {}, service name: {}", serviceName.getId(), serviceName.getServiceName()); H2Client client = getClient(); Map source = new HashMap<>(); source.put(ServiceNameTable.COLUMN_ID, serviceName.getId()); source.put(ServiceNameTable.COLUMN_SERVICE_ID, serviceName.getServiceId()); source.put(ServiceNameTable.COLUMN_APPLICATION_ID, serviceName.getApplicationId()); source.put(ServiceNameTable.COLUMN_SERVICE_NAME, serviceName.getServiceName()); + source.put(ServiceNameTable.COLUMN_SRC_SPAN_TYPE, serviceName.getSrcSpanType()); String sql = SqlBuilder.buildBatchInsertSql(ServiceNameTable.TABLE, source.keySet()); Object[] params = source.values().toArray(new Object[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/ApplicationMetricH2UIDAO.java b/apm-collector/apm-collector-storage/collector-storage-h2-provider/src/main/java/org/apache/skywalking/apm/collector/storage/h2/dao/ui/ApplicationMetricH2UIDAO.java index d055b60dc9c003731791a98bed351cb6a54ab188..efd8728b0fa13948dce9ae5f096e2d7f8a5ec07b 100644 --- a/apm-collector/apm-collector-storage/collector-storage-h2-provider/src/main/java/org/apache/skywalking/apm/collector/storage/h2/dao/ui/ApplicationMetricH2UIDAO.java +++ b/apm-collector/apm-collector-storage/collector-storage-h2-provider/src/main/java/org/apache/skywalking/apm/collector/storage/h2/dao/ui/ApplicationMetricH2UIDAO.java @@ -44,4 +44,9 @@ public class ApplicationMetricH2UIDAO extends H2DAO implements IApplicationMetri int topN, MetricSource metricSource) { return null; } + + @Override public List getApplications(Step step, long startTimeBucket, + long endTimeBucket, MetricSource metricSource) { + return null; + } } diff --git a/apm-collector/apm-collector-storage/collector-storage-h2-provider/src/main/java/org/apache/skywalking/apm/collector/storage/h2/dao/ui/ApplicationReferenceMetricH2UIDAO.java b/apm-collector/apm-collector-storage/collector-storage-h2-provider/src/main/java/org/apache/skywalking/apm/collector/storage/h2/dao/ui/ApplicationReferenceMetricH2UIDAO.java index e9c8a707f9e0b8ff398632f5c1bfa228d7fe0ed0..fdab59e8c0950a331287be7e049d7a9a8a75b387 100644 --- a/apm-collector/apm-collector-storage/collector-storage-h2-provider/src/main/java/org/apache/skywalking/apm/collector/storage/h2/dao/ui/ApplicationReferenceMetricH2UIDAO.java +++ b/apm-collector/apm-collector-storage/collector-storage-h2-provider/src/main/java/org/apache/skywalking/apm/collector/storage/h2/dao/ui/ApplicationReferenceMetricH2UIDAO.java @@ -24,7 +24,6 @@ import org.apache.skywalking.apm.collector.client.h2.H2Client; import org.apache.skywalking.apm.collector.storage.dao.ui.IApplicationReferenceMetricUIDAO; import org.apache.skywalking.apm.collector.storage.h2.base.dao.H2DAO; import org.apache.skywalking.apm.collector.storage.table.MetricSource; -import org.apache.skywalking.apm.collector.storage.ui.common.Call; import org.apache.skywalking.apm.collector.storage.ui.common.Step; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -42,7 +41,8 @@ public class ApplicationReferenceMetricH2UIDAO extends H2DAO implements IApplica super(client); } - @Override public List getFrontApplications(Step step, int applicationId, long startTime, long endTime, + @Override public List getFrontApplications(Step step, int applicationId, long startTime, + long endTime, MetricSource metricSource) { H2Client client = getClient(); JsonArray applicationReferenceMetricArray = new JsonArray(); @@ -74,12 +74,16 @@ public class ApplicationReferenceMetricH2UIDAO extends H2DAO implements IApplica return null; } - @Override public List getBehindApplications(Step step, int applicationId, long startTime, long endTime, + @Override + public List getBehindApplications(Step step, int applicationId, long startTime, + long endTime, MetricSource metricSource) { return null; } - @Override public List getApplications(Step step, long startTime, long endTime, MetricSource metricSource) { + @Override + public List getReferences(Step step, long startTime, + long endTime, MetricSource metricSource) { return null; } } diff --git a/apm-collector/apm-collector-storage/collector-storage-h2-provider/src/main/java/org/apache/skywalking/apm/collector/storage/h2/dao/ui/InstanceH2UIDAO.java b/apm-collector/apm-collector-storage/collector-storage-h2-provider/src/main/java/org/apache/skywalking/apm/collector/storage/h2/dao/ui/InstanceH2UIDAO.java index f80e8605d60f6f03c42d5a390343c4e3eb8aed05..68f3255d15657be823014dedf420b6bbced53bca 100644 --- a/apm-collector/apm-collector-storage/collector-storage-h2-provider/src/main/java/org/apache/skywalking/apm/collector/storage/h2/dao/ui/InstanceH2UIDAO.java +++ b/apm-collector/apm-collector-storage/collector-storage-h2-provider/src/main/java/org/apache/skywalking/apm/collector/storage/h2/dao/ui/InstanceH2UIDAO.java @@ -139,11 +139,12 @@ public class InstanceH2UIDAO extends H2DAO implements IInstanceUIDAO { return buildAppServerInfo(sql, params); } - @Override public List getAllServer(int applicationId, long start, long end) { - logger.debug("get instances info, applicationId: {}, start: {}, end: {}", applicationId, start, end); - String dynamicSql = "select * from {0} where {1} = ? and {2} >= ? and {2} <= ? and {3} = ?"; - String sql = SqlBuilder.buildSql(dynamicSql, InstanceTable.TABLE, InstanceTable.COLUMN_APPLICATION_ID, InstanceTable.COLUMN_HEARTBEAT_TIME, InstanceTable.COLUMN_IS_ADDRESS); - Object[] params = new Object[] {applicationId, start, end, BooleanUtils.FALSE}; + @Override + public List getAllServer(int applicationId, long startSecondTimeBucket, long endSecondTimeBucket) { + logger.debug("get instances info, applicationId: {}, startSecondTimeBucket: {}, endSecondTimeBucket: {}", applicationId, startSecondTimeBucket, endSecondTimeBucket); + String dynamicSql = "select * from {0} where {1} = ? and {2} >= ? and {2} <= ? and {3} >= ? and {4} = ?"; + String sql = SqlBuilder.buildSql(dynamicSql, InstanceTable.TABLE, InstanceTable.COLUMN_APPLICATION_ID, InstanceTable.COLUMN_REGISTER_TIME, InstanceTable.COLUMN_HEARTBEAT_TIME, InstanceTable.COLUMN_IS_ADDRESS); + Object[] params = new Object[] {applicationId, startSecondTimeBucket, endSecondTimeBucket, startSecondTimeBucket, BooleanUtils.FALSE}; return buildAppServerInfo(sql, params); } @@ -163,4 +164,14 @@ public class InstanceH2UIDAO extends H2DAO implements IInstanceUIDAO { } return appServerInfos; } + + //TODO + @Override public long getEarliestRegisterTime(int applicationId) { + return 0; + } + + //TODO + @Override public long getLatestHeartBeatTime(int applicationId) { + return 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/ServiceMetricH2UIDAO.java b/apm-collector/apm-collector-storage/collector-storage-h2-provider/src/main/java/org/apache/skywalking/apm/collector/storage/h2/dao/ui/ServiceMetricH2UIDAO.java index d21b39196e378dd2a1879c8504e4240af644a862..247283b867a19881a20c2d33d4db98df32f13662 100644 --- a/apm-collector/apm-collector-storage/collector-storage-h2-provider/src/main/java/org/apache/skywalking/apm/collector/storage/h2/dao/ui/ServiceMetricH2UIDAO.java +++ b/apm-collector/apm-collector-storage/collector-storage-h2-provider/src/main/java/org/apache/skywalking/apm/collector/storage/h2/dao/ui/ServiceMetricH2UIDAO.java @@ -116,7 +116,7 @@ public class ServiceMetricH2UIDAO extends H2DAO implements IServiceMetricUIDAO { return null; } - @Override public List getSlowService(int applicationId, Step step, long start, long end, Integer top, + @Override public List getSlowService(int applicationId, Step step, long startTimeBucket, long endTimeBucket, Integer topN, MetricSource metricSource) { return null; } diff --git a/apm-collector/apm-collector-storage/collector-storage-h2-provider/src/main/java/org/apache/skywalking/apm/collector/storage/h2/dao/ui/ServiceNameServiceH2UIDAO.java b/apm-collector/apm-collector-storage/collector-storage-h2-provider/src/main/java/org/apache/skywalking/apm/collector/storage/h2/dao/ui/ServiceNameServiceH2UIDAO.java index 29470eefbd1f983d830b12c4aa92b50ec517b75c..55c520b7210d7115d567ae9a9bd957dc304372dd 100644 --- a/apm-collector/apm-collector-storage/collector-storage-h2-provider/src/main/java/org/apache/skywalking/apm/collector/storage/h2/dao/ui/ServiceNameServiceH2UIDAO.java +++ b/apm-collector/apm-collector-storage/collector-storage-h2-provider/src/main/java/org/apache/skywalking/apm/collector/storage/h2/dao/ui/ServiceNameServiceH2UIDAO.java @@ -29,6 +29,7 @@ import org.apache.skywalking.apm.collector.storage.dao.ui.IServiceNameServiceUID import org.apache.skywalking.apm.collector.storage.h2.base.dao.H2DAO; import org.apache.skywalking.apm.collector.storage.table.register.ServiceNameTable; import org.apache.skywalking.apm.collector.storage.ui.service.ServiceInfo; +import org.apache.skywalking.apm.network.proto.SpanType; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -44,9 +45,9 @@ public class ServiceNameServiceH2UIDAO extends H2DAO implements IServiceNameServ } @Override public int getCount() { - String dynamicSql = "select count({0}) as cnt from {1}"; - String sql = SqlBuilder.buildSql(dynamicSql, ServiceNameTable.COLUMN_SERVICE_ID, ServiceNameTable.TABLE); - Object[] params = new Object[] {}; + String dynamicSql = "select count({0}) as cnt from {1} where {2} = ?"; + String sql = SqlBuilder.buildSql(dynamicSql, ServiceNameTable.COLUMN_SERVICE_ID, ServiceNameTable.TABLE, ServiceNameTable.COLUMN_SRC_SPAN_TYPE); + Object[] params = new Object[] {SpanType.Entry_VALUE}; try (ResultSet rs = getClient().executeQuery(sql, params)) { if (rs.next()) { diff --git a/apm-collector/apm-collector-storage/collector-storage-h2-provider/src/main/java/org/apache/skywalking/apm/collector/storage/h2/define/register/ServiceNameH2TableDefine.java b/apm-collector/apm-collector-storage/collector-storage-h2-provider/src/main/java/org/apache/skywalking/apm/collector/storage/h2/define/register/ServiceNameH2TableDefine.java index 6d14e4eccc2dc858f24fdcc4f9935c5205629ef6..743df31579570f09426a918466c7a6915cfd32a2 100644 --- a/apm-collector/apm-collector-storage/collector-storage-h2-provider/src/main/java/org/apache/skywalking/apm/collector/storage/h2/define/register/ServiceNameH2TableDefine.java +++ b/apm-collector/apm-collector-storage/collector-storage-h2-provider/src/main/java/org/apache/skywalking/apm/collector/storage/h2/define/register/ServiceNameH2TableDefine.java @@ -16,7 +16,6 @@ * */ - package org.apache.skywalking.apm.collector.storage.h2.define.register; import org.apache.skywalking.apm.collector.storage.h2.base.define.H2ColumnDefine; @@ -37,5 +36,6 @@ public class ServiceNameH2TableDefine extends H2TableDefine { addColumn(new H2ColumnDefine(ServiceNameTable.COLUMN_APPLICATION_ID, H2ColumnDefine.Type.Int.name())); addColumn(new H2ColumnDefine(ServiceNameTable.COLUMN_SERVICE_NAME, H2ColumnDefine.Type.Varchar.name())); addColumn(new H2ColumnDefine(ServiceNameTable.COLUMN_SERVICE_ID, H2ColumnDefine.Type.Int.name())); + addColumn(new H2ColumnDefine(ServiceNameTable.COLUMN_SRC_SPAN_TYPE, H2ColumnDefine.Type.Int.name())); } } diff --git a/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/query/OverViewLayerQuery.java b/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/query/OverViewLayerQuery.java index c609e5d75c2e151b46fefcda2ce95dce57bf1a41..d9d856d6fe7511ca8e81a9d5579eb605c14ad5c2 100644 --- a/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/query/OverViewLayerQuery.java +++ b/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/query/OverViewLayerQuery.java @@ -21,7 +21,9 @@ package org.apache.skywalking.apm.collector.ui.query; import java.text.ParseException; import java.util.List; import org.apache.skywalking.apm.collector.core.module.ModuleManager; +import org.apache.skywalking.apm.collector.core.util.Const; import org.apache.skywalking.apm.collector.core.util.ObjectUtils; +import org.apache.skywalking.apm.collector.storage.ui.application.Application; import org.apache.skywalking.apm.collector.storage.ui.common.Duration; import org.apache.skywalking.apm.collector.storage.ui.common.Topology; import org.apache.skywalking.apm.collector.storage.ui.overview.AlarmTrend; @@ -89,10 +91,13 @@ public class OverViewLayerQuery implements Query { } public Topology getClusterTopology(Duration duration) throws ParseException { - long start = DurationUtils.INSTANCE.durationToSecondTimeBucket(duration.getStep(), duration.getStart()); - long end = DurationUtils.INSTANCE.durationToSecondTimeBucket(duration.getStep(), duration.getEnd()); + long startTimeBucket = DurationUtils.INSTANCE.exchangeToTimeBucket(duration.getStart()); + long endTimeBucket = DurationUtils.INSTANCE.exchangeToTimeBucket(duration.getEnd()); - return getClusterTopologyService().getClusterTopology(duration.getStep(), start, end); + long startSecondTimeBucket = DurationUtils.INSTANCE.durationToSecondTimeBucket(duration.getStep(), duration.getStart()); + long endSecondTimeBucket = DurationUtils.INSTANCE.durationToSecondTimeBucket(duration.getStep(), duration.getEnd()); + + return getClusterTopologyService().getClusterTopology(duration.getStep(), startTimeBucket, endTimeBucket, startSecondTimeBucket, endSecondTimeBucket); } public ClusterBrief getClusterBrief(Duration duration) throws ParseException { @@ -100,7 +105,22 @@ public class OverViewLayerQuery implements Query { long end = DurationUtils.INSTANCE.durationToSecondTimeBucket(duration.getStep(), duration.getEnd()); ClusterBrief clusterBrief = new ClusterBrief(); - clusterBrief.setNumOfApplication(getApplicationService().getApplications(start, end).size()); + + List applications = getApplicationService().getApplications(start, end); + + boolean containsUserApplication = false; + for (Application application : applications) { + if (application.getId() == Const.NONE_INSTANCE_ID) { + containsUserApplication = true; + break; + } + } + + if (containsUserApplication) { + clusterBrief.setNumOfApplication(applications.size() - 1); + } else { + clusterBrief.setNumOfApplication(applications.size()); + } clusterBrief.setNumOfDatabase(getNetworkAddressService().getNumOfDatabase()); clusterBrief.setNumOfCache(getNetworkAddressService().getNumOfCache()); clusterBrief.setNumOfMQ(getNetworkAddressService().getNumOfMQ()); @@ -126,10 +146,13 @@ public class OverViewLayerQuery implements Query { } public List getTopNSlowService(Duration duration, int topN) throws ParseException { - long start = DurationUtils.INSTANCE.exchangeToTimeBucket(duration.getStart()); - long end = DurationUtils.INSTANCE.exchangeToTimeBucket(duration.getEnd()); + long startTimeBucket = DurationUtils.INSTANCE.exchangeToTimeBucket(duration.getStart()); + long endTimeBucket = DurationUtils.INSTANCE.exchangeToTimeBucket(duration.getEnd()); + + long startSecondTimeBucket = DurationUtils.INSTANCE.durationToSecondTimeBucket(duration.getStep(), duration.getStart()); + long endSecondTimeBucket = DurationUtils.INSTANCE.durationToSecondTimeBucket(duration.getStep(), duration.getEnd()); - return getServiceNameService().getSlowService(duration.getStep(), start, end, topN); + return getServiceNameService().getSlowService(duration.getStep(), startTimeBucket, endTimeBucket, startSecondTimeBucket, endSecondTimeBucket, topN); } public List getTopNApplicationThroughput(Duration duration, 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 13ddaaf4d67794c060928b7667be52a2a4a0dadf..81804f7149296e48cedce90b61cfaaf9ed60b736 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 @@ -75,7 +75,7 @@ public class ApplicationService { slowServices.forEach(slowService -> { slowService.setName(serviceNameCacheService.get(slowService.getId()).getServiceName()); //TODO - slowService.setTps(1); + slowService.setCallsPerSec(1); }); return slowServices; } 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 fea4e0bedd8505d80c76912ed60f33b20d909e90..884f0d8da2e6913c365133db329656db5b609104 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 @@ -20,20 +20,15 @@ package org.apache.skywalking.apm.collector.ui.service; import java.text.ParseException; import java.util.HashMap; -import java.util.HashSet; import java.util.List; import java.util.Map; -import java.util.Set; import org.apache.skywalking.apm.collector.core.module.ModuleManager; import org.apache.skywalking.apm.collector.storage.StorageModule; import org.apache.skywalking.apm.collector.storage.dao.ui.IApplicationComponentUIDAO; import org.apache.skywalking.apm.collector.storage.dao.ui.IApplicationMappingUIDAO; import org.apache.skywalking.apm.collector.storage.dao.ui.IApplicationReferenceMetricUIDAO; -import org.apache.skywalking.apm.collector.storage.table.MetricSource; -import org.apache.skywalking.apm.collector.storage.ui.common.Call; 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.ui.utils.DurationUtils; import org.apache.skywalking.apm.network.trace.component.ComponentsDefine; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -66,64 +61,64 @@ public class ApplicationTopologyService { Map components = new HashMap<>(); applicationComponents.forEach(component -> components.put(component.getApplicationId(), ComponentsDefine.getInstance().getComponentName(component.getComponentId()))); - List callerCalls = applicationReferenceMetricUIDAO.getFrontApplications(step, applicationId, startTime, endTime, MetricSource.Caller); - callerCalls.addAll(applicationReferenceMetricUIDAO.getBehindApplications(step, applicationId, startTime, endTime, MetricSource.Caller)); - - callerCalls.forEach(callerCall -> callerCall.setCallType(components.get(callerCall.getTarget()))); - - List calleeCalls = applicationReferenceMetricUIDAO.getFrontApplications(step, applicationId, startTime, endTime, MetricSource.Callee); - calleeCalls.addAll(applicationReferenceMetricUIDAO.getBehindApplications(step, applicationId, startTime, endTime, MetricSource.Callee)); - - calleeCalls.forEach(calleeCall -> calleeCall.setCallType(components.get(calleeCall.getTarget()))); - - Set mappings = new HashSet<>(); - applicationMappings.forEach(mapping -> { - if (applicationId == mapping.getApplicationId()) { - mappings.add(mapping.getMappingApplicationId()); - } - }); - - mappings.forEach(mappingApplicationId -> { - List frontCallerApplications = applicationReferenceMetricUIDAO.getFrontApplications(step, mappingApplicationId, startTime, endTime, MetricSource.Caller); - frontCallerApplications.forEach(call -> { - call.setCallType(components.get(call.getTarget())); - call.setTarget(applicationId); - callerCalls.add(call); - }); - - List behindCallerApplications = applicationReferenceMetricUIDAO.getBehindApplications(step, mappingApplicationId, startTime, endTime, MetricSource.Caller); - behindCallerApplications.forEach(call -> { - call.setCallType(components.get(call.getTarget())); - call.setSource(applicationId); - callerCalls.add(call); - }); - - List frontCalleeApplications = applicationReferenceMetricUIDAO.getFrontApplications(step, mappingApplicationId, startTime, endTime, MetricSource.Callee); - frontCalleeApplications.forEach(call -> { - call.setCallType(components.get(call.getTarget())); - call.setTarget(applicationId); - calleeCalls.add(call); - }); - - List behindCalleeApplications = applicationReferenceMetricUIDAO.getBehindApplications(step, mappingApplicationId, startTime, endTime, MetricSource.Callee); - behindCalleeApplications.forEach(call -> { - call.setCallType(components.get(call.getTarget())); - call.setSource(applicationId); - calleeCalls.add(call); - }); - }); +// List callerCalls = applicationReferenceMetricUIDAO.getFrontApplications(step, applicationId, startTime, endTime, MetricSource.Caller); +// callerCalls.addAll(applicationReferenceMetricUIDAO.getBehindApplications(step, applicationId, startTime, endTime, MetricSource.Caller)); +// +// callerCalls.forEach(callerCall -> callerCall.setCallType(components.get(callerCall.getTarget()))); +// +// List calleeCalls = applicationReferenceMetricUIDAO.getFrontApplications(step, applicationId, startTime, endTime, MetricSource.Callee); +// calleeCalls.addAll(applicationReferenceMetricUIDAO.getBehindApplications(step, applicationId, startTime, endTime, MetricSource.Callee)); +// +// calleeCalls.forEach(calleeCall -> calleeCall.setCallType(components.get(calleeCall.getTarget()))); +// +// Set mappings = new HashSet<>(); +// applicationMappings.forEach(mapping -> { +// if (applicationId == mapping.getApplicationId()) { +// mappings.add(mapping.getMappingApplicationId()); +// } +// }); +// +// mappings.forEach(mappingApplicationId -> { +// List frontCallerApplications = applicationReferenceMetricUIDAO.getFrontApplications(step, mappingApplicationId, startTime, endTime, MetricSource.Caller); +// frontCallerApplications.forEach(call -> { +// call.setCallType(components.get(call.getTarget())); +// call.setTarget(applicationId); +// callerCalls.add(call); +// }); +// +// List behindCallerApplications = applicationReferenceMetricUIDAO.getBehindApplications(step, mappingApplicationId, startTime, endTime, MetricSource.Caller); +// behindCallerApplications.forEach(call -> { +// call.setCallType(components.get(call.getTarget())); +// call.setSource(applicationId); +// callerCalls.add(call); +// }); +// +// List frontCalleeApplications = applicationReferenceMetricUIDAO.getFrontApplications(step, mappingApplicationId, startTime, endTime, MetricSource.Callee); +// frontCalleeApplications.forEach(call -> { +// call.setCallType(components.get(call.getTarget())); +// call.setTarget(applicationId); +// calleeCalls.add(call); +// }); +// +// List behindCalleeApplications = applicationReferenceMetricUIDAO.getBehindApplications(step, mappingApplicationId, startTime, endTime, MetricSource.Callee); +// behindCalleeApplications.forEach(call -> { +// call.setCallType(components.get(call.getTarget())); +// call.setSource(applicationId); +// calleeCalls.add(call); +// }); +// }); TopologyBuilder builder = new TopologyBuilder(moduleManager); - long secondsBetween = DurationUtils.INSTANCE.secondsBetween(step, startTime, endTime); - Topology topology = builder.build(applicationComponents, applicationMappings, callerCalls, calleeCalls, secondsBetween); - - topology.getCalls().forEach(call -> { - long calls = call.getCalls(); - long responseTimes = call.getResponseTimes(); - call.setCallsPerSec(calls / secondsBetween); - call.setResponseTimePerSec(responseTimes / secondsBetween); - }); - return topology; +// long secondsBetween = DurationUtils.INSTANCE.secondsBetween(step, startTime, endTime); +// Topology topology = builder.build(applicationComponents, applicationMappings, callerCalls, calleeCalls, secondsBetween); +// +// topology.getCalls().forEach(call -> { +// long calls = call.getCalls(); +// long responseTimes = call.getResponseTimes(); +// call.setCallsPerSec(calls / secondsBetween); +// call.setAvgResponseTime(responseTimes / secondsBetween); +// }); + return null; } } 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 da98adbfea31bde91703df611936b5f77898c9ac..2b215cd10dd830d4433ff71b735ab17b1ce0815c 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 @@ -26,12 +26,11 @@ import org.apache.skywalking.apm.collector.core.module.ModuleManager; import org.apache.skywalking.apm.collector.storage.StorageModule; import org.apache.skywalking.apm.collector.storage.dao.ui.IApplicationComponentUIDAO; import org.apache.skywalking.apm.collector.storage.dao.ui.IApplicationMappingUIDAO; +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.MetricSource; -import org.apache.skywalking.apm.collector.storage.ui.common.Call; 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.ui.utils.DurationUtils; import org.apache.skywalking.apm.network.trace.component.ComponentsDefine; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -45,6 +44,7 @@ public class ClusterTopologyService { private final IApplicationComponentUIDAO applicationComponentUIDAO; private final IApplicationMappingUIDAO applicationMappingUIDAO; + private final IApplicationMetricUIDAO applicationMetricUIDAO; private final IApplicationReferenceMetricUIDAO applicationReferenceMetricUIDAO; private final ModuleManager moduleManager; @@ -52,35 +52,26 @@ public class ClusterTopologyService { this.moduleManager = moduleManager; this.applicationComponentUIDAO = moduleManager.find(StorageModule.NAME).getService(IApplicationComponentUIDAO.class); this.applicationMappingUIDAO = moduleManager.find(StorageModule.NAME).getService(IApplicationMappingUIDAO.class); + this.applicationMetricUIDAO = moduleManager.find(StorageModule.NAME).getService(IApplicationMetricUIDAO.class); this.applicationReferenceMetricUIDAO = moduleManager.find(StorageModule.NAME).getService(IApplicationReferenceMetricUIDAO.class); } - public Topology getClusterTopology(Step step, long startTime, long endTime) throws ParseException { - logger.debug("startTime: {}, endTime: {}", startTime, endTime); - List applicationComponents = applicationComponentUIDAO.load(step, startTime, endTime); - List applicationMappings = applicationMappingUIDAO.load(step, startTime, endTime); + public Topology getClusterTopology(Step step, long startTimeBucket, long endTimeBucket, long startSecondTimeBucket, + long endSecondTimeBucket) throws ParseException { + logger.debug("startTimeBucket: {}, endTimeBucket: {}, startSecondTimeBucket: {}, endSecondTimeBucket: {}", startTimeBucket, endTimeBucket, startSecondTimeBucket, endSecondTimeBucket); + List applicationComponents = applicationComponentUIDAO.load(step, startTimeBucket, endTimeBucket); + List applicationMappings = applicationMappingUIDAO.load(step, startTimeBucket, endTimeBucket); Map components = new HashMap<>(); applicationComponents.forEach(component -> components.put(component.getApplicationId(), ComponentsDefine.getInstance().getComponentName(component.getComponentId()))); - List callerCalls = applicationReferenceMetricUIDAO.getApplications(step, startTime, endTime, MetricSource.Caller); - callerCalls.forEach(callerCall -> callerCall.setCallType(components.get(callerCall.getTarget()))); + List applicationMetrics = applicationMetricUIDAO.getApplications(step, startTimeBucket, endTimeBucket, MetricSource.Callee); - List calleeCalls = applicationReferenceMetricUIDAO.getApplications(step, startTime, endTime, MetricSource.Callee); - - calleeCalls.forEach(calleeCall -> calleeCall.setCallType(components.get(calleeCall.getTarget()))); + List callerReferenceMetric = applicationReferenceMetricUIDAO.getReferences(step, startTimeBucket, endTimeBucket, MetricSource.Caller); + List calleeReferenceMetric = applicationReferenceMetricUIDAO.getReferences(step, startTimeBucket, endTimeBucket, MetricSource.Callee); TopologyBuilder builder = new TopologyBuilder(moduleManager); - long secondsBetween = DurationUtils.INSTANCE.secondsBetween(step, startTime, endTime); - Topology topology = builder.build(applicationComponents, applicationMappings, callerCalls, calleeCalls, secondsBetween); - - topology.getCalls().forEach(call -> { - long calls = call.getCalls(); - long responseTimes = call.getResponseTimes(); - call.setCallsPerSec(calls / secondsBetween); - call.setResponseTimePerSec(responseTimes / secondsBetween); - }); - return topology; + return builder.build(applicationComponents, applicationMappings, applicationMetrics, callerReferenceMetric, calleeReferenceMetric, startSecondTimeBucket, endSecondTimeBucket); } } 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 new file mode 100644 index 0000000000000000000000000000000000000000..f4db0a00aad65523b5fd5b30174a4dbcb0e14985 --- /dev/null +++ b/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/SecondBetweenService.java @@ -0,0 +1,58 @@ +/* + * 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.ui.service; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Date; +import org.apache.skywalking.apm.collector.core.module.ModuleManager; +import org.apache.skywalking.apm.collector.storage.StorageModule; +import org.apache.skywalking.apm.collector.storage.dao.ui.IInstanceUIDAO; +import org.joda.time.DateTime; +import org.joda.time.Seconds; + +/** + * @author peng-yongsheng + */ +class SecondBetweenService { + + private final IInstanceUIDAO instanceUIDAO; + + SecondBetweenService(ModuleManager moduleManager) { + this.instanceUIDAO = moduleManager.find(StorageModule.NAME).getService(IInstanceUIDAO.class); + } + + int calculate(int applicationId, long startSecondTimeBucket, + long endSecondTimeBucket) throws ParseException { + long registerTime = instanceUIDAO.getEarliestRegisterTime(applicationId); + if (startSecondTimeBucket < registerTime) { + startSecondTimeBucket = registerTime; + } + + long heartBeatTime = instanceUIDAO.getLatestHeartBeatTime(applicationId); + if (endSecondTimeBucket > heartBeatTime) { + endSecondTimeBucket = heartBeatTime; + } + + 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(); + } +} diff --git a/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/ServiceNameService.java b/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/ServiceNameService.java index 52061a75422b6e0ec35ae865ada9f7d6c5b9f1de..30cb8b6b68a5f8c9cb7e1294b75f1d883f600012 100644 --- a/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/ServiceNameService.java +++ b/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/ServiceNameService.java @@ -27,6 +27,7 @@ import org.apache.skywalking.apm.collector.storage.StorageModule; import org.apache.skywalking.apm.collector.storage.dao.ui.IServiceMetricUIDAO; import org.apache.skywalking.apm.collector.storage.dao.ui.IServiceNameServiceUIDAO; import org.apache.skywalking.apm.collector.storage.table.MetricSource; +import org.apache.skywalking.apm.collector.storage.table.register.ServiceName; import org.apache.skywalking.apm.collector.storage.ui.common.ResponseTimeTrend; import org.apache.skywalking.apm.collector.storage.ui.common.SLATrend; import org.apache.skywalking.apm.collector.storage.ui.common.Step; @@ -35,20 +36,26 @@ import org.apache.skywalking.apm.collector.storage.ui.service.ServiceInfo; import org.apache.skywalking.apm.collector.storage.ui.service.ServiceMetric; import org.apache.skywalking.apm.collector.storage.utils.DurationPoint; import org.apache.skywalking.apm.collector.ui.utils.DurationUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * @author peng-yongsheng */ public class ServiceNameService { + private final Logger logger = LoggerFactory.getLogger(ServiceNameService.class); + private final IServiceNameServiceUIDAO serviceNameServiceUIDAO; private final IServiceMetricUIDAO serviceMetricUIDAO; private final ServiceNameCacheService serviceNameCacheService; + private final SecondBetweenService secondBetweenService; public ServiceNameService(ModuleManager moduleManager) { this.serviceNameServiceUIDAO = moduleManager.find(StorageModule.NAME).getService(IServiceNameServiceUIDAO.class); this.serviceMetricUIDAO = moduleManager.find(StorageModule.NAME).getService(IServiceMetricUIDAO.class); this.serviceNameCacheService = moduleManager.find(CacheModule.NAME).getService(ServiceNameCacheService.class); + this.secondBetweenService = new SecondBetweenService(moduleManager); } public int getCount() { @@ -85,13 +92,18 @@ public class ServiceNameService { return slaTrend; } - public List getSlowService(Step step, long start, long end, - Integer top) throws ParseException { - List slowServices = serviceMetricUIDAO.getSlowService(0, step, start, end, top, MetricSource.Callee); + public List getSlowService(Step step, long startTimeBucket, long endTimeBucket, + long startSecondTimeBucket, long endSecondTimeBucket, + Integer topN) throws ParseException { + List slowServices = serviceMetricUIDAO.getSlowService(0, step, startTimeBucket, endTimeBucket, topN, MetricSource.Callee); slowServices.forEach(slowService -> { - slowService.setName(serviceNameCacheService.get(slowService.getId()).getServiceName()); - //TODO - slowService.setTps(1); + ServiceName serviceName = serviceNameCacheService.get(slowService.getId()); + slowService.setName(serviceName.getServiceName()); + try { + slowService.setCallsPerSec((int)(slowService.getCalls() / secondBetweenService.calculate(serviceName.getApplicationId(), startSecondTimeBucket, endSecondTimeBucket))); + } catch (ParseException e) { + logger.error(e.getMessage(), e); + } }); return slowServices; } 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 90bcd834437b71889c31387638350109a8af012b..fc4deefbaa47d6912c3532c123977605c1ead71e 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 @@ -18,12 +18,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; @@ -31,6 +30,8 @@ import org.apache.skywalking.apm.collector.core.util.BooleanUtils; import org.apache.skywalking.apm.collector.core.util.Const; import org.apache.skywalking.apm.collector.storage.dao.ui.IApplicationComponentUIDAO; import org.apache.skywalking.apm.collector.storage.dao.ui.IApplicationMappingUIDAO; +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.ui.application.ApplicationNode; import org.apache.skywalking.apm.collector.storage.ui.application.ConjecturalNode; @@ -38,72 +39,134 @@ 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.Topology; import org.apache.skywalking.apm.collector.storage.ui.common.VisualUserNode; +import org.apache.skywalking.apm.collector.ui.utils.ApdexCalculator; +import org.apache.skywalking.apm.collector.ui.utils.SLACalculator; import org.apache.skywalking.apm.network.trace.component.ComponentsDefine; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * @author peng-yongsheng */ class TopologyBuilder { + private final Logger logger = LoggerFactory.getLogger(TopologyBuilder.class); + private final ApplicationCacheService applicationCacheService; + private final ServerService serverService; + private final SecondBetweenService secondBetweenService; TopologyBuilder(ModuleManager moduleManager) { this.applicationCacheService = moduleManager.find(CacheModule.NAME).getService(ApplicationCacheService.class); + this.serverService = new ServerService(moduleManager); + this.secondBetweenService = new SecondBetweenService(moduleManager); } Topology build(List applicationComponents, - List applicationMappings, List callerCalls, - List calleeCalls, long secondsBetween) { + List applicationMappings, + List applicationMetrics, + List callerReferenceMetric, + List calleeReferenceMetric, + long startSecondTimeBucket, long endSecondTimeBucket) { Map components = changeNodeComp2Map(applicationComponents); - Map mappings = changeMapping2Map(applicationMappings); + Map mappings = changeMapping2Map(applicationMappings); - List calls = buildCalls(callerCalls, calleeCalls); + calleeReferenceMetric = calleeReferenceMetricFilter(calleeReferenceMetric); - Set nodeIds = new HashSet<>(); - calls.forEach(call -> { - String sourceName = applicationCacheService.getApplicationById(call.getSource()).getApplicationCode(); - String targetName = applicationCacheService.getApplicationById(call.getTarget()).getApplicationCode(); + List nodes = new LinkedList<>(); + applicationMetrics.forEach(applicationMetric -> { + int applicationId = applicationMetric.getId(); + Application application = applicationCacheService.getApplicationById(applicationId); + ApplicationNode applicationNode = new ApplicationNode(); + applicationNode.setId(applicationId); + applicationNode.setName(application.getApplicationCode()); + applicationNode.setType(components.getOrDefault(application.getApplicationId(), Const.UNKNOWN)); + + applicationNode.setSla(SLACalculator.INSTANCE.calculate(applicationMetric.getErrorCalls(), applicationMetric.getCalls())); + try { + applicationNode.setCallsPerSec(applicationMetric.getCalls() / secondBetweenService.calculate(applicationId, startSecondTimeBucket, endSecondTimeBucket)); + } catch (ParseException e) { + logger.error(e.getMessage(), e); + } + applicationNode.setAvgResponseTime((applicationMetric.getDurations() - applicationMetric.getErrorDurations()) / (applicationMetric.getCalls() - applicationMetric.getErrorCalls())); + applicationNode.setApdex(ApdexCalculator.INSTANCE.calculate(applicationMetric.getSatisfiedCount(), applicationMetric.getToleratingCount(), applicationMetric.getFrustratedCount())); + applicationNode.setAlarm(false); + applicationNode.setNumOfServer(serverService.getAllServer(applicationId, startSecondTimeBucket, endSecondTimeBucket).size()); + applicationNode.setNumOfServerAlarm(1); + applicationNode.setNumOfServiceAlarm(1); + nodes.add(applicationNode); + }); - call.setSourceName(sourceName); - call.setTargetName(targetName); + List calls = new LinkedList<>(); + callerReferenceMetric.forEach(referenceMetric -> { + Application source = applicationCacheService.getApplicationById(referenceMetric.getSource()); + Application target = applicationCacheService.getApplicationById(referenceMetric.getTarget()); + + if (BooleanUtils.valueToBoolean(target.getIsAddress()) && !mappings.containsKey(target.getApplicationId())) { + ConjecturalNode conjecturalNode = new ConjecturalNode(); + conjecturalNode.setId(target.getApplicationId()); + conjecturalNode.setName(target.getApplicationCode()); + conjecturalNode.setType(components.getOrDefault(target.getApplicationId(), Const.UNKNOWN)); + nodes.add(conjecturalNode); + } - nodeIds.add(call.getSource()); - nodeIds.add(call.getTarget()); + Call call = new Call(); + call.setSource(source.getApplicationId()); + call.setSourceName(source.getApplicationCode()); + + int actualTargetId = mappings.getOrDefault(target.getApplicationId(), target.getApplicationId()); + call.setTarget(actualTargetId); + call.setTargetName(applicationCacheService.getApplicationById(actualTargetId).getApplicationCode()); + call.setAlert(true); + call.setCallType(components.get(referenceMetric.getTarget())); + try { + call.setCallsPerSec(referenceMetric.getCalls() / secondBetweenService.calculate(source.getApplicationId(), startSecondTimeBucket, endSecondTimeBucket)); + } catch (ParseException e) { + logger.error(e.getMessage(), e); + } + call.setAvgResponseTime((referenceMetric.getDurations() - referenceMetric.getErrorDurations()) / (referenceMetric.getCalls() - referenceMetric.getErrorCalls())); + calls.add(call); }); - List nodes = new LinkedList<>(); - nodeIds.forEach(nodeId -> { - Application application = applicationCacheService.getApplicationById(nodeId); - if (BooleanUtils.valueToBoolean(application.getAddressId())) { + calleeReferenceMetric.forEach(referenceMetric -> { + Application source = applicationCacheService.getApplicationById(referenceMetric.getSource()); + Application target = applicationCacheService.getApplicationById(referenceMetric.getTarget()); + + if (source.getApplicationId() == Const.NONE_APPLICATION_ID) { + VisualUserNode visualUserNode = new VisualUserNode(); + visualUserNode.setId(source.getApplicationId()); + visualUserNode.setName(Const.USER_CODE); + visualUserNode.setType(Const.USER_CODE.toUpperCase()); + nodes.add(visualUserNode); + } + + if (BooleanUtils.valueToBoolean(source.getIsAddress())) { ConjecturalNode conjecturalNode = new ConjecturalNode(); - conjecturalNode.setId(nodeId); - conjecturalNode.setName(application.getApplicationCode()); - conjecturalNode.setType(components.getOrDefault(application.getApplicationId(), Const.UNKNOWN)); + conjecturalNode.setId(source.getApplicationId()); + conjecturalNode.setName(source.getApplicationCode()); + conjecturalNode.setType(components.getOrDefault(source.getApplicationId(), Const.UNKNOWN)); nodes.add(conjecturalNode); + } + + Call call = new Call(); + call.setSource(source.getApplicationId()); + call.setSourceName(source.getApplicationCode()); + call.setTarget(target.getApplicationId()); + call.setTargetName(target.getApplicationCode()); + call.setAlert(true); + + if (source.getApplicationId() == Const.NONE_APPLICATION_ID) { + call.setCallType(Const.EMPTY_STRING); } else { - if (nodeId == Const.NONE_APPLICATION_ID) { - VisualUserNode node = new VisualUserNode(); - node.setId(nodeId); - node.setName(Const.USER_CODE); - node.setType(Const.USER_CODE.toUpperCase()); - nodes.add(node); - } else { - ApplicationNode applicationNode = new ApplicationNode(); - applicationNode.setId(nodeId); - applicationNode.setName(application.getApplicationCode()); - applicationNode.setType(components.getOrDefault(application.getApplicationId(), Const.UNKNOWN)); - - calleeCalls.forEach(call -> { - if (call.getTarget() == nodeId) { - call.setCallsPerSec(call.getCalls() / secondsBetween); - call.setResponseTimePerSec(call.getResponseTimes() / secondsBetween); - } - }); - applicationNode.setCallsPerSec(100L); - applicationNode.setResponseTimePerSec(100L); - nodes.add(applicationNode); - } + call.setCallType(components.get(referenceMetric.getTarget())); } + try { + call.setCallsPerSec(referenceMetric.getCalls() / secondBetweenService.calculate(target.getApplicationId(), startSecondTimeBucket, endSecondTimeBucket)); + } catch (ParseException e) { + logger.error(e.getMessage(), e); + } + call.setAvgResponseTime((referenceMetric.getDurations() - referenceMetric.getErrorDurations()) / (referenceMetric.getCalls() - referenceMetric.getErrorCalls())); + calls.add(call); }); Topology topology = new Topology(); @@ -112,14 +175,24 @@ class TopologyBuilder { return topology; } - private Map changeMapping2Map( - List applicationMappings) { - Map mappings = new HashMap<>(); - applicationMappings.forEach(applicationMapping -> { - String applicationCode = applicationCacheService.getApplicationById(applicationMapping.getApplicationId()).getApplicationCode(); - String address = applicationCacheService.getApplicationById(applicationMapping.getMappingApplicationId()).getApplicationCode(); - mappings.put(address, applicationCode); + private List calleeReferenceMetricFilter( + List calleeReferenceMetric) { + List filteredMetrics = new LinkedList<>(); + + calleeReferenceMetric.forEach(referenceMetric -> { + Application source = applicationCacheService.getApplicationById(referenceMetric.getSource()); + if (BooleanUtils.valueToBoolean(source.getIsAddress()) || source.getApplicationId() == Const.NONE_APPLICATION_ID) { + filteredMetrics.add(referenceMetric); + } }); + + return filteredMetrics; + } + + private Map changeMapping2Map( + List applicationMappings) { + Map mappings = new HashMap<>(); + applicationMappings.forEach(applicationMapping -> mappings.put(applicationMapping.getMappingApplicationId(), applicationMapping.getApplicationId())); return mappings; } @@ -132,24 +205,4 @@ class TopologyBuilder { }); return components; } - - private List buildCalls(List callerCalls, List calleeCalls) { - List calls = new LinkedList<>(); - - Set distinctCalls = new HashSet<>(); - callerCalls.forEach(callerCall -> { - distinctCalls.add(callerCall.getSource() + Const.ID_SPLIT + callerCall.getTarget()); - calls.add(callerCall); - }); - - calleeCalls.forEach(calleeCall -> { - String call = calleeCall.getSource() + Const.ID_SPLIT + calleeCall.getTarget(); - if (!distinctCalls.contains(call)) { - distinctCalls.add(call); - calls.add(calleeCall); - } - }); - - return calls; - } } 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 new file mode 100644 index 0000000000000000000000000000000000000000..126e0dea23ea979d47673176d457fe765f178248 --- /dev/null +++ b/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/utils/ApdexCalculator.java @@ -0,0 +1,30 @@ +/* + * 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.ui.utils; + +/** + * @author peng-yongsheng + */ +public enum ApdexCalculator { + INSTANCE; + + public int calculate(long satisfiedCount, long toleratingCount, long frustratedCount) { + return (int)(((satisfiedCount + toleratingCount / 2) * 100) / (satisfiedCount + toleratingCount + frustratedCount)); + } +} diff --git a/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/utils/SLACalculator.java b/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/utils/SLACalculator.java new file mode 100644 index 0000000000000000000000000000000000000000..8fe220f868c0273dbbf96b2a34dd0914598738e4 --- /dev/null +++ b/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/utils/SLACalculator.java @@ -0,0 +1,30 @@ +/* + * 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.ui.utils; + +/** + * @author peng-yongsheng + */ +public enum SLACalculator { + INSTANCE; + + public int calculate(long errorCalls, long calls) { + return (int)(((calls - errorCalls) * 100) / calls); + } +} diff --git a/apm-protocol/apm-network/src/main/java/org/apache/skywalking/apm/network/trace/component/ComponentsDefine.java b/apm-protocol/apm-network/src/main/java/org/apache/skywalking/apm/network/trace/component/ComponentsDefine.java index fa6e9c24eacc74db5eae5fe82ce2dd6a62f70ce6..40bc356f395b7eb5cfc072282ef99722a2fe23b4 100644 --- a/apm-protocol/apm-network/src/main/java/org/apache/skywalking/apm/network/trace/component/ComponentsDefine.java +++ b/apm-protocol/apm-network/src/main/java/org/apache/skywalking/apm/network/trace/component/ComponentsDefine.java @@ -82,6 +82,8 @@ public class ComponentsDefine { public static final OfficialComponent SERVICECOMB = new OfficialComponent(28, "ServiceComb"); + public static final OfficialComponent HYSTRIX = new OfficialComponent(29, "Hystrix"); + private static ComponentsDefine INSTANCE = new ComponentsDefine(); private String[] components; @@ -91,7 +93,7 @@ public class ComponentsDefine { } public ComponentsDefine() { - components = new String[29]; + components = new String[30]; addComponent(TOMCAT); addComponent(HTTPCLIENT); addComponent(DUBBO); @@ -120,6 +122,7 @@ public class ComponentsDefine { addComponent(HTTP_ASYNC_CLIENT); addComponent(KAFKA); addComponent(SERVICECOMB); + addComponent(HYSTRIX); } private void addComponent(OfficialComponent component) { diff --git a/apm-protocol/apm-ui-protocol/src/main/resources/ui-graphql/application-layer.graphqls b/apm-protocol/apm-ui-protocol/src/main/resources/ui-graphql/application-layer.graphqls index e527d6e4ed6a18a65874b7489e6f059995c3c200..7f21b70559859d5e45022a427bba0d2e07bb15e8 100644 --- a/apm-protocol/apm-ui-protocol/src/main/resources/ui-graphql/application-layer.graphqls +++ b/apm-protocol/apm-ui-protocol/src/main/resources/ui-graphql/application-layer.graphqls @@ -10,7 +10,7 @@ type ApplicationNode implements Node { # The number of incoming calls callsPerSec: Long! # Unit: millisecond - responseTimePerSec: Long! + avgResponseTime: Long! # ref: http://www.apdex.org/ # Max value is 100 # 2 Digits after floating point in UI, need to division by 100. 100 -> 1.00 diff --git a/apm-protocol/apm-ui-protocol/src/main/resources/ui-graphql/common.graphqls b/apm-protocol/apm-ui-protocol/src/main/resources/ui-graphql/common.graphqls index 21d9becd1908c6a85e20a461d3ab4cfe696df6c3..0ea2d930a06194885e93b6d121cef5ac222577a4 100644 --- a/apm-protocol/apm-ui-protocol/src/main/resources/ui-graphql/common.graphqls +++ b/apm-protocol/apm-ui-protocol/src/main/resources/ui-graphql/common.graphqls @@ -106,5 +106,5 @@ type Call { callType: String! callsPerSec: Long! # Unit: millisecond - responseTimePerSec: Long! + avgResponseTime: Long! } diff --git a/apm-protocol/apm-ui-protocol/src/main/resources/ui-graphql/service-layer.graphqls b/apm-protocol/apm-ui-protocol/src/main/resources/ui-graphql/service-layer.graphqls index cf4b73ee8d30b641f9ae889a5f714b2744b5a86f..3e33feebf7d2511d5e2ae3a737a945a14f9fc2c3 100644 --- a/apm-protocol/apm-ui-protocol/src/main/resources/ui-graphql/service-layer.graphqls +++ b/apm-protocol/apm-ui-protocol/src/main/resources/ui-graphql/service-layer.graphqls @@ -21,7 +21,7 @@ type ServiceMetric { name: String # The unit is millisecond. avgResponseTime: Int! - tps: Int! + callsPerSec: Int! } type TraceItem { diff --git a/apm-sniffer/apm-sdk-plugin/dubbo-plugin/src/main/java/org/apache/skywalking/apm/plugin/dubbo/DubboInstrumentation.java b/apm-sniffer/apm-sdk-plugin/dubbo-plugin/src/main/java/org/apache/skywalking/apm/plugin/dubbo/DubboInstrumentation.java index 5c63e9566a8e7f2bc0c8eb09195ce86adcd6dbc7..779153efc88de20765e83334959514674d3e2d10 100644 --- a/apm-sniffer/apm-sdk-plugin/dubbo-plugin/src/main/java/org/apache/skywalking/apm/plugin/dubbo/DubboInstrumentation.java +++ b/apm-sniffer/apm-sdk-plugin/dubbo-plugin/src/main/java/org/apache/skywalking/apm/plugin/dubbo/DubboInstrumentation.java @@ -16,25 +16,18 @@ * */ - package org.apache.skywalking.apm.plugin.dubbo; import net.bytebuddy.description.method.MethodDescription; import net.bytebuddy.matcher.ElementMatcher; +import org.apache.skywalking.apm.agent.core.plugin.interceptor.ConstructorInterceptPoint; import org.apache.skywalking.apm.agent.core.plugin.interceptor.InstanceMethodsInterceptPoint; import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.ClassInstanceMethodsEnhancePluginDefine; -import org.apache.skywalking.apm.agent.core.plugin.match.NameMatch; -import org.apache.skywalking.apm.agent.core.plugin.interceptor.ConstructorInterceptPoint; import org.apache.skywalking.apm.agent.core.plugin.match.ClassMatch; +import org.apache.skywalking.apm.agent.core.plugin.match.NameMatch; import static net.bytebuddy.matcher.ElementMatchers.named; -/** - * {@link DubboInstrumentation} presents that skywalking intercepts {@link com.alibaba.dubbo.monitor.support.MonitorFilter#invoke(com.alibaba.dubbo.rpc.Invoker, - * com.alibaba.dubbo.rpc.Invocation)} by using {@link DubboInterceptor}. - * - * @author zhangxin - */ public class DubboInstrumentation extends ClassInstanceMethodsEnhancePluginDefine { private static final String ENHANCE_CLASS = "com.alibaba.dubbo.monitor.support.MonitorFilter"; diff --git a/apm-sniffer/apm-sdk-plugin/feign-default-http-9.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/feign/http/v9/define/DefaultHttpClientInstrumentation.java b/apm-sniffer/apm-sdk-plugin/feign-default-http-9.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/feign/http/v9/define/DefaultHttpClientInstrumentation.java index 15c08d2b92818133a02bd4b7c7979a30f0c3c38d..ea83395f27cf2549241d1bb7ef29fe75793bc172 100644 --- a/apm-sniffer/apm-sdk-plugin/feign-default-http-9.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/feign/http/v9/define/DefaultHttpClientInstrumentation.java +++ b/apm-sniffer/apm-sdk-plugin/feign-default-http-9.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/feign/http/v9/define/DefaultHttpClientInstrumentation.java @@ -16,7 +16,6 @@ * */ - package org.apache.skywalking.apm.plugin.feign.http.v9.define; import net.bytebuddy.description.method.MethodDescription; @@ -25,19 +24,10 @@ import org.apache.skywalking.apm.agent.core.plugin.interceptor.ConstructorInterc import org.apache.skywalking.apm.agent.core.plugin.interceptor.InstanceMethodsInterceptPoint; import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.ClassInstanceMethodsEnhancePluginDefine; import org.apache.skywalking.apm.agent.core.plugin.match.ClassMatch; -import org.apache.skywalking.apm.plugin.feign.http.v9.DefaultHttpClientInterceptor; import static net.bytebuddy.matcher.ElementMatchers.named; import static org.apache.skywalking.apm.agent.core.plugin.match.NameMatch.byName; -/** - * {@link DefaultHttpClientInstrumentation} presents that skywalking intercepts {@link - * feign.Client.Default#execute(feign.Request, feign.Request.Options)} by using {@link DefaultHttpClientInterceptor}. - * If feign did't run in default mode, the instrumentation depend on the http discovery implementation. - * e.g. okhttp discovery implementation depend on okhttp-plugin. - * - * @author peng-yongsheng - */ public class DefaultHttpClientInstrumentation extends ClassInstanceMethodsEnhancePluginDefine { /** diff --git a/apm-sniffer/apm-sdk-plugin/grpc-1.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/grpc/v1/define/AbstractServerImplBuilderInstrumentation.java b/apm-sniffer/apm-sdk-plugin/grpc-1.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/grpc/v1/define/AbstractServerImplBuilderInstrumentation.java index 0abe6d741de977a1e5122427141b7f2dc70b612b..681d28f722738754a6059b85e8b1263e12c69e1a 100644 --- a/apm-sniffer/apm-sdk-plugin/grpc-1.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/grpc/v1/define/AbstractServerImplBuilderInstrumentation.java +++ b/apm-sniffer/apm-sdk-plugin/grpc-1.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/grpc/v1/define/AbstractServerImplBuilderInstrumentation.java @@ -29,13 +29,6 @@ import static net.bytebuddy.matcher.ElementMatchers.named; import static org.apache.skywalking.apm.agent.core.plugin.bytebuddy.ArgumentTypeNameMatch.takesArgumentWithType; import static org.apache.skywalking.apm.agent.core.plugin.match.NameMatch.byName; -/** - * {@link AbstractServerImplBuilderInstrumentation} present that the GRPC plugin intercept the method - * addService in the {@link io.grpc.internal.AbstractServerImplBuilder} class by using the {@link - * org.apache.skywalking.apm.plugin.grpc.v1.AbstractServerImplBuilderInterceptor} class. - * - * @author zhang xin - */ public class AbstractServerImplBuilderInstrumentation extends ClassInstanceMethodsEnhancePluginDefine { public static final String ENHANCE_CLASS = "io.grpc.internal.AbstractServerImplBuilder"; diff --git a/apm-sniffer/apm-sdk-plugin/grpc-1.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/grpc/v1/define/AbstractStubInstrumentation.java b/apm-sniffer/apm-sdk-plugin/grpc-1.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/grpc/v1/define/AbstractStubInstrumentation.java index 270676aa9705e77f14c6d19b5adcb85e54bece19..fd3f0739ec513968563297df75998d842f8d64b4 100644 --- a/apm-sniffer/apm-sdk-plugin/grpc-1.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/grpc/v1/define/AbstractStubInstrumentation.java +++ b/apm-sniffer/apm-sdk-plugin/grpc-1.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/grpc/v1/define/AbstractStubInstrumentation.java @@ -29,13 +29,6 @@ import static net.bytebuddy.matcher.ElementMatchers.named; import static net.bytebuddy.matcher.ElementMatchers.takesArguments; import static org.apache.skywalking.apm.agent.core.plugin.match.NameMatch.byName; -/** - * {@link AbstractStubInstrumentation} present that the GRPC plugin intercept the method getChannel in the - * {@link io.grpc.stub.AbstractStub} class by using the {@link org.apache.skywalking.apm.plugin.grpc.v1.AbstractStubInterceptor} - * class. - * - * @author zhang xin - */ public class AbstractStubInstrumentation extends ClassInstanceMethodsEnhancePluginDefine { public static final String INTERCEPT_CLASS = "org.apache.skywalking.apm.plugin.grpc.v1.AbstractStubInterceptor"; diff --git a/apm-sniffer/apm-sdk-plugin/httpClient-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/httpClient/v4/define/HttpClientInstrumentation.java b/apm-sniffer/apm-sdk-plugin/httpClient-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/httpClient/v4/define/HttpClientInstrumentation.java index d239ffea7ac3348d1a1dde9af139317f9c9b8fff..4d2f006fbf0ac4b30702d0a94cdcff92b644d21a 100644 --- a/apm-sniffer/apm-sdk-plugin/httpClient-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/httpClient/v4/define/HttpClientInstrumentation.java +++ b/apm-sniffer/apm-sdk-plugin/httpClient-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/httpClient/v4/define/HttpClientInstrumentation.java @@ -16,19 +16,11 @@ * */ - package org.apache.skywalking.apm.plugin.httpClient.v4.define; -import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.ClassInstanceMethodsEnhancePluginDefine; -import org.apache.skywalking.apm.plugin.httpClient.v4.HttpClientExecuteInterceptor; import org.apache.skywalking.apm.agent.core.plugin.interceptor.ConstructorInterceptPoint; +import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.ClassInstanceMethodsEnhancePluginDefine; -/** - * {@link HttpClientInstrumentation} present that skywalking intercepts {@link HttpClientInstrumentation#enhanceClass()} - * by using {@link HttpClientExecuteInterceptor} - * - * @author zhangxin - */ public abstract class HttpClientInstrumentation extends ClassInstanceMethodsEnhancePluginDefine { private static final String INTERCEPT_CLASS = "org.apache.skywalking.apm.plugin.httpClient.v4.HttpClientExecuteInterceptor"; diff --git a/apm-sniffer/apm-sdk-plugin/hystrix-1.x-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/hystrix-1.x-plugin/pom.xml new file mode 100644 index 0000000000000000000000000000000000000000..bc7b8bedd2649ac52321e59a69ea2cc6975ddf0b --- /dev/null +++ b/apm-sniffer/apm-sdk-plugin/hystrix-1.x-plugin/pom.xml @@ -0,0 +1,24 @@ + + + + apm-sdk-plugin + org.apache.skywalking + 5.0.0-alpha-SNAPSHOT + + 4.0.0 + + apm-hystrix-1.x-plugin + + + + + com.netflix.hystrix + hystrix-core + 1.4.0 + provided + + + + diff --git a/apm-sniffer/apm-sdk-plugin/hystrix-1.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/hystrix/v1/EnhanceRequireObjectCache.java b/apm-sniffer/apm-sdk-plugin/hystrix-1.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/hystrix/v1/EnhanceRequireObjectCache.java new file mode 100644 index 0000000000000000000000000000000000000000..2be967edea5dd87fd587888354daeb63ed5c2aed --- /dev/null +++ b/apm-sniffer/apm-sdk-plugin/hystrix-1.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/hystrix/v1/EnhanceRequireObjectCache.java @@ -0,0 +1,48 @@ +/* + * 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.plugin.hystrix.v1; + +import org.apache.skywalking.apm.agent.core.context.ContextSnapshot; + +/** + * {@link EnhanceRequireObjectCache} record the prefix operation name of span and {@link ContextSnapshot} object for + * tracing. + * + * @author zhang xin + */ +public class EnhanceRequireObjectCache { + private final String operationNamePrefix; + private ContextSnapshot contextSnapshot; + + public EnhanceRequireObjectCache(String prefix) { + operationNamePrefix = prefix; + } + + public String getOperationNamePrefix() { + return operationNamePrefix; + } + + public ContextSnapshot getContextSnapshot() { + return contextSnapshot; + } + + public void setContextSnapshot(ContextSnapshot contextSnapshot) { + this.contextSnapshot = contextSnapshot; + } +} diff --git a/apm-sniffer/apm-sdk-plugin/hystrix-1.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/hystrix/v1/HystrixCommandConstructorInterceptor.java b/apm-sniffer/apm-sdk-plugin/hystrix-1.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/hystrix/v1/HystrixCommandConstructorInterceptor.java new file mode 100644 index 0000000000000000000000000000000000000000..e6f8aeb31685bb5fe01588522e2309dfecb86e46 --- /dev/null +++ b/apm-sniffer/apm-sdk-plugin/hystrix-1.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/hystrix/v1/HystrixCommandConstructorInterceptor.java @@ -0,0 +1,60 @@ +/* + * 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.plugin.hystrix.v1; + +import com.netflix.hystrix.HystrixCollapser; +import com.netflix.hystrix.HystrixCommand; +import com.netflix.hystrix.HystrixObservableCollapser; +import com.netflix.hystrix.HystrixObservableCommand; +import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance; +import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.InstanceConstructorInterceptor; + +/** + * {@link HystrixCommandConstructorInterceptor} get CommandKey or CollapserKey as the + * operation name prefix of span when the constructor that the class hierarchy com.netflix.hystrix.HystrixCommand + * invoked. + * + * @author zhang xin + */ +public class HystrixCommandConstructorInterceptor implements InstanceConstructorInterceptor { + + public static final String OPERATION_NAME_PREFIX = "Hystrix/"; + + @Override + public void onConstruct(EnhancedInstance objInst, Object[] allArguments) { + String commandIdentify = ""; + + if (HystrixCommand.class.isAssignableFrom(objInst.getClass())) { + HystrixCommand hystrixCommand = (HystrixCommand)objInst; + commandIdentify = hystrixCommand.getCommandKey().name(); + } else if (HystrixCollapser.class.isAssignableFrom(objInst.getClass())) { + HystrixCollapser hystrixCollapser = (HystrixCollapser)objInst; + commandIdentify = hystrixCollapser.getCollapserKey().name(); + } else if (HystrixObservableCollapser.class.isAssignableFrom(objInst.getClass())) { + HystrixObservableCollapser hystrixObservableCollapser = (HystrixObservableCollapser)objInst; + commandIdentify = hystrixObservableCollapser.getCollapserKey().name(); + } else if (HystrixObservableCommand.class.isAssignableFrom(objInst.getClass())) { + HystrixObservableCommand hystrixObservableCommand = (HystrixObservableCommand)objInst; + commandIdentify = hystrixObservableCommand.getCommandKey().name(); + } + + objInst.setSkyWalkingDynamicField(new EnhanceRequireObjectCache(OPERATION_NAME_PREFIX + commandIdentify)); + } + +} diff --git a/apm-sniffer/apm-sdk-plugin/hystrix-1.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/hystrix/v1/HystrixCommandGetFallbackInterceptor.java b/apm-sniffer/apm-sdk-plugin/hystrix-1.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/hystrix/v1/HystrixCommandGetFallbackInterceptor.java new file mode 100644 index 0000000000000000000000000000000000000000..f935c77eb985c37a32c825e02ecba1318d2fdab3 --- /dev/null +++ b/apm-sniffer/apm-sdk-plugin/hystrix-1.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/hystrix/v1/HystrixCommandGetFallbackInterceptor.java @@ -0,0 +1,53 @@ +/* + * 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.plugin.hystrix.v1; + +import java.lang.reflect.Method; +import org.apache.skywalking.apm.agent.core.context.ContextManager; +import org.apache.skywalking.apm.agent.core.context.ContextSnapshot; +import org.apache.skywalking.apm.agent.core.context.trace.AbstractSpan; +import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance; +import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.InstanceMethodsAroundInterceptor; +import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.MethodInterceptResult; +import org.apache.skywalking.apm.network.trace.component.ComponentsDefine; + +public class HystrixCommandGetFallbackInterceptor implements InstanceMethodsAroundInterceptor { + @Override + public void beforeMethod(EnhancedInstance objInst, Method method, Object[] allArguments, Class[] argumentsTypes, + MethodInterceptResult result) throws Throwable { + EnhanceRequireObjectCache enhanceRequireObjectCache = (EnhanceRequireObjectCache)objInst.getSkyWalkingDynamicField(); + ContextSnapshot snapshot = enhanceRequireObjectCache.getContextSnapshot(); + + AbstractSpan activeSpan = ContextManager.createLocalSpan(enhanceRequireObjectCache.getOperationNamePrefix() + "/Fallback"); + activeSpan.setComponent(ComponentsDefine.HYSTRIX); + ContextManager.continued(snapshot); + } + + @Override + public Object afterMethod(EnhancedInstance objInst, Method method, Object[] allArguments, Class[] argumentsTypes, + Object ret) throws Throwable { + ContextManager.stopSpan(); + return ret; + } + + @Override public void handleMethodException(EnhancedInstance objInst, Method method, Object[] allArguments, + Class[] argumentsTypes, Throwable t) { + ContextManager.activeSpan().errorOccurred().log(t); + } +} diff --git a/apm-sniffer/apm-sdk-plugin/hystrix-1.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/hystrix/v1/HystrixCommandRunInterceptor.java b/apm-sniffer/apm-sdk-plugin/hystrix-1.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/hystrix/v1/HystrixCommandRunInterceptor.java new file mode 100644 index 0000000000000000000000000000000000000000..c281f59f98ca7f47eb91ac16774fd3079679e78a --- /dev/null +++ b/apm-sniffer/apm-sdk-plugin/hystrix-1.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/hystrix/v1/HystrixCommandRunInterceptor.java @@ -0,0 +1,57 @@ +/* + * 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.plugin.hystrix.v1; + +import java.lang.reflect.Method; +import org.apache.skywalking.apm.agent.core.context.ContextManager; +import org.apache.skywalking.apm.agent.core.context.ContextSnapshot; +import org.apache.skywalking.apm.agent.core.context.trace.AbstractSpan; +import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance; +import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.InstanceMethodsAroundInterceptor; +import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.MethodInterceptResult; +import org.apache.skywalking.apm.network.trace.component.ComponentsDefine; + +public class HystrixCommandRunInterceptor implements InstanceMethodsAroundInterceptor { + @Override + public void beforeMethod(EnhancedInstance objInst, Method method, Object[] allArguments, Class[] argumentsTypes, + MethodInterceptResult result) throws Throwable { + // create a local span, and continued, The `execution method` running in other thread if the + // hystrix strategy is `THREAD`. + EnhanceRequireObjectCache enhanceRequireObjectCache = (EnhanceRequireObjectCache)objInst.getSkyWalkingDynamicField(); + ContextSnapshot snapshot = enhanceRequireObjectCache.getContextSnapshot(); + + AbstractSpan activeSpan = ContextManager.createLocalSpan(enhanceRequireObjectCache.getOperationNamePrefix() + "/Execution"); + activeSpan.setComponent(ComponentsDefine.HYSTRIX); + ContextManager.continued(snapshot); + // Because of `fall back` method running in other thread. so we need capture concurrent span for tracing. + enhanceRequireObjectCache.setContextSnapshot(ContextManager.capture()); + } + + @Override + public Object afterMethod(EnhancedInstance objInst, Method method, Object[] allArguments, Class[] argumentsTypes, + Object ret) throws Throwable { + ContextManager.stopSpan(); + return ret; + } + + @Override public void handleMethodException(EnhancedInstance objInst, Method method, Object[] allArguments, + Class[] argumentsTypes, Throwable t) { + ContextManager.activeSpan().errorOccurred().log(t); + } +} diff --git a/apm-sniffer/apm-sdk-plugin/hystrix-1.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/hystrix/v1/HystrixPluginsInterceptor.java b/apm-sniffer/apm-sdk-plugin/hystrix-1.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/hystrix/v1/HystrixPluginsInterceptor.java new file mode 100644 index 0000000000000000000000000000000000000000..d29b62fd4a544e5e266d9523122d675eeaff695f --- /dev/null +++ b/apm-sniffer/apm-sdk-plugin/hystrix-1.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/hystrix/v1/HystrixPluginsInterceptor.java @@ -0,0 +1,50 @@ +/* + * 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.plugin.hystrix.v1; + +import com.netflix.hystrix.strategy.HystrixPlugins; +import com.netflix.hystrix.strategy.executionhook.HystrixCommandExecutionHook; +import java.lang.reflect.Method; +import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance; +import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.InstanceMethodsAroundInterceptor; +import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.MethodInterceptResult; + +/** + * {@link HystrixPluginsInterceptor} wrapper the {@link HystrixCommandExecutionHook} object by using {@link + * SWExecutionHookWrapper} when the {@link HystrixPlugins#getCommandExecutionHook()} method invoked. + * + * @author zhang xin + */ +public class HystrixPluginsInterceptor implements InstanceMethodsAroundInterceptor { + @Override + public void beforeMethod(EnhancedInstance objInst, Method method, Object[] allArguments, Class[] argumentsTypes, + MethodInterceptResult result) throws Throwable { + } + + @Override + public Object afterMethod(EnhancedInstance objInst, Method method, Object[] allArguments, Class[] argumentsTypes, + Object ret) throws Throwable { + return new SWExecutionHookWrapper((HystrixCommandExecutionHook)ret); + } + + @Override public void handleMethodException(EnhancedInstance objInst, Method method, Object[] allArguments, + Class[] argumentsTypes, Throwable t) { + + } +} diff --git a/apm-sniffer/apm-sdk-plugin/hystrix-1.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/hystrix/v1/SWExecutionHookWrapper.java b/apm-sniffer/apm-sdk-plugin/hystrix-1.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/hystrix/v1/SWExecutionHookWrapper.java new file mode 100644 index 0000000000000000000000000000000000000000..eedc646cd280452a553d101f6f6ae593e15dbdb3 --- /dev/null +++ b/apm-sniffer/apm-sdk-plugin/hystrix-1.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/hystrix/v1/SWExecutionHookWrapper.java @@ -0,0 +1,180 @@ +/* + * 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.plugin.hystrix.v1; + +import com.netflix.hystrix.HystrixCommand; +import com.netflix.hystrix.HystrixInvokable; +import com.netflix.hystrix.exception.HystrixRuntimeException; +import com.netflix.hystrix.strategy.executionhook.HystrixCommandExecutionHook; +import org.apache.skywalking.apm.agent.core.context.ContextManager; +import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance; + +/** + * {@link SWExecutionHookWrapper} wrapper the HystrixCommandExecutionHook object for tracing. + * + * @author zhang xin + */ +public class SWExecutionHookWrapper extends HystrixCommandExecutionHook { + private final HystrixCommandExecutionHook actual; + + public SWExecutionHookWrapper(HystrixCommandExecutionHook actual) { + this.actual = actual; + } + + @Override + public void onStart(HystrixInvokable commandInstance) { + EnhancedInstance enhancedInstance = (EnhancedInstance)commandInstance; + EnhanceRequireObjectCache enhanceRequireObjectCache = (EnhanceRequireObjectCache)enhancedInstance.getSkyWalkingDynamicField(); + enhanceRequireObjectCache.setContextSnapshot(ContextManager.capture()); + actual.onStart(commandInstance); + } + + @Override + public void onExecutionStart(HystrixInvokable commandInstance) { + actual.onExecutionStart(commandInstance); + } + + @Override + public Exception onExecutionError(HystrixInvokable commandInstance, Exception e) { + return actual.onExecutionError(commandInstance, e); + } + + @Override + public void onExecutionSuccess(HystrixInvokable commandInstance) { + actual.onExecutionSuccess(commandInstance); + } + + @Override + public void onFallbackStart(HystrixInvokable commandInstance) { + actual.onFallbackStart(commandInstance); + } + + @Override + public Exception onFallbackError(HystrixInvokable commandInstance, Exception e) { + return actual.onFallbackError(commandInstance, e); + } + + @Override + public void onFallbackSuccess(HystrixInvokable commandInstance) { + actual.onFallbackSuccess(commandInstance); + } + + @Override public Exception onRunError(HystrixInvokable commandInstance, Exception e) { + return actual.onRunError(commandInstance, e); + } + + @Override public Exception onRunError(HystrixCommand commandInstance, Exception e) { + return actual.onRunError(commandInstance, e); + } + + @Override + public Exception onError(HystrixInvokable commandInstance, HystrixRuntimeException.FailureType failureType, + Exception e) { + return actual.onError(commandInstance, failureType, e); + } + + @Override public void onSuccess(HystrixInvokable commandInstance) { + actual.onSuccess(commandInstance); + } + + @Override public T onEmit(HystrixInvokable commandInstance, T value) { + return actual.onEmit(commandInstance, value); + } + + @Override public T onExecutionEmit(HystrixInvokable commandInstance, T value) { + return actual.onExecutionEmit(commandInstance, value); + } + + @Override public T onFallbackEmit(HystrixInvokable commandInstance, T value) { + return actual.onFallbackEmit(commandInstance, value); + } + + @Override public void onCacheHit(HystrixInvokable commandInstance) { + actual.onCacheHit(commandInstance); + } + + @Override public void onThreadComplete(HystrixInvokable commandInstance) { + actual.onThreadComplete(commandInstance); + } + + @Override public void onThreadStart(HystrixInvokable commandInstance) { + actual.onThreadStart(commandInstance); + } + + @Override + public Exception onError(HystrixCommand commandInstance, HystrixRuntimeException.FailureType failureType, + Exception e) { + return actual.onError(commandInstance, failureType, e); + } + + @Override public Exception onFallbackError(HystrixCommand commandInstance, Exception e) { + return actual.onFallbackError(commandInstance, e); + } + + @Override public T onComplete(HystrixCommand commandInstance, T response) { + return actual.onComplete(commandInstance, response); + } + + @Override public T onComplete(HystrixInvokable commandInstance, T response) { + return actual.onComplete(commandInstance, response); + } + + @Override public T onFallbackSuccess(HystrixCommand commandInstance, T fallbackResponse) { + return actual.onFallbackSuccess(commandInstance, fallbackResponse); + } + + @Override public T onFallbackSuccess(HystrixInvokable commandInstance, T fallbackResponse) { + return actual.onFallbackSuccess(commandInstance, fallbackResponse); + } + + @Override public T onRunSuccess(HystrixCommand commandInstance, T response) { + return actual.onRunSuccess(commandInstance, response); + } + + @Override public T onRunSuccess(HystrixInvokable commandInstance, T response) { + return actual.onRunSuccess(commandInstance, response); + } + + @Override public void onFallbackStart(HystrixCommand commandInstance) { + actual.onFallbackStart(commandInstance); + } + + @Override public void onRunStart(HystrixCommand commandInstance) { + actual.onRunStart(commandInstance); + } + + @Override public void onRunStart(HystrixInvokable commandInstance) { + actual.onRunStart(commandInstance); + } + + @Override public void onStart(HystrixCommand commandInstance) { + EnhancedInstance enhancedInstance = (EnhancedInstance)commandInstance; + EnhanceRequireObjectCache enhanceRequireObjectCache = (EnhanceRequireObjectCache)enhancedInstance.getSkyWalkingDynamicField(); + enhanceRequireObjectCache.setContextSnapshot(ContextManager.capture()); + actual.onStart(commandInstance); + } + + @Override public void onThreadComplete(HystrixCommand commandInstance) { + actual.onThreadComplete(commandInstance); + } + + @Override public void onThreadStart(HystrixCommand commandInstance) { + actual.onThreadStart(commandInstance); + } +} diff --git a/apm-sniffer/apm-sdk-plugin/hystrix-1.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/hystrix/v1/define/HystrixCommandInstrumentation.java b/apm-sniffer/apm-sdk-plugin/hystrix-1.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/hystrix/v1/define/HystrixCommandInstrumentation.java new file mode 100644 index 0000000000000000000000000000000000000000..780db9359195a28d922767b9ba28725d0e5bb491 --- /dev/null +++ b/apm-sniffer/apm-sdk-plugin/hystrix-1.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/hystrix/v1/define/HystrixCommandInstrumentation.java @@ -0,0 +1,86 @@ +/* + * 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.plugin.hystrix.v1.define; + +import net.bytebuddy.description.method.MethodDescription; +import net.bytebuddy.matcher.ElementMatcher; +import org.apache.skywalking.apm.agent.core.plugin.interceptor.ConstructorInterceptPoint; +import org.apache.skywalking.apm.agent.core.plugin.interceptor.InstanceMethodsInterceptPoint; +import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.ClassInstanceMethodsEnhancePluginDefine; +import org.apache.skywalking.apm.agent.core.plugin.match.ClassMatch; + +import static net.bytebuddy.matcher.ElementMatchers.any; +import static net.bytebuddy.matcher.ElementMatchers.named; +import static org.apache.skywalking.apm.agent.core.plugin.match.HierarchyMatch.byHierarchyMatch; + +public class HystrixCommandInstrumentation extends ClassInstanceMethodsEnhancePluginDefine { + + public static final String INTERCEPT_CLASS = "org.apache.skywalking.apm.plugin.hystrix.v1.HystrixCommandConstructorInterceptor"; + public static final String ENHANCE_CLASS = "com.netflix.hystrix.HystrixCommand"; + + @Override protected ConstructorInterceptPoint[] getConstructorsInterceptPoints() { + return new ConstructorInterceptPoint[] { + new ConstructorInterceptPoint() { + @Override public ElementMatcher getConstructorMatcher() { + return any(); + } + + @Override public String getConstructorInterceptor() { + return INTERCEPT_CLASS; + } + } + }; + } + + @Override protected InstanceMethodsInterceptPoint[] getInstanceMethodsInterceptPoints() { + return new InstanceMethodsInterceptPoint[] { + new InstanceMethodsInterceptPoint() { + @Override public ElementMatcher getMethodsMatcher() { + return named("run"); + } + + @Override public String getMethodsInterceptor() { + return "org.apache.skywalking.apm.plugin.hystrix.v1.HystrixCommandRunInterceptor"; + } + + @Override public boolean isOverrideArgs() { + return false; + } + }, + new InstanceMethodsInterceptPoint() { + @Override public ElementMatcher getMethodsMatcher() { + return named("getFallback"); + } + + @Override public String getMethodsInterceptor() { + return "org.apache.skywalking.apm.plugin.hystrix.v1.HystrixCommandGetFallbackInterceptor"; + } + + @Override public boolean isOverrideArgs() { + return false; + } + } + }; + } + + @Override protected ClassMatch enhanceClass() { + return byHierarchyMatch(new String[] {ENHANCE_CLASS}); + } + +} diff --git a/apm-sniffer/apm-sdk-plugin/hystrix-1.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/hystrix/v1/define/HystrixPluginsInstrumentation.java b/apm-sniffer/apm-sdk-plugin/hystrix-1.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/hystrix/v1/define/HystrixPluginsInstrumentation.java new file mode 100644 index 0000000000000000000000000000000000000000..0c59115d4ce33e5e09c405b87ebd3fa51410291b --- /dev/null +++ b/apm-sniffer/apm-sdk-plugin/hystrix-1.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/hystrix/v1/define/HystrixPluginsInstrumentation.java @@ -0,0 +1,65 @@ +/* + * 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.plugin.hystrix.v1.define; + +import net.bytebuddy.description.method.MethodDescription; +import net.bytebuddy.matcher.ElementMatcher; +import org.apache.skywalking.apm.agent.core.plugin.interceptor.ConstructorInterceptPoint; +import org.apache.skywalking.apm.agent.core.plugin.interceptor.InstanceMethodsInterceptPoint; +import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.ClassInstanceMethodsEnhancePluginDefine; +import org.apache.skywalking.apm.agent.core.plugin.match.ClassMatch; + +import static net.bytebuddy.matcher.ElementMatchers.named; +import static org.apache.skywalking.apm.agent.core.plugin.match.NameMatch.byName; + +public class HystrixPluginsInstrumentation extends ClassInstanceMethodsEnhancePluginDefine { + + public static final String INTERCEPT_CLASS = "org.apache.skywalking.apm.plugin.hystrix.v1.HystrixPluginsInterceptor"; + public static final String ENHANCE_METHOD = "getCommandExecutionHook"; + public static final String ENHANCE_CLASS = "com.netflix.hystrix.strategy.HystrixPlugins"; + + @Override + protected ConstructorInterceptPoint[] getConstructorsInterceptPoints() { + return new ConstructorInterceptPoint[0]; + } + + @Override + protected InstanceMethodsInterceptPoint[] getInstanceMethodsInterceptPoints() { + return new InstanceMethodsInterceptPoint[] { + new InstanceMethodsInterceptPoint() { + @Override public ElementMatcher getMethodsMatcher() { + return named(ENHANCE_METHOD); + } + + @Override public String getMethodsInterceptor() { + return INTERCEPT_CLASS; + } + + @Override public boolean isOverrideArgs() { + return false; + } + } + }; + } + + @Override + protected ClassMatch enhanceClass() { + return byName(ENHANCE_CLASS); + } +} diff --git a/apm-sniffer/apm-sdk-plugin/hystrix-1.x-plugin/src/main/resources/skywalking-plugin.def b/apm-sniffer/apm-sdk-plugin/hystrix-1.x-plugin/src/main/resources/skywalking-plugin.def new file mode 100644 index 0000000000000000000000000000000000000000..0c9c9c94f689ad8177384574d1e8921e05095f6f --- /dev/null +++ b/apm-sniffer/apm-sdk-plugin/hystrix-1.x-plugin/src/main/resources/skywalking-plugin.def @@ -0,0 +1,2 @@ +hystrix-1.x=org.apache.skywalking.apm.plugin.hystrix.v1.define.HystrixCommandInstrumentation +hystrix-1.x=org.apache.skywalking.apm.plugin.hystrix.v1.define.HystrixPluginsInstrumentation diff --git a/apm-sniffer/apm-sdk-plugin/jdbc-commons/src/main/java/org/apache/skywalking/apm/plugin/jdbc/define/AbstractDriverInstrumentation.java b/apm-sniffer/apm-sdk-plugin/jdbc-commons/src/main/java/org/apache/skywalking/apm/plugin/jdbc/define/AbstractDriverInstrumentation.java index 2c6a9b49b767da5390dd887e08dc9672fb1cdb8c..ff430a75d81360109bbbd7af1d5d922741539340 100644 --- a/apm-sniffer/apm-sdk-plugin/jdbc-commons/src/main/java/org/apache/skywalking/apm/plugin/jdbc/define/AbstractDriverInstrumentation.java +++ b/apm-sniffer/apm-sdk-plugin/jdbc-commons/src/main/java/org/apache/skywalking/apm/plugin/jdbc/define/AbstractDriverInstrumentation.java @@ -16,23 +16,16 @@ * */ - package org.apache.skywalking.apm.plugin.jdbc.define; import net.bytebuddy.description.method.MethodDescription; import net.bytebuddy.matcher.ElementMatcher; +import org.apache.skywalking.apm.agent.core.plugin.interceptor.ConstructorInterceptPoint; import org.apache.skywalking.apm.agent.core.plugin.interceptor.InstanceMethodsInterceptPoint; import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.ClassInstanceMethodsEnhancePluginDefine; -import org.apache.skywalking.apm.agent.core.plugin.interceptor.ConstructorInterceptPoint; -import org.apache.skywalking.apm.plugin.jdbc.JDBCDriverInterceptor; import static net.bytebuddy.matcher.ElementMatchers.named; -/** - * JDBC plugin using {@link JDBCDriverInterceptor} to intercept the connect method of all driver class. - * - * @author zhangxin - */ public abstract class AbstractDriverInstrumentation extends ClassInstanceMethodsEnhancePluginDefine { private static final String DRIVER_INTERCEPT_CLASS = "org.apache.skywalking.apm.plugin.jdbc.JDBCDriverInterceptor"; diff --git a/apm-sniffer/apm-sdk-plugin/jedis-2.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jedis/v2/define/JedisClusterInstrumentation.java b/apm-sniffer/apm-sdk-plugin/jedis-2.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jedis/v2/define/JedisClusterInstrumentation.java index d5089660524d34ec80197c282b2f56ee8504f939..2d5b4c24899dabe441610607942dfe6232b49bc0 100644 --- a/apm-sniffer/apm-sdk-plugin/jedis-2.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jedis/v2/define/JedisClusterInstrumentation.java +++ b/apm-sniffer/apm-sdk-plugin/jedis-2.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jedis/v2/define/JedisClusterInstrumentation.java @@ -16,34 +16,21 @@ * */ - package org.apache.skywalking.apm.plugin.jedis.v2.define; import java.util.Set; import net.bytebuddy.description.method.MethodDescription; import net.bytebuddy.matcher.ElementMatcher; +import org.apache.skywalking.apm.agent.core.plugin.interceptor.ConstructorInterceptPoint; import org.apache.skywalking.apm.agent.core.plugin.interceptor.InstanceMethodsInterceptPoint; import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.ClassInstanceMethodsEnhancePluginDefine; -import org.apache.skywalking.apm.agent.core.plugin.interceptor.ConstructorInterceptPoint; import org.apache.skywalking.apm.agent.core.plugin.match.ClassMatch; -import org.apache.skywalking.apm.plugin.jedis.v2.JedisClusterConstructorWithHostAndPortArgInterceptor; -import org.apache.skywalking.apm.plugin.jedis.v2.JedisClusterConstructorWithListHostAndPortArgInterceptor; -import org.apache.skywalking.apm.plugin.jedis.v2.JedisMethodInterceptor; import org.apache.skywalking.apm.plugin.jedis.v2.RedisMethodMatch; import static net.bytebuddy.matcher.ElementMatchers.takesArgument; import static org.apache.skywalking.apm.agent.core.plugin.bytebuddy.ArgumentTypeNameMatch.takesArgumentWithType; import static org.apache.skywalking.apm.agent.core.plugin.match.NameMatch.byName; -/** - * {@link JedisClusterInstrumentation} presents that skywalking intercepts all constructors and methods of {@link - * redis.clients.jedis.JedisCluster}. {@link JedisClusterConstructorWithHostAndPortArgInterceptor} - * intercepts all constructor with argument {@link redis.clients.jedis.HostAndPort} and the other constructor intercept - * by class {@link JedisClusterConstructorWithListHostAndPortArgInterceptor}. {@link JedisMethodInterceptor} intercept - * all methods of {@link redis.clients.jedis.JedisCluster} - * - * @author zhangxin - */ public class JedisClusterInstrumentation extends ClassInstanceMethodsEnhancePluginDefine { private static final String ARGUMENT_TYPE_NAME = "redis.clients.jedis.HostAndPort"; diff --git a/apm-sniffer/apm-sdk-plugin/jedis-2.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jedis/v2/define/JedisInstrumentation.java b/apm-sniffer/apm-sdk-plugin/jedis-2.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jedis/v2/define/JedisInstrumentation.java index ee4d1a82ed1756d5b7b1495b56eeb51a2bb5e0ac..96a310af8a174bd1c8e344e55e302a9c56448702 100644 --- a/apm-sniffer/apm-sdk-plugin/jedis-2.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jedis/v2/define/JedisInstrumentation.java +++ b/apm-sniffer/apm-sdk-plugin/jedis-2.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jedis/v2/define/JedisInstrumentation.java @@ -16,35 +16,21 @@ * */ - package org.apache.skywalking.apm.plugin.jedis.v2.define; import java.net.URI; import net.bytebuddy.description.method.MethodDescription; import net.bytebuddy.matcher.ElementMatcher; +import org.apache.skywalking.apm.agent.core.plugin.interceptor.ConstructorInterceptPoint; import org.apache.skywalking.apm.agent.core.plugin.interceptor.InstanceMethodsInterceptPoint; import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.ClassInstanceMethodsEnhancePluginDefine; -import org.apache.skywalking.apm.plugin.jedis.v2.JedisConstructorWithShardInfoArgInterceptor; -import org.apache.skywalking.apm.agent.core.plugin.interceptor.ConstructorInterceptPoint; import org.apache.skywalking.apm.agent.core.plugin.match.ClassMatch; -import org.apache.skywalking.apm.plugin.jedis.v2.JedisConstructorWithUriArgInterceptor; -import org.apache.skywalking.apm.plugin.jedis.v2.JedisMethodInterceptor; import org.apache.skywalking.apm.plugin.jedis.v2.RedisMethodMatch; import static net.bytebuddy.matcher.ElementMatchers.takesArgument; import static org.apache.skywalking.apm.agent.core.plugin.bytebuddy.ArgumentTypeNameMatch.takesArgumentWithType; import static org.apache.skywalking.apm.agent.core.plugin.match.NameMatch.byName; -/** - * {@link JedisInstrumentation} presents that skywalking intercept all constructors and methods of {@link - * redis.clients.jedis.Jedis}. {@link JedisConstructorWithShardInfoArgInterceptor} intercepts all constructor with - * argument {@link redis.clients.jedis.HostAndPort} ,{@link JedisConstructorWithUriArgInterceptor} intercepts the - * constructors with uri argument and the other constructor intercept by class {@link - * JedisConstructorWithShardInfoArgInterceptor}. {@link JedisMethodInterceptor} intercept all methods of {@link - * redis.clients.jedis.Jedis}. - * - * @author zhangxin - */ public class JedisInstrumentation extends ClassInstanceMethodsEnhancePluginDefine { private static final String HOST_AND_PORT_ARG_TYPE_NAME = "redis.clients.jedis.HostAndPort"; diff --git a/apm-sniffer/apm-sdk-plugin/kafka-v1-plugin/src/main/java/org/apache/skywalking/apm/plugin/kafka/v1/define/CallbackInstrumentation.java b/apm-sniffer/apm-sdk-plugin/kafka-v1-plugin/src/main/java/org/apache/skywalking/apm/plugin/kafka/v1/define/CallbackInstrumentation.java index 1744ce702b596967fa337932bcd88556c1570c13..918da0d605fe52436498afca3c49ce17c12ecbd7 100644 --- a/apm-sniffer/apm-sdk-plugin/kafka-v1-plugin/src/main/java/org/apache/skywalking/apm/plugin/kafka/v1/define/CallbackInstrumentation.java +++ b/apm-sniffer/apm-sdk-plugin/kafka-v1-plugin/src/main/java/org/apache/skywalking/apm/plugin/kafka/v1/define/CallbackInstrumentation.java @@ -24,17 +24,10 @@ import org.apache.skywalking.apm.agent.core.plugin.interceptor.ConstructorInterc import org.apache.skywalking.apm.agent.core.plugin.interceptor.InstanceMethodsInterceptPoint; import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.ClassInstanceMethodsEnhancePluginDefine; import org.apache.skywalking.apm.agent.core.plugin.match.ClassMatch; -import org.apache.skywalking.apm.plugin.kafka.v1.CallbackInterceptor; import static net.bytebuddy.matcher.ElementMatchers.named; import static org.apache.skywalking.apm.agent.core.plugin.match.HierarchyMatch.byHierarchyMatch; -/** - * {@link CallbackInstrumentation} defined that {@link CallbackInterceptor} - * intercept the method onCompletion in the class org.apache.kafka.clients.producer.Callback. - * - * @author zhangxin - */ public class CallbackInstrumentation extends ClassInstanceMethodsEnhancePluginDefine { public static final String ENHANCE_CLASS = "org.apache.kafka.clients.producer.Callback"; diff --git a/apm-sniffer/apm-sdk-plugin/kafka-v1-plugin/src/main/java/org/apache/skywalking/apm/plugin/kafka/v1/define/KafkaConsumerInstrumentation.java b/apm-sniffer/apm-sdk-plugin/kafka-v1-plugin/src/main/java/org/apache/skywalking/apm/plugin/kafka/v1/define/KafkaConsumerInstrumentation.java index 878a8302c9b94151fe7098b516943dcf439f4352..f817aa36bd6ae8c9b9773d00436c960a29edf214 100644 --- a/apm-sniffer/apm-sdk-plugin/kafka-v1-plugin/src/main/java/org/apache/skywalking/apm/plugin/kafka/v1/define/KafkaConsumerInstrumentation.java +++ b/apm-sniffer/apm-sdk-plugin/kafka-v1-plugin/src/main/java/org/apache/skywalking/apm/plugin/kafka/v1/define/KafkaConsumerInstrumentation.java @@ -24,18 +24,14 @@ import org.apache.skywalking.apm.agent.core.plugin.interceptor.ConstructorInterc import org.apache.skywalking.apm.agent.core.plugin.interceptor.InstanceMethodsInterceptPoint; import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.ClassInstanceMethodsEnhancePluginDefine; import org.apache.skywalking.apm.agent.core.plugin.match.ClassMatch; -import org.apache.skywalking.apm.plugin.kafka.v1.KafkaConsumerInterceptor; import static net.bytebuddy.matcher.ElementMatchers.named; import static org.apache.skywalking.apm.agent.core.plugin.bytebuddy.ArgumentTypeNameMatch.takesArgumentWithType; import static org.apache.skywalking.apm.agent.core.plugin.match.NameMatch.byName; /** - * {@link KafkaProducerInstrumentation} define that {@link KafkaConsumerInterceptor} - * intercept the method send in the class org.apache.kafka.clients.producer.KafkaProducer. * Here is the intercept process steps. * - * *
  *  1. Record the topic when the client invoke subscribed method
  *  2. Create the entry span when the client invoke the method pollOnce.
diff --git a/apm-sniffer/apm-sdk-plugin/kafka-v1-plugin/src/main/java/org/apache/skywalking/apm/plugin/kafka/v1/define/KafkaProducerInstrumentation.java b/apm-sniffer/apm-sdk-plugin/kafka-v1-plugin/src/main/java/org/apache/skywalking/apm/plugin/kafka/v1/define/KafkaProducerInstrumentation.java
index f93e936c633eb680663f9277e1228455110c337c..b44ccff4889f8bc0b161ab8c13feeac57cfeb287 100644
--- a/apm-sniffer/apm-sdk-plugin/kafka-v1-plugin/src/main/java/org/apache/skywalking/apm/plugin/kafka/v1/define/KafkaProducerInstrumentation.java
+++ b/apm-sniffer/apm-sdk-plugin/kafka-v1-plugin/src/main/java/org/apache/skywalking/apm/plugin/kafka/v1/define/KafkaProducerInstrumentation.java
@@ -24,18 +24,14 @@ import org.apache.skywalking.apm.agent.core.plugin.interceptor.ConstructorInterc
 import org.apache.skywalking.apm.agent.core.plugin.interceptor.InstanceMethodsInterceptPoint;
 import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.ClassInstanceMethodsEnhancePluginDefine;
 import org.apache.skywalking.apm.agent.core.plugin.match.ClassMatch;
-import org.apache.skywalking.apm.plugin.kafka.v1.KafkaProducerInterceptor;
 
 import static net.bytebuddy.matcher.ElementMatchers.named;
 import static org.apache.skywalking.apm.agent.core.plugin.bytebuddy.ArgumentTypeNameMatch.takesArgumentWithType;
 import static org.apache.skywalking.apm.agent.core.plugin.match.NameMatch.byName;
 
 /**
- * {@link KafkaProducerInstrumentation} define that {@link KafkaProducerInterceptor}
- * intercept the method send in the class org.apache.kafka.clients.producer.KafkaProducer.
  * Here is the intercept process steps.
  *
- *
  * 
  *  1. Record the broker address when the client create the org.apache.kafka.clients.producer.KafkaProducer
  * instance
diff --git a/apm-sniffer/apm-sdk-plugin/kafka-v1-plugin/src/main/java/org/apache/skywalking/apm/plugin/kafka/v1/define/ProducerRecordInstrumentation.java b/apm-sniffer/apm-sdk-plugin/kafka-v1-plugin/src/main/java/org/apache/skywalking/apm/plugin/kafka/v1/define/ProducerRecordInstrumentation.java
index e2035b29f1b5c8bec1ed9380dfc1704f82a93c02..f79c44a99528689a1a93c403c340fd3081a4c2b0 100644
--- a/apm-sniffer/apm-sdk-plugin/kafka-v1-plugin/src/main/java/org/apache/skywalking/apm/plugin/kafka/v1/define/ProducerRecordInstrumentation.java
+++ b/apm-sniffer/apm-sdk-plugin/kafka-v1-plugin/src/main/java/org/apache/skywalking/apm/plugin/kafka/v1/define/ProducerRecordInstrumentation.java
@@ -24,19 +24,10 @@ import org.apache.skywalking.apm.agent.core.plugin.interceptor.ConstructorInterc
 import org.apache.skywalking.apm.agent.core.plugin.interceptor.InstanceMethodsInterceptPoint;
 import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.ClassInstanceMethodsEnhancePluginDefine;
 import org.apache.skywalking.apm.agent.core.plugin.match.ClassMatch;
-import org.apache.skywalking.apm.plugin.kafka.v1.ProducerRecordConstructorInterceptor;
 
 import static net.bytebuddy.matcher.ElementMatchers.takesArguments;
 import static org.apache.skywalking.apm.agent.core.plugin.match.NameMatch.byName;
 
-/**
- * {@link ProducerRecordInstrumentation} define that {@link ProducerRecordConstructorInterceptor}
- * intercept the constructor in the class org.apache.kafka.clients.producer.ProducerRecord for record the
- * topic name and propagate the Context of trace.
- *
- * @author zhang xin
- * @see org.apache.skywalking.apm.plugin.kafka.v1.define.KafkaProducerInstrumentation
- */
 public class ProducerRecordInstrumentation extends ClassInstanceMethodsEnhancePluginDefine {
 
     public static final String CONSTRUCTOR_INTERCEPTOR_CLASS = "org.apache.skywalking.apm.plugin.kafka.v1.ProducerRecordConstructorInterceptor";
diff --git a/apm-sniffer/apm-sdk-plugin/motan-plugin/src/main/java/org/apache/skywalking/apm/plugin/motan/define/MotanConsumerInstrumentation.java b/apm-sniffer/apm-sdk-plugin/motan-plugin/src/main/java/org/apache/skywalking/apm/plugin/motan/define/MotanConsumerInstrumentation.java
index f3fc77fb8b6cc7593967d190bc8c2784b815fe1f..21328955a23862d84ae2bde8c195a0eb8eeafea9 100644
--- a/apm-sniffer/apm-sdk-plugin/motan-plugin/src/main/java/org/apache/skywalking/apm/plugin/motan/define/MotanConsumerInstrumentation.java
+++ b/apm-sniffer/apm-sdk-plugin/motan-plugin/src/main/java/org/apache/skywalking/apm/plugin/motan/define/MotanConsumerInstrumentation.java
@@ -16,26 +16,18 @@
  *
  */
 
-
 package org.apache.skywalking.apm.plugin.motan.define;
 
 import net.bytebuddy.description.method.MethodDescription;
 import net.bytebuddy.matcher.ElementMatcher;
+import org.apache.skywalking.apm.agent.core.plugin.interceptor.ConstructorInterceptPoint;
 import org.apache.skywalking.apm.agent.core.plugin.interceptor.InstanceMethodsInterceptPoint;
 import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.ClassInstanceMethodsEnhancePluginDefine;
 import org.apache.skywalking.apm.agent.core.plugin.match.ClassMatch;
 import org.apache.skywalking.apm.agent.core.plugin.match.NameMatch;
-import org.apache.skywalking.apm.agent.core.plugin.interceptor.ConstructorInterceptPoint;
-import org.apache.skywalking.apm.plugin.motan.MotanProviderInterceptor;
 
 import static net.bytebuddy.matcher.ElementMatchers.named;
 
-/**
- * {@link MotanConsumerInstrumentation} presents that skywalking intercept {@link com.weibo.api.motan.cluster.support.ClusterSpi#call(com.weibo.api.motan.rpc.Request)}
- * by using {@link MotanProviderInterceptor}.
- *
- * @author zhangxin
- */
 public class MotanConsumerInstrumentation extends ClassInstanceMethodsEnhancePluginDefine {
 
     private static final String ENHANCE_CLASS = "com.weibo.api.motan.transport.ProviderMessageRouter";
diff --git a/apm-sniffer/apm-sdk-plugin/motan-plugin/src/main/java/org/apache/skywalking/apm/plugin/motan/define/MotanProviderInstrumentation.java b/apm-sniffer/apm-sdk-plugin/motan-plugin/src/main/java/org/apache/skywalking/apm/plugin/motan/define/MotanProviderInstrumentation.java
index 32456c3d8b7f939ec05d21b1f4d73f990e490321..36159da9720ed893540656a610b4a5ba03ad1f78 100644
--- a/apm-sniffer/apm-sdk-plugin/motan-plugin/src/main/java/org/apache/skywalking/apm/plugin/motan/define/MotanProviderInstrumentation.java
+++ b/apm-sniffer/apm-sdk-plugin/motan-plugin/src/main/java/org/apache/skywalking/apm/plugin/motan/define/MotanProviderInstrumentation.java
@@ -16,30 +16,20 @@
  *
  */
 
-
 package org.apache.skywalking.apm.plugin.motan.define;
 
 import com.weibo.api.motan.rpc.Request;
 import net.bytebuddy.description.method.MethodDescription;
 import net.bytebuddy.matcher.ElementMatcher;
+import org.apache.skywalking.apm.agent.core.plugin.interceptor.ConstructorInterceptPoint;
 import org.apache.skywalking.apm.agent.core.plugin.interceptor.InstanceMethodsInterceptPoint;
 import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.ClassInstanceMethodsEnhancePluginDefine;
-import org.apache.skywalking.apm.agent.core.plugin.match.NameMatch;
-import org.apache.skywalking.apm.plugin.motan.MotanConsumerInterceptor;
-import org.apache.skywalking.apm.agent.core.plugin.interceptor.ConstructorInterceptPoint;
 import org.apache.skywalking.apm.agent.core.plugin.match.ClassMatch;
+import org.apache.skywalking.apm.agent.core.plugin.match.NameMatch;
 
 import static net.bytebuddy.matcher.ElementMatchers.any;
 import static net.bytebuddy.matcher.ElementMatchers.named;
 
-/**
- * {@link MotanProviderInstrumentation} presents that skywalking will use
- * {@link MotanConsumerInterceptor} to intercept
- * all constructor of {@link com.weibo.api.motan.rpc.AbstractProvider} and
- * {@link com.weibo.api.motan.rpc.AbstractProvider#call(Request)}.
- *
- * @author zhangxin
- */
 public class MotanProviderInstrumentation extends ClassInstanceMethodsEnhancePluginDefine {
 
     /**
diff --git a/apm-sniffer/apm-sdk-plugin/oracle-10.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/oracle/define/OracleCallableInstrumentation.java b/apm-sniffer/apm-sdk-plugin/oracle-10.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/oracle/define/OracleCallableInstrumentation.java
index 992fa8e4c10f45c3a4b2784506d75eaa0ea3de78..d4f4a0c3f8fe3afc38a4f3edb29759d74ab7ff56 100644
--- a/apm-sniffer/apm-sdk-plugin/oracle-10.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/oracle/define/OracleCallableInstrumentation.java
+++ b/apm-sniffer/apm-sdk-plugin/oracle-10.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/oracle/define/OracleCallableInstrumentation.java
@@ -29,13 +29,6 @@ import static net.bytebuddy.matcher.ElementMatchers.named;
 import static org.apache.skywalking.apm.agent.core.plugin.match.NameMatch.byName;
 import static org.apache.skywalking.apm.plugin.jdbc.oracle.Constants.PREPARED_STATEMENT_INTERCEPT_CLASS;
 
-/**
- * {@link OracleCallableInstrumentation} define that the oracle plugin intercept the execute, executeQuery and
- * executeUpdate method in {@link oracle.jdbc.driver.OracleCallableStatement} class by
- * {@link org.apache.skywalking.apm.plugin.jdbc.oracle.StatementExecuteMethodsInterceptor}
- *
- * @author zhangxin
- */
 public class OracleCallableInstrumentation extends ClassInstanceMethodsEnhancePluginDefine {
 
     public static final String ENHANCE_CLASS = "oracle.jdbc.driver.OracleCallableStatement";
diff --git a/apm-sniffer/apm-sdk-plugin/oracle-10.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/oracle/define/OraclePrepareStatementInstrumentation.java b/apm-sniffer/apm-sdk-plugin/oracle-10.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/oracle/define/OraclePrepareStatementInstrumentation.java
index bbeacf716a09b26a9dd1d6a49e86accc4fb8ce93..fe69675ee91b5bb03c21729fb196d424d6996db6 100644
--- a/apm-sniffer/apm-sdk-plugin/oracle-10.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/oracle/define/OraclePrepareStatementInstrumentation.java
+++ b/apm-sniffer/apm-sdk-plugin/oracle-10.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/oracle/define/OraclePrepareStatementInstrumentation.java
@@ -29,13 +29,6 @@ import static net.bytebuddy.matcher.ElementMatchers.named;
 import static org.apache.skywalking.apm.agent.core.plugin.match.NameMatch.byName;
 import static org.apache.skywalking.apm.plugin.jdbc.oracle.Constants.PREPARED_STATEMENT_INTERCEPT_CLASS;
 
-/**
- * {@link OraclePrepareStatementInstrumentation} define that the oracle plugin intercept the execute,
- * executeQuery, executeUpdate and executeLargeUpdate method in  oracle.jdbc.driver.OraclePreparedStatement
- * class by ${@link org.apache.skywalking.apm.plugin.jdbc.oracle.StatementExecuteMethodsInterceptor}
- *
- * @author zhangxin
- */
 public class OraclePrepareStatementInstrumentation extends ClassInstanceMethodsEnhancePluginDefine {
 
     public static final String ENHANCE_CLASS = "oracle.jdbc.driver.OraclePreparedStatement";
diff --git a/apm-sniffer/apm-sdk-plugin/oracle-10.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/oracle/define/OracleStatementInstrumentation.java b/apm-sniffer/apm-sdk-plugin/oracle-10.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/oracle/define/OracleStatementInstrumentation.java
index 1a1db468aad1d43505fb8778d4368f3b5eb27d25..e55f82f341af4d7aaad77ea32907dcf6fec37a29 100644
--- a/apm-sniffer/apm-sdk-plugin/oracle-10.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/oracle/define/OracleStatementInstrumentation.java
+++ b/apm-sniffer/apm-sdk-plugin/oracle-10.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/oracle/define/OracleStatementInstrumentation.java
@@ -29,13 +29,6 @@ import static net.bytebuddy.matcher.ElementMatchers.named;
 import static org.apache.skywalking.apm.agent.core.plugin.match.NameMatch.byName;
 import static org.apache.skywalking.apm.plugin.jdbc.oracle.Constants.STATEMENT_INTERCEPT_CLASS;
 
-/**
- * {@link OracleStatementInstrumentation} define that the oracle plugin intercept the execute, executeQuery,
- * executeUpdate and executeLargeUpdate method in {@link oracle.jdbc.driver.OracleStatement} class by
- * {@link org.apache.skywalking.apm.plugin.jdbc.oracle.StatementExecuteMethodsInterceptor}
- *
- * @author zhangxin
- */
 public class OracleStatementInstrumentation extends ClassInstanceMethodsEnhancePluginDefine {
 
     public static final String ENHANCE_CLASS = "oracle.jdbc.driver.OracleStatement";
diff --git a/apm-sniffer/apm-sdk-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/pom.xml
index 898293458744f49e1d8410101d8fc1a7b6121eb3..3a4f95a3ffd021fcb74625ac5402d203fd84ba30 100644
--- a/apm-sniffer/apm-sdk-plugin/pom.xml
+++ b/apm-sniffer/apm-sdk-plugin/pom.xml
@@ -56,6 +56,7 @@
         httpasyncclient-4.x-plugin
         kafka-v1-plugin
         servicecomb-plugin
+        hystrix-1.x-plugin
     
     pom
 
diff --git a/apm-sniffer/apm-sdk-plugin/postgresql-8.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/postgresql/define/AbstractJdbc2StatementInstrumentation.java b/apm-sniffer/apm-sdk-plugin/postgresql-8.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/postgresql/define/AbstractJdbc2StatementInstrumentation.java
index 2001fb283069d440707e459ace6867d58fb78f00..9919d71e9f3a8e3ad38713406a0e4b404e3026fd 100644
--- a/apm-sniffer/apm-sdk-plugin/postgresql-8.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/postgresql/define/AbstractJdbc2StatementInstrumentation.java
+++ b/apm-sniffer/apm-sdk-plugin/postgresql-8.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/postgresql/define/AbstractJdbc2StatementInstrumentation.java
@@ -16,7 +16,6 @@
  *
  */
 
-
 package org.apache.skywalking.apm.plugin.jdbc.postgresql.define;
 
 import net.bytebuddy.description.method.MethodDescription;
@@ -25,7 +24,6 @@ import org.apache.skywalking.apm.agent.core.plugin.interceptor.ConstructorInterc
 import org.apache.skywalking.apm.agent.core.plugin.interceptor.InstanceMethodsInterceptPoint;
 import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.ClassInstanceMethodsEnhancePluginDefine;
 import org.apache.skywalking.apm.agent.core.plugin.match.ClassMatch;
-import org.apache.skywalking.apm.plugin.jdbc.postgresql.StatementExecuteMethodsInterceptor;
 
 import static net.bytebuddy.matcher.ElementMatchers.named;
 import static net.bytebuddy.matcher.ElementMatchers.takesArguments;
@@ -33,26 +31,10 @@ import static org.apache.skywalking.apm.agent.core.plugin.match.NameMatch.byName
 import static org.apache.skywalking.apm.plugin.jdbc.postgresql.Variables.PG_PREPARED_STATEMENT_EXECUTE_METHOD_INTERCEPTOR;
 import static org.apache.skywalking.apm.plugin.jdbc.postgresql.Variables.PG_STATEMENT_EXECUTE_METHOD_INTERCEPTOR;
 
-/**
- * {@link AbstractJdbc2StatementInstrumentation} intercept the following methods that the class which extend
- * org.postgresql.jdbc2.AbstractJdbc2Statement by {@link StatementExecuteMethodsInterceptor}.
- * 1. the execute with non parameter
- * 2. the execute with one parameter
- * 3. the executeBatch
- * 4. the executeQuery with non parameter
- * 5. the executeQuery with one parameter
- * 6. the executeUpdate with non parameter
- * 7. the executeUpdate with one parameter
- * 8. the addBatch with non parameter
- * 9. the addBatch with one parameter
- *
- * @author zhangxin
- */
 public class AbstractJdbc2StatementInstrumentation extends ClassInstanceMethodsEnhancePluginDefine {
 
     private static final String ENHANCE_CLASS = "org.postgresql.jdbc2.AbstractJdbc2Statement";
 
-
     @Override protected ConstructorInterceptPoint[] getConstructorsInterceptPoints() {
         return new ConstructorInterceptPoint[0];
     }
diff --git a/apm-sniffer/apm-sdk-plugin/resin-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/resin/v3/define/ResinV3Instrumentation.java b/apm-sniffer/apm-sdk-plugin/resin-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/resin/v3/define/ResinV3Instrumentation.java
index 37a91d488b2a13bcd543be0cac51395802558b55..59d77308254cf06e17810dee714bba8b81af1292 100644
--- a/apm-sniffer/apm-sdk-plugin/resin-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/resin/v3/define/ResinV3Instrumentation.java
+++ b/apm-sniffer/apm-sdk-plugin/resin-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/resin/v3/define/ResinV3Instrumentation.java
@@ -16,27 +16,18 @@
  *
  */
 
-
 package org.apache.skywalking.apm.plugin.resin.v3.define;
 
 import net.bytebuddy.description.method.MethodDescription;
 import net.bytebuddy.matcher.ElementMatcher;
+import org.apache.skywalking.apm.agent.core.plugin.interceptor.ConstructorInterceptPoint;
 import org.apache.skywalking.apm.agent.core.plugin.interceptor.InstanceMethodsInterceptPoint;
 import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.ClassInstanceMethodsEnhancePluginDefine;
 import org.apache.skywalking.apm.agent.core.plugin.match.ClassMatch;
 import org.apache.skywalking.apm.agent.core.plugin.match.NameMatch;
-import org.apache.skywalking.apm.plugin.resin.v3.ResinV3Interceptor;
-import org.apache.skywalking.apm.agent.core.plugin.interceptor.ConstructorInterceptPoint;
 
 import static net.bytebuddy.matcher.ElementMatchers.named;
 
-/**
- * {@link ResinV3Instrumentation} presents that skywalking intercepts
- * {@link com.caucho.server.dispatch.ServletInvocation#service(javax.servlet.ServletRequest,javax.servlet.ServletResponse)}
- * by using {@link ResinV3Interceptor}.
- *
- * @author baiyang
- */
 public class ResinV3Instrumentation extends ClassInstanceMethodsEnhancePluginDefine {
 
     private static final String ENHANCE_CLASS = "com.caucho.server.dispatch.ServletInvocation";
diff --git a/apm-sniffer/apm-sdk-plugin/resin-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/resin/v4/define/ResinV4Instrumentation.java b/apm-sniffer/apm-sdk-plugin/resin-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/resin/v4/define/ResinV4Instrumentation.java
index d605f07d8007fc74708c233f542db6e8093b70ec..915d2a9328e2754d2cbcb448e9a23f1af0a683c8 100644
--- a/apm-sniffer/apm-sdk-plugin/resin-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/resin/v4/define/ResinV4Instrumentation.java
+++ b/apm-sniffer/apm-sdk-plugin/resin-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/resin/v4/define/ResinV4Instrumentation.java
@@ -16,7 +16,6 @@
  *
  */
 
-
 package org.apache.skywalking.apm.plugin.resin.v4.define;
 
 import net.bytebuddy.description.method.MethodDescription;
@@ -25,18 +24,10 @@ import org.apache.skywalking.apm.agent.core.plugin.interceptor.ConstructorInterc
 import org.apache.skywalking.apm.agent.core.plugin.interceptor.InstanceMethodsInterceptPoint;
 import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.ClassInstanceMethodsEnhancePluginDefine;
 import org.apache.skywalking.apm.agent.core.plugin.match.ClassMatch;
-import org.apache.skywalking.apm.plugin.resin.v4.ResinV4Interceptor;
 
 import static net.bytebuddy.matcher.ElementMatchers.named;
 import static org.apache.skywalking.apm.agent.core.plugin.match.NameMatch.byName;
 
-/**
- * {@link ResinV4Instrumentation} presents that skywalking intercepts
- * {@link com.caucho.server.dispatch.ServletInvocation#service(javax.servlet.ServletRequest,javax.servlet.ServletResponse)}
- * by using {@link ResinV4Interceptor}.
- *
- * @author baiyang
- */
 public class ResinV4Instrumentation extends ClassInstanceMethodsEnhancePluginDefine {
     private static final String ENHANCE_CLASS = "com.caucho.server.dispatch.ServletInvocation";
 
diff --git a/apm-sniffer/apm-sdk-plugin/rocketMQ-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/rocketMQ/v4/define/ConsumeMessageConcurrentlyInstrumentation.java b/apm-sniffer/apm-sdk-plugin/rocketMQ-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/rocketMQ/v4/define/ConsumeMessageConcurrentlyInstrumentation.java
index 87949fee1df94eaf4da6adcaf6a2a41717b0990d..1d2aadf17e610cfe2b96d8344cc9c82e59f69ddd 100644
--- a/apm-sniffer/apm-sdk-plugin/rocketMQ-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/rocketMQ/v4/define/ConsumeMessageConcurrentlyInstrumentation.java
+++ b/apm-sniffer/apm-sdk-plugin/rocketMQ-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/rocketMQ/v4/define/ConsumeMessageConcurrentlyInstrumentation.java
@@ -16,7 +16,6 @@
  *
  */
 
-
 package org.apache.skywalking.apm.plugin.rocketMQ.v4.define;
 
 import net.bytebuddy.description.method.MethodDescription;
@@ -29,13 +28,6 @@ import org.apache.skywalking.apm.agent.core.plugin.match.HierarchyMatch;
 
 import static net.bytebuddy.matcher.ElementMatchers.named;
 
-/**
- * {@link ConsumeMessageConcurrentlyInstrumentation} intercepts the {@link org.apache.rocketmq.client.consumer.listener.MessageListenerConcurrently#consumeMessage(java.util.List,
- * org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyContext)} method by using {@link
- * org.apache.skywalking.apm.plugin.rocketMQ.v4.MessageConcurrentlyConsumeInterceptor}.
- *
- * @author zhang xin
- */
 public class ConsumeMessageConcurrentlyInstrumentation extends ClassInstanceMethodsEnhancePluginDefine {
     private static final String ENHANCE_CLASS = "org.apache.rocketmq.client.consumer.listener.MessageListenerConcurrently";
     private static final String CONSUMER_MESSAGE_METHOD = "consumeMessage";
diff --git a/apm-sniffer/apm-sdk-plugin/rocketMQ-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/rocketMQ/v4/define/ConsumeMessageOrderlyInstrumentation.java b/apm-sniffer/apm-sdk-plugin/rocketMQ-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/rocketMQ/v4/define/ConsumeMessageOrderlyInstrumentation.java
index 42b1b24f9152631732cbf3b9e6efa8f63791bf46..4a76ccd379b621ee6fb84b48ae1e09fd303ea181 100644
--- a/apm-sniffer/apm-sdk-plugin/rocketMQ-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/rocketMQ/v4/define/ConsumeMessageOrderlyInstrumentation.java
+++ b/apm-sniffer/apm-sdk-plugin/rocketMQ-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/rocketMQ/v4/define/ConsumeMessageOrderlyInstrumentation.java
@@ -16,26 +16,18 @@
  *
  */
 
-
 package org.apache.skywalking.apm.plugin.rocketMQ.v4.define;
 
 import net.bytebuddy.description.method.MethodDescription;
 import net.bytebuddy.matcher.ElementMatcher;
+import org.apache.skywalking.apm.agent.core.plugin.interceptor.ConstructorInterceptPoint;
 import org.apache.skywalking.apm.agent.core.plugin.interceptor.InstanceMethodsInterceptPoint;
 import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.ClassInstanceMethodsEnhancePluginDefine;
-import org.apache.skywalking.apm.agent.core.plugin.interceptor.ConstructorInterceptPoint;
 import org.apache.skywalking.apm.agent.core.plugin.match.ClassMatch;
 
 import static net.bytebuddy.matcher.ElementMatchers.named;
 import static org.apache.skywalking.apm.agent.core.plugin.match.HierarchyMatch.byHierarchyMatch;
 
-/**
- * {@link ConsumeMessageOrderlyInstrumentation} intercepts the {@link org.apache.rocketmq.client.consumer.listener.MessageListenerOrderly#consumeMessage(java.util.List,
- * org.apache.rocketmq.client.consumer.listener.ConsumeOrderlyContext)} method by using {@link
- * org.apache.skywalking.apm.plugin.rocketMQ.v4.MessageConcurrentlyConsumeInterceptor}.
- *
- * @author zhang xin
- */
 public class ConsumeMessageOrderlyInstrumentation extends ClassInstanceMethodsEnhancePluginDefine {
     private static final String ENHANCE_CLASS = "org.apache.rocketmq.client.consumer.listener.MessageListenerOrderly";
     private static final String ENHANCE_METHOD = "consumeMessage";
diff --git a/apm-sniffer/apm-sdk-plugin/rocketMQ-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/rocketMQ/v4/define/MQClientAPIImplInstrumentation.java b/apm-sniffer/apm-sdk-plugin/rocketMQ-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/rocketMQ/v4/define/MQClientAPIImplInstrumentation.java
index 727dfe193db9d43a7c29615a09814eb0cf38da4d..e0469a958938f26b44df0f68e22cb2ccadf04d30 100644
--- a/apm-sniffer/apm-sdk-plugin/rocketMQ-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/rocketMQ/v4/define/MQClientAPIImplInstrumentation.java
+++ b/apm-sniffer/apm-sdk-plugin/rocketMQ-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/rocketMQ/v4/define/MQClientAPIImplInstrumentation.java
@@ -16,7 +16,6 @@
  *
  */
 
-
 package org.apache.skywalking.apm.plugin.rocketMQ.v4.define;
 
 import net.bytebuddy.description.method.MethodDescription;
@@ -25,22 +24,11 @@ import org.apache.skywalking.apm.agent.core.plugin.interceptor.ConstructorInterc
 import org.apache.skywalking.apm.agent.core.plugin.interceptor.InstanceMethodsInterceptPoint;
 import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.ClassInstanceMethodsEnhancePluginDefine;
 import org.apache.skywalking.apm.agent.core.plugin.match.ClassMatch;
-import org.apache.skywalking.apm.plugin.rocketMQ.v4.MessageSendInterceptor;
 
 import static net.bytebuddy.matcher.ElementMatchers.named;
 import static net.bytebuddy.matcher.ElementMatchers.takesArguments;
 import static org.apache.skywalking.apm.agent.core.plugin.match.NameMatch.byName;
 
-/**
- * {@link MQClientAPIImplInstrumentation} intercepts the {@link org.apache.rocketmq.client.impl.MQClientAPIImpl#sendMessage(String,
- * String, org.apache.rocketmq.common.message.Message, org.apache.rocketmq.common.protocol.header.SendMessageRequestHeader,
- * long, org.apache.rocketmq.client.impl.CommunicationMode, org.apache.rocketmq.client.producer.SendCallback,
- * org.apache.rocketmq.client.impl.producer.TopicPublishInfo, org.apache.rocketmq.client.impl.factory.MQClientInstance,
- * int, org.apache.rocketmq.client.hook.SendMessageContext, org.apache.rocketmq.client.impl.producer.DefaultMQProducerImpl)}
- * method by using {@link MessageSendInterceptor}.
- *
- * @author zhang xin
- */
 public class MQClientAPIImplInstrumentation extends ClassInstanceMethodsEnhancePluginDefine {
 
     private static final String ENHANCE_CLASS = "org.apache.rocketmq.client.impl.MQClientAPIImpl";
diff --git a/apm-sniffer/apm-sdk-plugin/rocketMQ-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/rocketMQ/v4/define/SendCallbackInstrumentation.java b/apm-sniffer/apm-sdk-plugin/rocketMQ-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/rocketMQ/v4/define/SendCallbackInstrumentation.java
index 5dac86ddf7a431ebac6588d1c598b6cf0bbf8e95..c34cf715408595b13b442460d1e056d5a1acc69b 100644
--- a/apm-sniffer/apm-sdk-plugin/rocketMQ-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/rocketMQ/v4/define/SendCallbackInstrumentation.java
+++ b/apm-sniffer/apm-sdk-plugin/rocketMQ-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/rocketMQ/v4/define/SendCallbackInstrumentation.java
@@ -16,29 +16,19 @@
  *
  */
 
-
 package org.apache.skywalking.apm.plugin.rocketMQ.v4.define;
 
 import net.bytebuddy.description.method.MethodDescription;
 import net.bytebuddy.matcher.ElementMatcher;
-import org.apache.rocketmq.client.producer.SendResult;
+import org.apache.skywalking.apm.agent.core.plugin.interceptor.ConstructorInterceptPoint;
 import org.apache.skywalking.apm.agent.core.plugin.interceptor.InstanceMethodsInterceptPoint;
 import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.ClassInstanceMethodsEnhancePluginDefine;
-import org.apache.skywalking.apm.agent.core.plugin.interceptor.ConstructorInterceptPoint;
 import org.apache.skywalking.apm.agent.core.plugin.match.ClassMatch;
 
 import static net.bytebuddy.matcher.ElementMatchers.named;
 import static org.apache.skywalking.apm.agent.core.plugin.bytebuddy.ArgumentTypeNameMatch.takesArgumentWithType;
 import static org.apache.skywalking.apm.agent.core.plugin.match.HierarchyMatch.byHierarchyMatch;
 
-/**
- * {@link SendCallbackInstrumentation} intercepts {@link org.apache.rocketmq.client.producer.SendCallback#onSuccess(SendResult)}
- * method by using {@link org.apache.skywalking.apm.plugin.rocketMQ.v4.OnSuccessInterceptor} and also intercepts {@link
- * org.apache.rocketmq.client.producer.SendCallback#onException(Throwable)} by using {@link
- * org.apache.skywalking.apm.plugin.rocketMQ.v4.OnExceptionInterceptor}.
- *
- * @author zhang xin
- */
 public class SendCallbackInstrumentation extends ClassInstanceMethodsEnhancePluginDefine {
 
     private static final String ENHANCE_CLASS = "org.apache.rocketmq.client.producer.SendCallback";
diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/concurrent-util-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/concurrent/define/FailureCallbackInstrumentation.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/concurrent-util-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/concurrent/define/FailureCallbackInstrumentation.java
index 2c03cc13ec9df93e601635df927b57a4290a81ec..7d9d3b5829d45d651c99c1debfc1f787e496fe27 100644
--- a/apm-sniffer/apm-sdk-plugin/spring-plugins/concurrent-util-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/concurrent/define/FailureCallbackInstrumentation.java
+++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/concurrent-util-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/concurrent/define/FailureCallbackInstrumentation.java
@@ -16,26 +16,18 @@
  *
  */
 
-
 package org.apache.skywalking.apm.plugin.spring.concurrent.define;
 
 import net.bytebuddy.description.method.MethodDescription;
 import net.bytebuddy.matcher.ElementMatcher;
+import org.apache.skywalking.apm.agent.core.plugin.interceptor.ConstructorInterceptPoint;
 import org.apache.skywalking.apm.agent.core.plugin.interceptor.InstanceMethodsInterceptPoint;
 import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.ClassInstanceMethodsEnhancePluginDefine;
-import org.apache.skywalking.apm.agent.core.plugin.interceptor.ConstructorInterceptPoint;
 import org.apache.skywalking.apm.agent.core.plugin.match.ClassMatch;
-import org.apache.skywalking.apm.plugin.spring.concurrent.FailureCallbackInterceptor;
 
 import static net.bytebuddy.matcher.ElementMatchers.named;
 import static org.apache.skywalking.apm.plugin.spring.concurrent.match.FailedCallbackMatch.failedCallbackMatch;
 
-/**
- * {@link FailureCallbackInstrumentation} enhance the onFailure method that class inherited
- * org.springframework.util.concurrent.FailureCallback by {@link FailureCallbackInterceptor}.
- *
- * @author zhangxin
- */
 public class FailureCallbackInstrumentation extends ClassInstanceMethodsEnhancePluginDefine {
 
     public static final String FAILURE_CALLBACK_INTERCEPTOR = "org.apache.skywalking.apm.plugin.spring.concurrent.FailureCallbackInterceptor";
diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/core-patch/src/main/java/org/apache/skywalking/apm/plugin/spring/patch/define/AopProxyFactoryInstrumentation.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/core-patch/src/main/java/org/apache/skywalking/apm/plugin/spring/patch/define/AopProxyFactoryInstrumentation.java
index 0220a4678daa6b0baf8ef5c7913f2c0b3405adf6..d685363909e7fbef4e2eee36341086019d32034f 100644
--- a/apm-sniffer/apm-sdk-plugin/spring-plugins/core-patch/src/main/java/org/apache/skywalking/apm/plugin/spring/patch/define/AopProxyFactoryInstrumentation.java
+++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/core-patch/src/main/java/org/apache/skywalking/apm/plugin/spring/patch/define/AopProxyFactoryInstrumentation.java
@@ -16,7 +16,6 @@
  *
  */
 
-
 package org.apache.skywalking.apm.plugin.spring.patch.define;
 
 import net.bytebuddy.description.method.MethodDescription;
@@ -29,13 +28,6 @@ import org.apache.skywalking.apm.agent.core.plugin.match.NameMatch;
 
 import static net.bytebuddy.matcher.ElementMatchers.named;
 
-/**
- * {@link AopProxyFactoryInstrumentation} indicate that spring core patch plugin intercepts the {@link
- * org.springframework.aop.framework.DefaultAopProxyFactory#hasNoUserSuppliedProxyInterfaces} method by using {@link
- * org.apache.skywalking.apm.plugin.spring.patch.CreateAopProxyInterceptor} class.
- *
- * @author zhangxin
- */
 public class AopProxyFactoryInstrumentation extends ClassInstanceMethodsEnhancePluginDefine {
 
     private static final String ENHANCE_CLASS = "org.springframework.aop.framework.DefaultAopProxyFactory";
diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/spring-cloud/netflix-plugins/spring-cloud-feign-1.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/cloud/netflix/feign/v11/define/NetflixFeignInstrumentation.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/spring-cloud/netflix-plugins/spring-cloud-feign-1.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/cloud/netflix/feign/v11/define/NetflixFeignInstrumentation.java
index 68fc362dbfb16a85e7cc061bce4c49355d37589c..94895c2d9bbbb2340e1fdfb97877ec80152c9826 100644
--- a/apm-sniffer/apm-sdk-plugin/spring-plugins/spring-cloud/netflix-plugins/spring-cloud-feign-1.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/cloud/netflix/feign/v11/define/NetflixFeignInstrumentation.java
+++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/spring-cloud/netflix-plugins/spring-cloud-feign-1.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/cloud/netflix/feign/v11/define/NetflixFeignInstrumentation.java
@@ -16,26 +16,18 @@
  *
  */
 
-
 package org.apache.skywalking.apm.plugin.spring.cloud.netflix.feign.v11.define;
 
 import net.bytebuddy.description.method.MethodDescription;
 import net.bytebuddy.matcher.ElementMatcher;
+import org.apache.skywalking.apm.agent.core.plugin.interceptor.ConstructorInterceptPoint;
 import org.apache.skywalking.apm.agent.core.plugin.interceptor.InstanceMethodsInterceptPoint;
 import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.ClassInstanceMethodsEnhancePluginDefine;
-import org.apache.skywalking.apm.agent.core.plugin.interceptor.ConstructorInterceptPoint;
 import org.apache.skywalking.apm.agent.core.plugin.match.ClassMatch;
-import org.apache.skywalking.apm.plugin.feign.http.v9.DefaultHttpClientInterceptor;
 
 import static net.bytebuddy.matcher.ElementMatchers.named;
 import static org.apache.skywalking.apm.agent.core.plugin.match.NameMatch.byName;
 
-/**
- * {@link NetflixFeignInstrumentation} presents that skywalking intercepts {@link org.springframework.cloud.netflix.feign.ribbon.LoadBalancerFeignClient#execute(feign.Request,
- * feign.Request.Options)} by using {@link DefaultHttpClientInterceptor}.
- *
- * @author zhangxin
- */
 public class NetflixFeignInstrumentation extends ClassInstanceMethodsEnhancePluginDefine {
     /**
      * Enhance class.
diff --git a/apm-sniffer/apm-toolkit-activation/apm-toolkit-log4j-1.x-activation/src/main/java/org/apache/skywalking/apm/toolkit/activation/log/log4j/v1/x/TraceIdPatternConverterActivation.java b/apm-sniffer/apm-toolkit-activation/apm-toolkit-log4j-1.x-activation/src/main/java/org/apache/skywalking/apm/toolkit/activation/log/log4j/v1/x/TraceIdPatternConverterActivation.java
index 4e13bd648d9ffeca0925ebf092be1063699f1227..37a7246db59c062c289585b3b8a63c9bbbcaa9e5 100644
--- a/apm-sniffer/apm-toolkit-activation/apm-toolkit-log4j-1.x-activation/src/main/java/org/apache/skywalking/apm/toolkit/activation/log/log4j/v1/x/TraceIdPatternConverterActivation.java
+++ b/apm-sniffer/apm-toolkit-activation/apm-toolkit-log4j-1.x-activation/src/main/java/org/apache/skywalking/apm/toolkit/activation/log/log4j/v1/x/TraceIdPatternConverterActivation.java
@@ -38,12 +38,17 @@ import static org.apache.skywalking.apm.agent.core.plugin.match.NameMatch.byName
  * @author wusheng
  */
 public class TraceIdPatternConverterActivation extends ClassInstanceMethodsEnhancePluginDefine {
+
+    public static final String ENHANCE_CLASS = "org.apache.skywalking.apm.toolkit.log.log4j.v1.x.TraceIdPatternConverter";
+    public static final String INTERCEPT_CLASS = "org.apache.skywalking.apm.toolkit.activation.log.log4j.v1.x.PrintTraceIdInterceptor";
+    public static final String ENHANCE_METHOD = "convert";
+
     /**
      * @return the target class, which needs active.
      */
     @Override
     protected ClassMatch enhanceClass() {
-        return byName("TraceIdPatternConverter");
+        return byName(ENHANCE_CLASS);
     }
 
     /**
@@ -64,12 +69,12 @@ public class TraceIdPatternConverterActivation extends ClassInstanceMethodsEnhan
             new InstanceMethodsInterceptPoint() {
                 @Override
                 public ElementMatcher getMethodsMatcher() {
-                    return named("convert");
+                    return named(ENHANCE_METHOD);
                 }
 
                 @Override
                 public String getMethodsInterceptor() {
-                    return "PrintTraceIdInterceptor";
+                    return INTERCEPT_CLASS;
                 }
 
                 @Override public boolean isOverrideArgs() {
diff --git a/apm-sniffer/apm-toolkit-activation/apm-toolkit-log4j-2.x-activation/src/main/java/org/apache/skywalking/apm/toolkit/activation/log/log4j/v2/x/Log4j2OutputAppenderActivation.java b/apm-sniffer/apm-toolkit-activation/apm-toolkit-log4j-2.x-activation/src/main/java/org/apache/skywalking/apm/toolkit/activation/log/log4j/v2/x/Log4j2OutputAppenderActivation.java
index fc337bdf0eed99a75fb9b6c1df5361a3317b6d82..fcc98f6385174230c1c8e96a4ded946de0b78516 100644
--- a/apm-sniffer/apm-toolkit-activation/apm-toolkit-log4j-2.x-activation/src/main/java/org/apache/skywalking/apm/toolkit/activation/log/log4j/v2/x/Log4j2OutputAppenderActivation.java
+++ b/apm-sniffer/apm-toolkit-activation/apm-toolkit-log4j-2.x-activation/src/main/java/org/apache/skywalking/apm/toolkit/activation/log/log4j/v2/x/Log4j2OutputAppenderActivation.java
@@ -37,12 +37,17 @@ import static net.bytebuddy.matcher.ElementMatchers.named;
  * @author wusheng
  */
 public class Log4j2OutputAppenderActivation extends ClassStaticMethodsEnhancePluginDefine {
+
+    public static final String ENHANCE_CLASS = "org.apache.skywalking.apm.toolkit.log.log4j.v2.x.Log4j2OutputAppender";
+    public static final String INTERCEPT_CLASS = "org.apache.skywalking.apm.toolkit.activation.log.log4j.v2.x.PrintTraceIdInterceptor";
+    public static final String ENHANCE_METHOD = "append";
+
     /**
      * @return the target class, which needs active.
      */
     @Override
     protected ClassMatch enhanceClass() {
-        return NameMatch.byName("org.apache.skywalking.apm.toolkit.log.log4j.v2.x.Log4j2OutputAppender");
+        return NameMatch.byName(ENHANCE_CLASS);
     }
 
     /**
@@ -55,12 +60,12 @@ public class Log4j2OutputAppenderActivation extends ClassStaticMethodsEnhancePlu
             new StaticMethodsInterceptPoint() {
                 @Override
                 public ElementMatcher getMethodsMatcher() {
-                    return named("append");
+                    return named(ENHANCE_METHOD);
                 }
 
                 @Override
                 public String getMethodsInterceptor() {
-                    return "PrintTraceIdInterceptor";
+                    return INTERCEPT_CLASS;
                 }
 
                 @Override public boolean isOverrideArgs() {
diff --git a/apm-sniffer/apm-toolkit-activation/apm-toolkit-logback-1.x-activation/src/main/java/org/apache/skywalking/apm/toolkit/activation/log/logback/v1/x/LogbackPatternConverterActivation.java b/apm-sniffer/apm-toolkit-activation/apm-toolkit-logback-1.x-activation/src/main/java/org/apache/skywalking/apm/toolkit/activation/log/logback/v1/x/LogbackPatternConverterActivation.java
index d3c5992669ccd39d4faec44a8828e7cd4a01799b..57c56736996de48f4eae876470ab67745c5a6ad4 100644
--- a/apm-sniffer/apm-toolkit-activation/apm-toolkit-logback-1.x-activation/src/main/java/org/apache/skywalking/apm/toolkit/activation/log/logback/v1/x/LogbackPatternConverterActivation.java
+++ b/apm-sniffer/apm-toolkit-activation/apm-toolkit-logback-1.x-activation/src/main/java/org/apache/skywalking/apm/toolkit/activation/log/logback/v1/x/LogbackPatternConverterActivation.java
@@ -39,12 +39,17 @@ import static org.apache.skywalking.apm.agent.core.plugin.match.NameMatch.byName
  * Created by wusheng on 2016/12/7.
  */
 public class LogbackPatternConverterActivation extends ClassInstanceMethodsEnhancePluginDefine {
+
+    public static final String INTERCEPT_CLASS = "org.apache.skywalking.apm.toolkit.activation.log.logback.v1.x.PrintTraceIdInterceptor";
+    public static final String ENHANCE_CLASS = "org.apache.skywalking.apm.toolkit.log.logback.v1.x.LogbackPatternConverter";
+    public static final String ENHANCE_METHOD = "convert";
+
     /**
      * @return the target class, which needs active.
      */
     @Override
     protected ClassMatch enhanceClass() {
-        return byName("org.apache.skywalking.apm.toolkit.log.logback.v1.x.LogbackPatternConverter");
+        return byName(ENHANCE_CLASS);
     }
 
     /**
@@ -65,12 +70,12 @@ public class LogbackPatternConverterActivation extends ClassInstanceMethodsEnhan
             new InstanceMethodsInterceptPoint() {
                 @Override
                 public ElementMatcher getMethodsMatcher() {
-                    return named("convert");
+                    return named(ENHANCE_METHOD);
                 }
 
                 @Override
                 public String getMethodsInterceptor() {
-                    return "PrintTraceIdInterceptor";
+                    return INTERCEPT_CLASS;
                 }
 
                 @Override public boolean isOverrideArgs() {
diff --git a/apm-sniffer/apm-toolkit-activation/apm-toolkit-logback-1.x-activation/src/main/java/org/apache/skywalking/apm/toolkit/activation/log/logback/v1/x/mdc/MDCConverterActivation.java b/apm-sniffer/apm-toolkit-activation/apm-toolkit-logback-1.x-activation/src/main/java/org/apache/skywalking/apm/toolkit/activation/log/logback/v1/x/mdc/MDCConverterActivation.java
index 202486bc91ad25215a02112d34a7033b6f34cda6..dea164bab29433703913ca7442008b9d6dca1513 100644
--- a/apm-sniffer/apm-toolkit-activation/apm-toolkit-logback-1.x-activation/src/main/java/org/apache/skywalking/apm/toolkit/activation/log/logback/v1/x/mdc/MDCConverterActivation.java
+++ b/apm-sniffer/apm-toolkit-activation/apm-toolkit-logback-1.x-activation/src/main/java/org/apache/skywalking/apm/toolkit/activation/log/logback/v1/x/mdc/MDCConverterActivation.java
@@ -34,6 +34,10 @@ import static net.bytebuddy.matcher.ElementMatchers.named;
  */
 public class MDCConverterActivation extends ClassInstanceMethodsEnhancePluginDefine {
 
+    public static final String INTERCEPT_CLASS = "org.apache.skywalking.apm.toolkit.activation.log.logback.v1.x.mdc.PrintMDCTraceIdInterceptor";
+    public static final String ENHANCE_CLASS = "org.apache.skywalking.apm.toolkit.log.logback.v1.x.mdc.LogbackMDCPatternConverter";
+    public static final String ENHANCE_METHOD = "convertTID";
+
     @Override
     protected ConstructorInterceptPoint[] getConstructorsInterceptPoints() {
         return null;
@@ -45,12 +49,12 @@ public class MDCConverterActivation extends ClassInstanceMethodsEnhancePluginDef
             new InstanceMethodsInterceptPoint() {
                 @Override
                 public ElementMatcher getMethodsMatcher() {
-                    return named("convertTID");
+                    return named(ENHANCE_METHOD);
                 }
 
                 @Override
                 public String getMethodsInterceptor() {
-                    return "PrintMDCTraceIdInterceptor";
+                    return INTERCEPT_CLASS;
                 }
 
                 @Override public boolean isOverrideArgs() {
@@ -62,6 +66,6 @@ public class MDCConverterActivation extends ClassInstanceMethodsEnhancePluginDef
 
     @Override
     protected ClassMatch enhanceClass() {
-        return NameMatch.byName("org.apache.skywalking.apm.toolkit.log.logback.v1.x.mdc.LogbackMDCPatternConverter");
+        return NameMatch.byName(ENHANCE_CLASS);
     }
 }
diff --git a/apm-sniffer/apm-toolkit-activation/apm-toolkit-trace-activation/src/main/java/org/apache/skywalking/apm/toolkit/activation/trace/TraceContextActivation.java b/apm-sniffer/apm-toolkit-activation/apm-toolkit-trace-activation/src/main/java/org/apache/skywalking/apm/toolkit/activation/trace/TraceContextActivation.java
index 3014248935c6fff0af416fd08e6581360dc0729e..3d04f0914defae4df26ddaf85f5eff5d4fc2a953 100644
--- a/apm-sniffer/apm-toolkit-activation/apm-toolkit-trace-activation/src/main/java/org/apache/skywalking/apm/toolkit/activation/trace/TraceContextActivation.java
+++ b/apm-sniffer/apm-toolkit-activation/apm-toolkit-trace-activation/src/main/java/org/apache/skywalking/apm/toolkit/activation/trace/TraceContextActivation.java
@@ -37,12 +37,17 @@ import static net.bytebuddy.matcher.ElementMatchers.named;
  * Created by xin on 2016/12/15.
  */
 public class TraceContextActivation extends ClassStaticMethodsEnhancePluginDefine {
+
+    public static final String INTERCEPT_CLASS = "org.apache.skywalking.apm.toolkit.activation.trace.TraceContextInterceptor";
+    public static final String ENHANCE_CLASS = "org.apache.skywalking.apm.toolkit.trace.TraceContext";
+    public static final String ENHANCE_METHOD = "traceId";
+
     /**
      * @return the target class, which needs active.
      */
     @Override
     protected ClassMatch enhanceClass() {
-        return NameMatch.byName("TraceContext");
+        return NameMatch.byName(ENHANCE_CLASS);
     }
 
     /**
@@ -55,12 +60,12 @@ public class TraceContextActivation extends ClassStaticMethodsEnhancePluginDefin
             new StaticMethodsInterceptPoint() {
                 @Override
                 public ElementMatcher getMethodsMatcher() {
-                    return named("traceId");
+                    return named(ENHANCE_METHOD);
                 }
 
                 @Override
                 public String getMethodsInterceptor() {
-                    return "TraceContextInterceptor";
+                    return INTERCEPT_CLASS;
                 }
 
                 @Override public boolean isOverrideArgs() {
diff --git a/docs/Supported-list.md b/docs/Supported-list.md
index cf1e4a26e977400d46fb8debee348fd7f66a402c..e0db31239868130a067b26455fd7cfc1f4a50425 100644
--- a/docs/Supported-list.md
+++ b/docs/Supported-list.md
@@ -44,6 +44,7 @@
 * Spring Ecosystem
   * Spring Bean annotations(@Bean, @Service, @Component, @Repository) 3.x and 4.x (Optional²)
   * Spring Core Async SuccessCallback/FailureCallback/ListenableFutureCallback 4.x
+* [Hystrix: Latency and Fault Tolerance for Distributed Systems](https://github.com/Netflix/Hystrix) 1.4.20 -> 1.5.12
 * Scheduler
   * [Elastic Job](https://github.com/elasticjob/elastic-job) 2.x
 * OpenTracing community supported