未验证 提交 43f3e8e2 编写于 作者: G Gao Hongtao 提交者: GitHub

Merge pull request #5 from apache/master

Merge from origin
...@@ -9,3 +9,4 @@ target/ ...@@ -9,3 +9,4 @@ target/
*~ *~
packages/ packages/
**/dependency-reduced-pom.xml **/dependency-reduced-pom.xml
/skywalking-agent/
...@@ -4,7 +4,7 @@ Apache SkyWalking | [中文](README_ZH.md) ...@@ -4,7 +4,7 @@ Apache SkyWalking | [中文](README_ZH.md)
<img src="https://skywalkingtest.github.io/page-resources/3.0/skywalking.png" alt="Sky Walking logo" height="90px" align="right" /> <img src="https://skywalkingtest.github.io/page-resources/3.0/skywalking.png" alt="Sky Walking logo" height="90px" align="right" />
**SkyWalking**: APM (application performance monitor) tool for distributed systems, especially designed for **SkyWalking**: APM (application performance monitor) tool for distributed systems, especially designed for
microservices, cloud native and container-based (Docker, K8s, Mesos) architectures. microservices, cloud native and container-based (Docker, Kubernetes, Mesos) architectures.
Underlying technology is a distributed tracing system. Underlying technology is a distributed tracing system.
[![GitHub stars](https://img.shields.io/github/stars/apache/incubator-skywalking.svg?style=for-the-badge&label=Stars&logo=github)](https://github.com/apache/incubator-skywalking) [![GitHub stars](https://img.shields.io/github/stars/apache/incubator-skywalking.svg?style=for-the-badge&label=Stars&logo=github)](https://github.com/apache/incubator-skywalking)
......
...@@ -3,7 +3,7 @@ Apache SkyWalking | [English](README.md) ...@@ -3,7 +3,7 @@ Apache SkyWalking | [English](README.md)
<img src="https://skywalkingtest.github.io/page-resources/3.0/skywalking.png" alt="Sky Walking logo" height="90px" align="right" /> <img src="https://skywalkingtest.github.io/page-resources/3.0/skywalking.png" alt="Sky Walking logo" height="90px" align="right" />
**SkyWalking**: 针对分布式系统的APM(应用性能监控)系统,特别针对微服务、cloud native和容器化(Docker, K8s, Mesos)架构, **SkyWalking**: 针对分布式系统的APM(应用性能监控)系统,特别针对微服务、cloud native和容器化(Docker, Kubernetes, Mesos)架构,
其核心是个分布式追踪系统。 其核心是个分布式追踪系统。
[![GitHub stars](https://img.shields.io/github/stars/apache/incubator-skywalking.svg?style=for-the-badge&label=Stars&logo=github)](https://github.com/apache/incubator-skywalking) [![GitHub stars](https://img.shields.io/github/stars/apache/incubator-skywalking.svg?style=for-the-badge&label=Stars&logo=github)](https://github.com/apache/incubator-skywalking)
......
...@@ -53,7 +53,8 @@ public class ServiceNameDiscoveryServiceHandler extends ServiceNameDiscoveryServ ...@@ -53,7 +53,8 @@ public class ServiceNameDiscoveryServiceHandler extends ServiceNameDiscoveryServ
for (ServiceNameElement serviceNameElement : serviceNameElementList) { for (ServiceNameElement serviceNameElement : serviceNameElementList) {
int applicationId = serviceNameElement.getApplicationId(); int applicationId = serviceNameElement.getApplicationId();
String serviceName = serviceNameElement.getServiceName(); String serviceName = serviceNameElement.getServiceName();
int serviceId = serviceNameService.getOrCreate(applicationId, serviceName); int srcSpanType = serviceNameElement.getSrcSpanTypeValue();
int serviceId = serviceNameService.getOrCreate(applicationId, srcSpanType, serviceName);
if (serviceId != 0) { if (serviceId != 0) {
ServiceNameMappingElement.Builder mappingElement = ServiceNameMappingElement.newBuilder(); ServiceNameMappingElement.Builder mappingElement = ServiceNameMappingElement.newBuilder();
......
...@@ -34,6 +34,7 @@ import org.apache.skywalking.apm.network.proto.ServiceNameCollection; ...@@ -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.ServiceNameDiscoveryServiceGrpc;
import org.apache.skywalking.apm.network.proto.ServiceNameElement; import org.apache.skywalking.apm.network.proto.ServiceNameElement;
import org.apache.skywalking.apm.network.proto.ServiceNameMappingCollection; 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.apache.skywalking.apm.util.RunnableWithExceptionProtection;
import org.joda.time.DateTime; import org.joda.time.DateTime;
import org.slf4j.Logger; import org.slf4j.Logger;
...@@ -95,6 +96,7 @@ class RegisterMock { ...@@ -95,6 +96,7 @@ class RegisterMock {
ServiceNameElement.Builder serviceNameElement = ServiceNameElement.newBuilder(); ServiceNameElement.Builder serviceNameElement = ServiceNameElement.newBuilder();
serviceNameElement.setApplicationId(applicationMapping.getApplication().getValue()); serviceNameElement.setApplicationId(applicationMapping.getApplication().getValue());
serviceNameElement.setServiceName("org.skywaking.apm.testcase.dubbo.services.GreetService.doBusiness()"); serviceNameElement.setServiceName("org.skywaking.apm.testcase.dubbo.services.GreetService.doBusiness()");
serviceNameElement.setSrcSpanType(SpanType.Exit);
serviceNameCollection.addElements(serviceNameElement); serviceNameCollection.addElements(serviceNameElement);
registerServiceName(serviceNameCollection); registerServiceName(serviceNameCollection);
...@@ -139,6 +141,7 @@ class RegisterMock { ...@@ -139,6 +141,7 @@ class RegisterMock {
ServiceNameElement.Builder serviceNameElement = ServiceNameElement.newBuilder(); ServiceNameElement.Builder serviceNameElement = ServiceNameElement.newBuilder();
serviceNameElement.setApplicationId(applicationMapping.getApplication().getValue()); serviceNameElement.setApplicationId(applicationMapping.getApplication().getValue());
serviceNameElement.setServiceName("org.skywaking.apm.testcase.dubbo.services.GreetService.doBusiness()"); serviceNameElement.setServiceName("org.skywaking.apm.testcase.dubbo.services.GreetService.doBusiness()");
serviceNameElement.setSrcSpanType(SpanType.Entry);
serviceNameCollection.addElements(serviceNameElement); serviceNameCollection.addElements(serviceNameElement);
registerServiceName(serviceNameCollection); registerServiceName(serviceNameCollection);
......
...@@ -44,6 +44,7 @@ public class ServiceNameDiscoveryServiceHandler extends JettyHandler { ...@@ -44,6 +44,7 @@ public class ServiceNameDiscoveryServiceHandler extends JettyHandler {
private static final String APPLICATION_ID = "ai"; private static final String APPLICATION_ID = "ai";
private static final String SERVICE_NAME = "sn"; 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 SERVICE_ID = "si";
private static final String ELEMENT = "el"; private static final String ELEMENT = "el";
...@@ -66,8 +67,9 @@ public class ServiceNameDiscoveryServiceHandler extends JettyHandler { ...@@ -66,8 +67,9 @@ public class ServiceNameDiscoveryServiceHandler extends JettyHandler {
for (JsonElement service : services) { for (JsonElement service : services) {
int applicationId = service.getAsJsonObject().get(APPLICATION_ID).getAsInt(); int applicationId = service.getAsJsonObject().get(APPLICATION_ID).getAsInt();
String serviceName = service.getAsJsonObject().get(SERVICE_NAME).getAsString(); 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) { if (serviceId != 0) {
JsonObject responseJson = new JsonObject(); JsonObject responseJson = new JsonObject();
responseJson.addProperty(SERVICE_ID, serviceId); responseJson.addProperty(SERVICE_ID, serviceId);
......
...@@ -51,6 +51,11 @@ ...@@ -51,6 +51,11 @@
<artifactId>collector-storage-define</artifactId> <artifactId>collector-storage-define</artifactId>
<version>${project.version}</version> <version>${project.version}</version>
</dependency> </dependency>
<dependency>
<groupId>org.apache.skywalking</groupId>
<artifactId>collector-cache-define</artifactId>
<version>${project.version}</version>
</dependency>
<dependency> <dependency>
<groupId>org.apache.skywalking</groupId> <groupId>org.apache.skywalking</groupId>
<artifactId>analysis-worker-model</artifactId> <artifactId>analysis-worker-model</artifactId>
......
...@@ -49,6 +49,8 @@ public abstract class AlarmAssertWorker<INPUT extends StreamData & Metric, OUTPU ...@@ -49,6 +49,8 @@ public abstract class AlarmAssertWorker<INPUT extends StreamData & Metric, OUTPU
protected abstract OUTPUT newAlarmObject(String id, INPUT inputMetric); protected abstract OUTPUT newAlarmObject(String id, INPUT inputMetric);
protected abstract void generateAlarmContent(OUTPUT alarm, double threshold);
protected abstract Double calleeErrorRateThreshold(); protected abstract Double calleeErrorRateThreshold();
protected abstract Double callerErrorRateThreshold(); protected abstract Double callerErrorRateThreshold();
...@@ -64,7 +66,7 @@ public abstract class AlarmAssertWorker<INPUT extends StreamData & Metric, OUTPU ...@@ -64,7 +66,7 @@ public abstract class AlarmAssertWorker<INPUT extends StreamData & Metric, OUTPU
alarm.setAlarmType(AlarmType.ERROR_RATE.getValue()); alarm.setAlarmType(AlarmType.ERROR_RATE.getValue());
alarm.setLastTimeBucket(inputMetric.getTimeBucket()); alarm.setLastTimeBucket(inputMetric.getTimeBucket());
alarm.setSourceValue(MetricSource.Callee.getValue()); alarm.setSourceValue(MetricSource.Callee.getValue());
alarm.setAlarmContent(""); generateAlarmContent(alarm, calleeErrorRateThreshold());
onNext(alarm); onNext(alarm);
} }
...@@ -75,7 +77,7 @@ public abstract class AlarmAssertWorker<INPUT extends StreamData & Metric, OUTPU ...@@ -75,7 +77,7 @@ public abstract class AlarmAssertWorker<INPUT extends StreamData & Metric, OUTPU
alarm.setAlarmType(AlarmType.ERROR_RATE.getValue()); alarm.setAlarmType(AlarmType.ERROR_RATE.getValue());
alarm.setLastTimeBucket(inputMetric.getTimeBucket()); alarm.setLastTimeBucket(inputMetric.getTimeBucket());
alarm.setSourceValue(MetricSource.Caller.getValue()); alarm.setSourceValue(MetricSource.Caller.getValue());
alarm.setAlarmContent(""); generateAlarmContent(alarm, callerErrorRateThreshold());
onNext(alarm); onNext(alarm);
} }
...@@ -100,7 +102,7 @@ public abstract class AlarmAssertWorker<INPUT extends StreamData & Metric, OUTPU ...@@ -100,7 +102,7 @@ public abstract class AlarmAssertWorker<INPUT extends StreamData & Metric, OUTPU
alarm.setAlarmType(AlarmType.SLOW_RTT.getValue()); alarm.setAlarmType(AlarmType.SLOW_RTT.getValue());
alarm.setLastTimeBucket(inputMetric.getTimeBucket()); alarm.setLastTimeBucket(inputMetric.getTimeBucket());
alarm.setSourceValue(MetricSource.Callee.getValue()); alarm.setSourceValue(MetricSource.Callee.getValue());
alarm.setAlarmContent(""); generateAlarmContent(alarm, calleeAverageResponseTimeThreshold());
onNext(alarm); onNext(alarm);
} }
...@@ -111,7 +113,7 @@ public abstract class AlarmAssertWorker<INPUT extends StreamData & Metric, OUTPU ...@@ -111,7 +113,7 @@ public abstract class AlarmAssertWorker<INPUT extends StreamData & Metric, OUTPU
alarm.setAlarmType(AlarmType.SLOW_RTT.getValue()); alarm.setAlarmType(AlarmType.SLOW_RTT.getValue());
alarm.setLastTimeBucket(inputMetric.getTimeBucket()); alarm.setLastTimeBucket(inputMetric.getTimeBucket());
alarm.setSourceValue(MetricSource.Caller.getValue()); alarm.setSourceValue(MetricSource.Caller.getValue());
alarm.setAlarmContent(""); generateAlarmContent(alarm, callerAverageResponseTimeThreshold());
onNext(alarm); onNext(alarm);
} }
......
...@@ -21,12 +21,17 @@ package org.apache.skywalking.apm.collector.analysis.alarm.provider.worker.appli ...@@ -21,12 +21,17 @@ package org.apache.skywalking.apm.collector.analysis.alarm.provider.worker.appli
import org.apache.skywalking.apm.collector.analysis.alarm.define.graph.AlarmWorkerIdDefine; import org.apache.skywalking.apm.collector.analysis.alarm.define.graph.AlarmWorkerIdDefine;
import org.apache.skywalking.apm.collector.analysis.alarm.provider.worker.AlarmAssertWorker; import org.apache.skywalking.apm.collector.analysis.alarm.provider.worker.AlarmAssertWorker;
import org.apache.skywalking.apm.collector.analysis.alarm.provider.worker.AlarmAssertWorkerProvider; import org.apache.skywalking.apm.collector.analysis.alarm.provider.worker.AlarmAssertWorkerProvider;
import org.apache.skywalking.apm.collector.cache.CacheModule;
import org.apache.skywalking.apm.collector.cache.service.ApplicationCacheService;
import org.apache.skywalking.apm.collector.configuration.ConfigurationModule; import org.apache.skywalking.apm.collector.configuration.ConfigurationModule;
import org.apache.skywalking.apm.collector.configuration.service.IApplicationAlarmRuleConfig; import org.apache.skywalking.apm.collector.configuration.service.IApplicationAlarmRuleConfig;
import org.apache.skywalking.apm.collector.core.module.ModuleManager; 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.Const;
import org.apache.skywalking.apm.collector.storage.table.MetricSource;
import org.apache.skywalking.apm.collector.storage.table.alarm.AlarmType;
import org.apache.skywalking.apm.collector.storage.table.alarm.ApplicationAlarm; import org.apache.skywalking.apm.collector.storage.table.alarm.ApplicationAlarm;
import org.apache.skywalking.apm.collector.storage.table.application.ApplicationMetric; import org.apache.skywalking.apm.collector.storage.table.application.ApplicationMetric;
import org.apache.skywalking.apm.collector.storage.table.register.Application;
/** /**
* @author peng-yongsheng * @author peng-yongsheng
...@@ -34,10 +39,12 @@ import org.apache.skywalking.apm.collector.storage.table.application.Application ...@@ -34,10 +39,12 @@ import org.apache.skywalking.apm.collector.storage.table.application.Application
public class ApplicationMetricAlarmAssertWorker extends AlarmAssertWorker<ApplicationMetric, ApplicationAlarm> { public class ApplicationMetricAlarmAssertWorker extends AlarmAssertWorker<ApplicationMetric, ApplicationAlarm> {
private final IApplicationAlarmRuleConfig applicationAlarmRuleConfig; private final IApplicationAlarmRuleConfig applicationAlarmRuleConfig;
private final ApplicationCacheService applicationCacheService;
public ApplicationMetricAlarmAssertWorker(ModuleManager moduleManager) { public ApplicationMetricAlarmAssertWorker(ModuleManager moduleManager) {
super(moduleManager); super(moduleManager);
this.applicationAlarmRuleConfig = moduleManager.find(ConfigurationModule.NAME).getService(IApplicationAlarmRuleConfig.class); this.applicationAlarmRuleConfig = moduleManager.find(ConfigurationModule.NAME).getService(IApplicationAlarmRuleConfig.class);
this.applicationCacheService = moduleManager.find(CacheModule.NAME).getService(ApplicationCacheService.class);
} }
@Override public int id() { @Override public int id() {
...@@ -51,6 +58,21 @@ public class ApplicationMetricAlarmAssertWorker extends AlarmAssertWorker<Applic ...@@ -51,6 +58,21 @@ public class ApplicationMetricAlarmAssertWorker extends AlarmAssertWorker<Applic
return applicationAlarm; return applicationAlarm;
} }
@Override protected void generateAlarmContent(ApplicationAlarm alarm, double threshold) {
Application application = applicationCacheService.getApplicationById(alarm.getApplicationId());
String clientOrServer = "server";
if (MetricSource.Caller.getValue() == alarm.getSourceValue()) {
clientOrServer = "client";
}
if (AlarmType.ERROR_RATE.getValue() == alarm.getAlarmType()) {
alarm.setAlarmContent("The success rate of " + application.getApplicationCode() + ", detected from " + clientOrServer + " side, is lower than " + threshold + " rate.");
} else if (AlarmType.SLOW_RTT.getValue() == alarm.getAlarmType()) {
alarm.setAlarmContent("Response time of " + application.getApplicationCode() + ", detected from " + clientOrServer + " side, is slower than " + threshold + " ms.");
}
}
@Override protected Double calleeErrorRateThreshold() { @Override protected Double calleeErrorRateThreshold() {
return applicationAlarmRuleConfig.calleeErrorRateThreshold(); return applicationAlarmRuleConfig.calleeErrorRateThreshold();
} }
......
...@@ -21,22 +21,29 @@ package org.apache.skywalking.apm.collector.analysis.alarm.provider.worker.appli ...@@ -21,22 +21,29 @@ package org.apache.skywalking.apm.collector.analysis.alarm.provider.worker.appli
import org.apache.skywalking.apm.collector.analysis.alarm.define.graph.AlarmWorkerIdDefine; import org.apache.skywalking.apm.collector.analysis.alarm.define.graph.AlarmWorkerIdDefine;
import org.apache.skywalking.apm.collector.analysis.alarm.provider.worker.AlarmAssertWorker; import org.apache.skywalking.apm.collector.analysis.alarm.provider.worker.AlarmAssertWorker;
import org.apache.skywalking.apm.collector.analysis.alarm.provider.worker.AlarmAssertWorkerProvider; import org.apache.skywalking.apm.collector.analysis.alarm.provider.worker.AlarmAssertWorkerProvider;
import org.apache.skywalking.apm.collector.cache.CacheModule;
import org.apache.skywalking.apm.collector.cache.service.ApplicationCacheService;
import org.apache.skywalking.apm.collector.configuration.ConfigurationModule; import org.apache.skywalking.apm.collector.configuration.ConfigurationModule;
import org.apache.skywalking.apm.collector.configuration.service.IApplicationReferenceAlarmRuleConfig; import org.apache.skywalking.apm.collector.configuration.service.IApplicationReferenceAlarmRuleConfig;
import org.apache.skywalking.apm.collector.core.module.ModuleManager; 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.Const;
import org.apache.skywalking.apm.collector.storage.table.MetricSource;
import org.apache.skywalking.apm.collector.storage.table.alarm.AlarmType;
import org.apache.skywalking.apm.collector.storage.table.alarm.ApplicationReferenceAlarm; import org.apache.skywalking.apm.collector.storage.table.alarm.ApplicationReferenceAlarm;
import org.apache.skywalking.apm.collector.storage.table.application.ApplicationReferenceMetric; import org.apache.skywalking.apm.collector.storage.table.application.ApplicationReferenceMetric;
import org.apache.skywalking.apm.collector.storage.table.register.Application;
/** /**
* @author peng-yongsheng * @author peng-yongsheng
*/ */
public class ApplicationReferenceMetricAlarmAssertWorker extends AlarmAssertWorker<ApplicationReferenceMetric, ApplicationReferenceAlarm> { public class ApplicationReferenceMetricAlarmAssertWorker extends AlarmAssertWorker<ApplicationReferenceMetric, ApplicationReferenceAlarm> {
private final ApplicationCacheService applicationCacheService;
private final IApplicationReferenceAlarmRuleConfig applicationReferenceAlarmRuleConfig; private final IApplicationReferenceAlarmRuleConfig applicationReferenceAlarmRuleConfig;
public ApplicationReferenceMetricAlarmAssertWorker(ModuleManager moduleManager) { public ApplicationReferenceMetricAlarmAssertWorker(ModuleManager moduleManager) {
super(moduleManager); super(moduleManager);
this.applicationCacheService = moduleManager.find(CacheModule.NAME).getService(ApplicationCacheService.class);
this.applicationReferenceAlarmRuleConfig = moduleManager.find(ConfigurationModule.NAME).getService(IApplicationReferenceAlarmRuleConfig.class); this.applicationReferenceAlarmRuleConfig = moduleManager.find(ConfigurationModule.NAME).getService(IApplicationReferenceAlarmRuleConfig.class);
} }
...@@ -52,6 +59,21 @@ public class ApplicationReferenceMetricAlarmAssertWorker extends AlarmAssertWork ...@@ -52,6 +59,21 @@ public class ApplicationReferenceMetricAlarmAssertWorker extends AlarmAssertWork
return applicationReferenceAlarm; return applicationReferenceAlarm;
} }
@Override protected void generateAlarmContent(ApplicationReferenceAlarm alarm, double threshold) {
Application application = applicationCacheService.getApplicationById(alarm.getBehindApplicationId());
String clientOrServer = "server";
if (MetricSource.Caller.getValue() == alarm.getSourceValue()) {
clientOrServer = "client";
}
if (AlarmType.ERROR_RATE.getValue() == alarm.getAlarmType()) {
alarm.setAlarmContent("The success rate of " + application.getApplicationCode() + ", detected from " + clientOrServer + " side, is lower than " + threshold + " rate.");
} else if (AlarmType.SLOW_RTT.getValue() == alarm.getAlarmType()) {
alarm.setAlarmContent("Response time of " + application.getApplicationCode() + ", detected from " + clientOrServer + " side, is slower than " + threshold + " ms.");
}
}
@Override protected Double calleeErrorRateThreshold() { @Override protected Double calleeErrorRateThreshold() {
return applicationReferenceAlarmRuleConfig.calleeErrorRateThreshold(); return applicationReferenceAlarmRuleConfig.calleeErrorRateThreshold();
} }
......
...@@ -18,6 +18,8 @@ ...@@ -18,6 +18,8 @@
package org.apache.skywalking.apm.collector.analysis.alarm.provider.worker.instance; package org.apache.skywalking.apm.collector.analysis.alarm.provider.worker.instance;
import com.google.gson.Gson;
import com.google.gson.JsonObject;
import org.apache.skywalking.apm.collector.analysis.alarm.define.graph.AlarmWorkerIdDefine; import org.apache.skywalking.apm.collector.analysis.alarm.define.graph.AlarmWorkerIdDefine;
import org.apache.skywalking.apm.collector.analysis.alarm.provider.worker.AlarmAssertWorker; import org.apache.skywalking.apm.collector.analysis.alarm.provider.worker.AlarmAssertWorker;
import org.apache.skywalking.apm.collector.analysis.alarm.provider.worker.AlarmAssertWorkerProvider; import org.apache.skywalking.apm.collector.analysis.alarm.provider.worker.AlarmAssertWorkerProvider;
...@@ -25,18 +27,26 @@ import org.apache.skywalking.apm.collector.configuration.ConfigurationModule; ...@@ -25,18 +27,26 @@ import org.apache.skywalking.apm.collector.configuration.ConfigurationModule;
import org.apache.skywalking.apm.collector.configuration.service.IInstanceAlarmRuleConfig; import org.apache.skywalking.apm.collector.configuration.service.IInstanceAlarmRuleConfig;
import org.apache.skywalking.apm.collector.core.module.ModuleManager; 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.Const;
import org.apache.skywalking.apm.collector.storage.StorageModule;
import org.apache.skywalking.apm.collector.storage.dao.ui.IInstanceUIDAO;
import org.apache.skywalking.apm.collector.storage.table.MetricSource;
import org.apache.skywalking.apm.collector.storage.table.alarm.AlarmType;
import org.apache.skywalking.apm.collector.storage.table.alarm.InstanceAlarm; import org.apache.skywalking.apm.collector.storage.table.alarm.InstanceAlarm;
import org.apache.skywalking.apm.collector.storage.table.instance.InstanceMetric; import org.apache.skywalking.apm.collector.storage.table.instance.InstanceMetric;
import org.apache.skywalking.apm.collector.storage.table.register.Instance;
/** /**
* @author peng-yongsheng * @author peng-yongsheng
*/ */
public class InstanceMetricAlarmAssertWorker extends AlarmAssertWorker<InstanceMetric, InstanceAlarm> { public class InstanceMetricAlarmAssertWorker extends AlarmAssertWorker<InstanceMetric, InstanceAlarm> {
private final Gson gson = new Gson();
private final IInstanceUIDAO instanceDAO;
private final IInstanceAlarmRuleConfig instanceAlarmRuleConfig; private final IInstanceAlarmRuleConfig instanceAlarmRuleConfig;
public InstanceMetricAlarmAssertWorker(ModuleManager moduleManager) { public InstanceMetricAlarmAssertWorker(ModuleManager moduleManager) {
super(moduleManager); super(moduleManager);
this.instanceDAO = moduleManager.find(StorageModule.NAME).getService(IInstanceUIDAO.class);
this.instanceAlarmRuleConfig = moduleManager.find(ConfigurationModule.NAME).getService(IInstanceAlarmRuleConfig.class); this.instanceAlarmRuleConfig = moduleManager.find(ConfigurationModule.NAME).getService(IInstanceAlarmRuleConfig.class);
} }
...@@ -52,6 +62,26 @@ public class InstanceMetricAlarmAssertWorker extends AlarmAssertWorker<InstanceM ...@@ -52,6 +62,26 @@ public class InstanceMetricAlarmAssertWorker extends AlarmAssertWorker<InstanceM
return instanceAlarm; return instanceAlarm;
} }
@Override protected void generateAlarmContent(InstanceAlarm alarm, double threshold) {
Instance instance = instanceDAO.getInstance(alarm.getInstanceId());
JsonObject osInfo = gson.fromJson(instance.getOsInfo(), JsonObject.class);
String serverName = Const.UNKNOWN;
if (osInfo.has("hostName")) {
serverName = osInfo.get("hostName").getAsString();
}
String clientOrServer = "server";
if (MetricSource.Caller.getValue() == alarm.getSourceValue()) {
clientOrServer = "client";
}
if (AlarmType.ERROR_RATE.getValue() == alarm.getAlarmType()) {
alarm.setAlarmContent("The success rate of " + serverName + ", detected from " + clientOrServer + " side, is lower than " + threshold + " rate.");
} else if (AlarmType.SLOW_RTT.getValue() == alarm.getAlarmType()) {
alarm.setAlarmContent("Response time of " + serverName + ", detected from " + clientOrServer + " side, is slower than " + threshold + " ms.");
}
}
@Override protected Double calleeErrorRateThreshold() { @Override protected Double calleeErrorRateThreshold() {
return instanceAlarmRuleConfig.calleeErrorRateThreshold(); return instanceAlarmRuleConfig.calleeErrorRateThreshold();
} }
......
...@@ -18,6 +18,8 @@ ...@@ -18,6 +18,8 @@
package org.apache.skywalking.apm.collector.analysis.alarm.provider.worker.instance; package org.apache.skywalking.apm.collector.analysis.alarm.provider.worker.instance;
import com.google.gson.Gson;
import com.google.gson.JsonObject;
import org.apache.skywalking.apm.collector.analysis.alarm.define.graph.AlarmWorkerIdDefine; import org.apache.skywalking.apm.collector.analysis.alarm.define.graph.AlarmWorkerIdDefine;
import org.apache.skywalking.apm.collector.analysis.alarm.provider.worker.AlarmAssertWorker; import org.apache.skywalking.apm.collector.analysis.alarm.provider.worker.AlarmAssertWorker;
import org.apache.skywalking.apm.collector.analysis.alarm.provider.worker.AlarmAssertWorkerProvider; import org.apache.skywalking.apm.collector.analysis.alarm.provider.worker.AlarmAssertWorkerProvider;
...@@ -25,18 +27,26 @@ import org.apache.skywalking.apm.collector.configuration.ConfigurationModule; ...@@ -25,18 +27,26 @@ import org.apache.skywalking.apm.collector.configuration.ConfigurationModule;
import org.apache.skywalking.apm.collector.configuration.service.IInstanceReferenceAlarmRuleConfig; import org.apache.skywalking.apm.collector.configuration.service.IInstanceReferenceAlarmRuleConfig;
import org.apache.skywalking.apm.collector.core.module.ModuleManager; 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.Const;
import org.apache.skywalking.apm.collector.storage.StorageModule;
import org.apache.skywalking.apm.collector.storage.dao.ui.IInstanceUIDAO;
import org.apache.skywalking.apm.collector.storage.table.MetricSource;
import org.apache.skywalking.apm.collector.storage.table.alarm.AlarmType;
import org.apache.skywalking.apm.collector.storage.table.alarm.InstanceReferenceAlarm; import org.apache.skywalking.apm.collector.storage.table.alarm.InstanceReferenceAlarm;
import org.apache.skywalking.apm.collector.storage.table.instance.InstanceReferenceMetric; import org.apache.skywalking.apm.collector.storage.table.instance.InstanceReferenceMetric;
import org.apache.skywalking.apm.collector.storage.table.register.Instance;
/** /**
* @author peng-yongsheng * @author peng-yongsheng
*/ */
public class InstanceReferenceMetricAlarmAssertWorker extends AlarmAssertWorker<InstanceReferenceMetric, InstanceReferenceAlarm> { public class InstanceReferenceMetricAlarmAssertWorker extends AlarmAssertWorker<InstanceReferenceMetric, InstanceReferenceAlarm> {
private Gson gson = new Gson();
private final IInstanceUIDAO instanceDAO;
private final IInstanceReferenceAlarmRuleConfig instanceReferenceAlarmRuleConfig; private final IInstanceReferenceAlarmRuleConfig instanceReferenceAlarmRuleConfig;
public InstanceReferenceMetricAlarmAssertWorker(ModuleManager moduleManager) { public InstanceReferenceMetricAlarmAssertWorker(ModuleManager moduleManager) {
super(moduleManager); super(moduleManager);
this.instanceDAO = moduleManager.find(StorageModule.NAME).getService(IInstanceUIDAO.class);
this.instanceReferenceAlarmRuleConfig = moduleManager.find(ConfigurationModule.NAME).getService(IInstanceReferenceAlarmRuleConfig.class); this.instanceReferenceAlarmRuleConfig = moduleManager.find(ConfigurationModule.NAME).getService(IInstanceReferenceAlarmRuleConfig.class);
} }
...@@ -54,6 +64,26 @@ public class InstanceReferenceMetricAlarmAssertWorker extends AlarmAssertWorker< ...@@ -54,6 +64,26 @@ public class InstanceReferenceMetricAlarmAssertWorker extends AlarmAssertWorker<
return instanceReferenceAlarm; return instanceReferenceAlarm;
} }
@Override protected void generateAlarmContent(InstanceReferenceAlarm alarm, double threshold) {
Instance instance = instanceDAO.getInstance(alarm.getBehindInstanceId());
JsonObject osInfo = gson.fromJson(instance.getOsInfo(), JsonObject.class);
String serverName = Const.UNKNOWN;
if (osInfo.has("hostName")) {
serverName = osInfo.get("hostName").getAsString();
}
String clientOrServer = "server";
if (MetricSource.Caller.getValue() == alarm.getSourceValue()) {
clientOrServer = "client";
}
if (AlarmType.ERROR_RATE.getValue() == alarm.getAlarmType()) {
alarm.setAlarmContent("The success rate of " + serverName + ", detected from " + clientOrServer + " side, is lower than " + threshold + ".");
} else if (AlarmType.SLOW_RTT.getValue() == alarm.getAlarmType()) {
alarm.setAlarmContent("Response time of " + serverName + ", detected from " + clientOrServer + " side, is slower than " + threshold + ".");
}
}
@Override protected Double calleeErrorRateThreshold() { @Override protected Double calleeErrorRateThreshold() {
return instanceReferenceAlarmRuleConfig.calleeErrorRateThreshold(); return instanceReferenceAlarmRuleConfig.calleeErrorRateThreshold();
} }
......
...@@ -21,11 +21,16 @@ package org.apache.skywalking.apm.collector.analysis.alarm.provider.worker.servi ...@@ -21,11 +21,16 @@ package org.apache.skywalking.apm.collector.analysis.alarm.provider.worker.servi
import org.apache.skywalking.apm.collector.analysis.alarm.define.graph.AlarmWorkerIdDefine; import org.apache.skywalking.apm.collector.analysis.alarm.define.graph.AlarmWorkerIdDefine;
import org.apache.skywalking.apm.collector.analysis.alarm.provider.worker.AlarmAssertWorker; import org.apache.skywalking.apm.collector.analysis.alarm.provider.worker.AlarmAssertWorker;
import org.apache.skywalking.apm.collector.analysis.alarm.provider.worker.AlarmAssertWorkerProvider; import org.apache.skywalking.apm.collector.analysis.alarm.provider.worker.AlarmAssertWorkerProvider;
import org.apache.skywalking.apm.collector.cache.CacheModule;
import org.apache.skywalking.apm.collector.cache.service.ServiceNameCacheService;
import org.apache.skywalking.apm.collector.configuration.ConfigurationModule; import org.apache.skywalking.apm.collector.configuration.ConfigurationModule;
import org.apache.skywalking.apm.collector.configuration.service.IServiceAlarmRuleConfig; import org.apache.skywalking.apm.collector.configuration.service.IServiceAlarmRuleConfig;
import org.apache.skywalking.apm.collector.core.module.ModuleManager; 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.Const;
import org.apache.skywalking.apm.collector.storage.table.MetricSource;
import org.apache.skywalking.apm.collector.storage.table.alarm.AlarmType;
import org.apache.skywalking.apm.collector.storage.table.alarm.ServiceAlarm; import org.apache.skywalking.apm.collector.storage.table.alarm.ServiceAlarm;
import org.apache.skywalking.apm.collector.storage.table.register.ServiceName;
import org.apache.skywalking.apm.collector.storage.table.service.ServiceMetric; import org.apache.skywalking.apm.collector.storage.table.service.ServiceMetric;
/** /**
...@@ -33,10 +38,12 @@ import org.apache.skywalking.apm.collector.storage.table.service.ServiceMetric; ...@@ -33,10 +38,12 @@ import org.apache.skywalking.apm.collector.storage.table.service.ServiceMetric;
*/ */
public class ServiceMetricAlarmAssertWorker extends AlarmAssertWorker<ServiceMetric, ServiceAlarm> { public class ServiceMetricAlarmAssertWorker extends AlarmAssertWorker<ServiceMetric, ServiceAlarm> {
private final ServiceNameCacheService serviceNameCacheService;
private final IServiceAlarmRuleConfig serviceAlarmRuleConfig; private final IServiceAlarmRuleConfig serviceAlarmRuleConfig;
public ServiceMetricAlarmAssertWorker(ModuleManager moduleManager) { public ServiceMetricAlarmAssertWorker(ModuleManager moduleManager) {
super(moduleManager); super(moduleManager);
this.serviceNameCacheService = moduleManager.find(CacheModule.NAME).getService(ServiceNameCacheService.class);
this.serviceAlarmRuleConfig = moduleManager.find(ConfigurationModule.NAME).getService(IServiceAlarmRuleConfig.class); this.serviceAlarmRuleConfig = moduleManager.find(ConfigurationModule.NAME).getService(IServiceAlarmRuleConfig.class);
} }
...@@ -53,6 +60,21 @@ public class ServiceMetricAlarmAssertWorker extends AlarmAssertWorker<ServiceMet ...@@ -53,6 +60,21 @@ public class ServiceMetricAlarmAssertWorker extends AlarmAssertWorker<ServiceMet
return serviceAlarm; return serviceAlarm;
} }
@Override protected void generateAlarmContent(ServiceAlarm alarm, double threshold) {
ServiceName serviceName = serviceNameCacheService.get(alarm.getServiceId());
String clientOrServer = "server";
if (MetricSource.Caller.getValue() == alarm.getSourceValue()) {
clientOrServer = "client";
}
if (AlarmType.ERROR_RATE.getValue() == alarm.getAlarmType()) {
alarm.setAlarmContent("The success rate of " + serviceName.getServiceName() + ", detected from " + clientOrServer + " side, is lower than " + threshold + " rate.");
} else if (AlarmType.SLOW_RTT.getValue() == alarm.getAlarmType()) {
alarm.setAlarmContent("Response time of " + serviceName.getServiceName() + ", detected from " + clientOrServer + " side, is slower than " + threshold + " ms.");
}
}
@Override protected Double calleeErrorRateThreshold() { @Override protected Double calleeErrorRateThreshold() {
return serviceAlarmRuleConfig.calleeErrorRateThreshold(); return serviceAlarmRuleConfig.calleeErrorRateThreshold();
} }
......
...@@ -21,26 +21,29 @@ package org.apache.skywalking.apm.collector.analysis.alarm.provider.worker.servi ...@@ -21,26 +21,29 @@ package org.apache.skywalking.apm.collector.analysis.alarm.provider.worker.servi
import org.apache.skywalking.apm.collector.analysis.alarm.define.graph.AlarmWorkerIdDefine; import org.apache.skywalking.apm.collector.analysis.alarm.define.graph.AlarmWorkerIdDefine;
import org.apache.skywalking.apm.collector.analysis.alarm.provider.worker.AlarmAssertWorker; import org.apache.skywalking.apm.collector.analysis.alarm.provider.worker.AlarmAssertWorker;
import org.apache.skywalking.apm.collector.analysis.alarm.provider.worker.AlarmAssertWorkerProvider; import org.apache.skywalking.apm.collector.analysis.alarm.provider.worker.AlarmAssertWorkerProvider;
import org.apache.skywalking.apm.collector.cache.CacheModule;
import org.apache.skywalking.apm.collector.cache.service.ServiceNameCacheService;
import org.apache.skywalking.apm.collector.configuration.ConfigurationModule; import org.apache.skywalking.apm.collector.configuration.ConfigurationModule;
import org.apache.skywalking.apm.collector.configuration.service.IServiceReferenceAlarmRuleConfig; import org.apache.skywalking.apm.collector.configuration.service.IServiceReferenceAlarmRuleConfig;
import org.apache.skywalking.apm.collector.core.module.ModuleManager; 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.Const;
import org.apache.skywalking.apm.collector.storage.table.MetricSource;
import org.apache.skywalking.apm.collector.storage.table.alarm.AlarmType;
import org.apache.skywalking.apm.collector.storage.table.alarm.ServiceReferenceAlarm; import org.apache.skywalking.apm.collector.storage.table.alarm.ServiceReferenceAlarm;
import org.apache.skywalking.apm.collector.storage.table.register.ServiceName;
import org.apache.skywalking.apm.collector.storage.table.service.ServiceReferenceMetric; import org.apache.skywalking.apm.collector.storage.table.service.ServiceReferenceMetric;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/** /**
* @author peng-yongsheng * @author peng-yongsheng
*/ */
public class ServiceReferenceMetricAlarmAssertWorker extends AlarmAssertWorker<ServiceReferenceMetric, ServiceReferenceAlarm> { public class ServiceReferenceMetricAlarmAssertWorker extends AlarmAssertWorker<ServiceReferenceMetric, ServiceReferenceAlarm> {
private final Logger logger = LoggerFactory.getLogger(ServiceReferenceMetricAlarmAssertWorker.class); private final ServiceNameCacheService serviceNameCacheService;
private final IServiceReferenceAlarmRuleConfig serviceReferenceAlarmRuleConfig; private final IServiceReferenceAlarmRuleConfig serviceReferenceAlarmRuleConfig;
public ServiceReferenceMetricAlarmAssertWorker(ModuleManager moduleManager) { ServiceReferenceMetricAlarmAssertWorker(ModuleManager moduleManager) {
super(moduleManager); super(moduleManager);
this.serviceNameCacheService = moduleManager.find(CacheModule.NAME).getService(ServiceNameCacheService.class);
this.serviceReferenceAlarmRuleConfig = moduleManager.find(ConfigurationModule.NAME).getService(IServiceReferenceAlarmRuleConfig.class); this.serviceReferenceAlarmRuleConfig = moduleManager.find(ConfigurationModule.NAME).getService(IServiceReferenceAlarmRuleConfig.class);
} }
...@@ -60,6 +63,21 @@ public class ServiceReferenceMetricAlarmAssertWorker extends AlarmAssertWorker<S ...@@ -60,6 +63,21 @@ public class ServiceReferenceMetricAlarmAssertWorker extends AlarmAssertWorker<S
return serviceReferenceAlarm; return serviceReferenceAlarm;
} }
@Override protected void generateAlarmContent(ServiceReferenceAlarm alarm, double threshold) {
ServiceName serviceName = serviceNameCacheService.get(alarm.getBehindServiceId());
String clientOrServer = "server";
if (MetricSource.Caller.getValue() == alarm.getSourceValue()) {
clientOrServer = "client";
}
if (AlarmType.ERROR_RATE.getValue() == alarm.getAlarmType()) {
alarm.setAlarmContent("The success rate of " + serviceName.getServiceName() + ", detected from " + clientOrServer + " side, is lower than " + threshold + " rate.");
} else if (AlarmType.SLOW_RTT.getValue() == alarm.getAlarmType()) {
alarm.setAlarmContent("Response time of " + serviceName.getServiceName() + ", detected from " + clientOrServer + " side, is slower than " + threshold + " ms.");
}
}
@Override protected Double calleeErrorRateThreshold() { @Override protected Double calleeErrorRateThreshold() {
return serviceReferenceAlarmRuleConfig.calleeErrorRateThreshold(); return serviceReferenceAlarmRuleConfig.calleeErrorRateThreshold();
} }
......
...@@ -16,7 +16,6 @@ ...@@ -16,7 +16,6 @@
* *
*/ */
package org.apache.skywalking.apm.collector.analysis.register.define.service; package org.apache.skywalking.apm.collector.analysis.register.define.service;
import org.apache.skywalking.apm.collector.core.module.Service; import org.apache.skywalking.apm.collector.core.module.Service;
...@@ -25,5 +24,5 @@ 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 * @author peng-yongsheng
*/ */
public interface IServiceNameService extends Service { public interface IServiceNameService extends Service {
int getOrCreate(int applicationId, String serviceName); int getOrCreate(int applicationId, int srcSpanType, String serviceName);
} }
...@@ -73,6 +73,7 @@ public class InstanceRegisterSerialWorker extends AbstractLocalAsyncWorker<Insta ...@@ -73,6 +73,7 @@ public class InstanceRegisterSerialWorker extends AbstractLocalAsyncWorker<Insta
userInstance.setId(String.valueOf(Const.NONE_INSTANCE_ID)); userInstance.setId(String.valueOf(Const.NONE_INSTANCE_ID));
userInstance.setInstanceId(Const.NONE_INSTANCE_ID); userInstance.setInstanceId(Const.NONE_INSTANCE_ID);
userInstance.setApplicationId(Const.NONE_APPLICATION_ID); userInstance.setApplicationId(Const.NONE_APPLICATION_ID);
userInstance.setApplicationCode(Const.USER_CODE);
userInstance.setAgentUUID(Const.USER_CODE); userInstance.setAgentUUID(Const.USER_CODE);
userInstance.setHeartBeatTime(System.currentTimeMillis()); userInstance.setHeartBeatTime(System.currentTimeMillis());
userInstance.setOsInfo(Const.EMPTY_STRING); userInstance.setOsInfo(Const.EMPTY_STRING);
...@@ -85,6 +86,7 @@ public class InstanceRegisterSerialWorker extends AbstractLocalAsyncWorker<Insta ...@@ -85,6 +86,7 @@ public class InstanceRegisterSerialWorker extends AbstractLocalAsyncWorker<Insta
newInstance.setId("2"); newInstance.setId("2");
newInstance.setInstanceId(2); newInstance.setInstanceId(2);
newInstance.setApplicationId(instance.getApplicationId()); newInstance.setApplicationId(instance.getApplicationId());
newInstance.setApplicationCode(instance.getApplicationCode());
newInstance.setAgentUUID(instance.getAgentUUID()); newInstance.setAgentUUID(instance.getAgentUUID());
newInstance.setHeartBeatTime(instance.getHeartBeatTime()); newInstance.setHeartBeatTime(instance.getHeartBeatTime());
newInstance.setOsInfo(instance.getOsInfo()); newInstance.setOsInfo(instance.getOsInfo());
...@@ -96,6 +98,7 @@ public class InstanceRegisterSerialWorker extends AbstractLocalAsyncWorker<Insta ...@@ -96,6 +98,7 @@ public class InstanceRegisterSerialWorker extends AbstractLocalAsyncWorker<Insta
newInstance.setId(String.valueOf(max + 1)); newInstance.setId(String.valueOf(max + 1));
newInstance.setInstanceId(max + 1); newInstance.setInstanceId(max + 1);
newInstance.setApplicationId(instance.getApplicationId()); newInstance.setApplicationId(instance.getApplicationId());
newInstance.setApplicationCode(instance.getApplicationCode());
newInstance.setAgentUUID(instance.getAgentUUID()); newInstance.setAgentUUID(instance.getAgentUUID());
newInstance.setHeartBeatTime(instance.getHeartBeatTime()); newInstance.setHeartBeatTime(instance.getHeartBeatTime());
newInstance.setOsInfo(instance.getOsInfo()); newInstance.setOsInfo(instance.getOsInfo());
......
...@@ -42,7 +42,7 @@ public class ServiceNameRegisterSerialWorker extends AbstractLocalAsyncWorker<Se ...@@ -42,7 +42,7 @@ public class ServiceNameRegisterSerialWorker extends AbstractLocalAsyncWorker<Se
private final IServiceNameRegisterDAO serviceNameRegisterDAO; private final IServiceNameRegisterDAO serviceNameRegisterDAO;
private final ServiceIdCacheService serviceIdCacheService; private final ServiceIdCacheService serviceIdCacheService;
public ServiceNameRegisterSerialWorker(ModuleManager moduleManager) { ServiceNameRegisterSerialWorker(ModuleManager moduleManager) {
super(moduleManager); super(moduleManager);
this.serviceNameRegisterDAO = getModuleManager().find(StorageModule.NAME).getService(IServiceNameRegisterDAO.class); this.serviceNameRegisterDAO = getModuleManager().find(StorageModule.NAME).getService(IServiceNameRegisterDAO.class);
this.serviceIdCacheService = getModuleManager().find(CacheModule.NAME).getService(ServiceIdCacheService.class); this.serviceIdCacheService = getModuleManager().find(CacheModule.NAME).getService(ServiceIdCacheService.class);
...@@ -54,7 +54,7 @@ public class ServiceNameRegisterSerialWorker extends AbstractLocalAsyncWorker<Se ...@@ -54,7 +54,7 @@ public class ServiceNameRegisterSerialWorker extends AbstractLocalAsyncWorker<Se
@Override protected void onWork(ServiceName serviceName) throws WorkerException { @Override protected void onWork(ServiceName serviceName) throws WorkerException {
logger.debug("register service name: {}, application id: {}", serviceName.getServiceName(), serviceName.getApplicationId()); logger.debug("register service name: {}, application id: {}", serviceName.getServiceName(), serviceName.getApplicationId());
int serviceId = serviceIdCacheService.get(serviceName.getApplicationId(), serviceName.getServiceName()); int serviceId = serviceIdCacheService.get(serviceName.getApplicationId(), serviceName.getSrcSpanType(), serviceName.getServiceName());
if (serviceId == 0) { if (serviceId == 0) {
ServiceName newServiceName; ServiceName newServiceName;
...@@ -62,15 +62,17 @@ public class ServiceNameRegisterSerialWorker extends AbstractLocalAsyncWorker<Se ...@@ -62,15 +62,17 @@ public class ServiceNameRegisterSerialWorker extends AbstractLocalAsyncWorker<Se
if (min == 0) { if (min == 0) {
ServiceName noneServiceName = new ServiceName(); ServiceName noneServiceName = new ServiceName();
noneServiceName.setId("1"); noneServiceName.setId("1");
noneServiceName.setApplicationId(0); noneServiceName.setApplicationId(Const.NONE_APPLICATION_ID);
noneServiceName.setServiceId(Const.NONE_SERVICE_ID); noneServiceName.setServiceId(Const.NONE_SERVICE_ID);
noneServiceName.setServiceName(Const.NONE_SERVICE_NAME); noneServiceName.setServiceName(Const.NONE_SERVICE_NAME);
noneServiceName.setSrcSpanType(Const.SPAN_TYPE_VIRTUAL);
serviceNameRegisterDAO.save(noneServiceName); serviceNameRegisterDAO.save(noneServiceName);
newServiceName = new ServiceName(); newServiceName = new ServiceName();
newServiceName.setId("-1"); newServiceName.setId("-1");
newServiceName.setApplicationId(serviceName.getApplicationId()); newServiceName.setApplicationId(serviceName.getApplicationId());
newServiceName.setServiceId(-1); newServiceName.setServiceId(-1);
newServiceName.setSrcSpanType(serviceName.getSrcSpanType());
newServiceName.setServiceName(serviceName.getServiceName()); newServiceName.setServiceName(serviceName.getServiceName());
} else { } else {
int max = serviceNameRegisterDAO.getMaxServiceId(); int max = serviceNameRegisterDAO.getMaxServiceId();
...@@ -80,6 +82,7 @@ public class ServiceNameRegisterSerialWorker extends AbstractLocalAsyncWorker<Se ...@@ -80,6 +82,7 @@ public class ServiceNameRegisterSerialWorker extends AbstractLocalAsyncWorker<Se
newServiceName.setId(String.valueOf(serviceId)); newServiceName.setId(String.valueOf(serviceId));
newServiceName.setApplicationId(serviceName.getApplicationId()); newServiceName.setApplicationId(serviceName.getApplicationId());
newServiceName.setServiceId(serviceId); newServiceName.setServiceId(serviceId);
newServiceName.setSrcSpanType(serviceName.getSrcSpanType());
newServiceName.setServiceName(serviceName.getServiceName()); newServiceName.setServiceName(serviceName.getServiceName());
} }
serviceNameRegisterDAO.save(newServiceName); serviceNameRegisterDAO.save(newServiceName);
......
...@@ -21,6 +21,7 @@ package org.apache.skywalking.apm.collector.analysis.register.provider.service; ...@@ -21,6 +21,7 @@ package org.apache.skywalking.apm.collector.analysis.register.provider.service;
import org.apache.skywalking.apm.collector.analysis.register.define.graph.GraphIdDefine; import org.apache.skywalking.apm.collector.analysis.register.define.graph.GraphIdDefine;
import org.apache.skywalking.apm.collector.analysis.register.define.service.IInstanceIDService; import org.apache.skywalking.apm.collector.analysis.register.define.service.IInstanceIDService;
import org.apache.skywalking.apm.collector.cache.CacheModule; import org.apache.skywalking.apm.collector.cache.CacheModule;
import org.apache.skywalking.apm.collector.cache.service.ApplicationCacheService;
import org.apache.skywalking.apm.collector.cache.service.InstanceCacheService; import org.apache.skywalking.apm.collector.cache.service.InstanceCacheService;
import org.apache.skywalking.apm.collector.core.graph.Graph; import org.apache.skywalking.apm.collector.core.graph.Graph;
import org.apache.skywalking.apm.collector.core.graph.GraphManager; import org.apache.skywalking.apm.collector.core.graph.GraphManager;
...@@ -45,6 +46,7 @@ public class InstanceIDService implements IInstanceIDService { ...@@ -45,6 +46,7 @@ public class InstanceIDService implements IInstanceIDService {
private InstanceCacheService instanceCacheService; private InstanceCacheService instanceCacheService;
private Graph<Instance> instanceRegisterGraph; private Graph<Instance> instanceRegisterGraph;
private IInstanceRegisterDAO instanceRegisterDAO; private IInstanceRegisterDAO instanceRegisterDAO;
private ApplicationCacheService applicationCacheService;
public InstanceIDService(ModuleManager moduleManager) { public InstanceIDService(ModuleManager moduleManager) {
this.moduleManager = moduleManager; this.moduleManager = moduleManager;
...@@ -71,6 +73,13 @@ public class InstanceIDService implements IInstanceIDService { ...@@ -71,6 +73,13 @@ public class InstanceIDService implements IInstanceIDService {
return instanceRegisterDAO; return instanceRegisterDAO;
} }
private ApplicationCacheService getApplicationCacheService() {
if (ObjectUtils.isEmpty(applicationCacheService)) {
this.applicationCacheService = moduleManager.find(CacheModule.NAME).getService(ApplicationCacheService.class);
}
return applicationCacheService;
}
@Override public int getOrCreateByAgentUUID(int applicationId, String agentUUID, long registerTime, String osInfo) { @Override public int getOrCreateByAgentUUID(int applicationId, String agentUUID, long registerTime, String osInfo) {
logger.debug("get or getOrCreate instance id by agent UUID, application id: {}, agentUUID: {}, registerTime: {}, osInfo: {}", applicationId, agentUUID, registerTime, osInfo); logger.debug("get or getOrCreate instance id by agent UUID, application id: {}, agentUUID: {}, registerTime: {}, osInfo: {}", applicationId, agentUUID, registerTime, osInfo);
int instanceId = getInstanceCacheService().getInstanceIdByAgentUUID(applicationId, agentUUID); int instanceId = getInstanceCacheService().getInstanceIdByAgentUUID(applicationId, agentUUID);
...@@ -79,6 +88,7 @@ public class InstanceIDService implements IInstanceIDService { ...@@ -79,6 +88,7 @@ public class InstanceIDService implements IInstanceIDService {
Instance instance = new Instance(); Instance instance = new Instance();
instance.setId("0"); instance.setId("0");
instance.setApplicationId(applicationId); instance.setApplicationId(applicationId);
instance.setApplicationCode(getApplicationCacheService().getApplicationById(applicationId).getApplicationCode());
instance.setAgentUUID(agentUUID); instance.setAgentUUID(agentUUID);
instance.setRegisterTime(registerTime); instance.setRegisterTime(registerTime);
instance.setHeartBeatTime(registerTime); instance.setHeartBeatTime(registerTime);
...@@ -100,6 +110,7 @@ public class InstanceIDService implements IInstanceIDService { ...@@ -100,6 +110,7 @@ public class InstanceIDService implements IInstanceIDService {
Instance instance = new Instance(); Instance instance = new Instance();
instance.setId("0"); instance.setId("0");
instance.setApplicationId(applicationId); instance.setApplicationId(applicationId);
instance.setApplicationCode(getApplicationCacheService().getApplicationById(applicationId).getApplicationCode());
instance.setAgentUUID(Const.EMPTY_STRING); instance.setAgentUUID(Const.EMPTY_STRING);
instance.setRegisterTime(registerTime); instance.setRegisterTime(registerTime);
instance.setHeartBeatTime(registerTime); instance.setHeartBeatTime(registerTime);
...@@ -118,6 +129,7 @@ public class InstanceIDService implements IInstanceIDService { ...@@ -118,6 +129,7 @@ public class InstanceIDService implements IInstanceIDService {
Instance instance = new Instance(); Instance instance = new Instance();
instance.setId(String.valueOf(instanceId)); instance.setId(String.valueOf(instanceId));
instance.setApplicationId(applicationId); instance.setApplicationId(applicationId);
instance.setApplicationCode(getApplicationCacheService().getApplicationById(applicationId).getApplicationCode());
instance.setAgentUUID(""); instance.setAgentUUID("");
instance.setRegisterTime(registerTime); instance.setRegisterTime(registerTime);
instance.setHeartBeatTime(registerTime); instance.setHeartBeatTime(registerTime);
......
...@@ -59,14 +59,15 @@ public class ServiceNameService implements IServiceNameService { ...@@ -59,14 +59,15 @@ public class ServiceNameService implements IServiceNameService {
return serviceNameRegisterGraph; return serviceNameRegisterGraph;
} }
public int getOrCreate(int applicationId, String serviceName) { @Override public int getOrCreate(int applicationId, int srcSpanType, String serviceName) {
int serviceId = getServiceIdCacheService().get(applicationId, serviceName); int serviceId = getServiceIdCacheService().get(applicationId, srcSpanType, serviceName);
if (serviceId == 0) { if (serviceId == 0) {
ServiceName service = new ServiceName(); ServiceName service = new ServiceName();
service.setId("0"); service.setId("0");
service.setApplicationId(applicationId); service.setApplicationId(applicationId);
service.setServiceName(serviceName); service.setServiceName(serviceName);
service.setSrcSpanType(srcSpanType);
service.setServiceId(0); service.setServiceId(0);
getServiceNameRegisterGraph().start(service); getServiceNameRegisterGraph().start(service);
......
...@@ -27,6 +27,7 @@ import org.apache.skywalking.apm.collector.cache.service.InstanceCacheService; ...@@ -27,6 +27,7 @@ import org.apache.skywalking.apm.collector.cache.service.InstanceCacheService;
import org.apache.skywalking.apm.collector.core.module.ModuleManager; import org.apache.skywalking.apm.collector.core.module.ModuleManager;
import org.apache.skywalking.apm.collector.core.util.Const; import org.apache.skywalking.apm.collector.core.util.Const;
import org.apache.skywalking.apm.collector.core.util.StringUtils; import org.apache.skywalking.apm.collector.core.util.StringUtils;
import org.apache.skywalking.apm.network.proto.SpanType;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
...@@ -57,7 +58,7 @@ public class ReferenceIdExchanger implements IdExchanger<ReferenceDecorator> { ...@@ -57,7 +58,7 @@ public class ReferenceIdExchanger implements IdExchanger<ReferenceDecorator> {
@Override public boolean exchange(ReferenceDecorator standardBuilder, int applicationId) { @Override public boolean exchange(ReferenceDecorator standardBuilder, int applicationId) {
if (standardBuilder.getEntryServiceId() == 0 && StringUtils.isNotEmpty(standardBuilder.getEntryServiceName())) { 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 (entryServiceId == 0) {
if (logger.isDebugEnabled()) { if (logger.isDebugEnabled()) {
...@@ -73,7 +74,7 @@ public class ReferenceIdExchanger implements IdExchanger<ReferenceDecorator> { ...@@ -73,7 +74,7 @@ public class ReferenceIdExchanger implements IdExchanger<ReferenceDecorator> {
} }
if (standardBuilder.getParentServiceId() == 0 && StringUtils.isNotEmpty(standardBuilder.getParentServiceName())) { 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 (parentServiceId == 0) {
if (logger.isDebugEnabled()) { if (logger.isDebugEnabled()) {
......
...@@ -71,7 +71,7 @@ public class SpanIdExchanger implements IdExchanger<SpanDecorator> { ...@@ -71,7 +71,7 @@ public class SpanIdExchanger implements IdExchanger<SpanDecorator> {
} }
if (standardBuilder.getOperationNameId() == 0 && StringUtils.isNotEmpty(standardBuilder.getOperationName())) { 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) { if (operationNameId == 0) {
logger.debug("service name: {} from application id: {} exchange failed", standardBuilder.getOperationName(), applicationId); logger.debug("service name: {} from application id: {} exchange failed", standardBuilder.getOperationName(), applicationId);
......
...@@ -227,26 +227,7 @@ ...@@ -227,26 +227,7 @@
</execution> </execution>
</executions> </executions>
</plugin> </plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<copy file="${project.build.directory}/skywalking-collector-assembly.tar.gz"
tofile="${project.basedir}/../../packages/skywalking-collector.tar.gz" overwrite="true"/>
<copy file="${project.build.directory}/skywalking-collector-assembly.zip"
tofile="${project.basedir}/../../packages/skywalking-collector.zip" overwrite="true"/>
</tasks>
</configuration>
</execution>
</executions>
</plugin>
<plugin> <plugin>
<groupId>com.spotify</groupId> <groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId> <artifactId>docker-maven-plugin</artifactId>
......
...@@ -22,8 +22,7 @@ ...@@ -22,8 +22,7 @@
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd"> xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
<id>assembly</id> <id>assembly</id>
<formats> <formats>
<format>zip</format> <format>dir</format>
<format>tar.gz</format>
</formats> </formats>
<dependencySets> <dependencySets>
<dependencySet> <dependencySet>
...@@ -32,15 +31,6 @@ ...@@ -32,15 +31,6 @@
</dependencySet> </dependencySet>
</dependencySets> </dependencySets>
<fileSets> <fileSets>
<fileSet>
<directory>${project.basedir}/bin</directory>
<outputDirectory>/bin</outputDirectory>
<includes>
<include>*.sh</include>
<include>*.bat</include>
</includes>
<fileMode>0755</fileMode>
</fileSet>
<fileSet> <fileSet>
<directory>src/main/resources</directory> <directory>src/main/resources</directory>
<outputDirectory>/config</outputDirectory> <outputDirectory>/config</outputDirectory>
......
...@@ -16,7 +16,6 @@ ...@@ -16,7 +16,6 @@
* *
*/ */
package org.apache.skywalking.apm.collector.cache.service; package org.apache.skywalking.apm.collector.cache.service;
import org.apache.skywalking.apm.collector.core.module.Service; import org.apache.skywalking.apm.collector.core.module.Service;
...@@ -25,5 +24,5 @@ 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 * @author peng-yongsheng
*/ */
public interface ServiceIdCacheService extends Service { public interface ServiceIdCacheService extends Service {
int get(int applicationId, String serviceName); int get(int applicationId, int srcSpanType, String serviceName);
} }
...@@ -16,15 +16,14 @@ ...@@ -16,15 +16,14 @@
* *
*/ */
package org.apache.skywalking.apm.collector.cache.guava.service; package org.apache.skywalking.apm.collector.cache.guava.service;
import com.google.common.cache.Cache; import com.google.common.cache.Cache;
import com.google.common.cache.CacheBuilder; 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.cache.service.ServiceIdCacheService;
import org.apache.skywalking.apm.collector.core.module.ModuleManager; 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.StorageModule;
import org.apache.skywalking.apm.collector.storage.dao.cache.IServiceNameCacheDAO; import org.apache.skywalking.apm.collector.storage.dao.cache.IServiceNameCacheDAO;
import org.slf4j.Logger; import org.slf4j.Logger;
...@@ -53,18 +52,19 @@ public class ServiceIdCacheGuavaService implements ServiceIdCacheService { ...@@ -53,18 +52,19 @@ public class ServiceIdCacheGuavaService implements ServiceIdCacheService {
return this.serviceNameCacheDAO; return this.serviceNameCacheDAO;
} }
public int get(int applicationId, String serviceName) { @Override public int get(int applicationId, int srcSpanType, String serviceName) {
int serviceId = 0; int serviceId = 0;
String id = applicationId + Const.ID_SPLIT + srcSpanType + Const.ID_SPLIT + serviceName;
try { 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) { } catch (Throwable e) {
logger.error(e.getMessage(), e); logger.error(e.getMessage(), e);
} }
if (serviceId == 0) { if (serviceId == 0) {
serviceId = getServiceNameCacheDAO().getServiceId(applicationId, serviceName); serviceId = getServiceNameCacheDAO().getServiceId(applicationId, srcSpanType, serviceName);
if (serviceId != 0) { if (serviceId != 0) {
serviceIdCache.put(applicationId + Const.ID_SPLIT + serviceName, serviceId); serviceIdCache.put(id, serviceId);
} }
} }
return serviceId; return serviceId;
......
...@@ -34,4 +34,5 @@ public class Const { ...@@ -34,4 +34,5 @@ public class Const {
public static final String EXCEPTION = "Exception"; public static final String EXCEPTION = "Exception";
public static final String EMPTY_STRING = ""; public static final String EMPTY_STRING = "";
public static final String FILE_SUFFIX = "sw"; public static final String FILE_SUFFIX = "sw";
public static final int SPAN_TYPE_VIRTUAL = 9;
} }
...@@ -27,5 +27,5 @@ import org.apache.skywalking.apm.collector.storage.table.register.ServiceName; ...@@ -27,5 +27,5 @@ import org.apache.skywalking.apm.collector.storage.table.register.ServiceName;
public interface IServiceNameCacheDAO extends DAO { public interface IServiceNameCacheDAO extends DAO {
ServiceName get(int serviceId); ServiceName get(int serviceId);
int getServiceId(int applicationId, String serviceName); int getServiceId(int applicationId, int srcSpanType, String serviceName);
} }
...@@ -27,5 +27,26 @@ import org.apache.skywalking.apm.collector.storage.ui.common.Step; ...@@ -27,5 +27,26 @@ import org.apache.skywalking.apm.collector.storage.ui.common.Step;
*/ */
public interface IApplicationAlarmListUIDAO extends DAO { public interface IApplicationAlarmListUIDAO extends DAO {
List<Integer> getAlarmedApplicationNum(Step step, long start, long end); List<AlarmTrend> getAlarmedApplicationNum(Step step, long startTimeBucket, long endTimeBucket);
class AlarmTrend {
private long timeBucket;
private int numberOfApplication;
public long getTimeBucket() {
return timeBucket;
}
public void setTimeBucket(long timeBucket) {
this.timeBucket = timeBucket;
}
public int getNumberOfApplication() {
return numberOfApplication;
}
public void setNumberOfApplication(int numberOfApplication) {
this.numberOfApplication = numberOfApplication;
}
}
} }
...@@ -27,5 +27,5 @@ import org.apache.skywalking.apm.collector.storage.ui.alarm.Alarm; ...@@ -27,5 +27,5 @@ import org.apache.skywalking.apm.collector.storage.ui.alarm.Alarm;
*/ */
public interface IApplicationAlarmUIDAO extends DAO { public interface IApplicationAlarmUIDAO extends DAO {
Alarm loadAlarmList(String keyword, long start, long end, int limit, int from) throws ParseException; Alarm loadAlarmList(String keyword, long startTimeBucket, long endTimeBucket, int limit, int from) throws ParseException;
} }
...@@ -27,7 +27,7 @@ import org.apache.skywalking.apm.collector.storage.ui.common.Step; ...@@ -27,7 +27,7 @@ import org.apache.skywalking.apm.collector.storage.ui.common.Step;
*/ */
public interface IApplicationComponentUIDAO extends DAO { public interface IApplicationComponentUIDAO extends DAO {
List<ApplicationComponent> load(Step step, long startTime, long endTime); List<ApplicationComponent> load(Step step, long startTimeBucket, long endTimeBucket);
class ApplicationComponent { class ApplicationComponent {
private int componentId; private int componentId;
......
...@@ -26,7 +26,7 @@ import org.apache.skywalking.apm.collector.storage.ui.common.Step; ...@@ -26,7 +26,7 @@ import org.apache.skywalking.apm.collector.storage.ui.common.Step;
* @author peng-yongsheng * @author peng-yongsheng
*/ */
public interface IApplicationMappingUIDAO extends DAO { public interface IApplicationMappingUIDAO extends DAO {
List<ApplicationMapping> load(Step step, long startTime, long endTime); List<ApplicationMapping> load(Step step, long startTimeBucket, long endTimeBucket);
class ApplicationMapping { class ApplicationMapping {
private int applicationId; private int applicationId;
......
...@@ -28,6 +28,84 @@ import org.apache.skywalking.apm.collector.storage.ui.overview.ApplicationTPS; ...@@ -28,6 +28,84 @@ import org.apache.skywalking.apm.collector.storage.ui.overview.ApplicationTPS;
* @author peng-yongsheng * @author peng-yongsheng
*/ */
public interface IApplicationMetricUIDAO extends DAO { public interface IApplicationMetricUIDAO extends DAO {
List<ApplicationTPS> getTopNApplicationThroughput(Step step, long start, long end, long betweenSecond, int topN, List<ApplicationTPS> getTopNApplicationThroughput(Step step, long startTimeBucket, long endTimeBucket,
int betweenSecond, int topN, MetricSource metricSource);
List<ApplicationMetric> getApplications(Step step, long startTimeBucket, long endTimeBucket,
MetricSource metricSource); 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;
}
}
} }
...@@ -21,18 +21,70 @@ package org.apache.skywalking.apm.collector.storage.dao.ui; ...@@ -21,18 +21,70 @@ package org.apache.skywalking.apm.collector.storage.dao.ui;
import java.util.List; import java.util.List;
import org.apache.skywalking.apm.collector.storage.base.dao.DAO; 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.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.Step;
/** /**
* @author peng-yongsheng * @author peng-yongsheng
*/ */
public interface IApplicationReferenceMetricUIDAO extends DAO { public interface IApplicationReferenceMetricUIDAO extends DAO {
List<Call> getFrontApplications(Step step, int applicationId, long startTime, long endTime,
MetricSource metricSource);
List<Call> getBehindApplications(Step step, int applicationId, long startTime, long endTime, List<ApplicationReferenceMetric> getReferences(Step step, long startTimeBucket, long endTimeBucket,
MetricSource metricSource); MetricSource metricSource, Integer... applicationIds);
List<Call> getApplications(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;
}
}
} }
...@@ -27,5 +27,5 @@ import org.apache.skywalking.apm.collector.storage.ui.alarm.Alarm; ...@@ -27,5 +27,5 @@ import org.apache.skywalking.apm.collector.storage.ui.alarm.Alarm;
*/ */
public interface IInstanceAlarmUIDAO extends DAO { public interface IInstanceAlarmUIDAO extends DAO {
Alarm loadAlarmList(String keyword, long start, long end, int limit, int from) throws ParseException; Alarm loadAlarmList(String keyword, long startTimeBucket, long endTimeBucket, int limit, int from) throws ParseException;
} }
...@@ -30,9 +30,8 @@ import org.apache.skywalking.apm.collector.storage.utils.DurationPoint; ...@@ -30,9 +30,8 @@ import org.apache.skywalking.apm.collector.storage.utils.DurationPoint;
*/ */
public interface IInstanceMetricUIDAO extends DAO { public interface IInstanceMetricUIDAO extends DAO {
List<AppServerInfo> getServerThroughput(int applicationId, Step step, long start, long end, long secondBetween, List<AppServerInfo> getServerThroughput(int applicationId, Step step, long startTimeBucket, long endTimeBucket,
int topN, int secondBetween, int topN, MetricSource metricSource);
MetricSource metricSource);
List<Integer> getServerTPSTrend(int instanceId, Step step, List<DurationPoint> durationPoints); List<Integer> getServerTPSTrend(int instanceId, Step step, List<DurationPoint> durationPoints);
......
...@@ -32,11 +32,15 @@ public interface IInstanceUIDAO extends DAO { ...@@ -32,11 +32,15 @@ public interface IInstanceUIDAO extends DAO {
Long instanceLastHeartBeatTime(long applicationInstanceId); Long instanceLastHeartBeatTime(long applicationInstanceId);
List<Application> getApplications(long startTime, long endTime, int... applicationIds); List<Application> getApplications(long startSecondTimeBucket, long endSecondTimeBucket, int... applicationIds);
Instance getInstance(int instanceId); Instance getInstance(int instanceId);
List<AppServerInfo> searchServer(String keyword, long start, long end); List<AppServerInfo> searchServer(String keyword, long startSecondTimeBucket, long endSecondTimeBucket);
List<AppServerInfo> getAllServer(int applicationId, long start, long end); List<AppServerInfo> getAllServer(int applicationId, long startSecondTimeBucket, long endSecondTimeBucket);
long getEarliestRegisterTime(int applicationId);
long getLatestHeartBeatTime(int applicationId);
} }
...@@ -25,6 +25,6 @@ import org.apache.skywalking.apm.collector.storage.ui.trace.TraceBrief; ...@@ -25,6 +25,6 @@ import org.apache.skywalking.apm.collector.storage.ui.trace.TraceBrief;
* @author peng-yongsheng * @author peng-yongsheng
*/ */
public interface ISegmentDurationUIDAO extends DAO { public interface ISegmentDurationUIDAO extends DAO {
TraceBrief loadTop(long startTime, long endTime, long minDuration, long maxDuration, String operationName, TraceBrief loadTop(long startSecondTimeBucket, long endSecondTimeBucket, long minDuration, long maxDuration,
int applicationId, String traceId, int limit, int from); String operationName, int applicationId, int limit, int from, String... segmentIds);
} }
...@@ -27,5 +27,5 @@ import org.apache.skywalking.apm.collector.storage.ui.alarm.Alarm; ...@@ -27,5 +27,5 @@ import org.apache.skywalking.apm.collector.storage.ui.alarm.Alarm;
*/ */
public interface IServiceAlarmUIDAO extends DAO { public interface IServiceAlarmUIDAO extends DAO {
Alarm loadAlarmList(String keyword, long start, long end, int limit, int from) throws ParseException; Alarm loadAlarmList(String keyword, long startTimeBucket, long endTimeBucket, int limit, int from) throws ParseException;
} }
...@@ -40,6 +40,6 @@ public interface IServiceMetricUIDAO extends DAO { ...@@ -40,6 +40,6 @@ public interface IServiceMetricUIDAO extends DAO {
List<Node> getServicesMetric(Step step, long startTime, long endTime, List<Node> getServicesMetric(Step step, long startTime, long endTime,
MetricSource metricSource, Collection<Integer> serviceIds); MetricSource metricSource, Collection<Integer> serviceIds);
List<ServiceMetric> getSlowService(int applicationId, Step step, long start, long end, List<ServiceMetric> getSlowService(int applicationId, Step step, long startTimeBucket, long endTimeBucket,
Integer top, MetricSource metricSource); Integer topN, MetricSource metricSource);
} }
...@@ -21,7 +21,6 @@ package org.apache.skywalking.apm.collector.storage.dao.ui; ...@@ -21,7 +21,6 @@ package org.apache.skywalking.apm.collector.storage.dao.ui;
import java.util.List; import java.util.List;
import org.apache.skywalking.apm.collector.storage.base.dao.DAO; 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.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.Step;
/** /**
...@@ -29,15 +28,66 @@ import org.apache.skywalking.apm.collector.storage.ui.common.Step; ...@@ -29,15 +28,66 @@ import org.apache.skywalking.apm.collector.storage.ui.common.Step;
*/ */
public interface IServiceReferenceMetricUIDAO extends DAO { public interface IServiceReferenceMetricUIDAO extends DAO {
List<Call> getFrontServices(Step step, long startTime, long endTime, List<ServiceReferenceMetric> getFrontServices(Step step, long startTimeBucket, long endTimeBucket,
MetricSource metricSource, int behindServiceId); MetricSource metricSource, int behindServiceId);
List<Call> getBehindServices(Step step, long startTime, long endTime, List<ServiceReferenceMetric> getBehindServices(Step step, long startTimeBucket, long endTimeBucket,
MetricSource metricSource, int frontServiceId); MetricSource metricSource, int frontServiceId);
List<Call> getFrontServices(Step step, long startTime, long endTime, class ServiceReferenceMetric {
MetricSource metricSource, List<Integer> behindServiceIds); private int source;
private int target;
private long calls;
private long errorCalls;
private long durations;
private long errorDurations;
List<Call> getBehindServices(Step step, long startTime, long endTime, public int getSource() {
MetricSource metricSource, List<Integer> frontServiceIds); 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;
}
}
} }
...@@ -32,6 +32,7 @@ public class Instance extends StreamData { ...@@ -32,6 +32,7 @@ public class Instance extends StreamData {
new Column(InstanceTable.COLUMN_ID, new NonOperation()), new Column(InstanceTable.COLUMN_ID, new NonOperation()),
new Column(InstanceTable.COLUMN_AGENT_UUID, new CoverOperation()), new Column(InstanceTable.COLUMN_AGENT_UUID, new CoverOperation()),
new Column(InstanceTable.COLUMN_OS_INFO, new CoverOperation()), new Column(InstanceTable.COLUMN_OS_INFO, new CoverOperation()),
new Column(InstanceTable.COLUMN_APPLICATION_CODE, new CoverOperation()),
}; };
private static final Column[] LONG_COLUMNS = { private static final Column[] LONG_COLUMNS = {
...@@ -118,6 +119,14 @@ public class Instance extends StreamData { ...@@ -118,6 +119,14 @@ public class Instance extends StreamData {
setDataString(2, osInfo); setDataString(2, osInfo);
} }
public String getApplicationCode() {
return getDataString(3);
}
public void setApplicationCode(String applicationCode) {
setDataString(3, applicationCode);
}
public int getAddressId() { public int getAddressId() {
return getDataInteger(2); return getDataInteger(2);
} }
......
...@@ -26,6 +26,7 @@ import org.apache.skywalking.apm.collector.core.data.CommonTable; ...@@ -26,6 +26,7 @@ import org.apache.skywalking.apm.collector.core.data.CommonTable;
public class InstanceTable extends CommonTable { public class InstanceTable extends CommonTable {
public static final String TABLE = "instance"; public static final String TABLE = "instance";
public static final String COLUMN_APPLICATION_ID = "application_id"; public static final String COLUMN_APPLICATION_ID = "application_id";
public static final String COLUMN_APPLICATION_CODE = "application_code";
public static final String COLUMN_AGENT_UUID = "agent_uuid"; public static final String COLUMN_AGENT_UUID = "agent_uuid";
public static final String COLUMN_REGISTER_TIME = "register_time"; public static final String COLUMN_REGISTER_TIME = "register_time";
public static final String COLUMN_INSTANCE_ID = "instance_id"; public static final String COLUMN_INSTANCE_ID = "instance_id";
......
...@@ -36,10 +36,11 @@ public class ServiceName extends StreamData { ...@@ -36,10 +36,11 @@ public class ServiceName extends StreamData {
private static final Column[] LONG_COLUMNS = {}; private static final Column[] LONG_COLUMNS = {};
private static final Column[] DOUBLE_COLUMNS = {}; private static final Column[] DOUBLE_COLUMNS = {};
private static final Column[] INTEGER_COLUMNS = { private static final Column[] INTEGER_COLUMNS = {
new Column(ServiceNameTable.COLUMN_APPLICATION_ID, new CoverOperation()), new Column(ServiceNameTable.COLUMN_APPLICATION_ID, new CoverOperation()),
new Column(ServiceNameTable.COLUMN_SERVICE_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 = {}; private static final Column[] BYTE_COLUMNS = {};
...@@ -87,4 +88,12 @@ public class ServiceName extends StreamData { ...@@ -87,4 +88,12 @@ public class ServiceName extends StreamData {
public void setServiceId(int serviceId) { public void setServiceId(int serviceId) {
setDataInteger(1, serviceId); setDataInteger(1, serviceId);
} }
public int getSrcSpanType() {
return getDataInteger(2);
}
public void setSrcSpanType(int srcSpanType) {
setDataInteger(2, srcSpanType);
}
} }
...@@ -16,7 +16,6 @@ ...@@ -16,7 +16,6 @@
* *
*/ */
package org.apache.skywalking.apm.collector.storage.table.register; package org.apache.skywalking.apm.collector.storage.table.register;
import org.apache.skywalking.apm.collector.core.data.CommonTable; import org.apache.skywalking.apm.collector.core.data.CommonTable;
...@@ -27,6 +26,8 @@ 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 class ServiceNameTable extends CommonTable {
public static final String TABLE = "service_name"; public static final String TABLE = "service_name";
public static final String COLUMN_SERVICE_NAME = "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_APPLICATION_ID = "application_id";
public static final String COLUMN_SERVICE_ID = "service_id"; public static final String COLUMN_SERVICE_ID = "service_id";
} }
...@@ -22,18 +22,18 @@ package org.apache.skywalking.apm.collector.storage.ui.alarm; ...@@ -22,18 +22,18 @@ package org.apache.skywalking.apm.collector.storage.ui.alarm;
* @author peng-yongsheng * @author peng-yongsheng
*/ */
public class AlarmItem { public class AlarmItem {
private String id; private int id;
private String title; private String title;
private String content; private String content;
private String startTime; private String startTime;
private AlarmType alarmType; private AlarmType alarmType;
private CauseType causeType; private CauseType causeType;
public String getId() { public int getId() {
return id; return id;
} }
public void setId(String id) { public void setId(int id) {
this.id = id; this.id = id;
} }
......
...@@ -25,76 +25,76 @@ import org.apache.skywalking.apm.collector.storage.ui.common.Node; ...@@ -25,76 +25,76 @@ import org.apache.skywalking.apm.collector.storage.ui.common.Node;
*/ */
public class ApplicationNode extends Node { public class ApplicationNode extends Node {
private Float sla; private int sla;
private Long callsPerSec; private long callsPerSec;
private Long responseTimePerSec; private long avgResponseTime;
private Float apdex; private int apdex;
private Boolean isAlarm; private boolean isAlarm;
private Integer numOfServer; private int numOfServer;
private Integer numOfServerAlarm; private int numOfServerAlarm;
private Integer numOfServiceAlarm; private int numOfServiceAlarm;
public Float getSla() { public int getSla() {
return sla; return sla;
} }
public void setSla(Float sla) { public void setSla(int sla) {
this.sla = sla; this.sla = sla;
} }
public Long getCallsPerSec() { public long getCallsPerSec() {
return callsPerSec; return callsPerSec;
} }
public void setCallsPerSec(Long callsPerSec) { public void setCallsPerSec(long callsPerSec) {
this.callsPerSec = callsPerSec; this.callsPerSec = callsPerSec;
} }
public Long getResponseTimePerSec() { public long getAvgResponseTime() {
return responseTimePerSec; return avgResponseTime;
} }
public void setResponseTimePerSec(Long responseTimePerSec) { public void setAvgResponseTime(long avgResponseTime) {
this.responseTimePerSec = responseTimePerSec; this.avgResponseTime = avgResponseTime;
} }
public Float getApdex() { public int getApdex() {
return apdex; return apdex;
} }
public void setApdex(Float apdex) { public void setApdex(int apdex) {
this.apdex = apdex; this.apdex = apdex;
} }
public Boolean getAlarm() { public boolean isAlarm() {
return isAlarm; return isAlarm;
} }
public void setAlarm(Boolean alarm) { public void setAlarm(boolean alarm) {
isAlarm = alarm; isAlarm = alarm;
} }
public Integer getNumOfServer() { public int getNumOfServer() {
return numOfServer; return numOfServer;
} }
public void setNumOfServer(Integer numOfServer) { public void setNumOfServer(int numOfServer) {
this.numOfServer = numOfServer; this.numOfServer = numOfServer;
} }
public Integer getNumOfServerAlarm() { public int getNumOfServerAlarm() {
return numOfServerAlarm; return numOfServerAlarm;
} }
public void setNumOfServerAlarm(Integer numOfServerAlarm) { public void setNumOfServerAlarm(int numOfServerAlarm) {
this.numOfServerAlarm = numOfServerAlarm; this.numOfServerAlarm = numOfServerAlarm;
} }
public Integer getNumOfServiceAlarm() { public int getNumOfServiceAlarm() {
return numOfServiceAlarm; return numOfServiceAlarm;
} }
public void setNumOfServiceAlarm(Integer numOfServiceAlarm) { public void setNumOfServiceAlarm(int numOfServiceAlarm) {
this.numOfServiceAlarm = numOfServiceAlarm; this.numOfServiceAlarm = numOfServiceAlarm;
} }
} }
...@@ -28,10 +28,8 @@ public class Call { ...@@ -28,10 +28,8 @@ public class Call {
private String targetName; private String targetName;
private boolean isAlert; private boolean isAlert;
private String callType; private String callType;
private long calls;
private long callsPerSec; private long callsPerSec;
private long responseTimes; private long avgResponseTime;
private long responseTimePerSec;
public int getSource() { public int getSource() {
return source; return source;
...@@ -81,14 +79,6 @@ public class Call { ...@@ -81,14 +79,6 @@ public class Call {
this.callType = callType; this.callType = callType;
} }
public long getCalls() {
return calls;
}
public void setCalls(long calls) {
this.calls = calls;
}
public long getCallsPerSec() { public long getCallsPerSec() {
return callsPerSec; return callsPerSec;
} }
...@@ -97,19 +87,11 @@ public class Call { ...@@ -97,19 +87,11 @@ public class Call {
this.callsPerSec = callsPerSec; this.callsPerSec = callsPerSec;
} }
public long getResponseTimes() { public long getAvgResponseTime() {
return responseTimes; return avgResponseTime;
}
public void setResponseTimes(long responseTimes) {
this.responseTimes = responseTimes;
}
public long getResponseTimePerSec() {
return responseTimePerSec;
} }
public void setResponseTimePerSec(long responseTimePerSec) { public void setAvgResponseTime(long avgResponseTime) {
this.responseTimePerSec = responseTimePerSec; this.avgResponseTime = avgResponseTime;
} }
} }
...@@ -22,31 +22,31 @@ package org.apache.skywalking.apm.collector.storage.ui.common; ...@@ -22,31 +22,31 @@ package org.apache.skywalking.apm.collector.storage.ui.common;
* @author peng-yongsheng * @author peng-yongsheng
*/ */
public class Pagination { public class Pagination {
private Integer pageNum; private int pageNum;
private Integer pageSize; private int pageSize;
private Boolean needTotal; private boolean needTotal;
public Integer getPageNum() { public int getPageNum() {
return pageNum; return pageNum;
} }
public void setPageNum(Integer pageNum) { public void setPageNum(int pageNum) {
this.pageNum = pageNum; this.pageNum = pageNum;
} }
public Integer getPageSize() { public int getPageSize() {
return pageSize; return pageSize;
} }
public void setPageSize(Integer pageSize) { public void setPageSize(int pageSize) {
this.pageSize = pageSize; this.pageSize = pageSize;
} }
public Boolean getNeedTotal() { public boolean isNeedTotal() {
return needTotal; return needTotal;
} }
public void setNeedTotal(Boolean needTotal) { public void setNeedTotal(boolean needTotal) {
this.needTotal = needTotal; this.needTotal = needTotal;
} }
} }
...@@ -24,7 +24,7 @@ package org.apache.skywalking.apm.collector.storage.ui.overview; ...@@ -24,7 +24,7 @@ package org.apache.skywalking.apm.collector.storage.ui.overview;
public class ApplicationTPS { public class ApplicationTPS {
private int applicationId; private int applicationId;
private String applicationCode; private String applicationCode;
private int tps; private int callsPerSec;
public int getApplicationId() { public int getApplicationId() {
return applicationId; return applicationId;
...@@ -42,11 +42,11 @@ public class ApplicationTPS { ...@@ -42,11 +42,11 @@ public class ApplicationTPS {
this.applicationCode = applicationCode; this.applicationCode = applicationCode;
} }
public int getTps() { public int getCallsPerSec() {
return tps; return callsPerSec;
} }
public void setTps(int tps) { public void setCallsPerSec(int callsPerSec) {
this.tps = tps; this.callsPerSec = callsPerSec;
} }
} }
...@@ -29,7 +29,7 @@ public class AppServerInfo { ...@@ -29,7 +29,7 @@ public class AppServerInfo {
private String applicationCode; private String applicationCode;
private String osInfo; private String osInfo;
private String name; private String name;
private int tps; private int callsPerSec;
private String host; private String host;
private int pid; private int pid;
private List<String> ipv4; private List<String> ipv4;
...@@ -74,12 +74,12 @@ public class AppServerInfo { ...@@ -74,12 +74,12 @@ public class AppServerInfo {
this.name = name; this.name = name;
} }
public int getTps() { public int getCallsPerSec() {
return tps; return callsPerSec;
} }
public void setTps(int tps) { public void setCallsPerSec(int callsPerSec) {
this.tps = tps; this.callsPerSec = callsPerSec;
} }
public String getHost() { public String getHost() {
......
...@@ -24,8 +24,9 @@ package org.apache.skywalking.apm.collector.storage.ui.service; ...@@ -24,8 +24,9 @@ package org.apache.skywalking.apm.collector.storage.ui.service;
public class ServiceMetric { public class ServiceMetric {
private int id; private int id;
private String name; private String name;
private long calls;
private int avgResponseTime; private int avgResponseTime;
private int tps; private int callsPerSec;
public int getId() { public int getId() {
return id; return id;
...@@ -51,11 +52,19 @@ public class ServiceMetric { ...@@ -51,11 +52,19 @@ public class ServiceMetric {
this.avgResponseTime = avgResponseTime; this.avgResponseTime = avgResponseTime;
} }
public int getTps() { public int getCallsPerSec() {
return tps; return callsPerSec;
} }
public void setTps(int tps) { public void setCallsPerSec(int callsPerSec) {
this.tps = tps; this.callsPerSec = callsPerSec;
}
public long getCalls() {
return calls;
}
public void setCalls(long calls) {
this.calls = calls;
} }
} }
...@@ -18,15 +18,32 @@ ...@@ -18,15 +18,32 @@
package org.apache.skywalking.apm.collector.storage.ui.trace; package org.apache.skywalking.apm.collector.storage.ui.trace;
import java.util.LinkedList;
import java.util.List;
/** /**
* @author peng-yongsheng * @author peng-yongsheng
*/ */
public class BasicTrace { public class BasicTrace {
private String segmentId;
private String operationName; private String operationName;
private int duration; private int duration;
private long start; private long start;
private Boolean isError; private Boolean isError;
private String traceId; private List<String> traceIds;
public String getSegmentId() {
return segmentId;
}
public void setSegmentId(String segmentId) {
this.segmentId = segmentId;
}
public BasicTrace() {
this.traceIds = new LinkedList<>();
}
public String getOperationName() { public String getOperationName() {
return operationName; return operationName;
...@@ -60,11 +77,11 @@ public class BasicTrace { ...@@ -60,11 +77,11 @@ public class BasicTrace {
isError = error; isError = error;
} }
public String getTraceId() { public List<String> getTraceIds() {
return traceId; return traceIds;
} }
public void setTraceId(String traceId) { public void setTraceIds(List<String> traceIds) {
this.traceId = traceId; this.traceIds = traceIds;
} }
} }
...@@ -52,10 +52,10 @@ public class InstanceHeartBeatEsPersistenceDAO extends EsDAO implements IInstanc ...@@ -52,10 +52,10 @@ public class InstanceHeartBeatEsPersistenceDAO extends EsDAO implements IInstanc
instance.setId(id); instance.setId(id);
instance.setInstanceId(((Number)source.get(InstanceTable.COLUMN_INSTANCE_ID)).intValue()); instance.setInstanceId(((Number)source.get(InstanceTable.COLUMN_INSTANCE_ID)).intValue());
instance.setHeartBeatTime(((Number)source.get(InstanceTable.COLUMN_HEARTBEAT_TIME)).longValue()); instance.setHeartBeatTime(((Number)source.get(InstanceTable.COLUMN_HEARTBEAT_TIME)).longValue());
logger.debug("getId: {} is exists", id); logger.debug("getApplicationId: {} is exists", id);
return instance; return instance;
} else { } else {
logger.debug("getId: {} is not exists", id); logger.debug("getApplicationId: {} is not exists", id);
return null; return null;
} }
} }
......
...@@ -53,7 +53,7 @@ public class SegmentDurationEsPersistenceDAO extends EsDAO implements ISegmentDu ...@@ -53,7 +53,7 @@ public class SegmentDurationEsPersistenceDAO extends EsDAO implements ISegmentDu
} }
@Override public IndexRequestBuilder prepareBatchInsert(SegmentDuration data) { @Override public IndexRequestBuilder prepareBatchInsert(SegmentDuration data) {
logger.debug("segment cost prepareBatchInsert, getId: {}", data.getId()); logger.debug("segment cost prepareBatchInsert, getApplicationId: {}", data.getId());
Map<String, Object> source = new HashMap<>(); Map<String, Object> source = new HashMap<>();
source.put(SegmentDurationTable.COLUMN_SEGMENT_ID, data.getSegmentId()); source.put(SegmentDurationTable.COLUMN_SEGMENT_ID, data.getSegmentId());
source.put(SegmentDurationTable.COLUMN_APPLICATION_ID, data.getApplicationId()); source.put(SegmentDurationTable.COLUMN_APPLICATION_ID, data.getApplicationId());
......
...@@ -56,14 +56,15 @@ public class ServiceNameEsCacheDAO extends EsDAO implements IServiceNameCacheDAO ...@@ -56,14 +56,15 @@ public class ServiceNameEsCacheDAO extends EsDAO implements IServiceNameCacheDAO
return null; 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 searchRequestBuilder = getClient().prepareSearch(ServiceNameTable.TABLE);
searchRequestBuilder.setTypes(ServiceNameTable.TABLE_TYPE); searchRequestBuilder.setTypes(ServiceNameTable.TABLE_TYPE);
searchRequestBuilder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH); searchRequestBuilder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH);
BoolQueryBuilder boolQuery = QueryBuilders.boolQuery(); BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
boolQuery.must().add(QueryBuilders.matchQuery(ServiceNameTable.COLUMN_APPLICATION_ID, applicationId)); boolQuery.must().add(QueryBuilders.termQuery(ServiceNameTable.COLUMN_APPLICATION_ID, applicationId));
boolQuery.must().add(QueryBuilders.matchQuery(ServiceNameTable.COLUMN_SERVICE_NAME, serviceName)); 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.setQuery(boolQuery);
searchRequestBuilder.setSize(1); searchRequestBuilder.setSize(1);
......
...@@ -50,7 +50,7 @@ public class ApplicationRegisterEsDAO extends EsDAO implements IApplicationRegis ...@@ -50,7 +50,7 @@ public class ApplicationRegisterEsDAO extends EsDAO implements IApplicationRegis
} }
@Override public void save(Application application) { @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(); ElasticSearchClient client = getClient();
Map<String, Object> source = new HashMap<>(); Map<String, Object> source = new HashMap<>();
source.put(ApplicationTable.COLUMN_APPLICATION_CODE, application.getApplicationCode()); source.put(ApplicationTable.COLUMN_APPLICATION_CODE, application.getApplicationCode());
...@@ -59,6 +59,6 @@ public class ApplicationRegisterEsDAO extends EsDAO implements IApplicationRegis ...@@ -59,6 +59,6 @@ public class ApplicationRegisterEsDAO extends EsDAO implements IApplicationRegis
source.put(ApplicationTable.COLUMN_IS_ADDRESS, application.getIsAddress()); source.put(ApplicationTable.COLUMN_IS_ADDRESS, application.getIsAddress());
IndexResponse response = client.prepareIndex(ApplicationTable.TABLE, application.getId()).setSource(source).setRefreshPolicy(WriteRequest.RefreshPolicy.IMMEDIATE).get(); 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());
} }
} }
...@@ -52,11 +52,12 @@ public class InstanceRegisterEsDAO extends EsDAO implements IInstanceRegisterDAO ...@@ -52,11 +52,12 @@ public class InstanceRegisterEsDAO extends EsDAO implements IInstanceRegisterDAO
} }
@Override public void save(Instance instance) { @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(); ElasticSearchClient client = getClient();
Map<String, Object> source = new HashMap<>(); Map<String, Object> source = new HashMap<>();
source.put(InstanceTable.COLUMN_INSTANCE_ID, instance.getInstanceId()); source.put(InstanceTable.COLUMN_INSTANCE_ID, instance.getInstanceId());
source.put(InstanceTable.COLUMN_APPLICATION_ID, instance.getApplicationId()); source.put(InstanceTable.COLUMN_APPLICATION_ID, instance.getApplicationId());
source.put(InstanceTable.COLUMN_APPLICATION_CODE, instance.getApplicationCode());
source.put(InstanceTable.COLUMN_AGENT_UUID, instance.getAgentUUID()); source.put(InstanceTable.COLUMN_AGENT_UUID, instance.getAgentUUID());
source.put(InstanceTable.COLUMN_REGISTER_TIME, TimeBucketUtils.INSTANCE.getSecondTimeBucket(instance.getRegisterTime())); source.put(InstanceTable.COLUMN_REGISTER_TIME, TimeBucketUtils.INSTANCE.getSecondTimeBucket(instance.getRegisterTime()));
source.put(InstanceTable.COLUMN_HEARTBEAT_TIME, TimeBucketUtils.INSTANCE.getSecondTimeBucket(instance.getHeartBeatTime())); source.put(InstanceTable.COLUMN_HEARTBEAT_TIME, TimeBucketUtils.INSTANCE.getSecondTimeBucket(instance.getHeartBeatTime()));
...@@ -65,7 +66,7 @@ public class InstanceRegisterEsDAO extends EsDAO implements IInstanceRegisterDAO ...@@ -65,7 +66,7 @@ public class InstanceRegisterEsDAO extends EsDAO implements IInstanceRegisterDAO
source.put(InstanceTable.COLUMN_IS_ADDRESS, instance.getIsAddress()); source.put(InstanceTable.COLUMN_IS_ADDRESS, instance.getIsAddress());
IndexResponse response = client.prepareIndex(InstanceTable.TABLE, instance.getId()).setSource(source).setRefreshPolicy(WriteRequest.RefreshPolicy.IMMEDIATE).get(); 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) { @Override public void updateHeartbeatTime(int instanceId, long heartbeatTime) {
......
...@@ -50,7 +50,7 @@ public class NetworkAddressRegisterEsDAO extends EsDAO implements INetworkAddres ...@@ -50,7 +50,7 @@ public class NetworkAddressRegisterEsDAO extends EsDAO implements INetworkAddres
} }
@Override public void save(NetworkAddress networkAddress) { @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(); ElasticSearchClient client = getClient();
Map<String, Object> source = new HashMap<>(); Map<String, Object> source = new HashMap<>();
source.put(NetworkAddressTable.COLUMN_NETWORK_ADDRESS, networkAddress.getNetworkAddress()); source.put(NetworkAddressTable.COLUMN_NETWORK_ADDRESS, networkAddress.getNetworkAddress());
...@@ -59,7 +59,7 @@ public class NetworkAddressRegisterEsDAO extends EsDAO implements INetworkAddres ...@@ -59,7 +59,7 @@ public class NetworkAddressRegisterEsDAO extends EsDAO implements INetworkAddres
source.put(NetworkAddressTable.COLUMN_SERVER_TYPE, networkAddress.getServerType()); source.put(NetworkAddressTable.COLUMN_SERVER_TYPE, networkAddress.getServerType());
IndexResponse response = client.prepareIndex(NetworkAddressTable.TABLE, networkAddress.getId()).setSource(source).setRefreshPolicy(WriteRequest.RefreshPolicy.IMMEDIATE).get(); 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) { @Override public void update(String id, int spanLayer, int serverType) {
......
...@@ -50,14 +50,16 @@ public class ServiceNameRegisterEsDAO extends EsDAO implements IServiceNameRegis ...@@ -50,14 +50,16 @@ public class ServiceNameRegisterEsDAO extends EsDAO implements IServiceNameRegis
} }
@Override public void save(ServiceName serviceName) { @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(); ElasticSearchClient client = getClient();
Map<String, Object> source = new HashMap<>(); Map<String, Object> source = new HashMap<>();
source.put(ServiceNameTable.COLUMN_SERVICE_ID, serviceName.getServiceId()); source.put(ServiceNameTable.COLUMN_SERVICE_ID, serviceName.getServiceId());
source.put(ServiceNameTable.COLUMN_APPLICATION_ID, serviceName.getApplicationId()); source.put(ServiceNameTable.COLUMN_APPLICATION_ID, serviceName.getApplicationId());
source.put(ServiceNameTable.COLUMN_SERVICE_NAME, serviceName.getServiceName()); 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(); 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());
} }
} }
...@@ -46,13 +46,14 @@ public class ApplicationAlarmEsUIDAO extends EsDAO implements IApplicationAlarmU ...@@ -46,13 +46,14 @@ public class ApplicationAlarmEsUIDAO extends EsDAO implements IApplicationAlarmU
} }
@Override @Override
public Alarm loadAlarmList(String keyword, long start, long end, int limit, int from) throws ParseException { public Alarm loadAlarmList(String keyword, long startTimeBucket, long endTimeBucket, int limit,
int from) throws ParseException {
SearchRequestBuilder searchRequestBuilder = getClient().prepareSearch(ApplicationAlarmTable.TABLE); SearchRequestBuilder searchRequestBuilder = getClient().prepareSearch(ApplicationAlarmTable.TABLE);
searchRequestBuilder.setTypes(ApplicationAlarmTable.TABLE_TYPE); searchRequestBuilder.setTypes(ApplicationAlarmTable.TABLE_TYPE);
searchRequestBuilder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH); searchRequestBuilder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH);
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery(); BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
boolQueryBuilder.must().add(QueryBuilders.rangeQuery(ApplicationAlarmTable.COLUMN_LAST_TIME_BUCKET).gte(start).lte(end)); boolQueryBuilder.must().add(QueryBuilders.rangeQuery(ApplicationAlarmTable.COLUMN_LAST_TIME_BUCKET).gte(startTimeBucket).lte(endTimeBucket));
if (StringUtils.isNotEmpty(keyword)) { if (StringUtils.isNotEmpty(keyword)) {
boolQueryBuilder.must().add(QueryBuilders.matchQuery(ApplicationAlarmTable.COLUMN_ALARM_CONTENT, keyword)); boolQueryBuilder.must().add(QueryBuilders.matchQuery(ApplicationAlarmTable.COLUMN_ALARM_CONTENT, keyword));
} }
...@@ -68,8 +69,7 @@ public class ApplicationAlarmEsUIDAO extends EsDAO implements IApplicationAlarmU ...@@ -68,8 +69,7 @@ public class ApplicationAlarmEsUIDAO extends EsDAO implements IApplicationAlarmU
alarm.setTotal((int)searchResponse.getHits().getTotalHits()); alarm.setTotal((int)searchResponse.getHits().getTotalHits());
for (SearchHit searchHit : searchHits) { for (SearchHit searchHit : searchHits) {
AlarmItem alarmItem = new AlarmItem(); AlarmItem alarmItem = new AlarmItem();
alarmItem.setId(searchHit.getId()); alarmItem.setId(((Number)searchHit.getSource().get(ApplicationAlarmTable.COLUMN_APPLICATION_ID)).intValue());
alarmItem.setTitle((String)searchHit.getSource().get(ApplicationAlarmTable.COLUMN_ALARM_CONTENT));
alarmItem.setContent((String)searchHit.getSource().get(ApplicationAlarmTable.COLUMN_ALARM_CONTENT)); alarmItem.setContent((String)searchHit.getSource().get(ApplicationAlarmTable.COLUMN_ALARM_CONTENT));
long lastTimeBucket = ((Number)searchHit.getSource().get(ApplicationAlarmTable.COLUMN_LAST_TIME_BUCKET)).longValue(); long lastTimeBucket = ((Number)searchHit.getSource().get(ApplicationAlarmTable.COLUMN_LAST_TIME_BUCKET)).longValue();
......
...@@ -42,12 +42,12 @@ public class ApplicationAlarmListEsUIDAO extends EsDAO implements IApplicationAl ...@@ -42,12 +42,12 @@ public class ApplicationAlarmListEsUIDAO extends EsDAO implements IApplicationAl
super(client); super(client);
} }
@Override public List<Integer> getAlarmedApplicationNum(Step step, long start, long end) { @Override public List<AlarmTrend> getAlarmedApplicationNum(Step step, long startTimeBucket, long endTimeBucket) {
String tableName = TimePyramidTableNameBuilder.build(step, ApplicationAlarmListTable.TABLE); String tableName = TimePyramidTableNameBuilder.build(step, ApplicationAlarmListTable.TABLE);
SearchRequestBuilder searchRequestBuilder = getClient().prepareSearch(tableName); SearchRequestBuilder searchRequestBuilder = getClient().prepareSearch(tableName);
searchRequestBuilder.setTypes(ApplicationAlarmListTable.TABLE_TYPE); searchRequestBuilder.setTypes(ApplicationAlarmListTable.TABLE_TYPE);
searchRequestBuilder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH); searchRequestBuilder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH);
searchRequestBuilder.setQuery(QueryBuilders.rangeQuery(ApplicationAlarmListTable.COLUMN_TIME_BUCKET).gte(start).lte(end)); searchRequestBuilder.setQuery(QueryBuilders.rangeQuery(ApplicationAlarmListTable.COLUMN_TIME_BUCKET).gte(startTimeBucket).lte(endTimeBucket));
searchRequestBuilder.setSize(0); searchRequestBuilder.setSize(0);
searchRequestBuilder.addAggregation(AggregationBuilders.terms(ApplicationAlarmListTable.COLUMN_TIME_BUCKET).field(ApplicationAlarmListTable.COLUMN_TIME_BUCKET).size(100) searchRequestBuilder.addAggregation(AggregationBuilders.terms(ApplicationAlarmListTable.COLUMN_TIME_BUCKET).field(ApplicationAlarmListTable.COLUMN_TIME_BUCKET).size(100)
...@@ -57,13 +57,16 @@ public class ApplicationAlarmListEsUIDAO extends EsDAO implements IApplicationAl ...@@ -57,13 +57,16 @@ public class ApplicationAlarmListEsUIDAO extends EsDAO implements IApplicationAl
Terms timeBucketTerms = searchResponse.getAggregations().get(ApplicationAlarmListTable.COLUMN_TIME_BUCKET); Terms timeBucketTerms = searchResponse.getAggregations().get(ApplicationAlarmListTable.COLUMN_TIME_BUCKET);
List<Integer> alarmApplicationNum = new LinkedList<>(); List<AlarmTrend> alarmTrends = new LinkedList<>();
for (Terms.Bucket timeBucketBucket : timeBucketTerms.getBuckets()) { for (Terms.Bucket timeBucketBucket : timeBucketTerms.getBuckets()) {
Terms applicationBucketTerms = timeBucketBucket.getAggregations().get(ApplicationAlarmListTable.COLUMN_APPLICATION_ID); Terms applicationBucketTerms = timeBucketBucket.getAggregations().get(ApplicationAlarmListTable.COLUMN_APPLICATION_ID);
int num = applicationBucketTerms.getBuckets().size();
alarmApplicationNum.add(num); AlarmTrend alarmTrend = new AlarmTrend();
alarmTrend.setNumberOfApplication(applicationBucketTerms.getBuckets().size());
alarmTrend.setTimeBucket(timeBucketBucket.getKeyAsNumber().longValue());
alarmTrends.add(alarmTrend);
} }
return alarmApplicationNum; return alarmTrends;
} }
} }
...@@ -46,13 +46,13 @@ public class ApplicationComponentEsUIDAO extends EsDAO implements IApplicationCo ...@@ -46,13 +46,13 @@ public class ApplicationComponentEsUIDAO extends EsDAO implements IApplicationCo
super(client); super(client);
} }
@Override public List<ApplicationComponent> load(Step step, long startTime, long endTime) { @Override public List<ApplicationComponent> load(Step step, long startTimeBucket, long endTimeBucket) {
logger.debug("application component load, start time: {}, end time: {}", startTime, endTime); logger.debug("application component load, start time: {}, end time: {}", startTimeBucket, endTimeBucket);
String tableName = TimePyramidTableNameBuilder.build(step, ApplicationComponentTable.TABLE); String tableName = TimePyramidTableNameBuilder.build(step, ApplicationComponentTable.TABLE);
SearchRequestBuilder searchRequestBuilder = getClient().prepareSearch(tableName); SearchRequestBuilder searchRequestBuilder = getClient().prepareSearch(tableName);
searchRequestBuilder.setTypes(ApplicationComponentTable.TABLE_TYPE); searchRequestBuilder.setTypes(ApplicationComponentTable.TABLE_TYPE);
searchRequestBuilder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH); searchRequestBuilder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH);
searchRequestBuilder.setQuery(QueryBuilders.rangeQuery(ApplicationComponentTable.COLUMN_TIME_BUCKET).gte(startTime).lte(endTime)); searchRequestBuilder.setQuery(QueryBuilders.rangeQuery(ApplicationComponentTable.COLUMN_TIME_BUCKET).gte(startTimeBucket).lte(endTimeBucket));
searchRequestBuilder.setSize(0); searchRequestBuilder.setSize(0);
searchRequestBuilder.addAggregation(AggregationBuilders.terms(ApplicationComponentTable.COLUMN_COMPONENT_ID).field(ApplicationComponentTable.COLUMN_COMPONENT_ID).size(100) searchRequestBuilder.addAggregation(AggregationBuilders.terms(ApplicationComponentTable.COLUMN_COMPONENT_ID).field(ApplicationComponentTable.COLUMN_COMPONENT_ID).size(100)
......
...@@ -46,13 +46,13 @@ public class ApplicationMappingEsUIDAO extends EsDAO implements IApplicationMapp ...@@ -46,13 +46,13 @@ public class ApplicationMappingEsUIDAO extends EsDAO implements IApplicationMapp
super(client); super(client);
} }
@Override public List<ApplicationMapping> load(Step step, long startTime, long endTime) { @Override public List<ApplicationMapping> load(Step step, long startTimeBucket, long endTimeBucket) {
String tableName = TimePyramidTableNameBuilder.build(step, ApplicationMappingTable.TABLE); String tableName = TimePyramidTableNameBuilder.build(step, ApplicationMappingTable.TABLE);
SearchRequestBuilder searchRequestBuilder = getClient().prepareSearch(tableName); SearchRequestBuilder searchRequestBuilder = getClient().prepareSearch(tableName);
searchRequestBuilder.setTypes(ApplicationMappingTable.TABLE_TYPE); searchRequestBuilder.setTypes(ApplicationMappingTable.TABLE_TYPE);
searchRequestBuilder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH); searchRequestBuilder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH);
searchRequestBuilder.setQuery(QueryBuilders.rangeQuery(ApplicationMappingTable.COLUMN_TIME_BUCKET).gte(startTime).lte(endTime)); searchRequestBuilder.setQuery(QueryBuilders.rangeQuery(ApplicationMappingTable.COLUMN_TIME_BUCKET).gte(startTimeBucket).lte(endTimeBucket));
searchRequestBuilder.setSize(0); searchRequestBuilder.setSize(0);
searchRequestBuilder.addAggregation( searchRequestBuilder.addAggregation(
......
...@@ -39,6 +39,7 @@ import org.elasticsearch.script.Script; ...@@ -39,6 +39,7 @@ import org.elasticsearch.script.Script;
import org.elasticsearch.search.aggregations.AggregationBuilders; import org.elasticsearch.search.aggregations.AggregationBuilders;
import org.elasticsearch.search.aggregations.bucket.terms.Terms; import org.elasticsearch.search.aggregations.bucket.terms.Terms;
import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder; 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.InternalSimpleValue;
import org.elasticsearch.search.aggregations.pipeline.PipelineAggregatorBuilders; import org.elasticsearch.search.aggregations.pipeline.PipelineAggregatorBuilders;
...@@ -54,9 +55,8 @@ public class ApplicationMetricEsUIDAO extends EsDAO implements IApplicationMetri ...@@ -54,9 +55,8 @@ public class ApplicationMetricEsUIDAO extends EsDAO implements IApplicationMetri
private static final String AVG_TPS = "avg_tps"; private static final String AVG_TPS = "avg_tps";
@Override @Override
public List<ApplicationTPS> getTopNApplicationThroughput(Step step, long start, long end, long betweenSecond, public List<ApplicationTPS> getTopNApplicationThroughput(Step step, long startTimeBucket, long endTimeBucket,
int topN, int betweenSecond, int topN, MetricSource metricSource) {
MetricSource metricSource) {
String tableName = TimePyramidTableNameBuilder.build(step, ApplicationMetricTable.TABLE); String tableName = TimePyramidTableNameBuilder.build(step, ApplicationMetricTable.TABLE);
SearchRequestBuilder searchRequestBuilder = getClient().prepareSearch(tableName); SearchRequestBuilder searchRequestBuilder = getClient().prepareSearch(tableName);
...@@ -64,7 +64,7 @@ public class ApplicationMetricEsUIDAO extends EsDAO implements IApplicationMetri ...@@ -64,7 +64,7 @@ public class ApplicationMetricEsUIDAO extends EsDAO implements IApplicationMetri
searchRequestBuilder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH); searchRequestBuilder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH);
BoolQueryBuilder boolQuery = QueryBuilders.boolQuery(); BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
boolQuery.must().add(QueryBuilders.rangeQuery(ApplicationMetricTable.COLUMN_TIME_BUCKET).gte(start).lte(end)); boolQuery.must().add(QueryBuilders.rangeQuery(ApplicationMetricTable.COLUMN_TIME_BUCKET).gte(startTimeBucket).lte(endTimeBucket));
boolQuery.must().add(QueryBuilders.termQuery(ApplicationMetricTable.COLUMN_SOURCE_VALUE, metricSource.getValue())); boolQuery.must().add(QueryBuilders.termQuery(ApplicationMetricTable.COLUMN_SOURCE_VALUE, metricSource.getValue()));
searchRequestBuilder.setQuery(boolQuery); searchRequestBuilder.setQuery(boolQuery);
...@@ -88,17 +88,72 @@ public class ApplicationMetricEsUIDAO extends EsDAO implements IApplicationMetri ...@@ -88,17 +88,72 @@ public class ApplicationMetricEsUIDAO extends EsDAO implements IApplicationMetri
SearchResponse searchResponse = searchRequestBuilder.execute().actionGet(); SearchResponse searchResponse = searchRequestBuilder.execute().actionGet();
List<ApplicationTPS> applicationTPSs = new LinkedList<>(); List<ApplicationTPS> applicationTPSs = new LinkedList<>();
Terms serviceIdTerms = searchResponse.getAggregations().get(ApplicationMetricTable.COLUMN_APPLICATION_ID); Terms applicationIdTerms = searchResponse.getAggregations().get(ApplicationMetricTable.COLUMN_APPLICATION_ID);
serviceIdTerms.getBuckets().forEach(serviceIdTerm -> { applicationIdTerms.getBuckets().forEach(applicationIdTerm -> {
int applicationId = serviceIdTerm.getKeyAsNumber().intValue(); int applicationId = applicationIdTerm.getKeyAsNumber().intValue();
ApplicationTPS serviceMetric = new ApplicationTPS(); ApplicationTPS applicationTPS = new ApplicationTPS();
InternalSimpleValue simpleValue = serviceIdTerm.getAggregations().get(AVG_TPS); InternalSimpleValue simpleValue = applicationIdTerm.getAggregations().get(AVG_TPS);
serviceMetric.setApplicationId(applicationId); applicationTPS.setApplicationId(applicationId);
serviceMetric.setTps((int)simpleValue.getValue()); applicationTPS.setCallsPerSec((int)simpleValue.getValue());
applicationTPSs.add(serviceMetric); applicationTPSs.add(applicationTPS);
}); });
return applicationTPSs; return applicationTPSs;
} }
@Override
public List<ApplicationMetric> 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<ApplicationMetric> 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;
}
} }
...@@ -21,11 +21,11 @@ package org.apache.skywalking.apm.collector.storage.es.dao.ui; ...@@ -21,11 +21,11 @@ package org.apache.skywalking.apm.collector.storage.es.dao.ui;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;
import org.apache.skywalking.apm.collector.client.elasticsearch.ElasticSearchClient; import org.apache.skywalking.apm.collector.client.elasticsearch.ElasticSearchClient;
import org.apache.skywalking.apm.collector.core.util.CollectionUtils;
import org.apache.skywalking.apm.collector.storage.dao.ui.IApplicationReferenceMetricUIDAO; import org.apache.skywalking.apm.collector.storage.dao.ui.IApplicationReferenceMetricUIDAO;
import org.apache.skywalking.apm.collector.storage.es.base.dao.EsDAO; 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.MetricSource;
import org.apache.skywalking.apm.collector.storage.table.application.ApplicationReferenceMetricTable; 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.ui.common.Step;
import org.apache.skywalking.apm.collector.storage.utils.TimePyramidTableNameBuilder; import org.apache.skywalking.apm.collector.storage.utils.TimePyramidTableNameBuilder;
import org.elasticsearch.action.search.SearchRequestBuilder; import org.elasticsearch.action.search.SearchRequestBuilder;
...@@ -47,8 +47,8 @@ public class ApplicationReferenceMetricEsUIDAO extends EsDAO implements IApplica ...@@ -47,8 +47,8 @@ public class ApplicationReferenceMetricEsUIDAO extends EsDAO implements IApplica
super(client); super(client);
} }
@Override public List<Call> getFrontApplications(Step step, int applicationId, long startTime, long endTime, @Override public List<ApplicationReferenceMetric> getReferences(Step step, long startTimeBucket, long endTimeBucket,
MetricSource metricSource) { MetricSource metricSource, Integer... applicationIds) {
String tableName = TimePyramidTableNameBuilder.build(step, ApplicationReferenceMetricTable.TABLE); String tableName = TimePyramidTableNameBuilder.build(step, ApplicationReferenceMetricTable.TABLE);
SearchRequestBuilder searchRequestBuilder = getClient().prepareSearch(tableName); SearchRequestBuilder searchRequestBuilder = getClient().prepareSearch(tableName);
...@@ -56,122 +56,64 @@ public class ApplicationReferenceMetricEsUIDAO extends EsDAO implements IApplica ...@@ -56,122 +56,64 @@ public class ApplicationReferenceMetricEsUIDAO extends EsDAO implements IApplica
searchRequestBuilder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH); searchRequestBuilder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH);
BoolQueryBuilder boolQuery = QueryBuilders.boolQuery(); BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
boolQuery.must().add(QueryBuilders.rangeQuery(ApplicationReferenceMetricTable.COLUMN_TIME_BUCKET).gte(startTime).lte(endTime)); boolQuery.must().add(QueryBuilders.rangeQuery(ApplicationReferenceMetricTable.COLUMN_TIME_BUCKET).gte(startTimeBucket).lte(endTimeBucket));
boolQuery.must().add(QueryBuilders.termQuery(ApplicationReferenceMetricTable.COLUMN_BEHIND_APPLICATION_ID, applicationId));
boolQuery.must().add(QueryBuilders.termQuery(ApplicationReferenceMetricTable.COLUMN_SOURCE_VALUE, metricSource.getValue())); boolQuery.must().add(QueryBuilders.termQuery(ApplicationReferenceMetricTable.COLUMN_SOURCE_VALUE, metricSource.getValue()));
searchRequestBuilder.setQuery(boolQuery); if (CollectionUtils.isNotEmpty(applicationIds)) {
searchRequestBuilder.setSize(0); BoolQueryBuilder applicationBoolQuery = QueryBuilders.boolQuery();
int[] ids = new int[applicationIds.length];
TermsAggregationBuilder aggregationBuilder = AggregationBuilders.terms(ApplicationReferenceMetricTable.COLUMN_FRONT_APPLICATION_ID).field(ApplicationReferenceMetricTable.COLUMN_FRONT_APPLICATION_ID).size(100); for (int i = 0; i < applicationIds.length; i++) {
aggregationBuilder.subAggregation(AggregationBuilders.sum(ApplicationReferenceMetricTable.COLUMN_TRANSACTION_CALLS).field(ApplicationReferenceMetricTable.COLUMN_TRANSACTION_CALLS)); ids[i] = applicationIds[i];
aggregationBuilder.subAggregation(AggregationBuilders.sum(ApplicationReferenceMetricTable.COLUMN_TRANSACTION_DURATION_SUM).field(ApplicationReferenceMetricTable.COLUMN_TRANSACTION_DURATION_SUM)); }
searchRequestBuilder.addAggregation(aggregationBuilder);
SearchResponse searchResponse = searchRequestBuilder.execute().actionGet();
List<Call> nodes = new LinkedList<>(); applicationBoolQuery.should().add(QueryBuilders.termsQuery(ApplicationReferenceMetricTable.COLUMN_FRONT_APPLICATION_ID, ids));
Terms frontApplicationIdTerms = searchResponse.getAggregations().get(ApplicationReferenceMetricTable.COLUMN_FRONT_APPLICATION_ID); applicationBoolQuery.should().add(QueryBuilders.termsQuery(ApplicationReferenceMetricTable.COLUMN_BEHIND_APPLICATION_ID, ids));
for (Terms.Bucket frontApplicationIdBucket : frontApplicationIdTerms.getBuckets()) { boolQuery.must().add(applicationBoolQuery);
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;
}
@Override public List<Call> getBehindApplications(Step step, int applicationId, long startTime, long endTime,
MetricSource metricSource) {
String tableName = TimePyramidTableNameBuilder.build(step, ApplicationReferenceMetricTable.TABLE);
SearchRequestBuilder searchRequestBuilder = getClient().prepareSearch(tableName);
searchRequestBuilder.setTypes(ApplicationReferenceMetricTable.TABLE_TYPE);
searchRequestBuilder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH);
BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
boolQuery.must().add(QueryBuilders.rangeQuery(ApplicationReferenceMetricTable.COLUMN_TIME_BUCKET).gte(startTime).lte(endTime));
boolQuery.must().add(QueryBuilders.termQuery(ApplicationReferenceMetricTable.COLUMN_FRONT_APPLICATION_ID, applicationId));
boolQuery.must().add(QueryBuilders.termQuery(ApplicationReferenceMetricTable.COLUMN_SOURCE_VALUE, metricSource.getValue()));
searchRequestBuilder.setQuery(boolQuery); searchRequestBuilder.setQuery(boolQuery);
searchRequestBuilder.setSize(0); searchRequestBuilder.setSize(0);
TermsAggregationBuilder aggregationBuilder = AggregationBuilders.terms(ApplicationReferenceMetricTable.COLUMN_BEHIND_APPLICATION_ID).field(ApplicationReferenceMetricTable.COLUMN_BEHIND_APPLICATION_ID).size(100); return buildMetrics(searchRequestBuilder);
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<Call> 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;
} }
@Override public List<Call> getApplications(Step step, long startTime, long endTime, MetricSource metricSource) { private List<ApplicationReferenceMetric> buildMetrics(SearchRequestBuilder searchRequestBuilder) {
String tableName = TimePyramidTableNameBuilder.build(step, ApplicationReferenceMetricTable.TABLE); 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);
SearchRequestBuilder searchRequestBuilder = getClient().prepareSearch(tableName); frontAggregationBuilder.subAggregation(behindAggregationBuilder);
searchRequestBuilder.setTypes(ApplicationReferenceMetricTable.TABLE_TYPE);
searchRequestBuilder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH);
BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
boolQuery.must().add(QueryBuilders.rangeQuery(ApplicationReferenceMetricTable.COLUMN_TIME_BUCKET).gte(startTime).lte(endTime));
boolQuery.must().add(QueryBuilders.termQuery(ApplicationReferenceMetricTable.COLUMN_SOURCE_VALUE, metricSource.getValue()));
searchRequestBuilder.setQuery(boolQuery);
searchRequestBuilder.setSize(0);
TermsAggregationBuilder aggregationBuilder = AggregationBuilders.terms(ApplicationReferenceMetricTable.COLUMN_FRONT_APPLICATION_ID).field(ApplicationReferenceMetricTable.COLUMN_FRONT_APPLICATION_ID).size(100) behindAggregationBuilder.subAggregation(AggregationBuilders.sum(ApplicationReferenceMetricTable.COLUMN_TRANSACTION_CALLS).field(ApplicationReferenceMetricTable.COLUMN_TRANSACTION_CALLS));
.subAggregation(AggregationBuilders.terms(ApplicationReferenceMetricTable.COLUMN_BEHIND_APPLICATION_ID).field(ApplicationReferenceMetricTable.COLUMN_BEHIND_APPLICATION_ID)); behindAggregationBuilder.subAggregation(AggregationBuilders.sum(ApplicationReferenceMetricTable.COLUMN_TRANSACTION_ERROR_CALLS).field(ApplicationReferenceMetricTable.COLUMN_TRANSACTION_ERROR_CALLS));
aggregationBuilder.subAggregation(AggregationBuilders.sum(ApplicationReferenceMetricTable.COLUMN_TRANSACTION_CALLS).field(ApplicationReferenceMetricTable.COLUMN_TRANSACTION_CALLS)); behindAggregationBuilder.subAggregation(AggregationBuilders.sum(ApplicationReferenceMetricTable.COLUMN_TRANSACTION_DURATION_SUM).field(ApplicationReferenceMetricTable.COLUMN_TRANSACTION_DURATION_SUM));
aggregationBuilder.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));
searchRequestBuilder.addAggregation(aggregationBuilder); searchRequestBuilder.addAggregation(frontAggregationBuilder);
SearchResponse searchResponse = searchRequestBuilder.execute().actionGet(); SearchResponse searchResponse = searchRequestBuilder.execute().actionGet();
List<ApplicationReferenceMetric> referenceMetrics = new LinkedList<>();
List<Call> nodes = new LinkedList<>(); Terms sourceApplicationIdTerms = searchResponse.getAggregations().get(ApplicationReferenceMetricTable.COLUMN_FRONT_APPLICATION_ID);
Terms frontApplicationIdTerms = searchResponse.getAggregations().get(ApplicationReferenceMetricTable.COLUMN_FRONT_APPLICATION_ID); for (Terms.Bucket sourceApplicationIdBucket : sourceApplicationIdTerms.getBuckets()) {
for (Terms.Bucket frontApplicationIdBucket : frontApplicationIdTerms.getBuckets()) { int sourceApplicationId = sourceApplicationIdBucket.getKeyAsNumber().intValue();
int frontApplicationId = frontApplicationIdBucket.getKeyAsNumber().intValue();
Terms targetApplicationIdTerms = sourceApplicationIdBucket.getAggregations().get(ApplicationReferenceMetricTable.COLUMN_BEHIND_APPLICATION_ID);
Terms behindApplicationIdTerms = frontApplicationIdBucket.getAggregations().get(ApplicationReferenceMetricTable.COLUMN_BEHIND_APPLICATION_ID); for (Terms.Bucket targetApplicationIdBucket : targetApplicationIdTerms.getBuckets()) {
for (Terms.Bucket behindApplicationIdBucket : behindApplicationIdTerms.getBuckets()) { int targetApplicationId = targetApplicationIdBucket.getKeyAsNumber().intValue();
int behindApplicationId = behindApplicationIdBucket.getKeyAsNumber().intValue();
Sum calls = targetApplicationIdBucket.getAggregations().get(ApplicationReferenceMetricTable.COLUMN_TRANSACTION_CALLS);
Sum calls = behindApplicationIdBucket.getAggregations().get(ApplicationReferenceMetricTable.COLUMN_TRANSACTION_CALLS); Sum errorCalls = targetApplicationIdBucket.getAggregations().get(ApplicationReferenceMetricTable.COLUMN_TRANSACTION_ERROR_CALLS);
Sum responseTimes = behindApplicationIdBucket.getAggregations().get(ApplicationReferenceMetricTable.COLUMN_TRANSACTION_DURATION_SUM); Sum durations = targetApplicationIdBucket.getAggregations().get(ApplicationReferenceMetricTable.COLUMN_TRANSACTION_DURATION_SUM);
Sum errorDurations = targetApplicationIdBucket.getAggregations().get(ApplicationReferenceMetricTable.COLUMN_TRANSACTION_ERROR_DURATION_SUM);
Call call = new Call();
call.setResponseTimes((int)responseTimes.getValue()); ApplicationReferenceMetric referenceMetric = new ApplicationReferenceMetric();
call.setSource(frontApplicationId); referenceMetric.setSource(sourceApplicationId);
call.setTarget(behindApplicationId); referenceMetric.setTarget(targetApplicationId);
call.setCalls((int)calls.getValue()); referenceMetric.setCalls((long)calls.getValue());
nodes.add(call); referenceMetric.setErrorCalls((long)errorCalls.getValue());
referenceMetric.setDurations((long)durations.getValue());
referenceMetric.setErrorDurations((long)errorDurations.getValue());
referenceMetrics.add(referenceMetric);
} }
} }
return nodes; return referenceMetrics;
} }
} }
...@@ -46,13 +46,14 @@ public class InstanceAlarmEsUIDAO extends EsDAO implements IInstanceAlarmUIDAO { ...@@ -46,13 +46,14 @@ public class InstanceAlarmEsUIDAO extends EsDAO implements IInstanceAlarmUIDAO {
} }
@Override @Override
public Alarm loadAlarmList(String keyword, long start, long end, int limit, int from) throws ParseException { public Alarm loadAlarmList(String keyword, long startTimeBucket, long endTimeBucket, int limit,
int from) throws ParseException {
SearchRequestBuilder searchRequestBuilder = getClient().prepareSearch(InstanceAlarmTable.TABLE); SearchRequestBuilder searchRequestBuilder = getClient().prepareSearch(InstanceAlarmTable.TABLE);
searchRequestBuilder.setTypes(InstanceAlarmTable.TABLE_TYPE); searchRequestBuilder.setTypes(InstanceAlarmTable.TABLE_TYPE);
searchRequestBuilder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH); searchRequestBuilder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH);
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery(); BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
boolQueryBuilder.must().add(QueryBuilders.rangeQuery(InstanceAlarmTable.COLUMN_LAST_TIME_BUCKET).gte(start).lte(end)); boolQueryBuilder.must().add(QueryBuilders.rangeQuery(InstanceAlarmTable.COLUMN_LAST_TIME_BUCKET).gte(startTimeBucket).lte(endTimeBucket));
if (StringUtils.isNotEmpty(keyword)) { if (StringUtils.isNotEmpty(keyword)) {
boolQueryBuilder.must().add(QueryBuilders.matchQuery(InstanceAlarmTable.COLUMN_ALARM_CONTENT, keyword)); boolQueryBuilder.must().add(QueryBuilders.matchQuery(InstanceAlarmTable.COLUMN_ALARM_CONTENT, keyword));
} }
...@@ -68,7 +69,7 @@ public class InstanceAlarmEsUIDAO extends EsDAO implements IInstanceAlarmUIDAO { ...@@ -68,7 +69,7 @@ public class InstanceAlarmEsUIDAO extends EsDAO implements IInstanceAlarmUIDAO {
alarm.setTotal((int)searchResponse.getHits().getTotalHits()); alarm.setTotal((int)searchResponse.getHits().getTotalHits());
for (SearchHit searchHit : searchHits) { for (SearchHit searchHit : searchHits) {
AlarmItem alarmItem = new AlarmItem(); AlarmItem alarmItem = new AlarmItem();
alarmItem.setId(searchHit.getId()); alarmItem.setId(((Number)searchHit.getSource().get(InstanceAlarmTable.COLUMN_INSTANCE_ID)).intValue());
alarmItem.setTitle((String)searchHit.getSource().get(InstanceAlarmTable.COLUMN_ALARM_CONTENT)); alarmItem.setTitle((String)searchHit.getSource().get(InstanceAlarmTable.COLUMN_ALARM_CONTENT));
alarmItem.setContent((String)searchHit.getSource().get(InstanceAlarmTable.COLUMN_ALARM_CONTENT)); alarmItem.setContent((String)searchHit.getSource().get(InstanceAlarmTable.COLUMN_ALARM_CONTENT));
......
...@@ -97,14 +97,15 @@ public class InstanceEsUIDAO extends EsDAO implements IInstanceUIDAO { ...@@ -97,14 +97,15 @@ public class InstanceEsUIDAO extends EsDAO implements IInstanceUIDAO {
return heartBeatTime; return heartBeatTime;
} }
@Override public List<Application> getApplications(long startTime, long endTime, int... applicationIds) { @Override public List<Application> getApplications(long startSecondTimeBucket, long endSecondTimeBucket,
logger.debug("application list get, start time: {}, end time: {}", startTime, endTime); int... applicationIds) {
logger.debug("application list get, start time: {}, end time: {}", startSecondTimeBucket, endSecondTimeBucket);
SearchRequestBuilder searchRequestBuilder = getClient().prepareSearch(InstanceTable.TABLE); SearchRequestBuilder searchRequestBuilder = getClient().prepareSearch(InstanceTable.TABLE);
searchRequestBuilder.setTypes(InstanceTable.TABLE_TYPE); searchRequestBuilder.setTypes(InstanceTable.TABLE_TYPE);
searchRequestBuilder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH); searchRequestBuilder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH);
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery(); BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
boolQueryBuilder.must().add(QueryBuilders.rangeQuery(InstanceTable.COLUMN_HEARTBEAT_TIME).gte(startTime)); boolQueryBuilder.must().add(QueryBuilders.rangeQuery(InstanceTable.COLUMN_HEARTBEAT_TIME).gte(startSecondTimeBucket));
boolQueryBuilder.must().add(QueryBuilders.termQuery(InstanceTable.COLUMN_IS_ADDRESS, BooleanUtils.FALSE)); boolQueryBuilder.must().add(QueryBuilders.termQuery(InstanceTable.COLUMN_IS_ADDRESS, BooleanUtils.FALSE));
if (applicationIds.length > 0) { if (applicationIds.length > 0) {
boolQueryBuilder.must().add(QueryBuilders.termsQuery(InstanceTable.COLUMN_APPLICATION_ID, applicationIds)); boolQueryBuilder.must().add(QueryBuilders.termsQuery(InstanceTable.COLUMN_APPLICATION_ID, applicationIds));
...@@ -150,19 +151,26 @@ public class InstanceEsUIDAO extends EsDAO implements IInstanceUIDAO { ...@@ -150,19 +151,26 @@ public class InstanceEsUIDAO extends EsDAO implements IInstanceUIDAO {
return null; return null;
} }
@Override public List<AppServerInfo> searchServer(String keyword, long start, long end) { @Override
logger.debug("get instances info, keyword: {}, start: {}, end: {}", keyword, start, end); public List<AppServerInfo> searchServer(String keyword, long startSecondTimeBucket, long endSecondTimeBucket) {
logger.debug("get instances info, keyword: {}, start: {}, end: {}", keyword, startSecondTimeBucket, endSecondTimeBucket);
SearchRequestBuilder searchRequestBuilder = getClient().prepareSearch(InstanceTable.TABLE); SearchRequestBuilder searchRequestBuilder = getClient().prepareSearch(InstanceTable.TABLE);
searchRequestBuilder.setTypes(InstanceTable.TABLE_TYPE); searchRequestBuilder.setTypes(InstanceTable.TABLE_TYPE);
searchRequestBuilder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH); searchRequestBuilder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH);
searchRequestBuilder.setSize(1000); searchRequestBuilder.setSize(1000);
BoolQueryBuilder boolQuery = QueryBuilders.boolQuery(); BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
boolQuery.must().add(QueryBuilders.rangeQuery(InstanceTable.COLUMN_HEARTBEAT_TIME).gte(start).lte(end));
if (StringUtils.isNotEmpty(keyword)) { if (StringUtils.isNotEmpty(keyword)) {
boolQuery.must().add(QueryBuilders.queryStringQuery(keyword)); boolQuery.must().add(QueryBuilders.queryStringQuery(keyword));
} }
boolQuery.must().add(QueryBuilders.termQuery(InstanceTable.COLUMN_IS_ADDRESS, BooleanUtils.FALSE)); boolQuery.must().add(QueryBuilders.termQuery(InstanceTable.COLUMN_IS_ADDRESS, BooleanUtils.FALSE));
BoolQueryBuilder timeBoolQuery = QueryBuilders.boolQuery();
timeBoolQuery.should().add(QueryBuilders.rangeQuery(InstanceTable.COLUMN_REGISTER_TIME).gte(startSecondTimeBucket).lte(endSecondTimeBucket));
timeBoolQuery.should().add(QueryBuilders.rangeQuery(InstanceTable.COLUMN_HEARTBEAT_TIME).gte(startSecondTimeBucket).lte(endSecondTimeBucket));
boolQuery.must().add(timeBoolQuery);
searchRequestBuilder.setQuery(boolQuery); searchRequestBuilder.setQuery(boolQuery);
SearchResponse searchResponse = searchRequestBuilder.execute().actionGet(); SearchResponse searchResponse = searchRequestBuilder.execute().actionGet();
...@@ -171,17 +179,23 @@ public class InstanceEsUIDAO extends EsDAO implements IInstanceUIDAO { ...@@ -171,17 +179,23 @@ public class InstanceEsUIDAO extends EsDAO implements IInstanceUIDAO {
return buildAppServerInfo(searchHits); return buildAppServerInfo(searchHits);
} }
@Override public List<AppServerInfo> getAllServer(int applicationId, long start, long end) { @Override
logger.debug("get instances info, applicationId: {}, start: {}, end: {}", applicationId, start, end); public List<AppServerInfo> 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 searchRequestBuilder = getClient().prepareSearch(InstanceTable.TABLE);
searchRequestBuilder.setTypes(InstanceTable.TABLE_TYPE); searchRequestBuilder.setTypes(InstanceTable.TABLE_TYPE);
searchRequestBuilder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH); searchRequestBuilder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH);
searchRequestBuilder.setSize(1000); searchRequestBuilder.setSize(1000);
BoolQueryBuilder boolQuery = QueryBuilders.boolQuery(); BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
boolQuery.must().add(QueryBuilders.rangeQuery(InstanceTable.COLUMN_HEARTBEAT_TIME).gte(start).lte(end));
boolQuery.must().add(QueryBuilders.termQuery(InstanceTable.COLUMN_APPLICATION_ID, applicationId)); boolQuery.must().add(QueryBuilders.termQuery(InstanceTable.COLUMN_APPLICATION_ID, applicationId));
boolQuery.must().add(QueryBuilders.termQuery(InstanceTable.COLUMN_IS_ADDRESS, BooleanUtils.FALSE)); boolQuery.must().add(QueryBuilders.termQuery(InstanceTable.COLUMN_IS_ADDRESS, BooleanUtils.FALSE));
BoolQueryBuilder timeBoolQuery = QueryBuilders.boolQuery();
timeBoolQuery.should().add(QueryBuilders.rangeQuery(InstanceTable.COLUMN_REGISTER_TIME).gte(startSecondTimeBucket).lte(endSecondTimeBucket));
timeBoolQuery.should().add(QueryBuilders.rangeQuery(InstanceTable.COLUMN_HEARTBEAT_TIME).gte(startSecondTimeBucket).lte(endSecondTimeBucket));
boolQuery.must().add(timeBoolQuery);
searchRequestBuilder.setQuery(boolQuery); searchRequestBuilder.setQuery(boolQuery);
SearchResponse searchResponse = searchRequestBuilder.execute().actionGet(); SearchResponse searchResponse = searchRequestBuilder.execute().actionGet();
...@@ -190,11 +204,52 @@ public class InstanceEsUIDAO extends EsDAO implements IInstanceUIDAO { ...@@ -190,11 +204,52 @@ public class InstanceEsUIDAO extends EsDAO implements IInstanceUIDAO {
return buildAppServerInfo(searchHits); 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<AppServerInfo> buildAppServerInfo(SearchHit[] searchHits) { private List<AppServerInfo> buildAppServerInfo(SearchHit[] searchHits) {
List<AppServerInfo> appServerInfos = new LinkedList<>(); List<AppServerInfo> appServerInfos = new LinkedList<>();
for (SearchHit searchHit : searchHits) { for (SearchHit searchHit : searchHits) {
AppServerInfo appServerInfo = new AppServerInfo(); AppServerInfo appServerInfo = new AppServerInfo();
appServerInfo.setId(((Number)searchHit.getSource().get(InstanceTable.COLUMN_INSTANCE_ID)).intValue()); appServerInfo.setId(((Number)searchHit.getSource().get(InstanceTable.COLUMN_INSTANCE_ID)).intValue());
appServerInfo.setApplicationId(((Number)searchHit.getSource().get(InstanceTable.COLUMN_APPLICATION_ID)).intValue());
appServerInfo.setOsInfo((String)searchHit.getSource().get(InstanceTable.COLUMN_OS_INFO)); appServerInfo.setOsInfo((String)searchHit.getSource().get(InstanceTable.COLUMN_OS_INFO));
appServerInfos.add(appServerInfo); appServerInfos.add(appServerInfo);
} }
......
...@@ -58,8 +58,8 @@ public class InstanceMetricEsUIDAO extends EsDAO implements IInstanceMetricUIDAO ...@@ -58,8 +58,8 @@ public class InstanceMetricEsUIDAO extends EsDAO implements IInstanceMetricUIDAO
super(client); super(client);
} }
@Override public List<AppServerInfo> getServerThroughput(int applicationId, Step step, long start, long end, @Override public List<AppServerInfo> getServerThroughput(int applicationId, Step step, long startTimeBucket, long endTimeBucket,
long secondBetween, int topN, MetricSource metricSource) { int secondBetween, int topN, MetricSource metricSource) {
String tableName = TimePyramidTableNameBuilder.build(step, InstanceMetricTable.TABLE); String tableName = TimePyramidTableNameBuilder.build(step, InstanceMetricTable.TABLE);
SearchRequestBuilder searchRequestBuilder = getClient().prepareSearch(tableName); SearchRequestBuilder searchRequestBuilder = getClient().prepareSearch(tableName);
...@@ -67,7 +67,7 @@ public class InstanceMetricEsUIDAO extends EsDAO implements IInstanceMetricUIDAO ...@@ -67,7 +67,7 @@ public class InstanceMetricEsUIDAO extends EsDAO implements IInstanceMetricUIDAO
searchRequestBuilder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH); searchRequestBuilder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH);
BoolQueryBuilder boolQuery = QueryBuilders.boolQuery(); BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
boolQuery.must().add(QueryBuilders.rangeQuery(InstanceMetricTable.COLUMN_TIME_BUCKET).gte(start).lte(end)); boolQuery.must().add(QueryBuilders.rangeQuery(InstanceMetricTable.COLUMN_TIME_BUCKET).gte(startTimeBucket).lte(endTimeBucket));
if (applicationId != 0) { if (applicationId != 0) {
boolQuery.must().add(QueryBuilders.termQuery(InstanceMetricTable.COLUMN_APPLICATION_ID, applicationId)); boolQuery.must().add(QueryBuilders.termQuery(InstanceMetricTable.COLUMN_APPLICATION_ID, applicationId));
} }
...@@ -102,7 +102,7 @@ public class InstanceMetricEsUIDAO extends EsDAO implements IInstanceMetricUIDAO ...@@ -102,7 +102,7 @@ public class InstanceMetricEsUIDAO extends EsDAO implements IInstanceMetricUIDAO
InternalSimpleValue simpleValue = serviceIdTerm.getAggregations().get(AVG_TPS); InternalSimpleValue simpleValue = serviceIdTerm.getAggregations().get(AVG_TPS);
appServerInfo.setId(instanceId); appServerInfo.setId(instanceId);
appServerInfo.setTps((int)simpleValue.getValue()); appServerInfo.setCallsPerSec((int)simpleValue.getValue());
appServerInfos.add(appServerInfo); appServerInfos.add(appServerInfo);
}); });
return appServerInfos; return appServerInfos;
......
...@@ -21,6 +21,7 @@ package org.apache.skywalking.apm.collector.storage.es.dao.ui; ...@@ -21,6 +21,7 @@ package org.apache.skywalking.apm.collector.storage.es.dao.ui;
import java.util.List; import java.util.List;
import org.apache.skywalking.apm.collector.client.elasticsearch.ElasticSearchClient; import org.apache.skywalking.apm.collector.client.elasticsearch.ElasticSearchClient;
import org.apache.skywalking.apm.collector.core.util.BooleanUtils; import org.apache.skywalking.apm.collector.core.util.BooleanUtils;
import org.apache.skywalking.apm.collector.core.util.CollectionUtils;
import org.apache.skywalking.apm.collector.core.util.StringUtils; import org.apache.skywalking.apm.collector.core.util.StringUtils;
import org.apache.skywalking.apm.collector.storage.dao.ui.ISegmentDurationUIDAO; import org.apache.skywalking.apm.collector.storage.dao.ui.ISegmentDurationUIDAO;
import org.apache.skywalking.apm.collector.storage.es.base.dao.EsDAO; import org.apache.skywalking.apm.collector.storage.es.base.dao.EsDAO;
...@@ -46,8 +47,8 @@ public class SegmentDurationEsUIDAO extends EsDAO implements ISegmentDurationUID ...@@ -46,8 +47,8 @@ public class SegmentDurationEsUIDAO extends EsDAO implements ISegmentDurationUID
} }
@Override @Override
public TraceBrief loadTop(long startTime, long endTime, long minDuration, long maxDuration, String operationName, public TraceBrief loadTop(long startSecondTimeBucket, long endSecondTimeBucket, long minDuration, long maxDuration,
int applicationId, String traceId, int limit, int from) { String operationName, int applicationId, int limit, int from, String... segmentIds) {
SearchRequestBuilder searchRequestBuilder = getClient().prepareSearch(SegmentDurationTable.TABLE); SearchRequestBuilder searchRequestBuilder = getClient().prepareSearch(SegmentDurationTable.TABLE);
searchRequestBuilder.setTypes(SegmentDurationTable.TABLE_TYPE); searchRequestBuilder.setTypes(SegmentDurationTable.TABLE_TYPE);
searchRequestBuilder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH); searchRequestBuilder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH);
...@@ -55,7 +56,10 @@ public class SegmentDurationEsUIDAO extends EsDAO implements ISegmentDurationUID ...@@ -55,7 +56,10 @@ public class SegmentDurationEsUIDAO extends EsDAO implements ISegmentDurationUID
searchRequestBuilder.setQuery(boolQueryBuilder); searchRequestBuilder.setQuery(boolQueryBuilder);
List<QueryBuilder> mustQueryList = boolQueryBuilder.must(); List<QueryBuilder> mustQueryList = boolQueryBuilder.must();
mustQueryList.add(QueryBuilders.rangeQuery(SegmentDurationTable.COLUMN_TIME_BUCKET).gte(startTime).lte(endTime)); if (startSecondTimeBucket != 0 && endSecondTimeBucket != 0) {
mustQueryList.add(QueryBuilders.rangeQuery(SegmentDurationTable.COLUMN_TIME_BUCKET).gte(startSecondTimeBucket).lte(endSecondTimeBucket));
}
if (minDuration != 0 || maxDuration != 0) { if (minDuration != 0 || maxDuration != 0) {
RangeQueryBuilder rangeQueryBuilder = QueryBuilders.rangeQuery(SegmentDurationTable.COLUMN_DURATION); RangeQueryBuilder rangeQueryBuilder = QueryBuilders.rangeQuery(SegmentDurationTable.COLUMN_DURATION);
if (minDuration != 0) { if (minDuration != 0) {
...@@ -69,8 +73,8 @@ public class SegmentDurationEsUIDAO extends EsDAO implements ISegmentDurationUID ...@@ -69,8 +73,8 @@ public class SegmentDurationEsUIDAO extends EsDAO implements ISegmentDurationUID
if (StringUtils.isNotEmpty(operationName)) { if (StringUtils.isNotEmpty(operationName)) {
mustQueryList.add(QueryBuilders.matchQuery(SegmentDurationTable.COLUMN_SERVICE_NAME, operationName)); mustQueryList.add(QueryBuilders.matchQuery(SegmentDurationTable.COLUMN_SERVICE_NAME, operationName));
} }
if (StringUtils.isNotEmpty(traceId)) { if (CollectionUtils.isNotEmpty(segmentIds)) {
boolQueryBuilder.must().add(QueryBuilders.termQuery(SegmentDurationTable.COLUMN_SEGMENT_ID, traceId)); boolQueryBuilder.must().add(QueryBuilders.termsQuery(SegmentDurationTable.COLUMN_SEGMENT_ID, segmentIds));
} }
if (applicationId != 0) { if (applicationId != 0) {
boolQueryBuilder.must().add(QueryBuilders.termQuery(SegmentDurationTable.COLUMN_APPLICATION_ID, applicationId)); boolQueryBuilder.must().add(QueryBuilders.termQuery(SegmentDurationTable.COLUMN_APPLICATION_ID, applicationId));
...@@ -87,7 +91,7 @@ public class SegmentDurationEsUIDAO extends EsDAO implements ISegmentDurationUID ...@@ -87,7 +91,7 @@ public class SegmentDurationEsUIDAO extends EsDAO implements ISegmentDurationUID
for (SearchHit searchHit : searchResponse.getHits().getHits()) { for (SearchHit searchHit : searchResponse.getHits().getHits()) {
BasicTrace basicTrace = new BasicTrace(); BasicTrace basicTrace = new BasicTrace();
basicTrace.setTraceId((String)searchHit.getSource().get(SegmentDurationTable.COLUMN_TRACE_ID)); basicTrace.setSegmentId((String)searchHit.getSource().get(SegmentDurationTable.COLUMN_SEGMENT_ID));
basicTrace.setStart(((Number)searchHit.getSource().get(SegmentDurationTable.COLUMN_START_TIME)).longValue()); basicTrace.setStart(((Number)searchHit.getSource().get(SegmentDurationTable.COLUMN_START_TIME)).longValue());
basicTrace.setOperationName((String)searchHit.getSource().get(SegmentDurationTable.COLUMN_SERVICE_NAME)); basicTrace.setOperationName((String)searchHit.getSource().get(SegmentDurationTable.COLUMN_SERVICE_NAME));
basicTrace.setDuration(((Number)searchHit.getSource().get(SegmentDurationTable.COLUMN_DURATION)).intValue()); basicTrace.setDuration(((Number)searchHit.getSource().get(SegmentDurationTable.COLUMN_DURATION)).intValue());
......
...@@ -46,13 +46,14 @@ public class ServiceAlarmEsUIDAO extends EsDAO implements IServiceAlarmUIDAO { ...@@ -46,13 +46,14 @@ public class ServiceAlarmEsUIDAO extends EsDAO implements IServiceAlarmUIDAO {
} }
@Override @Override
public Alarm loadAlarmList(String keyword, long start, long end, int limit, int from) throws ParseException { public Alarm loadAlarmList(String keyword, long startTimeBucket, long endTimeBucket, int limit,
int from) throws ParseException {
SearchRequestBuilder searchRequestBuilder = getClient().prepareSearch(ServiceAlarmTable.TABLE); SearchRequestBuilder searchRequestBuilder = getClient().prepareSearch(ServiceAlarmTable.TABLE);
searchRequestBuilder.setTypes(ServiceAlarmTable.TABLE_TYPE); searchRequestBuilder.setTypes(ServiceAlarmTable.TABLE_TYPE);
searchRequestBuilder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH); searchRequestBuilder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH);
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery(); BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
boolQueryBuilder.must().add(QueryBuilders.rangeQuery(ServiceAlarmTable.COLUMN_LAST_TIME_BUCKET).gte(start).lte(end)); boolQueryBuilder.must().add(QueryBuilders.rangeQuery(ServiceAlarmTable.COLUMN_LAST_TIME_BUCKET).gte(startTimeBucket).lte(endTimeBucket));
if (StringUtils.isNotEmpty(keyword)) { if (StringUtils.isNotEmpty(keyword)) {
boolQueryBuilder.must().add(QueryBuilders.matchQuery(ServiceAlarmTable.COLUMN_ALARM_CONTENT, keyword)); boolQueryBuilder.must().add(QueryBuilders.matchQuery(ServiceAlarmTable.COLUMN_ALARM_CONTENT, keyword));
} }
...@@ -68,7 +69,7 @@ public class ServiceAlarmEsUIDAO extends EsDAO implements IServiceAlarmUIDAO { ...@@ -68,7 +69,7 @@ public class ServiceAlarmEsUIDAO extends EsDAO implements IServiceAlarmUIDAO {
alarm.setTotal((int)searchResponse.getHits().getTotalHits()); alarm.setTotal((int)searchResponse.getHits().getTotalHits());
for (SearchHit searchHit : searchHits) { for (SearchHit searchHit : searchHits) {
AlarmItem alarmItem = new AlarmItem(); AlarmItem alarmItem = new AlarmItem();
alarmItem.setId(searchHit.getId()); alarmItem.setId(((Number)searchHit.getSource().get(ServiceAlarmTable.COLUMN_SERVICE_ID)).intValue());
alarmItem.setTitle((String)searchHit.getSource().get(ServiceAlarmTable.COLUMN_ALARM_CONTENT)); alarmItem.setTitle((String)searchHit.getSource().get(ServiceAlarmTable.COLUMN_ALARM_CONTENT));
alarmItem.setContent((String)searchHit.getSource().get(ServiceAlarmTable.COLUMN_ALARM_CONTENT)); alarmItem.setContent((String)searchHit.getSource().get(ServiceAlarmTable.COLUMN_ALARM_CONTENT));
......
...@@ -175,7 +175,9 @@ public class ServiceMetricEsUIDAO extends EsDAO implements IServiceMetricUIDAO { ...@@ -175,7 +175,9 @@ public class ServiceMetricEsUIDAO extends EsDAO implements IServiceMetricUIDAO {
return nodes; return nodes;
} }
@Override public List<ServiceMetric> getSlowService(int applicationId, Step step, long start, long end, Integer top, @Override
public List<ServiceMetric> getSlowService(int applicationId, Step step, long startTimeBucket, long endTimeBucket,
Integer topN,
MetricSource metricSource) { MetricSource metricSource) {
String tableName = TimePyramidTableNameBuilder.build(step, ServiceMetricTable.TABLE); String tableName = TimePyramidTableNameBuilder.build(step, ServiceMetricTable.TABLE);
...@@ -184,7 +186,7 @@ public class ServiceMetricEsUIDAO extends EsDAO implements IServiceMetricUIDAO { ...@@ -184,7 +186,7 @@ public class ServiceMetricEsUIDAO extends EsDAO implements IServiceMetricUIDAO {
searchRequestBuilder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH); searchRequestBuilder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH);
BoolQueryBuilder boolQuery = QueryBuilders.boolQuery(); 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) { if (applicationId != 0) {
boolQuery.must().add(QueryBuilders.termQuery(ServiceMetricTable.COLUMN_APPLICATION_ID, applicationId)); boolQuery.must().add(QueryBuilders.termQuery(ServiceMetricTable.COLUMN_APPLICATION_ID, applicationId));
} }
...@@ -193,7 +195,7 @@ public class ServiceMetricEsUIDAO extends EsDAO implements IServiceMetricUIDAO { ...@@ -193,7 +195,7 @@ public class ServiceMetricEsUIDAO extends EsDAO implements IServiceMetricUIDAO {
searchRequestBuilder.setQuery(boolQuery); searchRequestBuilder.setQuery(boolQuery);
searchRequestBuilder.setSize(0); 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_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_ERROR_CALLS).field(ServiceMetricTable.COLUMN_TRANSACTION_ERROR_CALLS));
aggregationBuilder.subAggregation(AggregationBuilders.sum(ServiceMetricTable.COLUMN_TRANSACTION_DURATION_SUM).field(ServiceMetricTable.COLUMN_TRANSACTION_DURATION_SUM)); 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 { ...@@ -221,7 +223,9 @@ public class ServiceMetricEsUIDAO extends EsDAO implements IServiceMetricUIDAO {
ServiceMetric serviceMetric = new ServiceMetric(); ServiceMetric serviceMetric = new ServiceMetric();
InternalSimpleValue simpleValue = serviceIdTerm.getAggregations().get(AVG_DURATION); 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.setId(serviceId);
serviceMetric.setAvgResponseTime((int)simpleValue.getValue()); serviceMetric.setAvgResponseTime((int)simpleValue.getValue());
serviceMetrics.add(serviceMetric); serviceMetrics.add(serviceMetric);
......
...@@ -25,9 +25,11 @@ import org.apache.skywalking.apm.collector.storage.dao.ui.IServiceNameServiceUID ...@@ -25,9 +25,11 @@ 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.es.base.dao.EsDAO;
import org.apache.skywalking.apm.collector.storage.table.register.ServiceNameTable; 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.collector.storage.ui.service.ServiceInfo;
import org.apache.skywalking.apm.network.proto.SpanType;
import org.elasticsearch.action.search.SearchRequestBuilder; import org.elasticsearch.action.search.SearchRequestBuilder;
import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.action.search.SearchType; import org.elasticsearch.action.search.SearchType;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit; import org.elasticsearch.search.SearchHit;
...@@ -44,6 +46,7 @@ public class ServiceNameServiceEsUIDAO extends EsDAO implements IServiceNameServ ...@@ -44,6 +46,7 @@ public class ServiceNameServiceEsUIDAO extends EsDAO implements IServiceNameServ
SearchRequestBuilder searchRequestBuilder = getClient().prepareSearch(ServiceNameTable.TABLE); SearchRequestBuilder searchRequestBuilder = getClient().prepareSearch(ServiceNameTable.TABLE);
searchRequestBuilder.setTypes(ServiceNameTable.TABLE_TYPE); searchRequestBuilder.setTypes(ServiceNameTable.TABLE_TYPE);
searchRequestBuilder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH); searchRequestBuilder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH);
searchRequestBuilder.setQuery(QueryBuilders.termQuery(ServiceNameTable.COLUMN_SRC_SPAN_TYPE, SpanType.Entry_VALUE));
searchRequestBuilder.setSize(0); searchRequestBuilder.setSize(0);
SearchResponse searchResponse = searchRequestBuilder.execute().actionGet(); SearchResponse searchResponse = searchRequestBuilder.execute().actionGet();
...@@ -56,7 +59,11 @@ public class ServiceNameServiceEsUIDAO extends EsDAO implements IServiceNameServ ...@@ -56,7 +59,11 @@ public class ServiceNameServiceEsUIDAO extends EsDAO implements IServiceNameServ
searchRequestBuilder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH); searchRequestBuilder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH);
searchRequestBuilder.setSize(topN); searchRequestBuilder.setSize(topN);
searchRequestBuilder.setQuery(QueryBuilders.matchQuery(ServiceNameTable.COLUMN_SERVICE_NAME, keyword)); BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
boolQuery.must().add(QueryBuilders.matchQuery(ServiceNameTable.COLUMN_SERVICE_NAME, keyword));
boolQuery.must().add(QueryBuilders.termQuery(ServiceNameTable.COLUMN_SRC_SPAN_TYPE, SpanType.Entry_VALUE));
searchRequestBuilder.setQuery(boolQuery);
SearchResponse searchResponse = searchRequestBuilder.execute().actionGet(); SearchResponse searchResponse = searchRequestBuilder.execute().actionGet();
SearchHit[] searchHits = searchResponse.getHits().getHits(); SearchHit[] searchHits = searchResponse.getHits().getHits();
......
...@@ -25,7 +25,6 @@ import org.apache.skywalking.apm.collector.storage.dao.ui.IServiceReferenceMetri ...@@ -25,7 +25,6 @@ import org.apache.skywalking.apm.collector.storage.dao.ui.IServiceReferenceMetri
import org.apache.skywalking.apm.collector.storage.es.base.dao.EsDAO; 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.MetricSource;
import org.apache.skywalking.apm.collector.storage.table.service.ServiceReferenceMetricTable; import org.apache.skywalking.apm.collector.storage.table.service.ServiceReferenceMetricTable;
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.Step;
import org.apache.skywalking.apm.collector.storage.utils.TimePyramidTableNameBuilder; import org.apache.skywalking.apm.collector.storage.utils.TimePyramidTableNameBuilder;
import org.elasticsearch.action.search.SearchRequestBuilder; import org.elasticsearch.action.search.SearchRequestBuilder;
...@@ -47,7 +46,8 @@ public class ServiceReferenceEsMetricUIDAO extends EsDAO implements IServiceRefe ...@@ -47,7 +46,8 @@ public class ServiceReferenceEsMetricUIDAO extends EsDAO implements IServiceRefe
super(client); super(client);
} }
@Override public List<Call> getFrontServices(Step step, long startTime, long endTime, MetricSource metricSource, @Override public List<ServiceReferenceMetric> getFrontServices(Step step, long startTimeBucket, long endTimeBucket,
MetricSource metricSource,
int behindServiceId) { int behindServiceId) {
String tableName = TimePyramidTableNameBuilder.build(step, ServiceReferenceMetricTable.TABLE); String tableName = TimePyramidTableNameBuilder.build(step, ServiceReferenceMetricTable.TABLE);
...@@ -56,7 +56,7 @@ public class ServiceReferenceEsMetricUIDAO extends EsDAO implements IServiceRefe ...@@ -56,7 +56,7 @@ public class ServiceReferenceEsMetricUIDAO extends EsDAO implements IServiceRefe
searchRequestBuilder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH); searchRequestBuilder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH);
BoolQueryBuilder boolQuery = QueryBuilders.boolQuery(); BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
boolQuery.must().add(QueryBuilders.rangeQuery(ServiceReferenceMetricTable.COLUMN_TIME_BUCKET).gte(startTime).lte(endTime)); boolQuery.must().add(QueryBuilders.rangeQuery(ServiceReferenceMetricTable.COLUMN_TIME_BUCKET).gte(startTimeBucket).lte(endTimeBucket));
boolQuery.must().add(QueryBuilders.termQuery(ServiceReferenceMetricTable.COLUMN_BEHIND_SERVICE_ID, behindServiceId)); boolQuery.must().add(QueryBuilders.termQuery(ServiceReferenceMetricTable.COLUMN_BEHIND_SERVICE_ID, behindServiceId));
boolQuery.must().add(QueryBuilders.termQuery(ServiceReferenceMetricTable.COLUMN_SOURCE_VALUE, metricSource.getValue())); boolQuery.must().add(QueryBuilders.termQuery(ServiceReferenceMetricTable.COLUMN_SOURCE_VALUE, metricSource.getValue()));
...@@ -65,19 +65,22 @@ public class ServiceReferenceEsMetricUIDAO extends EsDAO implements IServiceRefe ...@@ -65,19 +65,22 @@ public class ServiceReferenceEsMetricUIDAO extends EsDAO implements IServiceRefe
TermsAggregationBuilder aggregationBuilder = AggregationBuilders.terms(ServiceReferenceMetricTable.COLUMN_FRONT_SERVICE_ID).field(ServiceReferenceMetricTable.COLUMN_FRONT_SERVICE_ID).size(100); TermsAggregationBuilder aggregationBuilder = AggregationBuilders.terms(ServiceReferenceMetricTable.COLUMN_FRONT_SERVICE_ID).field(ServiceReferenceMetricTable.COLUMN_FRONT_SERVICE_ID).size(100);
aggregationBuilder.subAggregation(AggregationBuilders.sum(ServiceReferenceMetricTable.COLUMN_TRANSACTION_CALLS).field(ServiceReferenceMetricTable.COLUMN_TRANSACTION_CALLS)); aggregationBuilder.subAggregation(AggregationBuilders.sum(ServiceReferenceMetricTable.COLUMN_TRANSACTION_CALLS).field(ServiceReferenceMetricTable.COLUMN_TRANSACTION_CALLS));
aggregationBuilder.subAggregation(AggregationBuilders.sum(ServiceReferenceMetricTable.COLUMN_TRANSACTION_ERROR_CALLS).field(ServiceReferenceMetricTable.COLUMN_TRANSACTION_ERROR_CALLS));
aggregationBuilder.subAggregation(AggregationBuilders.sum(ServiceReferenceMetricTable.COLUMN_TRANSACTION_DURATION_SUM).field(ServiceReferenceMetricTable.COLUMN_TRANSACTION_DURATION_SUM)); aggregationBuilder.subAggregation(AggregationBuilders.sum(ServiceReferenceMetricTable.COLUMN_TRANSACTION_DURATION_SUM).field(ServiceReferenceMetricTable.COLUMN_TRANSACTION_DURATION_SUM));
aggregationBuilder.subAggregation(AggregationBuilders.sum(ServiceReferenceMetricTable.COLUMN_TRANSACTION_ERROR_DURATION_SUM).field(ServiceReferenceMetricTable.COLUMN_TRANSACTION_ERROR_DURATION_SUM));
searchRequestBuilder.addAggregation(aggregationBuilder); searchRequestBuilder.addAggregation(aggregationBuilder);
SearchResponse searchResponse = searchRequestBuilder.execute().actionGet(); SearchResponse searchResponse = searchRequestBuilder.execute().actionGet();
List<Call> calls = new LinkedList<>(); List<ServiceReferenceMetric> referenceMetrics = new LinkedList<>();
Terms frontServiceIdTerms = searchResponse.getAggregations().get(ServiceReferenceMetricTable.COLUMN_FRONT_SERVICE_ID); Terms frontServiceIdTerms = searchResponse.getAggregations().get(ServiceReferenceMetricTable.COLUMN_FRONT_SERVICE_ID);
buildNodeByBehindServiceId(calls, frontServiceIdTerms, behindServiceId); buildNodeByBehindServiceId(referenceMetrics, frontServiceIdTerms, behindServiceId);
return calls; return referenceMetrics;
} }
@Override public List<Call> getBehindServices(Step step, long startTime, long endTime, MetricSource metricSource, @Override public List<ServiceReferenceMetric> getBehindServices(Step step, long startTimeBucket, long endTimeBucket,
MetricSource metricSource,
int frontServiceId) { int frontServiceId) {
String tableName = TimePyramidTableNameBuilder.build(step, ServiceReferenceMetricTable.TABLE); String tableName = TimePyramidTableNameBuilder.build(step, ServiceReferenceMetricTable.TABLE);
...@@ -86,7 +89,7 @@ public class ServiceReferenceEsMetricUIDAO extends EsDAO implements IServiceRefe ...@@ -86,7 +89,7 @@ public class ServiceReferenceEsMetricUIDAO extends EsDAO implements IServiceRefe
searchRequestBuilder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH); searchRequestBuilder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH);
BoolQueryBuilder boolQuery = QueryBuilders.boolQuery(); BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
boolQuery.must().add(QueryBuilders.rangeQuery(ServiceReferenceMetricTable.COLUMN_TIME_BUCKET).gte(startTime).lte(endTime)); boolQuery.must().add(QueryBuilders.rangeQuery(ServiceReferenceMetricTable.COLUMN_TIME_BUCKET).gte(startTimeBucket).lte(endTimeBucket));
boolQuery.must().add(QueryBuilders.termQuery(ServiceReferenceMetricTable.COLUMN_FRONT_SERVICE_ID, frontServiceId)); boolQuery.must().add(QueryBuilders.termQuery(ServiceReferenceMetricTable.COLUMN_FRONT_SERVICE_ID, frontServiceId));
boolQuery.must().add(QueryBuilders.termQuery(ServiceReferenceMetricTable.COLUMN_SOURCE_VALUE, metricSource.getValue())); boolQuery.must().add(QueryBuilders.termQuery(ServiceReferenceMetricTable.COLUMN_SOURCE_VALUE, metricSource.getValue()));
...@@ -95,106 +98,59 @@ public class ServiceReferenceEsMetricUIDAO extends EsDAO implements IServiceRefe ...@@ -95,106 +98,59 @@ public class ServiceReferenceEsMetricUIDAO extends EsDAO implements IServiceRefe
TermsAggregationBuilder aggregationBuilder = AggregationBuilders.terms(ServiceReferenceMetricTable.COLUMN_BEHIND_SERVICE_ID).field(ServiceReferenceMetricTable.COLUMN_BEHIND_SERVICE_ID).size(100); TermsAggregationBuilder aggregationBuilder = AggregationBuilders.terms(ServiceReferenceMetricTable.COLUMN_BEHIND_SERVICE_ID).field(ServiceReferenceMetricTable.COLUMN_BEHIND_SERVICE_ID).size(100);
aggregationBuilder.subAggregation(AggregationBuilders.sum(ServiceReferenceMetricTable.COLUMN_TRANSACTION_CALLS).field(ServiceReferenceMetricTable.COLUMN_TRANSACTION_CALLS)); aggregationBuilder.subAggregation(AggregationBuilders.sum(ServiceReferenceMetricTable.COLUMN_TRANSACTION_CALLS).field(ServiceReferenceMetricTable.COLUMN_TRANSACTION_CALLS));
aggregationBuilder.subAggregation(AggregationBuilders.sum(ServiceReferenceMetricTable.COLUMN_TRANSACTION_ERROR_CALLS).field(ServiceReferenceMetricTable.COLUMN_TRANSACTION_ERROR_CALLS));
aggregationBuilder.subAggregation(AggregationBuilders.sum(ServiceReferenceMetricTable.COLUMN_TRANSACTION_DURATION_SUM).field(ServiceReferenceMetricTable.COLUMN_TRANSACTION_DURATION_SUM)); aggregationBuilder.subAggregation(AggregationBuilders.sum(ServiceReferenceMetricTable.COLUMN_TRANSACTION_DURATION_SUM).field(ServiceReferenceMetricTable.COLUMN_TRANSACTION_DURATION_SUM));
aggregationBuilder.subAggregation(AggregationBuilders.sum(ServiceReferenceMetricTable.COLUMN_TRANSACTION_ERROR_DURATION_SUM).field(ServiceReferenceMetricTable.COLUMN_TRANSACTION_ERROR_DURATION_SUM));
searchRequestBuilder.addAggregation(aggregationBuilder); searchRequestBuilder.addAggregation(aggregationBuilder);
SearchResponse searchResponse = searchRequestBuilder.execute().actionGet(); SearchResponse searchResponse = searchRequestBuilder.execute().actionGet();
List<Call> calls = new LinkedList<>(); List<ServiceReferenceMetric> referenceMetrics = new LinkedList<>();
Terms behindServiceIdTerms = searchResponse.getAggregations().get(ServiceReferenceMetricTable.COLUMN_BEHIND_SERVICE_ID); Terms behindServiceIdTerms = searchResponse.getAggregations().get(ServiceReferenceMetricTable.COLUMN_BEHIND_SERVICE_ID);
buildNodeByFrontServiceId(calls, behindServiceIdTerms, frontServiceId); buildNodeByFrontServiceId(referenceMetrics, behindServiceIdTerms, frontServiceId);
return calls; return referenceMetrics;
} }
@Override public List<Call> getFrontServices(Step step, long startTime, long endTime, MetricSource metricSource, private void buildNodeByFrontServiceId(List<ServiceReferenceMetric> referenceMetrics, Terms behindServiceIdTerms,
List<Integer> behindServiceIds) { int frontServiceId) {
String tableName = TimePyramidTableNameBuilder.build(step, ServiceReferenceMetricTable.TABLE);
SearchRequestBuilder searchRequestBuilder = getClient().prepareSearch(tableName);
searchRequestBuilder.setTypes(ServiceReferenceMetricTable.TABLE_TYPE);
searchRequestBuilder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH);
BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
boolQuery.must().add(QueryBuilders.rangeQuery(ServiceReferenceMetricTable.COLUMN_TIME_BUCKET).gte(startTime).lte(endTime));
boolQuery.must().add(QueryBuilders.termsQuery(ServiceReferenceMetricTable.COLUMN_BEHIND_SERVICE_ID, behindServiceIds));
boolQuery.must().add(QueryBuilders.termQuery(ServiceReferenceMetricTable.COLUMN_SOURCE_VALUE, metricSource.getValue()));
searchRequestBuilder.setQuery(boolQuery);
searchRequestBuilder.setSize(0);
return executeAggregation(searchRequestBuilder);
}
@Override public List<Call> getBehindServices(Step step, long startTime, long endTime, MetricSource metricSource,
List<Integer> frontServiceIds) {
String tableName = TimePyramidTableNameBuilder.build(step, ServiceReferenceMetricTable.TABLE);
SearchRequestBuilder searchRequestBuilder = getClient().prepareSearch(tableName);
searchRequestBuilder.setTypes(ServiceReferenceMetricTable.TABLE_TYPE);
searchRequestBuilder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH);
BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
boolQuery.must().add(QueryBuilders.rangeQuery(ServiceReferenceMetricTable.COLUMN_TIME_BUCKET).gte(startTime).lte(endTime));
boolQuery.must().add(QueryBuilders.termsQuery(ServiceReferenceMetricTable.COLUMN_FRONT_SERVICE_ID, frontServiceIds));
boolQuery.must().add(QueryBuilders.termQuery(ServiceReferenceMetricTable.COLUMN_SOURCE_VALUE, metricSource.getValue()));
searchRequestBuilder.setQuery(boolQuery);
searchRequestBuilder.setSize(0);
return executeAggregation(searchRequestBuilder);
}
private List<Call> executeAggregation(SearchRequestBuilder searchRequestBuilder) {
TermsAggregationBuilder frontAggregationBuilder = AggregationBuilders.terms(ServiceReferenceMetricTable.COLUMN_FRONT_SERVICE_ID).field(ServiceReferenceMetricTable.COLUMN_FRONT_SERVICE_ID).size(100);
TermsAggregationBuilder behindAggregationBuilder = AggregationBuilders.terms(ServiceReferenceMetricTable.COLUMN_BEHIND_SERVICE_ID).field(ServiceReferenceMetricTable.COLUMN_BEHIND_SERVICE_ID).size(100);
behindAggregationBuilder.subAggregation(AggregationBuilders.sum(ServiceReferenceMetricTable.COLUMN_TRANSACTION_CALLS).field(ServiceReferenceMetricTable.COLUMN_TRANSACTION_CALLS));
behindAggregationBuilder.subAggregation(AggregationBuilders.sum(ServiceReferenceMetricTable.COLUMN_TRANSACTION_DURATION_SUM).field(ServiceReferenceMetricTable.COLUMN_TRANSACTION_DURATION_SUM));
frontAggregationBuilder.subAggregation(behindAggregationBuilder);
searchRequestBuilder.addAggregation(frontAggregationBuilder);
SearchResponse searchResponse = searchRequestBuilder.execute().actionGet();
List<Call> nodes = new LinkedList<>();
Terms frontServiceIdTerms = searchResponse.getAggregations().get(ServiceReferenceMetricTable.COLUMN_FRONT_SERVICE_ID);
frontServiceIdTerms.getBuckets().forEach(frontServiceIdBucket -> {
int frontServiceId = frontServiceIdBucket.getKeyAsNumber().intValue();
Terms behindServiceIdTerms = frontServiceIdBucket.getAggregations().get(ServiceReferenceMetricTable.COLUMN_BEHIND_SERVICE_ID);
buildNodeByFrontServiceId(nodes, behindServiceIdTerms, frontServiceId);
});
return nodes;
}
private void buildNodeByFrontServiceId(List<Call> calls, Terms behindServiceIdTerms, int frontServiceId) {
behindServiceIdTerms.getBuckets().forEach(behindServiceIdBucket -> { behindServiceIdTerms.getBuckets().forEach(behindServiceIdBucket -> {
int behindServiceId = behindServiceIdBucket.getKeyAsNumber().intValue(); int behindServiceId = behindServiceIdBucket.getKeyAsNumber().intValue();
Sum callsSum = behindServiceIdBucket.getAggregations().get(ServiceReferenceMetricTable.COLUMN_TRANSACTION_CALLS); Sum callsSum = behindServiceIdBucket.getAggregations().get(ServiceReferenceMetricTable.COLUMN_TRANSACTION_CALLS);
Sum responseTimes = behindServiceIdBucket.getAggregations().get(ServiceReferenceMetricTable.COLUMN_TRANSACTION_DURATION_SUM); Sum errorCallsSum = behindServiceIdBucket.getAggregations().get(ServiceReferenceMetricTable.COLUMN_TRANSACTION_ERROR_CALLS);
Sum durationSum = behindServiceIdBucket.getAggregations().get(ServiceReferenceMetricTable.COLUMN_TRANSACTION_DURATION_SUM);
Call call = new Call(); Sum errorDurationSum = behindServiceIdBucket.getAggregations().get(ServiceReferenceMetricTable.COLUMN_TRANSACTION_ERROR_DURATION_SUM);
call.setSource(frontServiceId);
call.setTarget(behindServiceId); ServiceReferenceMetric referenceMetric = new ServiceReferenceMetric();
call.setCalls((int)callsSum.getValue()); referenceMetric.setSource(frontServiceId);
call.setResponseTimes((int)responseTimes.getValue()); referenceMetric.setTarget(behindServiceId);
calls.add(call); referenceMetric.setCalls((long)callsSum.getValue());
referenceMetric.setErrorCalls((long)errorCallsSum.getValue());
referenceMetric.setDurations((long)durationSum.getValue());
referenceMetric.setErrorDurations((long)errorDurationSum.getValue());
referenceMetrics.add(referenceMetric);
}); });
} }
private void buildNodeByBehindServiceId(List<Call> calls, Terms frontServiceIdTerms, int behindServiceId) { private void buildNodeByBehindServiceId(List<ServiceReferenceMetric> referenceMetrics, Terms frontServiceIdTerms,
int behindServiceId) {
frontServiceIdTerms.getBuckets().forEach(frontServiceIdBucket -> { frontServiceIdTerms.getBuckets().forEach(frontServiceIdBucket -> {
int frontServiceId = frontServiceIdBucket.getKeyAsNumber().intValue(); int frontServiceId = frontServiceIdBucket.getKeyAsNumber().intValue();
Sum callsSum = frontServiceIdBucket.getAggregations().get(ServiceReferenceMetricTable.COLUMN_TRANSACTION_CALLS); Sum callsSum = frontServiceIdBucket.getAggregations().get(ServiceReferenceMetricTable.COLUMN_TRANSACTION_CALLS);
Sum responseTimes = frontServiceIdBucket.getAggregations().get(ServiceReferenceMetricTable.COLUMN_TRANSACTION_DURATION_SUM); Sum errorCallsSum = frontServiceIdBucket.getAggregations().get(ServiceReferenceMetricTable.COLUMN_TRANSACTION_ERROR_CALLS);
Sum durationSum = frontServiceIdBucket.getAggregations().get(ServiceReferenceMetricTable.COLUMN_TRANSACTION_DURATION_SUM);
Call call = new Call(); Sum errorDurationSum = frontServiceIdBucket.getAggregations().get(ServiceReferenceMetricTable.COLUMN_TRANSACTION_ERROR_DURATION_SUM);
call.setTarget(behindServiceId);
call.setSource(frontServiceId); ServiceReferenceMetric referenceMetric = new ServiceReferenceMetric();
call.setCalls((int)callsSum.getValue()); referenceMetric.setTarget(behindServiceId);
call.setResponseTimes((int)responseTimes.getValue()); referenceMetric.setSource(frontServiceId);
calls.add(call); referenceMetric.setCalls((long)callsSum.getValue());
referenceMetric.setErrorCalls((long)errorCallsSum.getValue());
referenceMetric.setDurations((long)durationSum.getValue());
referenceMetric.setErrorDurations((long)errorDurationSum.getValue());
referenceMetrics.add(referenceMetric);
}); });
} }
} }
...@@ -37,11 +37,12 @@ public class InstanceEsTableDefine extends ElasticSearchTableDefine { ...@@ -37,11 +37,12 @@ public class InstanceEsTableDefine extends ElasticSearchTableDefine {
@Override public void initialize() { @Override public void initialize() {
addColumn(new ElasticSearchColumnDefine(InstanceTable.COLUMN_APPLICATION_ID, ElasticSearchColumnDefine.Type.Integer.name())); addColumn(new ElasticSearchColumnDefine(InstanceTable.COLUMN_APPLICATION_ID, ElasticSearchColumnDefine.Type.Integer.name()));
addColumn(new ElasticSearchColumnDefine(InstanceTable.COLUMN_APPLICATION_CODE, ElasticSearchColumnDefine.Type.Text.name()));
addColumn(new ElasticSearchColumnDefine(InstanceTable.COLUMN_AGENT_UUID, ElasticSearchColumnDefine.Type.Keyword.name())); addColumn(new ElasticSearchColumnDefine(InstanceTable.COLUMN_AGENT_UUID, ElasticSearchColumnDefine.Type.Keyword.name()));
addColumn(new ElasticSearchColumnDefine(InstanceTable.COLUMN_REGISTER_TIME, ElasticSearchColumnDefine.Type.Long.name())); addColumn(new ElasticSearchColumnDefine(InstanceTable.COLUMN_REGISTER_TIME, ElasticSearchColumnDefine.Type.Long.name()));
addColumn(new ElasticSearchColumnDefine(InstanceTable.COLUMN_INSTANCE_ID, ElasticSearchColumnDefine.Type.Integer.name())); addColumn(new ElasticSearchColumnDefine(InstanceTable.COLUMN_INSTANCE_ID, ElasticSearchColumnDefine.Type.Integer.name()));
addColumn(new ElasticSearchColumnDefine(InstanceTable.COLUMN_HEARTBEAT_TIME, ElasticSearchColumnDefine.Type.Long.name())); addColumn(new ElasticSearchColumnDefine(InstanceTable.COLUMN_HEARTBEAT_TIME, ElasticSearchColumnDefine.Type.Long.name()));
addColumn(new ElasticSearchColumnDefine(InstanceTable.COLUMN_OS_INFO, ElasticSearchColumnDefine.Type.Keyword.name())); addColumn(new ElasticSearchColumnDefine(InstanceTable.COLUMN_OS_INFO, ElasticSearchColumnDefine.Type.Text.name()));
addColumn(new ElasticSearchColumnDefine(InstanceTable.COLUMN_ADDRESS_ID, ElasticSearchColumnDefine.Type.Integer.name())); addColumn(new ElasticSearchColumnDefine(InstanceTable.COLUMN_ADDRESS_ID, ElasticSearchColumnDefine.Type.Integer.name()));
addColumn(new ElasticSearchColumnDefine(InstanceTable.COLUMN_IS_ADDRESS, ElasticSearchColumnDefine.Type.Integer.name())); addColumn(new ElasticSearchColumnDefine(InstanceTable.COLUMN_IS_ADDRESS, ElasticSearchColumnDefine.Type.Integer.name()));
} }
......
...@@ -38,6 +38,8 @@ public class ServiceNameEsTableDefine extends ElasticSearchTableDefine { ...@@ -38,6 +38,8 @@ public class ServiceNameEsTableDefine extends ElasticSearchTableDefine {
@Override public void initialize() { @Override public void initialize() {
addColumn(new ElasticSearchColumnDefine(ServiceNameTable.COLUMN_APPLICATION_ID, ElasticSearchColumnDefine.Type.Integer.name())); 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, 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_SERVICE_ID, ElasticSearchColumnDefine.Type.Integer.name()));
addColumn(new ElasticSearchColumnDefine(ServiceNameTable.COLUMN_SRC_SPAN_TYPE, ElasticSearchColumnDefine.Type.Integer.name()));
} }
} }
...@@ -47,7 +47,7 @@ public class SegmentDurationH2PersistenceDAO extends H2DAO implements ISegmentDu ...@@ -47,7 +47,7 @@ public class SegmentDurationH2PersistenceDAO extends H2DAO implements ISegmentDu
} }
@Override public H2SqlEntity prepareBatchInsert(SegmentDuration data) { @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(); H2SqlEntity entity = new H2SqlEntity();
Map<String, Object> source = new HashMap<>(); Map<String, Object> source = new HashMap<>();
source.put(SegmentDurationTable.COLUMN_ID, data.getId()); source.put(SegmentDurationTable.COLUMN_ID, data.getId());
......
...@@ -38,7 +38,7 @@ public class ServiceNameH2CacheDAO extends H2DAO implements IServiceNameCacheDAO ...@@ -38,7 +38,7 @@ public class ServiceNameH2CacheDAO extends H2DAO implements IServiceNameCacheDAO
private final Logger logger = LoggerFactory.getLogger(ServiceNameH2CacheDAO.class); 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_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) { public ServiceNameH2CacheDAO(H2Client client) {
super(client); super(client);
...@@ -63,11 +63,12 @@ public class ServiceNameH2CacheDAO extends H2DAO implements IServiceNameCacheDAO ...@@ -63,11 +63,12 @@ public class ServiceNameH2CacheDAO extends H2DAO implements IServiceNameCacheDAO
return null; return null;
} }
@Override public int getServiceId(int applicationId, String serviceName) { @Override public int getServiceId(int applicationId, int srcSpanType, String serviceName) {
H2Client client = getClient(); H2Client client = getClient();
String sql = SqlBuilder.buildSql(GET_SERVICE_ID_SQL, ServiceNameTable.COLUMN_SERVICE_ID, String sql = SqlBuilder.buildSql(GET_SERVICE_ID_SQL, ServiceNameTable.COLUMN_SERVICE_ID, ServiceNameTable.TABLE,
ServiceNameTable.TABLE, ServiceNameTable.COLUMN_APPLICATION_ID, ServiceNameTable.COLUMN_SERVICE_NAME); ServiceNameTable.COLUMN_APPLICATION_ID, ServiceNameTable.COLUMN_SRC_SPAN_TYPE, ServiceNameTable.COLUMN_SERVICE_NAME);
Object[] params = new Object[] {applicationId, serviceName};
Object[] params = new Object[] {applicationId, srcSpanType, serviceName};
try (ResultSet rs = client.executeQuery(sql, params)) { try (ResultSet rs = client.executeQuery(sql, params)) {
if (rs.next()) { if (rs.next()) {
return rs.getInt(ServiceNameTable.COLUMN_SERVICE_ID); return rs.getInt(ServiceNameTable.COLUMN_SERVICE_ID);
......
...@@ -58,6 +58,7 @@ public class InstanceRegisterH2DAO extends H2DAO implements IInstanceRegisterDAO ...@@ -58,6 +58,7 @@ public class InstanceRegisterH2DAO extends H2DAO implements IInstanceRegisterDAO
source.put(InstanceTable.COLUMN_ID, instance.getId()); source.put(InstanceTable.COLUMN_ID, instance.getId());
source.put(InstanceTable.COLUMN_INSTANCE_ID, instance.getInstanceId()); source.put(InstanceTable.COLUMN_INSTANCE_ID, instance.getInstanceId());
source.put(InstanceTable.COLUMN_APPLICATION_ID, instance.getApplicationId()); source.put(InstanceTable.COLUMN_APPLICATION_ID, instance.getApplicationId());
source.put(InstanceTable.COLUMN_APPLICATION_CODE, instance.getApplicationCode());
source.put(InstanceTable.COLUMN_AGENT_UUID, instance.getAgentUUID()); source.put(InstanceTable.COLUMN_AGENT_UUID, instance.getAgentUUID());
source.put(InstanceTable.COLUMN_REGISTER_TIME, TimeBucketUtils.INSTANCE.getSecondTimeBucket(instance.getRegisterTime())); source.put(InstanceTable.COLUMN_REGISTER_TIME, TimeBucketUtils.INSTANCE.getSecondTimeBucket(instance.getRegisterTime()));
source.put(InstanceTable.COLUMN_HEARTBEAT_TIME, TimeBucketUtils.INSTANCE.getSecondTimeBucket(instance.getHeartBeatTime())); source.put(InstanceTable.COLUMN_HEARTBEAT_TIME, TimeBucketUtils.INSTANCE.getSecondTimeBucket(instance.getHeartBeatTime()));
......
...@@ -16,18 +16,17 @@ ...@@ -16,18 +16,17 @@
* *
*/ */
package org.apache.skywalking.apm.collector.storage.h2.dao.register; package org.apache.skywalking.apm.collector.storage.h2.dao.register;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; 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.H2Client;
import org.apache.skywalking.apm.collector.client.h2.H2ClientException; 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.h2.base.dao.H2DAO;
import org.apache.skywalking.apm.collector.storage.table.register.ServiceName; 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.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
...@@ -54,13 +53,14 @@ public class ServiceNameRegisterH2DAO extends H2DAO implements IServiceNameRegis ...@@ -54,13 +53,14 @@ public class ServiceNameRegisterH2DAO extends H2DAO implements IServiceNameRegis
@Override @Override
public void save(ServiceName serviceName) { 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(); H2Client client = getClient();
Map<String, Object> source = new HashMap<>(); Map<String, Object> source = new HashMap<>();
source.put(ServiceNameTable.COLUMN_ID, serviceName.getId()); source.put(ServiceNameTable.COLUMN_ID, serviceName.getId());
source.put(ServiceNameTable.COLUMN_SERVICE_ID, serviceName.getServiceId()); source.put(ServiceNameTable.COLUMN_SERVICE_ID, serviceName.getServiceId());
source.put(ServiceNameTable.COLUMN_APPLICATION_ID, serviceName.getApplicationId()); source.put(ServiceNameTable.COLUMN_APPLICATION_ID, serviceName.getApplicationId());
source.put(ServiceNameTable.COLUMN_SERVICE_NAME, serviceName.getServiceName()); 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()); String sql = SqlBuilder.buildBatchInsertSql(ServiceNameTable.TABLE, source.keySet());
Object[] params = source.values().toArray(new Object[0]); Object[] params = source.values().toArray(new Object[0]);
......
...@@ -34,7 +34,7 @@ public class ApplicationAlarmH2UIDAO extends H2DAO implements IApplicationAlarmU ...@@ -34,7 +34,7 @@ public class ApplicationAlarmH2UIDAO extends H2DAO implements IApplicationAlarmU
} }
@Override @Override
public Alarm loadAlarmList(String keyword, long start, long end, int limit, int from) throws ParseException { public Alarm loadAlarmList(String keyword, long startTimeBucket, long endTimeBucket, int limit, int from) throws ParseException {
return null; return null;
} }
} }
...@@ -33,7 +33,7 @@ public class ApplicationAlarmListH2UIDAO extends H2DAO implements IApplicationAl ...@@ -33,7 +33,7 @@ public class ApplicationAlarmListH2UIDAO extends H2DAO implements IApplicationAl
super(client); super(client);
} }
@Override public List<Integer> getAlarmedApplicationNum(Step step, long start, long end) { @Override public List<AlarmTrend> getAlarmedApplicationNum(Step step, long startTimeBucket, long endTimeBucket) {
return null; return null;
} }
} }
...@@ -45,7 +45,7 @@ public class ApplicationComponentH2UIDAO extends H2DAO implements IApplicationCo ...@@ -45,7 +45,7 @@ public class ApplicationComponentH2UIDAO extends H2DAO implements IApplicationCo
super(client); super(client);
} }
@Override public List<ApplicationComponent> load(Step step, long startTime, long endTime) { @Override public List<ApplicationComponent> load(Step step, long startTimeBucket, long endTimeBucket) {
H2Client client = getClient(); H2Client client = getClient();
String tableName = TimePyramidTableNameBuilder.build(step, ApplicationComponentTable.TABLE); String tableName = TimePyramidTableNameBuilder.build(step, ApplicationComponentTable.TABLE);
...@@ -54,7 +54,7 @@ public class ApplicationComponentH2UIDAO extends H2DAO implements IApplicationCo ...@@ -54,7 +54,7 @@ public class ApplicationComponentH2UIDAO extends H2DAO implements IApplicationCo
String sql = SqlBuilder.buildSql(AGGREGATE_COMPONENT_SQL, ApplicationComponentTable.COLUMN_COMPONENT_ID, ApplicationComponentTable.COLUMN_APPLICATION_ID, String sql = SqlBuilder.buildSql(AGGREGATE_COMPONENT_SQL, ApplicationComponentTable.COLUMN_COMPONENT_ID, ApplicationComponentTable.COLUMN_APPLICATION_ID,
tableName, ApplicationComponentTable.COLUMN_TIME_BUCKET); tableName, ApplicationComponentTable.COLUMN_TIME_BUCKET);
Object[] params = new Object[] {startTime, endTime}; Object[] params = new Object[] {startTimeBucket, endTimeBucket};
try (ResultSet rs = client.executeQuery(sql, params)) { try (ResultSet rs = client.executeQuery(sql, params)) {
while (rs.next()) { while (rs.next()) {
int applicationId = rs.getInt(ApplicationComponentTable.COLUMN_APPLICATION_ID); int applicationId = rs.getInt(ApplicationComponentTable.COLUMN_APPLICATION_ID);
......
...@@ -45,7 +45,7 @@ public class ApplicationMappingH2UIDAO extends H2DAO implements IApplicationMapp ...@@ -45,7 +45,7 @@ public class ApplicationMappingH2UIDAO extends H2DAO implements IApplicationMapp
super(client); super(client);
} }
@Override public List<ApplicationMapping> load(Step step, long startTime, long endTime) { @Override public List<ApplicationMapping> load(Step step, long startTimeBucket, long endTimeBucket) {
String tableName = TimePyramidTableNameBuilder.build(step, ApplicationMappingTable.TABLE); String tableName = TimePyramidTableNameBuilder.build(step, ApplicationMappingTable.TABLE);
H2Client client = getClient(); H2Client client = getClient();
...@@ -53,7 +53,7 @@ public class ApplicationMappingH2UIDAO extends H2DAO implements IApplicationMapp ...@@ -53,7 +53,7 @@ public class ApplicationMappingH2UIDAO extends H2DAO implements IApplicationMapp
ApplicationMappingTable.COLUMN_MAPPING_APPLICATION_ID, tableName, ApplicationMappingTable.COLUMN_TIME_BUCKET); ApplicationMappingTable.COLUMN_MAPPING_APPLICATION_ID, tableName, ApplicationMappingTable.COLUMN_TIME_BUCKET);
List<ApplicationMapping> applicationMappings = new LinkedList<>(); List<ApplicationMapping> applicationMappings = new LinkedList<>();
Object[] params = new Object[] {startTime, endTime}; Object[] params = new Object[] {startTimeBucket, endTimeBucket};
try (ResultSet rs = client.executeQuery(sql, params)) { try (ResultSet rs = client.executeQuery(sql, params)) {
while (rs.next()) { while (rs.next()) {
int applicationId = rs.getInt(ApplicationMappingTable.COLUMN_APPLICATION_ID); int applicationId = rs.getInt(ApplicationMappingTable.COLUMN_APPLICATION_ID);
......
...@@ -40,8 +40,13 @@ public class ApplicationMetricH2UIDAO extends H2DAO implements IApplicationMetri ...@@ -40,8 +40,13 @@ public class ApplicationMetricH2UIDAO extends H2DAO implements IApplicationMetri
} }
@Override @Override
public List<ApplicationTPS> getTopNApplicationThroughput(Step step, long start, long end, long betweenSecond, public List<ApplicationTPS> getTopNApplicationThroughput(Step step, long startTimeBucket, long endTimeBucket,
int topN, MetricSource metricSource) { int betweenSecond, int topN, MetricSource metricSource) {
return null;
}
@Override public List<ApplicationMetric> getApplications(Step step, long startTimeBucket,
long endTimeBucket, MetricSource metricSource) {
return null; return null;
} }
} }
...@@ -18,13 +18,11 @@ ...@@ -18,13 +18,11 @@
package org.apache.skywalking.apm.collector.storage.h2.dao.ui; package org.apache.skywalking.apm.collector.storage.h2.dao.ui;
import com.google.gson.JsonArray;
import java.util.List; import java.util.List;
import org.apache.skywalking.apm.collector.client.h2.H2Client; 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.dao.ui.IApplicationReferenceMetricUIDAO;
import org.apache.skywalking.apm.collector.storage.h2.base.dao.H2DAO; 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.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.Step;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
...@@ -42,44 +40,8 @@ public class ApplicationReferenceMetricH2UIDAO extends H2DAO implements IApplica ...@@ -42,44 +40,8 @@ public class ApplicationReferenceMetricH2UIDAO extends H2DAO implements IApplica
super(client); super(client);
} }
@Override public List<Call> getFrontApplications(Step step, int applicationId, long startTime, long endTime, @Override public List<ApplicationReferenceMetric> getReferences(Step step,
MetricSource metricSource) { long startTimeBucket, long endTimeBucket, MetricSource metricSource, Integer... applicationIds) {
H2Client client = getClient();
JsonArray applicationReferenceMetricArray = new JsonArray();
// String sql = SqlBuilder.buildSql(APPLICATION_REFERENCE_SQL, ApplicationReferenceMetricTable.COLUMN_S1_LTE,
// ApplicationReferenceMetricTable.COLUMN_S3_LTE, ApplicationReferenceMetricTable.COLUMN_S5_LTE,
// ApplicationReferenceMetricTable.COLUMN_S5_GT, ApplicationReferenceMetricTable.COLUMN_SUMMARY,
// ApplicationReferenceMetricTable.COLUMN_ERROR, ApplicationReferenceMetricTable.TABLE, ApplicationReferenceMetricTable.COLUMN_TIME_BUCKET,
// ApplicationReferenceMetricTable.COLUMN_FRONT_APPLICATION_ID, ApplicationReferenceMetricTable.COLUMN_BEHIND_APPLICATION_ID);
//
// Object[] params = new Object[] {startTime, endTime};
// try (ResultSet rs = client.executeQuery(sql, params)) {
// while (rs.next()) {
// int frontApplicationId = rs.getInt(ApplicationReferenceMetricTable.COLUMN_FRONT_APPLICATION_ID);
// int behindApplicationId = rs.getInt(ApplicationReferenceMetricTable.COLUMN_BEHIND_APPLICATION_ID);
// JsonObject nodeRefResSumObj = new JsonObject();
// nodeRefResSumObj.addProperty(ColumnNameUtils.INSTANCE.rename(ApplicationReferenceMetricTable.COLUMN_FRONT_APPLICATION_ID), frontApplicationId);
// nodeRefResSumObj.addProperty(ColumnNameUtils.INSTANCE.rename(ApplicationReferenceMetricTable.COLUMN_BEHIND_APPLICATION_ID), behindApplicationId);
// nodeRefResSumObj.addProperty(ColumnNameUtils.INSTANCE.rename(ApplicationReferenceMetricTable.COLUMN_S1_LTE), rs.getDouble(ApplicationReferenceMetricTable.COLUMN_S1_LTE));
// nodeRefResSumObj.addProperty(ColumnNameUtils.INSTANCE.rename(ApplicationReferenceMetricTable.COLUMN_S3_LTE), rs.getDouble(ApplicationReferenceMetricTable.COLUMN_S3_LTE));
// nodeRefResSumObj.addProperty(ColumnNameUtils.INSTANCE.rename(ApplicationReferenceMetricTable.COLUMN_S5_LTE), rs.getDouble(ApplicationReferenceMetricTable.COLUMN_S5_LTE));
// nodeRefResSumObj.addProperty(ColumnNameUtils.INSTANCE.rename(ApplicationReferenceMetricTable.COLUMN_S5_GT), rs.getDouble(ApplicationReferenceMetricTable.COLUMN_S5_GT));
// nodeRefResSumObj.addProperty(ColumnNameUtils.INSTANCE.rename(ApplicationReferenceMetricTable.COLUMN_ERROR), rs.getDouble(ApplicationReferenceMetricTable.COLUMN_ERROR));
// nodeRefResSumObj.addProperty(ColumnNameUtils.INSTANCE.rename(ApplicationReferenceMetricTable.COLUMN_SUMMARY), rs.getDouble(ApplicationReferenceMetricTable.COLUMN_SUMMARY));
// nodeRefResSumArray.add(nodeRefResSumObj);
// }
// } catch (SQLException | H2ClientException e) {
// logger.error(e.getMessage(), e);
// }
return null;
}
@Override public List<Call> getBehindApplications(Step step, int applicationId, long startTime, long endTime,
MetricSource metricSource) {
return null;
}
@Override public List<Call> getApplications(Step step, long startTime, long endTime, MetricSource metricSource) {
return null; return null;
} }
} }
...@@ -32,7 +32,7 @@ public class InstanceAlarmH2UIDAO extends H2DAO implements IInstanceAlarmUIDAO { ...@@ -32,7 +32,7 @@ public class InstanceAlarmH2UIDAO extends H2DAO implements IInstanceAlarmUIDAO {
super(client); super(client);
} }
@Override public Alarm loadAlarmList(String keyword, long start, long end, int limit, int from) { @Override public Alarm loadAlarmList(String keyword, long startTimeBucket, long endTimeBucket, int limit, int from) {
return null; return null;
} }
} }
...@@ -88,12 +88,13 @@ public class InstanceH2UIDAO extends H2DAO implements IInstanceUIDAO { ...@@ -88,12 +88,13 @@ public class InstanceH2UIDAO extends H2DAO implements IInstanceUIDAO {
} }
@Override @Override
public List<Application> getApplications(long startTime, long endTime, int... applicationIds) { public List<Application> getApplications(long startSecondTimeBucket, long endSecondTimeBucket,
int... applicationIds) {
H2Client client = getClient(); H2Client client = getClient();
List<Application> applications = new LinkedList<>(); List<Application> applications = new LinkedList<>();
String sql = SqlBuilder.buildSql(GET_APPLICATIONS_SQL, InstanceTable.COLUMN_INSTANCE_ID, String sql = SqlBuilder.buildSql(GET_APPLICATIONS_SQL, InstanceTable.COLUMN_INSTANCE_ID,
InstanceTable.TABLE, InstanceTable.COLUMN_HEARTBEAT_TIME, InstanceTable.COLUMN_APPLICATION_ID); InstanceTable.TABLE, InstanceTable.COLUMN_HEARTBEAT_TIME, InstanceTable.COLUMN_APPLICATION_ID);
Object[] params = new Object[] {startTime}; Object[] params = new Object[] {startSecondTimeBucket};
try (ResultSet rs = client.executeQuery(sql, params)) { try (ResultSet rs = client.executeQuery(sql, params)) {
while (rs.next()) { while (rs.next()) {
Integer applicationId = rs.getInt(InstanceTable.COLUMN_APPLICATION_ID); Integer applicationId = rs.getInt(InstanceTable.COLUMN_APPLICATION_ID);
...@@ -131,19 +132,21 @@ public class InstanceH2UIDAO extends H2DAO implements IInstanceUIDAO { ...@@ -131,19 +132,21 @@ public class InstanceH2UIDAO extends H2DAO implements IInstanceUIDAO {
return null; return null;
} }
@Override public List<AppServerInfo> searchServer(String keyword, long start, long end) { @Override
logger.debug("get instances info, keyword: {}, start: {}, end: {}", keyword, start, end); public List<AppServerInfo> searchServer(String keyword, long startSecondTimeBucket, long endSecondTimeBucket) {
String dynamicSql = "select * from {0} where {1} like ? and {2} >= ? and {2} <= ? and {3} = ?"; logger.debug("get instances info, keyword: {}, start: {}, end: {}", keyword, startSecondTimeBucket, endSecondTimeBucket);
String sql = SqlBuilder.buildSql(dynamicSql, InstanceTable.TABLE, InstanceTable.COLUMN_OS_INFO, InstanceTable.COLUMN_HEARTBEAT_TIME, InstanceTable.COLUMN_IS_ADDRESS); String dynamicSql = "select * from {0} where {1} like ? and (({2} >= ? and {2} <= ?) or ({3} >= ? and {3} <= ?)) and {4} = ?";
Object[] params = new Object[] {keyword, start, end, BooleanUtils.FALSE}; String sql = SqlBuilder.buildSql(dynamicSql, InstanceTable.TABLE, InstanceTable.COLUMN_OS_INFO, InstanceTable.COLUMN_REGISTER_TIME, InstanceTable.COLUMN_HEARTBEAT_TIME, InstanceTable.COLUMN_IS_ADDRESS);
Object[] params = new Object[] {keyword, startSecondTimeBucket, endSecondTimeBucket, startSecondTimeBucket, endSecondTimeBucket, BooleanUtils.FALSE};
return buildAppServerInfo(sql, params); return buildAppServerInfo(sql, params);
} }
@Override public List<AppServerInfo> getAllServer(int applicationId, long start, long end) { @Override
logger.debug("get instances info, applicationId: {}, start: {}, end: {}", applicationId, start, end); public List<AppServerInfo> getAllServer(int applicationId, long startSecondTimeBucket, long endSecondTimeBucket) {
String dynamicSql = "select * from {0} where {1} = ? and {2} >= ? and {2} <= ? and {3} = ?"; logger.debug("get instances info, applicationId: {}, startSecondTimeBucket: {}, endSecondTimeBucket: {}", applicationId, startSecondTimeBucket, endSecondTimeBucket);
String sql = SqlBuilder.buildSql(dynamicSql, InstanceTable.TABLE, InstanceTable.COLUMN_APPLICATION_ID, InstanceTable.COLUMN_HEARTBEAT_TIME, InstanceTable.COLUMN_IS_ADDRESS); String dynamicSql = "select * from {0} where {1} = ? and (({2} >= ? and {2} <= ?) or ({3} >= ? and {3} <= ?)) and {4} = ?";
Object[] params = new Object[] {applicationId, start, end, BooleanUtils.FALSE}; 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, endSecondTimeBucket, BooleanUtils.FALSE};
return buildAppServerInfo(sql, params); return buildAppServerInfo(sql, params);
} }
...@@ -163,4 +166,14 @@ public class InstanceH2UIDAO extends H2DAO implements IInstanceUIDAO { ...@@ -163,4 +166,14 @@ public class InstanceH2UIDAO extends H2DAO implements IInstanceUIDAO {
} }
return appServerInfos; return appServerInfos;
} }
//TODO
@Override public long getEarliestRegisterTime(int applicationId) {
return 0;
}
//TODO
@Override public long getLatestHeartBeatTime(int applicationId) {
return 0;
}
} }
...@@ -49,8 +49,8 @@ public class InstanceMetricH2UIDAO extends H2DAO implements IInstanceMetricUIDAO ...@@ -49,8 +49,8 @@ public class InstanceMetricH2UIDAO extends H2DAO implements IInstanceMetricUIDAO
super(client); super(client);
} }
@Override public List<AppServerInfo> getServerThroughput(int applicationId, Step step, long start, long end, @Override public List<AppServerInfo> getServerThroughput(int applicationId, Step step, long startTimeBucket, long endTimeBucket,
long secondBetween, int topN, MetricSource metricSource) { int secondBetween, int topN, MetricSource metricSource) {
return null; return null;
} }
......
...@@ -47,16 +47,16 @@ public class SegmentDurationH2UIDAO extends H2DAO implements ISegmentDurationUID ...@@ -47,16 +47,16 @@ public class SegmentDurationH2UIDAO extends H2DAO implements ISegmentDurationUID
} }
@Override @Override
public TraceBrief loadTop(long startTime, long endTime, long minDuration, long maxDuration, String operationName, public TraceBrief loadTop(long startSecondTimeBucket, long endSecondTimeBucket, long minDuration, long maxDuration,
int applicationId, String traceId, int limit, int from) { String operationName, int applicationId, int limit, int from, String... segmentIds) {
H2Client client = getClient(); H2Client client = getClient();
String sql = "select * from {0} where {1} >= ? and {1} <= ?"; String sql = "select * from {0} where {1} >= ? and {1} <= ?";
List<Object> params = new ArrayList<>(); List<Object> params = new ArrayList<>();
List<Object> columns = new ArrayList<>(); List<Object> columns = new ArrayList<>();
columns.add(SegmentDurationTable.TABLE); columns.add(SegmentDurationTable.TABLE);
columns.add(SegmentDurationTable.COLUMN_TIME_BUCKET); columns.add(SegmentDurationTable.COLUMN_TIME_BUCKET);
params.add(startTime); params.add(startSecondTimeBucket);
params.add(endTime); params.add(endSecondTimeBucket);
int paramIndex = 1; int paramIndex = 1;
if (minDuration != -1 || maxDuration != -1) { if (minDuration != -1 || maxDuration != -1) {
if (minDuration != -1) { if (minDuration != -1) {
...@@ -78,10 +78,10 @@ public class SegmentDurationH2UIDAO extends H2DAO implements ISegmentDurationUID ...@@ -78,10 +78,10 @@ public class SegmentDurationH2UIDAO extends H2DAO implements ISegmentDurationUID
params.add(operationName); params.add(operationName);
columns.add(SegmentDurationTable.COLUMN_SERVICE_NAME); columns.add(SegmentDurationTable.COLUMN_SERVICE_NAME);
} }
if (StringUtils.isNotEmpty(traceId)) { if (StringUtils.isNotEmpty(segmentIds)) {
paramIndex++; paramIndex++;
sql = sql + " and {" + paramIndex + "} = ?"; sql = sql + " and {" + paramIndex + "} = ?";
params.add(traceId); params.add(segmentIds);
columns.add(SegmentDurationTable.COLUMN_TRACE_ID); columns.add(SegmentDurationTable.COLUMN_TRACE_ID);
} }
if (applicationId != 0) { if (applicationId != 0) {
...@@ -101,9 +101,9 @@ public class SegmentDurationH2UIDAO extends H2DAO implements ISegmentDurationUID ...@@ -101,9 +101,9 @@ public class SegmentDurationH2UIDAO extends H2DAO implements ISegmentDurationUID
try (ResultSet rs = client.executeQuery(sql, p)) { try (ResultSet rs = client.executeQuery(sql, p)) {
while (rs.next()) { while (rs.next()) {
BasicTrace basicTrace = new BasicTrace(); BasicTrace basicTrace = new BasicTrace();
basicTrace.setSegmentId(rs.getString(SegmentDurationTable.COLUMN_SEGMENT_ID));
basicTrace.setDuration(rs.getInt(SegmentDurationTable.COLUMN_DURATION)); basicTrace.setDuration(rs.getInt(SegmentDurationTable.COLUMN_DURATION));
basicTrace.setStart(rs.getLong(SegmentDurationTable.COLUMN_START_TIME)); basicTrace.setStart(rs.getLong(SegmentDurationTable.COLUMN_START_TIME));
basicTrace.setTraceId(rs.getString(SegmentDurationTable.COLUMN_TRACE_ID));
basicTrace.setOperationName(rs.getString(SegmentDurationTable.COLUMN_SERVICE_NAME)); basicTrace.setOperationName(rs.getString(SegmentDurationTable.COLUMN_SERVICE_NAME));
basicTrace.setError(BooleanUtils.valueToBoolean(rs.getInt(SegmentDurationTable.COLUMN_IS_ERROR))); basicTrace.setError(BooleanUtils.valueToBoolean(rs.getInt(SegmentDurationTable.COLUMN_IS_ERROR)));
traceBrief.getTraces().add(basicTrace); traceBrief.getTraces().add(basicTrace);
......
...@@ -32,7 +32,7 @@ public class ServiceAlarmH2UIDAO extends H2DAO implements IServiceAlarmUIDAO { ...@@ -32,7 +32,7 @@ public class ServiceAlarmH2UIDAO extends H2DAO implements IServiceAlarmUIDAO {
super(client); super(client);
} }
@Override public Alarm loadAlarmList(String keyword, long start, long end, int limit, int from) { @Override public Alarm loadAlarmList(String keyword, long startTimeBucket, long endTimeBucket, int limit, int from) {
return null; return null;
} }
} }
...@@ -116,7 +116,7 @@ public class ServiceMetricH2UIDAO extends H2DAO implements IServiceMetricUIDAO { ...@@ -116,7 +116,7 @@ public class ServiceMetricH2UIDAO extends H2DAO implements IServiceMetricUIDAO {
return null; return null;
} }
@Override public List<ServiceMetric> getSlowService(int applicationId, Step step, long start, long end, Integer top, @Override public List<ServiceMetric> getSlowService(int applicationId, Step step, long startTimeBucket, long endTimeBucket, Integer topN,
MetricSource metricSource) { MetricSource metricSource) {
return null; return null;
} }
......
...@@ -29,6 +29,7 @@ import org.apache.skywalking.apm.collector.storage.dao.ui.IServiceNameServiceUID ...@@ -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.h2.base.dao.H2DAO;
import org.apache.skywalking.apm.collector.storage.table.register.ServiceNameTable; 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.collector.storage.ui.service.ServiceInfo;
import org.apache.skywalking.apm.network.proto.SpanType;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
...@@ -44,9 +45,9 @@ public class ServiceNameServiceH2UIDAO extends H2DAO implements IServiceNameServ ...@@ -44,9 +45,9 @@ public class ServiceNameServiceH2UIDAO extends H2DAO implements IServiceNameServ
} }
@Override public int getCount() { @Override public int getCount() {
String dynamicSql = "select count({0}) as cnt from {1}"; String dynamicSql = "select count({0}) as cnt from {1} where {2} = ?";
String sql = SqlBuilder.buildSql(dynamicSql, ServiceNameTable.COLUMN_SERVICE_ID, ServiceNameTable.TABLE); String sql = SqlBuilder.buildSql(dynamicSql, ServiceNameTable.COLUMN_SERVICE_ID, ServiceNameTable.TABLE, ServiceNameTable.COLUMN_SRC_SPAN_TYPE);
Object[] params = new Object[] {}; Object[] params = new Object[] {SpanType.Entry_VALUE};
try (ResultSet rs = getClient().executeQuery(sql, params)) { try (ResultSet rs = getClient().executeQuery(sql, params)) {
if (rs.next()) { if (rs.next()) {
...@@ -59,9 +60,9 @@ public class ServiceNameServiceH2UIDAO extends H2DAO implements IServiceNameServ ...@@ -59,9 +60,9 @@ public class ServiceNameServiceH2UIDAO extends H2DAO implements IServiceNameServ
} }
@Override public List<ServiceInfo> searchService(String keyword, int topN) { @Override public List<ServiceInfo> searchService(String keyword, int topN) {
String dynamicSql = "select {0},{1} from {2} where {3} like ? limit ?"; String dynamicSql = "select {0},{1} from {2} where {3} like ? and {4} = ? limit ?";
String sql = SqlBuilder.buildSql(dynamicSql, ServiceNameTable.COLUMN_SERVICE_ID, ServiceNameTable.COLUMN_SERVICE_NAME, ServiceNameTable.TABLE, ServiceNameTable.COLUMN_SERVICE_NAME); String sql = SqlBuilder.buildSql(dynamicSql, ServiceNameTable.COLUMN_SERVICE_ID, ServiceNameTable.COLUMN_SERVICE_NAME, ServiceNameTable.TABLE, ServiceNameTable.COLUMN_SERVICE_NAME, ServiceNameTable.COLUMN_SRC_SPAN_TYPE);
Object[] params = new Object[] {keyword, topN}; Object[] params = new Object[] {keyword, SpanType.Entry_VALUE, topN};
List<ServiceInfo> serviceInfos = new LinkedList<>(); List<ServiceInfo> serviceInfos = new LinkedList<>();
try (ResultSet rs = getClient().executeQuery(sql, params)) { try (ResultSet rs = getClient().executeQuery(sql, params)) {
......
...@@ -23,7 +23,6 @@ import org.apache.skywalking.apm.collector.client.h2.H2Client; ...@@ -23,7 +23,6 @@ import org.apache.skywalking.apm.collector.client.h2.H2Client;
import org.apache.skywalking.apm.collector.storage.dao.ui.IServiceReferenceMetricUIDAO; import org.apache.skywalking.apm.collector.storage.dao.ui.IServiceReferenceMetricUIDAO;
import org.apache.skywalking.apm.collector.storage.h2.base.dao.H2DAO; 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.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.Step;
/** /**
...@@ -35,23 +34,15 @@ public class ServiceReferenceH2MetricUIDAO extends H2DAO implements IServiceRefe ...@@ -35,23 +34,15 @@ public class ServiceReferenceH2MetricUIDAO extends H2DAO implements IServiceRefe
super(client); super(client);
} }
@Override public List<Call> getFrontServices(Step step, long startTime, long endTime, MetricSource metricSource, @Override public List<ServiceReferenceMetric> getFrontServices(Step step, long startTimeBucket, long endTimeBucket,
MetricSource metricSource,
int behindServiceId) { int behindServiceId) {
return null; return null;
} }
@Override public List<Call> getBehindServices(Step step, long startTime, long endTime, MetricSource metricSource, @Override public List<ServiceReferenceMetric> getBehindServices(Step step, long startTimeBucket, long endTimeBucket,
MetricSource metricSource,
int frontServiceId) { int frontServiceId) {
return null; return null;
} }
@Override public List<Call> getFrontServices(Step step, long startTime, long endTime, MetricSource metricSource,
List<Integer> behindServiceIds) {
return null;
}
@Override public List<Call> getBehindServices(Step step, long startTime, long endTime, MetricSource metricSource,
List<Integer> frontServiceIds) {
return null;
}
} }
...@@ -34,6 +34,7 @@ public class InstanceH2TableDefine extends H2TableDefine { ...@@ -34,6 +34,7 @@ public class InstanceH2TableDefine extends H2TableDefine {
@Override public void initialize() { @Override public void initialize() {
addColumn(new H2ColumnDefine(InstanceTable.COLUMN_ID, H2ColumnDefine.Type.Varchar.name())); addColumn(new H2ColumnDefine(InstanceTable.COLUMN_ID, H2ColumnDefine.Type.Varchar.name()));
addColumn(new H2ColumnDefine(InstanceTable.COLUMN_APPLICATION_ID, H2ColumnDefine.Type.Int.name())); addColumn(new H2ColumnDefine(InstanceTable.COLUMN_APPLICATION_ID, H2ColumnDefine.Type.Int.name()));
addColumn(new H2ColumnDefine(InstanceTable.COLUMN_APPLICATION_CODE, H2ColumnDefine.Type.Varchar.name()));
addColumn(new H2ColumnDefine(InstanceTable.COLUMN_AGENT_UUID, H2ColumnDefine.Type.Varchar.name())); addColumn(new H2ColumnDefine(InstanceTable.COLUMN_AGENT_UUID, H2ColumnDefine.Type.Varchar.name()));
addColumn(new H2ColumnDefine(InstanceTable.COLUMN_REGISTER_TIME, H2ColumnDefine.Type.Bigint.name())); addColumn(new H2ColumnDefine(InstanceTable.COLUMN_REGISTER_TIME, H2ColumnDefine.Type.Bigint.name()));
addColumn(new H2ColumnDefine(InstanceTable.COLUMN_INSTANCE_ID, H2ColumnDefine.Type.Int.name())); addColumn(new H2ColumnDefine(InstanceTable.COLUMN_INSTANCE_ID, H2ColumnDefine.Type.Int.name()));
......
...@@ -16,7 +16,6 @@ ...@@ -16,7 +16,6 @@
* *
*/ */
package org.apache.skywalking.apm.collector.storage.h2.define.register; package org.apache.skywalking.apm.collector.storage.h2.define.register;
import org.apache.skywalking.apm.collector.storage.h2.base.define.H2ColumnDefine; import org.apache.skywalking.apm.collector.storage.h2.base.define.H2ColumnDefine;
...@@ -37,5 +36,6 @@ public class ServiceNameH2TableDefine extends H2TableDefine { ...@@ -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_APPLICATION_ID, H2ColumnDefine.Type.Int.name()));
addColumn(new H2ColumnDefine(ServiceNameTable.COLUMN_SERVICE_NAME, H2ColumnDefine.Type.Varchar.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_SERVICE_ID, H2ColumnDefine.Type.Int.name()));
addColumn(new H2ColumnDefine(ServiceNameTable.COLUMN_SRC_SPAN_TYPE, H2ColumnDefine.Type.Int.name()));
} }
} }
...@@ -28,6 +28,7 @@ import org.apache.skywalking.apm.collector.storage.ui.common.Pagination; ...@@ -28,6 +28,7 @@ import org.apache.skywalking.apm.collector.storage.ui.common.Pagination;
import org.apache.skywalking.apm.collector.ui.graphql.Query; import org.apache.skywalking.apm.collector.ui.graphql.Query;
import org.apache.skywalking.apm.collector.ui.service.AlarmService; import org.apache.skywalking.apm.collector.ui.service.AlarmService;
import org.apache.skywalking.apm.collector.ui.utils.DurationUtils; import org.apache.skywalking.apm.collector.ui.utils.DurationUtils;
import org.apache.skywalking.apm.collector.ui.utils.PaginationUtils;
/** /**
* @author peng-yongsheng * @author peng-yongsheng
...@@ -50,19 +51,18 @@ public class AlarmQuery implements Query { ...@@ -50,19 +51,18 @@ public class AlarmQuery implements Query {
public Alarm loadAlarmList(String keyword, AlarmType alarmType, Duration duration, public Alarm loadAlarmList(String keyword, AlarmType alarmType, Duration duration,
Pagination paging) throws ParseException { Pagination paging) throws ParseException {
long start = DurationUtils.INSTANCE.durationToSecondTimeBucket(duration.getStep(), duration.getStart()) / 100; long startTimeBucket = DurationUtils.INSTANCE.durationToSecondTimeBucket(duration.getStep(), duration.getStart()) / 100;
long end = DurationUtils.INSTANCE.durationToSecondTimeBucket(duration.getStep(), duration.getEnd()) / 100; long endTimeBucket = DurationUtils.INSTANCE.durationToSecondTimeBucket(duration.getStep(), duration.getEnd()) / 100;
int limit = paging.getPageSize(); PaginationUtils.Page page = PaginationUtils.INSTANCE.exchange(paging);
int from = paging.getPageSize() * paging.getPageNum();
switch (alarmType) { switch (alarmType) {
case APPLICATION: case APPLICATION:
return getAlarmService().loadApplicationAlarmList(keyword, start, end, limit, from); return getAlarmService().loadApplicationAlarmList(keyword, startTimeBucket, endTimeBucket, page.getLimit(), page.getFrom());
case SERVER: case SERVER:
return getAlarmService().loadInstanceAlarmList(keyword, start, end, limit, from); return getAlarmService().loadInstanceAlarmList(keyword, startTimeBucket, endTimeBucket, page.getLimit(), page.getFrom());
case SERVICE: case SERVICE:
return getAlarmService().loadServiceAlarmList(keyword, start, end, limit, from); return getAlarmService().loadServiceAlarmList(keyword, startTimeBucket, endTimeBucket, page.getLimit(), page.getFrom());
default: default:
return new Alarm(); return new Alarm();
} }
......
...@@ -69,32 +69,41 @@ public class ApplicationQuery implements Query { ...@@ -69,32 +69,41 @@ public class ApplicationQuery implements Query {
} }
public List<Application> getAllApplication(Duration duration) throws ParseException { public List<Application> getAllApplication(Duration duration) throws ParseException {
long start = DurationUtils.INSTANCE.durationToSecondTimeBucket(duration.getStep(), duration.getStart()); long startSecondTimeBucket = DurationUtils.INSTANCE.durationToSecondTimeBucket(duration.getStep(), duration.getStart());
long end = DurationUtils.INSTANCE.durationToSecondTimeBucket(duration.getStep(), duration.getEnd()); long endSecondTimeBucket = DurationUtils.INSTANCE.durationToSecondTimeBucket(duration.getStep(), duration.getEnd());
return getApplicationService().getApplications(start, end); return getApplicationService().getApplications(startSecondTimeBucket, endSecondTimeBucket);
} }
public Topology getApplicationTopology(int applicationId, Duration duration) throws ParseException { public Topology getApplicationTopology(int applicationId, Duration duration) throws ParseException {
long start = DurationUtils.INSTANCE.exchangeToTimeBucket(duration.getStart()); long startTimeBucket = DurationUtils.INSTANCE.exchangeToTimeBucket(duration.getStart());
long end = DurationUtils.INSTANCE.exchangeToTimeBucket(duration.getEnd()); long endTimeBucket = DurationUtils.INSTANCE.exchangeToTimeBucket(duration.getEnd());
return getApplicationTopologyService().getApplicationTopology(duration.getStep(), applicationId, start, end); long startSecondTimeBucket = DurationUtils.INSTANCE.durationToSecondTimeBucket(duration.getStep(), duration.getStart());
long endSecondTimeBucket = DurationUtils.INSTANCE.durationToSecondTimeBucket(duration.getStep(), duration.getEnd());
return getApplicationTopologyService().getApplicationTopology(duration.getStep(), applicationId, startTimeBucket, endTimeBucket, startSecondTimeBucket, endSecondTimeBucket);
} }
public List<ServiceMetric> getSlowService(int applicationId, Duration duration, public List<ServiceMetric> getSlowService(int applicationId, Duration duration,
Integer topN) throws ParseException { Integer topN) throws ParseException {
long start = DurationUtils.INSTANCE.exchangeToTimeBucket(duration.getStart()); long startTimeBucket = DurationUtils.INSTANCE.exchangeToTimeBucket(duration.getStart());
long end = DurationUtils.INSTANCE.exchangeToTimeBucket(duration.getEnd()); 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 getApplicationService().getSlowService(applicationId, duration.getStep(), start, end, topN); return getApplicationService().getSlowService(applicationId, duration.getStep(), startTimeBucket, endTimeBucket, startSecondTimeBucket, endSecondTimeBucket, topN);
} }
public List<AppServerInfo> getServerThroughput(int applicationId, Duration duration, public List<AppServerInfo> getServerThroughput(int applicationId, Duration duration,
Integer topN) throws ParseException { Integer topN) throws ParseException {
long start = DurationUtils.INSTANCE.exchangeToTimeBucket(duration.getStart()); long startTimeBucket = DurationUtils.INSTANCE.exchangeToTimeBucket(duration.getStart());
long end = DurationUtils.INSTANCE.exchangeToTimeBucket(duration.getEnd()); 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 getServerService().getServerThroughput(applicationId, duration.getStep(), start, end, topN); return getServerService().getServerThroughput(applicationId, duration.getStep(), startTimeBucket, endTimeBucket, startSecondTimeBucket, endSecondTimeBucket, topN);
} }
} }
...@@ -89,18 +89,21 @@ public class OverViewLayerQuery implements Query { ...@@ -89,18 +89,21 @@ public class OverViewLayerQuery implements Query {
} }
public Topology getClusterTopology(Duration duration) throws ParseException { public Topology getClusterTopology(Duration duration) throws ParseException {
long start = DurationUtils.INSTANCE.durationToSecondTimeBucket(duration.getStep(), duration.getStart()); long startTimeBucket = DurationUtils.INSTANCE.exchangeToTimeBucket(duration.getStart());
long end = DurationUtils.INSTANCE.durationToSecondTimeBucket(duration.getStep(), duration.getEnd()); 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 { public ClusterBrief getClusterBrief(Duration duration) throws ParseException {
long start = DurationUtils.INSTANCE.durationToSecondTimeBucket(duration.getStep(), duration.getStart()); long startSecondTimeBucket = DurationUtils.INSTANCE.durationToSecondTimeBucket(duration.getStep(), duration.getStart());
long end = DurationUtils.INSTANCE.durationToSecondTimeBucket(duration.getStep(), duration.getEnd()); long endSecondTimeBucket = DurationUtils.INSTANCE.durationToSecondTimeBucket(duration.getStep(), duration.getEnd());
ClusterBrief clusterBrief = new ClusterBrief(); ClusterBrief clusterBrief = new ClusterBrief();
clusterBrief.setNumOfApplication(getApplicationService().getApplications(start, end).size()); clusterBrief.setNumOfApplication(getApplicationService().getApplications(startSecondTimeBucket, endSecondTimeBucket).size());
clusterBrief.setNumOfDatabase(getNetworkAddressService().getNumOfDatabase()); clusterBrief.setNumOfDatabase(getNetworkAddressService().getNumOfDatabase());
clusterBrief.setNumOfCache(getNetworkAddressService().getNumOfCache()); clusterBrief.setNumOfCache(getNetworkAddressService().getNumOfCache());
clusterBrief.setNumOfMQ(getNetworkAddressService().getNumOfMQ()); clusterBrief.setNumOfMQ(getNetworkAddressService().getNumOfMQ());
...@@ -112,31 +115,34 @@ public class OverViewLayerQuery implements Query { ...@@ -112,31 +115,34 @@ public class OverViewLayerQuery implements Query {
long startTimeBucket = DurationUtils.INSTANCE.exchangeToTimeBucket(duration.getStart()); long startTimeBucket = DurationUtils.INSTANCE.exchangeToTimeBucket(duration.getStart());
long endTimeBucket = DurationUtils.INSTANCE.exchangeToTimeBucket(duration.getEnd()); long endTimeBucket = DurationUtils.INSTANCE.exchangeToTimeBucket(duration.getEnd());
long start = DurationUtils.INSTANCE.durationToSecondTimeBucket(duration.getStep(), duration.getStart()); long startSecondTimeBucket = DurationUtils.INSTANCE.durationToSecondTimeBucket(duration.getStep(), duration.getStart());
long end = DurationUtils.INSTANCE.durationToSecondTimeBucket(duration.getStep(), duration.getEnd()); long endSecondTimeBucket = DurationUtils.INSTANCE.durationToSecondTimeBucket(duration.getStep(), duration.getEnd());
return getAlarmService().getApplicationAlarmTrend(duration.getStep(), startTimeBucket, endTimeBucket, start, end); return getAlarmService().getApplicationAlarmTrend(duration.getStep(), startTimeBucket, endTimeBucket, startSecondTimeBucket, endSecondTimeBucket);
} }
public ConjecturalAppBrief getConjecturalApps(Duration duration) throws ParseException { public ConjecturalAppBrief getConjecturalApps(Duration duration) throws ParseException {
long start = DurationUtils.INSTANCE.durationToSecondTimeBucket(duration.getStep(), duration.getStart()); long startSecondTimeBucket = DurationUtils.INSTANCE.durationToSecondTimeBucket(duration.getStep(), duration.getStart());
long end = DurationUtils.INSTANCE.durationToSecondTimeBucket(duration.getStep(), duration.getEnd()); long endSecondTimeBucket = DurationUtils.INSTANCE.durationToSecondTimeBucket(duration.getStep(), duration.getEnd());
return getApplicationService().getConjecturalApps(duration.getStep(), start, end); return getApplicationService().getConjecturalApps(duration.getStep(), startSecondTimeBucket, endSecondTimeBucket);
} }
public List<ServiceMetric> getTopNSlowService(Duration duration, int topN) throws ParseException { public List<ServiceMetric> getTopNSlowService(Duration duration, int topN) throws ParseException {
long start = DurationUtils.INSTANCE.exchangeToTimeBucket(duration.getStart()); long startTimeBucket = DurationUtils.INSTANCE.exchangeToTimeBucket(duration.getStart());
long end = DurationUtils.INSTANCE.exchangeToTimeBucket(duration.getEnd()); 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<ApplicationTPS> getTopNApplicationThroughput(Duration duration, public List<ApplicationTPS> getTopNApplicationThroughput(Duration duration,
int topN) throws ParseException { int topN) throws ParseException {
long start = DurationUtils.INSTANCE.exchangeToTimeBucket(duration.getStart()); long startTimeBucket = DurationUtils.INSTANCE.exchangeToTimeBucket(duration.getStart());
long end = DurationUtils.INSTANCE.exchangeToTimeBucket(duration.getEnd()); long endTimeBucket = DurationUtils.INSTANCE.exchangeToTimeBucket(duration.getEnd());
return getApplicationService().getTopNApplicationThroughput(duration.getStep(), start, end, topN); return getApplicationService().getTopNApplicationThroughput(duration.getStep(), startTimeBucket, endTimeBucket, topN);
} }
} }
...@@ -53,44 +53,44 @@ public class ServerQuery implements Query { ...@@ -53,44 +53,44 @@ public class ServerQuery implements Query {
} }
public List<AppServerInfo> searchServer(String keyword, Duration duration) throws ParseException { public List<AppServerInfo> searchServer(String keyword, Duration duration) throws ParseException {
long start = DurationUtils.INSTANCE.durationToSecondTimeBucket(duration.getStep(), duration.getStart()); long startSecondTimeBucket = DurationUtils.INSTANCE.durationToSecondTimeBucket(duration.getStep(), duration.getStart());
long end = DurationUtils.INSTANCE.durationToSecondTimeBucket(duration.getStep(), duration.getEnd()); long endSecondTimeBucket = DurationUtils.INSTANCE.durationToSecondTimeBucket(duration.getStep(), duration.getEnd());
return getServerService().searchServer(keyword, start, end); return getServerService().searchServer(keyword, startSecondTimeBucket, endSecondTimeBucket);
} }
public List<AppServerInfo> getAllServer(int applicationId, Duration duration) throws ParseException { public List<AppServerInfo> getAllServer(int applicationId, Duration duration) throws ParseException {
long start = DurationUtils.INSTANCE.durationToSecondTimeBucket(duration.getStep(), duration.getStart()); long startSecondTimeBucket = DurationUtils.INSTANCE.durationToSecondTimeBucket(duration.getStep(), duration.getStart());
long end = DurationUtils.INSTANCE.durationToSecondTimeBucket(duration.getStep(), duration.getEnd()); long endSecondTimeBucket = DurationUtils.INSTANCE.durationToSecondTimeBucket(duration.getStep(), duration.getEnd());
return getServerService().getAllServer(applicationId, start, end); return getServerService().getAllServer(applicationId, startSecondTimeBucket, endSecondTimeBucket);
} }
public ResponseTimeTrend getServerResponseTimeTrend(int serverId, Duration duration) throws ParseException { public ResponseTimeTrend getServerResponseTimeTrend(int serverId, Duration duration) throws ParseException {
long start = DurationUtils.INSTANCE.exchangeToTimeBucket(duration.getStart()); long startTimeBucket = DurationUtils.INSTANCE.exchangeToTimeBucket(duration.getStart());
long end = DurationUtils.INSTANCE.exchangeToTimeBucket(duration.getEnd()); long endTimeBucket = DurationUtils.INSTANCE.exchangeToTimeBucket(duration.getEnd());
return getServerService().getServerResponseTimeTrend(serverId, duration.getStep(), start, end); return getServerService().getServerResponseTimeTrend(serverId, duration.getStep(), startTimeBucket, endTimeBucket);
} }
public ThroughputTrend getServerTPSTrend(int serverId, Duration duration) throws ParseException { public ThroughputTrend getServerTPSTrend(int serverId, Duration duration) throws ParseException {
long start = DurationUtils.INSTANCE.exchangeToTimeBucket(duration.getStart()); long startTimeBucket = DurationUtils.INSTANCE.exchangeToTimeBucket(duration.getStart());
long end = DurationUtils.INSTANCE.exchangeToTimeBucket(duration.getEnd()); long endTimeBucket = DurationUtils.INSTANCE.exchangeToTimeBucket(duration.getEnd());
return getServerService().getServerTPSTrend(serverId, duration.getStep(), start, end); return getServerService().getServerTPSTrend(serverId, duration.getStep(), startTimeBucket, endTimeBucket);
} }
public CPUTrend getCPUTrend(int serverId, Duration duration) throws ParseException { public CPUTrend getCPUTrend(int serverId, Duration duration) throws ParseException {
long start = DurationUtils.INSTANCE.exchangeToTimeBucket(duration.getStart()); long startTimeBucket = DurationUtils.INSTANCE.exchangeToTimeBucket(duration.getStart());
long end = DurationUtils.INSTANCE.exchangeToTimeBucket(duration.getEnd()); long endTimeBucket = DurationUtils.INSTANCE.exchangeToTimeBucket(duration.getEnd());
return getServerService().getCPUTrend(serverId, duration.getStep(), start, end); return getServerService().getCPUTrend(serverId, duration.getStep(), startTimeBucket, endTimeBucket);
} }
public GCTrend getGCTrend(int serverId, Duration duration) throws ParseException { public GCTrend getGCTrend(int serverId, Duration duration) throws ParseException {
long start = DurationUtils.INSTANCE.exchangeToTimeBucket(duration.getStart()); long startTimeBucket = DurationUtils.INSTANCE.exchangeToTimeBucket(duration.getStart());
long end = DurationUtils.INSTANCE.exchangeToTimeBucket(duration.getEnd()); long endTimeBucket = DurationUtils.INSTANCE.exchangeToTimeBucket(duration.getEnd());
return getServerService().getGCTrend(serverId, duration.getStep(), start, end); return getServerService().getGCTrend(serverId, duration.getStep(), startTimeBucket, endTimeBucket);
} }
public MemoryTrend getMemoryTrend(int serverId, Duration duration) throws ParseException { public MemoryTrend getMemoryTrend(int serverId, Duration duration) throws ParseException {
long start = DurationUtils.INSTANCE.exchangeToTimeBucket(duration.getStart()); long startTimeBucket = DurationUtils.INSTANCE.exchangeToTimeBucket(duration.getStart());
long end = DurationUtils.INSTANCE.exchangeToTimeBucket(duration.getEnd()); long endTimeBucket = DurationUtils.INSTANCE.exchangeToTimeBucket(duration.getEnd());
return getServerService().getMemoryTrend(serverId, duration.getStep(), start, end); return getServerService().getMemoryTrend(serverId, duration.getStep(), startTimeBucket, endTimeBucket);
} }
} }
...@@ -65,27 +65,34 @@ public class ServiceQuery implements Query { ...@@ -65,27 +65,34 @@ public class ServiceQuery implements Query {
} }
public ResponseTimeTrend getServiceResponseTimeTrend(int serviceId, Duration duration) throws ParseException { public ResponseTimeTrend getServiceResponseTimeTrend(int serviceId, Duration duration) throws ParseException {
long start = DurationUtils.INSTANCE.exchangeToTimeBucket(duration.getStart()); long startTimeBucket = DurationUtils.INSTANCE.exchangeToTimeBucket(duration.getStart());
long end = DurationUtils.INSTANCE.exchangeToTimeBucket(duration.getEnd()); long endTimeBucket = DurationUtils.INSTANCE.exchangeToTimeBucket(duration.getEnd());
return getServiceNameService().getServiceResponseTimeTrend(serviceId, duration.getStep(), start, end); return getServiceNameService().getServiceResponseTimeTrend(serviceId, duration.getStep(), startTimeBucket, endTimeBucket);
} }
public ThroughputTrend getServiceTPSTrend(int serviceId, Duration duration) throws ParseException { public ThroughputTrend getServiceTPSTrend(int serviceId, Duration duration) throws ParseException {
long start = DurationUtils.INSTANCE.exchangeToTimeBucket(duration.getStart()); long startTimeBucket = DurationUtils.INSTANCE.exchangeToTimeBucket(duration.getStart());
long end = DurationUtils.INSTANCE.exchangeToTimeBucket(duration.getEnd()); long endTimeBucket = DurationUtils.INSTANCE.exchangeToTimeBucket(duration.getEnd());
return getServiceNameService().getServiceTPSTrend(serviceId, duration.getStep(), start, end); long startSecondTimeBucket = DurationUtils.INSTANCE.durationToSecondTimeBucket(duration.getStep(), duration.getStart());
long endSecondTimeBucket = DurationUtils.INSTANCE.durationToSecondTimeBucket(duration.getStep(), duration.getEnd());
return getServiceNameService().getServiceTPSTrend(serviceId, duration.getStep(), startTimeBucket, endTimeBucket, startSecondTimeBucket, endSecondTimeBucket);
} }
public SLATrend getServiceSLATrend(int serviceId, Duration duration) throws ParseException { public SLATrend getServiceSLATrend(int serviceId, Duration duration) throws ParseException {
long start = DurationUtils.INSTANCE.exchangeToTimeBucket(duration.getStart()); long startTimeBucket = DurationUtils.INSTANCE.exchangeToTimeBucket(duration.getStart());
long end = DurationUtils.INSTANCE.exchangeToTimeBucket(duration.getEnd()); long endTimeBucket = DurationUtils.INSTANCE.exchangeToTimeBucket(duration.getEnd());
return getServiceNameService().getServiceSLATrend(serviceId, duration.getStep(), start, end); return getServiceNameService().getServiceSLATrend(serviceId, duration.getStep(), startTimeBucket, endTimeBucket);
} }
public Topology getServiceTopology(int serviceId, Duration duration) throws ParseException { public Topology getServiceTopology(int serviceId, Duration duration) throws ParseException {
long start = DurationUtils.INSTANCE.exchangeToTimeBucket(duration.getStart()); long startTimeBucket = DurationUtils.INSTANCE.exchangeToTimeBucket(duration.getStart());
long end = DurationUtils.INSTANCE.exchangeToTimeBucket(duration.getEnd()); long endTimeBucket = DurationUtils.INSTANCE.exchangeToTimeBucket(duration.getEnd());
return getServiceTopologyService().getServiceTopology(duration.getStep(), serviceId, start, end);
long startSecondTimeBucket = DurationUtils.INSTANCE.durationToSecondTimeBucket(duration.getStep(), duration.getStart());
long endSecondTimeBucket = DurationUtils.INSTANCE.durationToSecondTimeBucket(duration.getStep(), duration.getEnd());
return getServiceTopologyService().getServiceTopology(duration.getStep(), serviceId, startTimeBucket, endTimeBucket, startSecondTimeBucket, endSecondTimeBucket);
} }
} }
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册