Merge pull request #863 from peng-yongsheng/feature/appCodeInServer
Feature/app code in server
This commit is contained in:
commit
e7a6a246de
|
|
@ -51,6 +51,11 @@
|
|||
<artifactId>collector-storage-define</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.skywalking</groupId>
|
||||
<artifactId>collector-cache-define</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.skywalking</groupId>
|
||||
<artifactId>analysis-worker-model</artifactId>
|
||||
|
|
|
|||
|
|
@ -49,6 +49,8 @@ public abstract class AlarmAssertWorker<INPUT extends StreamData & Metric, OUTPU
|
|||
|
||||
protected abstract OUTPUT newAlarmObject(String id, INPUT inputMetric);
|
||||
|
||||
protected abstract void generateAlarmContent(OUTPUT alarm, double threshold);
|
||||
|
||||
protected abstract Double calleeErrorRateThreshold();
|
||||
|
||||
protected abstract Double callerErrorRateThreshold();
|
||||
|
|
@ -64,7 +66,7 @@ public abstract class AlarmAssertWorker<INPUT extends StreamData & Metric, OUTPU
|
|||
alarm.setAlarmType(AlarmType.ERROR_RATE.getValue());
|
||||
alarm.setLastTimeBucket(inputMetric.getTimeBucket());
|
||||
alarm.setSourceValue(MetricSource.Callee.getValue());
|
||||
alarm.setAlarmContent("");
|
||||
generateAlarmContent(alarm, calleeErrorRateThreshold());
|
||||
|
||||
onNext(alarm);
|
||||
}
|
||||
|
|
@ -75,7 +77,7 @@ public abstract class AlarmAssertWorker<INPUT extends StreamData & Metric, OUTPU
|
|||
alarm.setAlarmType(AlarmType.ERROR_RATE.getValue());
|
||||
alarm.setLastTimeBucket(inputMetric.getTimeBucket());
|
||||
alarm.setSourceValue(MetricSource.Caller.getValue());
|
||||
alarm.setAlarmContent("");
|
||||
generateAlarmContent(alarm, callerErrorRateThreshold());
|
||||
|
||||
onNext(alarm);
|
||||
}
|
||||
|
|
@ -100,7 +102,7 @@ public abstract class AlarmAssertWorker<INPUT extends StreamData & Metric, OUTPU
|
|||
alarm.setAlarmType(AlarmType.SLOW_RTT.getValue());
|
||||
alarm.setLastTimeBucket(inputMetric.getTimeBucket());
|
||||
alarm.setSourceValue(MetricSource.Callee.getValue());
|
||||
alarm.setAlarmContent("");
|
||||
generateAlarmContent(alarm, calleeAverageResponseTimeThreshold());
|
||||
|
||||
onNext(alarm);
|
||||
}
|
||||
|
|
@ -111,7 +113,7 @@ public abstract class AlarmAssertWorker<INPUT extends StreamData & Metric, OUTPU
|
|||
alarm.setAlarmType(AlarmType.SLOW_RTT.getValue());
|
||||
alarm.setLastTimeBucket(inputMetric.getTimeBucket());
|
||||
alarm.setSourceValue(MetricSource.Caller.getValue());
|
||||
alarm.setAlarmContent("");
|
||||
generateAlarmContent(alarm, callerAverageResponseTimeThreshold());
|
||||
|
||||
onNext(alarm);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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.provider.worker.AlarmAssertWorker;
|
||||
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.service.IApplicationAlarmRuleConfig;
|
||||
import org.apache.skywalking.apm.collector.core.module.ModuleManager;
|
||||
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.application.ApplicationMetric;
|
||||
import org.apache.skywalking.apm.collector.storage.table.register.Application;
|
||||
|
||||
/**
|
||||
* @author peng-yongsheng
|
||||
|
|
@ -34,10 +39,12 @@ import org.apache.skywalking.apm.collector.storage.table.application.Application
|
|||
public class ApplicationMetricAlarmAssertWorker extends AlarmAssertWorker<ApplicationMetric, ApplicationAlarm> {
|
||||
|
||||
private final IApplicationAlarmRuleConfig applicationAlarmRuleConfig;
|
||||
private final ApplicationCacheService applicationCacheService;
|
||||
|
||||
public ApplicationMetricAlarmAssertWorker(ModuleManager moduleManager) {
|
||||
super(moduleManager);
|
||||
this.applicationAlarmRuleConfig = moduleManager.find(ConfigurationModule.NAME).getService(IApplicationAlarmRuleConfig.class);
|
||||
this.applicationCacheService = moduleManager.find(CacheModule.NAME).getService(ApplicationCacheService.class);
|
||||
}
|
||||
|
||||
@Override public int id() {
|
||||
|
|
@ -51,6 +58,21 @@ public class ApplicationMetricAlarmAssertWorker extends AlarmAssertWorker<Applic
|
|||
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() {
|
||||
return applicationAlarmRuleConfig.calleeErrorRateThreshold();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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.provider.worker.AlarmAssertWorker;
|
||||
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.service.IApplicationReferenceAlarmRuleConfig;
|
||||
import org.apache.skywalking.apm.collector.core.module.ModuleManager;
|
||||
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.application.ApplicationReferenceMetric;
|
||||
import org.apache.skywalking.apm.collector.storage.table.register.Application;
|
||||
|
||||
/**
|
||||
* @author peng-yongsheng
|
||||
*/
|
||||
public class ApplicationReferenceMetricAlarmAssertWorker extends AlarmAssertWorker<ApplicationReferenceMetric, ApplicationReferenceAlarm> {
|
||||
|
||||
private final ApplicationCacheService applicationCacheService;
|
||||
private final IApplicationReferenceAlarmRuleConfig applicationReferenceAlarmRuleConfig;
|
||||
|
||||
public ApplicationReferenceMetricAlarmAssertWorker(ModuleManager moduleManager) {
|
||||
super(moduleManager);
|
||||
this.applicationCacheService = moduleManager.find(CacheModule.NAME).getService(ApplicationCacheService.class);
|
||||
this.applicationReferenceAlarmRuleConfig = moduleManager.find(ConfigurationModule.NAME).getService(IApplicationReferenceAlarmRuleConfig.class);
|
||||
}
|
||||
|
||||
|
|
@ -52,6 +59,21 @@ public class ApplicationReferenceMetricAlarmAssertWorker extends AlarmAssertWork
|
|||
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() {
|
||||
return applicationReferenceAlarmRuleConfig.calleeErrorRateThreshold();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -18,6 +18,8 @@
|
|||
|
||||
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.provider.worker.AlarmAssertWorker;
|
||||
import org.apache.skywalking.apm.collector.analysis.alarm.provider.worker.AlarmAssertWorkerProvider;
|
||||
|
|
@ -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.core.module.ModuleManager;
|
||||
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.instance.InstanceMetric;
|
||||
import org.apache.skywalking.apm.collector.storage.table.register.Instance;
|
||||
|
||||
/**
|
||||
* @author peng-yongsheng
|
||||
*/
|
||||
public class InstanceMetricAlarmAssertWorker extends AlarmAssertWorker<InstanceMetric, InstanceAlarm> {
|
||||
|
||||
private final Gson gson = new Gson();
|
||||
private final IInstanceUIDAO instanceDAO;
|
||||
private final IInstanceAlarmRuleConfig instanceAlarmRuleConfig;
|
||||
|
||||
public InstanceMetricAlarmAssertWorker(ModuleManager moduleManager) {
|
||||
super(moduleManager);
|
||||
this.instanceDAO = moduleManager.find(StorageModule.NAME).getService(IInstanceUIDAO.class);
|
||||
this.instanceAlarmRuleConfig = moduleManager.find(ConfigurationModule.NAME).getService(IInstanceAlarmRuleConfig.class);
|
||||
}
|
||||
|
||||
|
|
@ -52,6 +62,26 @@ public class InstanceMetricAlarmAssertWorker extends AlarmAssertWorker<InstanceM
|
|||
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() {
|
||||
return instanceAlarmRuleConfig.calleeErrorRateThreshold();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -18,6 +18,8 @@
|
|||
|
||||
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.provider.worker.AlarmAssertWorker;
|
||||
import org.apache.skywalking.apm.collector.analysis.alarm.provider.worker.AlarmAssertWorkerProvider;
|
||||
|
|
@ -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.core.module.ModuleManager;
|
||||
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.instance.InstanceReferenceMetric;
|
||||
import org.apache.skywalking.apm.collector.storage.table.register.Instance;
|
||||
|
||||
/**
|
||||
* @author peng-yongsheng
|
||||
*/
|
||||
public class InstanceReferenceMetricAlarmAssertWorker extends AlarmAssertWorker<InstanceReferenceMetric, InstanceReferenceAlarm> {
|
||||
|
||||
private Gson gson = new Gson();
|
||||
private final IInstanceUIDAO instanceDAO;
|
||||
private final IInstanceReferenceAlarmRuleConfig instanceReferenceAlarmRuleConfig;
|
||||
|
||||
public InstanceReferenceMetricAlarmAssertWorker(ModuleManager moduleManager) {
|
||||
super(moduleManager);
|
||||
this.instanceDAO = moduleManager.find(StorageModule.NAME).getService(IInstanceUIDAO.class);
|
||||
this.instanceReferenceAlarmRuleConfig = moduleManager.find(ConfigurationModule.NAME).getService(IInstanceReferenceAlarmRuleConfig.class);
|
||||
}
|
||||
|
||||
|
|
@ -54,6 +64,26 @@ public class InstanceReferenceMetricAlarmAssertWorker extends AlarmAssertWorker<
|
|||
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() {
|
||||
return instanceReferenceAlarmRuleConfig.calleeErrorRateThreshold();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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.provider.worker.AlarmAssertWorker;
|
||||
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.service.IServiceAlarmRuleConfig;
|
||||
import org.apache.skywalking.apm.collector.core.module.ModuleManager;
|
||||
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.register.ServiceName;
|
||||
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> {
|
||||
|
||||
private final ServiceNameCacheService serviceNameCacheService;
|
||||
private final IServiceAlarmRuleConfig serviceAlarmRuleConfig;
|
||||
|
||||
public ServiceMetricAlarmAssertWorker(ModuleManager moduleManager) {
|
||||
super(moduleManager);
|
||||
this.serviceNameCacheService = moduleManager.find(CacheModule.NAME).getService(ServiceNameCacheService.class);
|
||||
this.serviceAlarmRuleConfig = moduleManager.find(ConfigurationModule.NAME).getService(IServiceAlarmRuleConfig.class);
|
||||
}
|
||||
|
||||
|
|
@ -53,6 +60,21 @@ public class ServiceMetricAlarmAssertWorker extends AlarmAssertWorker<ServiceMet
|
|||
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() {
|
||||
return serviceAlarmRuleConfig.calleeErrorRateThreshold();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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.provider.worker.AlarmAssertWorker;
|
||||
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.service.IServiceReferenceAlarmRuleConfig;
|
||||
import org.apache.skywalking.apm.collector.core.module.ModuleManager;
|
||||
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.register.ServiceName;
|
||||
import org.apache.skywalking.apm.collector.storage.table.service.ServiceReferenceMetric;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
/**
|
||||
* @author peng-yongsheng
|
||||
*/
|
||||
public class ServiceReferenceMetricAlarmAssertWorker extends AlarmAssertWorker<ServiceReferenceMetric, ServiceReferenceAlarm> {
|
||||
|
||||
private final Logger logger = LoggerFactory.getLogger(ServiceReferenceMetricAlarmAssertWorker.class);
|
||||
|
||||
private final ServiceNameCacheService serviceNameCacheService;
|
||||
private final IServiceReferenceAlarmRuleConfig serviceReferenceAlarmRuleConfig;
|
||||
|
||||
public ServiceReferenceMetricAlarmAssertWorker(ModuleManager moduleManager) {
|
||||
ServiceReferenceMetricAlarmAssertWorker(ModuleManager moduleManager) {
|
||||
super(moduleManager);
|
||||
this.serviceNameCacheService = moduleManager.find(CacheModule.NAME).getService(ServiceNameCacheService.class);
|
||||
this.serviceReferenceAlarmRuleConfig = moduleManager.find(ConfigurationModule.NAME).getService(IServiceReferenceAlarmRuleConfig.class);
|
||||
}
|
||||
|
||||
|
|
@ -60,6 +63,21 @@ public class ServiceReferenceMetricAlarmAssertWorker extends AlarmAssertWorker<S
|
|||
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() {
|
||||
return serviceReferenceAlarmRuleConfig.calleeErrorRateThreshold();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -73,6 +73,7 @@ public class InstanceRegisterSerialWorker extends AbstractLocalAsyncWorker<Insta
|
|||
userInstance.setId(String.valueOf(Const.NONE_INSTANCE_ID));
|
||||
userInstance.setInstanceId(Const.NONE_INSTANCE_ID);
|
||||
userInstance.setApplicationId(Const.NONE_APPLICATION_ID);
|
||||
userInstance.setApplicationCode(Const.USER_CODE);
|
||||
userInstance.setAgentUUID(Const.USER_CODE);
|
||||
userInstance.setHeartBeatTime(System.currentTimeMillis());
|
||||
userInstance.setOsInfo(Const.EMPTY_STRING);
|
||||
|
|
@ -85,6 +86,7 @@ public class InstanceRegisterSerialWorker extends AbstractLocalAsyncWorker<Insta
|
|||
newInstance.setId("2");
|
||||
newInstance.setInstanceId(2);
|
||||
newInstance.setApplicationId(instance.getApplicationId());
|
||||
newInstance.setApplicationCode(instance.getApplicationCode());
|
||||
newInstance.setAgentUUID(instance.getAgentUUID());
|
||||
newInstance.setHeartBeatTime(instance.getHeartBeatTime());
|
||||
newInstance.setOsInfo(instance.getOsInfo());
|
||||
|
|
@ -96,6 +98,7 @@ public class InstanceRegisterSerialWorker extends AbstractLocalAsyncWorker<Insta
|
|||
newInstance.setId(String.valueOf(max + 1));
|
||||
newInstance.setInstanceId(max + 1);
|
||||
newInstance.setApplicationId(instance.getApplicationId());
|
||||
newInstance.setApplicationCode(instance.getApplicationCode());
|
||||
newInstance.setAgentUUID(instance.getAgentUUID());
|
||||
newInstance.setHeartBeatTime(instance.getHeartBeatTime());
|
||||
newInstance.setOsInfo(instance.getOsInfo());
|
||||
|
|
|
|||
|
|
@ -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.service.IInstanceIDService;
|
||||
import org.apache.skywalking.apm.collector.cache.CacheModule;
|
||||
import org.apache.skywalking.apm.collector.cache.service.ApplicationCacheService;
|
||||
import org.apache.skywalking.apm.collector.cache.service.InstanceCacheService;
|
||||
import org.apache.skywalking.apm.collector.core.graph.Graph;
|
||||
import org.apache.skywalking.apm.collector.core.graph.GraphManager;
|
||||
|
|
@ -45,6 +46,7 @@ public class InstanceIDService implements IInstanceIDService {
|
|||
private InstanceCacheService instanceCacheService;
|
||||
private Graph<Instance> instanceRegisterGraph;
|
||||
private IInstanceRegisterDAO instanceRegisterDAO;
|
||||
private ApplicationCacheService applicationCacheService;
|
||||
|
||||
public InstanceIDService(ModuleManager moduleManager) {
|
||||
this.moduleManager = moduleManager;
|
||||
|
|
@ -71,6 +73,13 @@ public class InstanceIDService implements IInstanceIDService {
|
|||
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) {
|
||||
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);
|
||||
|
|
@ -79,6 +88,7 @@ public class InstanceIDService implements IInstanceIDService {
|
|||
Instance instance = new Instance();
|
||||
instance.setId("0");
|
||||
instance.setApplicationId(applicationId);
|
||||
instance.setApplicationCode(getApplicationCacheService().getApplicationById(applicationId).getApplicationCode());
|
||||
instance.setAgentUUID(agentUUID);
|
||||
instance.setRegisterTime(registerTime);
|
||||
instance.setHeartBeatTime(registerTime);
|
||||
|
|
@ -100,6 +110,7 @@ public class InstanceIDService implements IInstanceIDService {
|
|||
Instance instance = new Instance();
|
||||
instance.setId("0");
|
||||
instance.setApplicationId(applicationId);
|
||||
instance.setApplicationCode(getApplicationCacheService().getApplicationById(applicationId).getApplicationCode());
|
||||
instance.setAgentUUID(Const.EMPTY_STRING);
|
||||
instance.setRegisterTime(registerTime);
|
||||
instance.setHeartBeatTime(registerTime);
|
||||
|
|
@ -118,6 +129,7 @@ public class InstanceIDService implements IInstanceIDService {
|
|||
Instance instance = new Instance();
|
||||
instance.setId(String.valueOf(instanceId));
|
||||
instance.setApplicationId(applicationId);
|
||||
instance.setApplicationCode(getApplicationCacheService().getApplicationById(applicationId).getApplicationCode());
|
||||
instance.setAgentUUID("");
|
||||
instance.setRegisterTime(registerTime);
|
||||
instance.setHeartBeatTime(registerTime);
|
||||
|
|
|
|||
|
|
@ -27,5 +27,26 @@ import org.apache.skywalking.apm.collector.storage.ui.common.Step;
|
|||
*/
|
||||
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;
|
|||
*/
|
||||
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,5 +27,5 @@ import org.apache.skywalking.apm.collector.storage.ui.alarm.Alarm;
|
|||
*/
|
||||
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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -27,5 +27,5 @@ import org.apache.skywalking.apm.collector.storage.ui.alarm.Alarm;
|
|||
*/
|
||||
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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -32,6 +32,7 @@ public class Instance extends StreamData {
|
|||
new Column(InstanceTable.COLUMN_ID, new NonOperation()),
|
||||
new Column(InstanceTable.COLUMN_AGENT_UUID, new CoverOperation()),
|
||||
new Column(InstanceTable.COLUMN_OS_INFO, new CoverOperation()),
|
||||
new Column(InstanceTable.COLUMN_APPLICATION_CODE, new CoverOperation()),
|
||||
};
|
||||
|
||||
private static final Column[] LONG_COLUMNS = {
|
||||
|
|
@ -118,6 +119,14 @@ public class Instance extends StreamData {
|
|||
setDataString(2, osInfo);
|
||||
}
|
||||
|
||||
public String getApplicationCode() {
|
||||
return getDataString(3);
|
||||
}
|
||||
|
||||
public void setApplicationCode(String applicationCode) {
|
||||
setDataString(3, applicationCode);
|
||||
}
|
||||
|
||||
public int getAddressId() {
|
||||
return getDataInteger(2);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -26,6 +26,7 @@ import org.apache.skywalking.apm.collector.core.data.CommonTable;
|
|||
public class InstanceTable extends CommonTable {
|
||||
public static final String TABLE = "instance";
|
||||
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_REGISTER_TIME = "register_time";
|
||||
public static final String COLUMN_INSTANCE_ID = "instance_id";
|
||||
|
|
|
|||
|
|
@ -22,18 +22,18 @@ package org.apache.skywalking.apm.collector.storage.ui.alarm;
|
|||
* @author peng-yongsheng
|
||||
*/
|
||||
public class AlarmItem {
|
||||
private String id;
|
||||
private int id;
|
||||
private String title;
|
||||
private String content;
|
||||
private String startTime;
|
||||
private AlarmType alarmType;
|
||||
private CauseType causeType;
|
||||
|
||||
public String getId() {
|
||||
public int getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(String id) {
|
||||
public void setId(int id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -57,6 +57,7 @@ public class InstanceRegisterEsDAO extends EsDAO implements IInstanceRegisterDAO
|
|||
Map<String, Object> source = new HashMap<>();
|
||||
source.put(InstanceTable.COLUMN_INSTANCE_ID, instance.getInstanceId());
|
||||
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_REGISTER_TIME, TimeBucketUtils.INSTANCE.getSecondTimeBucket(instance.getRegisterTime()));
|
||||
source.put(InstanceTable.COLUMN_HEARTBEAT_TIME, TimeBucketUtils.INSTANCE.getSecondTimeBucket(instance.getHeartBeatTime()));
|
||||
|
|
|
|||
|
|
@ -46,13 +46,14 @@ public class ApplicationAlarmEsUIDAO extends EsDAO implements IApplicationAlarmU
|
|||
}
|
||||
|
||||
@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.setTypes(ApplicationAlarmTable.TABLE_TYPE);
|
||||
searchRequestBuilder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH);
|
||||
|
||||
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)) {
|
||||
boolQueryBuilder.must().add(QueryBuilders.matchQuery(ApplicationAlarmTable.COLUMN_ALARM_CONTENT, keyword));
|
||||
}
|
||||
|
|
@ -68,8 +69,7 @@ public class ApplicationAlarmEsUIDAO extends EsDAO implements IApplicationAlarmU
|
|||
alarm.setTotal((int)searchResponse.getHits().getTotalHits());
|
||||
for (SearchHit searchHit : searchHits) {
|
||||
AlarmItem alarmItem = new AlarmItem();
|
||||
alarmItem.setId(searchHit.getId());
|
||||
alarmItem.setTitle((String)searchHit.getSource().get(ApplicationAlarmTable.COLUMN_ALARM_CONTENT));
|
||||
alarmItem.setId(((Number)searchHit.getSource().get(ApplicationAlarmTable.COLUMN_APPLICATION_ID)).intValue());
|
||||
alarmItem.setContent((String)searchHit.getSource().get(ApplicationAlarmTable.COLUMN_ALARM_CONTENT));
|
||||
|
||||
long lastTimeBucket = ((Number)searchHit.getSource().get(ApplicationAlarmTable.COLUMN_LAST_TIME_BUCKET)).longValue();
|
||||
|
|
|
|||
|
|
@ -42,12 +42,12 @@ public class ApplicationAlarmListEsUIDAO extends EsDAO implements IApplicationAl
|
|||
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);
|
||||
SearchRequestBuilder searchRequestBuilder = getClient().prepareSearch(tableName);
|
||||
searchRequestBuilder.setTypes(ApplicationAlarmListTable.TABLE_TYPE);
|
||||
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.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
|
|||
|
||||
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()) {
|
||||
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,14 @@ public class InstanceAlarmEsUIDAO extends EsDAO implements IInstanceAlarmUIDAO {
|
|||
}
|
||||
|
||||
@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.setTypes(InstanceAlarmTable.TABLE_TYPE);
|
||||
searchRequestBuilder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH);
|
||||
|
||||
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)) {
|
||||
boolQueryBuilder.must().add(QueryBuilders.matchQuery(InstanceAlarmTable.COLUMN_ALARM_CONTENT, keyword));
|
||||
}
|
||||
|
|
@ -68,7 +69,7 @@ public class InstanceAlarmEsUIDAO extends EsDAO implements IInstanceAlarmUIDAO {
|
|||
alarm.setTotal((int)searchResponse.getHits().getTotalHits());
|
||||
for (SearchHit searchHit : searchHits) {
|
||||
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.setContent((String)searchHit.getSource().get(InstanceAlarmTable.COLUMN_ALARM_CONTENT));
|
||||
|
||||
|
|
|
|||
|
|
@ -249,6 +249,7 @@ public class InstanceEsUIDAO extends EsDAO implements IInstanceUIDAO {
|
|||
for (SearchHit searchHit : searchHits) {
|
||||
AppServerInfo appServerInfo = new AppServerInfo();
|
||||
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));
|
||||
appServerInfos.add(appServerInfo);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -46,13 +46,14 @@ public class ServiceAlarmEsUIDAO extends EsDAO implements IServiceAlarmUIDAO {
|
|||
}
|
||||
|
||||
@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.setTypes(ServiceAlarmTable.TABLE_TYPE);
|
||||
searchRequestBuilder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH);
|
||||
|
||||
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)) {
|
||||
boolQueryBuilder.must().add(QueryBuilders.matchQuery(ServiceAlarmTable.COLUMN_ALARM_CONTENT, keyword));
|
||||
}
|
||||
|
|
@ -68,7 +69,7 @@ public class ServiceAlarmEsUIDAO extends EsDAO implements IServiceAlarmUIDAO {
|
|||
alarm.setTotal((int)searchResponse.getHits().getTotalHits());
|
||||
for (SearchHit searchHit : searchHits) {
|
||||
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.setContent((String)searchHit.getSource().get(ServiceAlarmTable.COLUMN_ALARM_CONTENT));
|
||||
|
||||
|
|
|
|||
|
|
@ -37,11 +37,12 @@ public class InstanceEsTableDefine extends ElasticSearchTableDefine {
|
|||
|
||||
@Override public void initialize() {
|
||||
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_REGISTER_TIME, ElasticSearchColumnDefine.Type.Long.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_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_IS_ADDRESS, ElasticSearchColumnDefine.Type.Integer.name()));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -58,6 +58,7 @@ public class InstanceRegisterH2DAO extends H2DAO implements IInstanceRegisterDAO
|
|||
source.put(InstanceTable.COLUMN_ID, instance.getId());
|
||||
source.put(InstanceTable.COLUMN_INSTANCE_ID, instance.getInstanceId());
|
||||
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_REGISTER_TIME, TimeBucketUtils.INSTANCE.getSecondTimeBucket(instance.getRegisterTime()));
|
||||
source.put(InstanceTable.COLUMN_HEARTBEAT_TIME, TimeBucketUtils.INSTANCE.getSecondTimeBucket(instance.getHeartBeatTime()));
|
||||
|
|
|
|||
|
|
@ -34,7 +34,7 @@ public class ApplicationAlarmH2UIDAO extends H2DAO implements IApplicationAlarmU
|
|||
}
|
||||
|
||||
@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;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -33,7 +33,7 @@ public class ApplicationAlarmListH2UIDAO extends H2DAO implements IApplicationAl
|
|||
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;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -32,7 +32,7 @@ public class InstanceAlarmH2UIDAO extends H2DAO implements IInstanceAlarmUIDAO {
|
|||
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;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -32,7 +32,7 @@ public class ServiceAlarmH2UIDAO extends H2DAO implements IServiceAlarmUIDAO {
|
|||
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;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -34,6 +34,7 @@ public class InstanceH2TableDefine extends H2TableDefine {
|
|||
@Override public void initialize() {
|
||||
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_CODE, 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_INSTANCE_ID, H2ColumnDefine.Type.Int.name()));
|
||||
|
|
|
|||
|
|
@ -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.service.AlarmService;
|
||||
import org.apache.skywalking.apm.collector.ui.utils.DurationUtils;
|
||||
import org.apache.skywalking.apm.collector.ui.utils.PaginationUtils;
|
||||
|
||||
/**
|
||||
* @author peng-yongsheng
|
||||
|
|
@ -50,19 +51,18 @@ public class AlarmQuery implements Query {
|
|||
|
||||
public Alarm loadAlarmList(String keyword, AlarmType alarmType, Duration duration,
|
||||
Pagination paging) throws ParseException {
|
||||
long start = DurationUtils.INSTANCE.durationToSecondTimeBucket(duration.getStep(), duration.getStart()) / 100;
|
||||
long end = DurationUtils.INSTANCE.durationToSecondTimeBucket(duration.getStep(), duration.getEnd()) / 100;
|
||||
long startTimeBucket = DurationUtils.INSTANCE.durationToSecondTimeBucket(duration.getStep(), duration.getStart()) / 100;
|
||||
long endTimeBucket = DurationUtils.INSTANCE.durationToSecondTimeBucket(duration.getStep(), duration.getEnd()) / 100;
|
||||
|
||||
int limit = paging.getPageSize();
|
||||
int from = paging.getPageSize() * paging.getPageNum();
|
||||
PaginationUtils.Page page = PaginationUtils.INSTANCE.exchange(paging);
|
||||
|
||||
switch (alarmType) {
|
||||
case APPLICATION:
|
||||
return getAlarmService().loadApplicationAlarmList(keyword, start, end, limit, from);
|
||||
return getAlarmService().loadApplicationAlarmList(keyword, startTimeBucket, endTimeBucket, page.getLimit(), page.getFrom());
|
||||
case SERVER:
|
||||
return getAlarmService().loadInstanceAlarmList(keyword, start, end, limit, from);
|
||||
return getAlarmService().loadInstanceAlarmList(keyword, startTimeBucket, endTimeBucket, page.getLimit(), page.getFrom());
|
||||
case SERVICE:
|
||||
return getAlarmService().loadServiceAlarmList(keyword, start, end, limit, from);
|
||||
return getAlarmService().loadServiceAlarmList(keyword, startTimeBucket, endTimeBucket, page.getLimit(), page.getFrom());
|
||||
default:
|
||||
return new Alarm();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -115,17 +115,17 @@ public class OverViewLayerQuery implements Query {
|
|||
long startTimeBucket = DurationUtils.INSTANCE.exchangeToTimeBucket(duration.getStart());
|
||||
long endTimeBucket = DurationUtils.INSTANCE.exchangeToTimeBucket(duration.getEnd());
|
||||
|
||||
long start = DurationUtils.INSTANCE.durationToSecondTimeBucket(duration.getStep(), duration.getStart());
|
||||
long end = DurationUtils.INSTANCE.durationToSecondTimeBucket(duration.getStep(), duration.getEnd());
|
||||
long startSecondTimeBucket = DurationUtils.INSTANCE.durationToSecondTimeBucket(duration.getStep(), duration.getStart());
|
||||
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 {
|
||||
long start = DurationUtils.INSTANCE.durationToSecondTimeBucket(duration.getStep(), duration.getStart());
|
||||
long end = DurationUtils.INSTANCE.durationToSecondTimeBucket(duration.getStep(), duration.getEnd());
|
||||
long startSecondTimeBucket = DurationUtils.INSTANCE.durationToSecondTimeBucket(duration.getStep(), duration.getStart());
|
||||
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 {
|
||||
|
|
|
|||
|
|
@ -18,19 +18,31 @@
|
|||
|
||||
package org.apache.skywalking.apm.collector.ui.service;
|
||||
|
||||
import com.google.gson.Gson;
|
||||
import com.google.gson.JsonObject;
|
||||
import java.text.ParseException;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
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.ServiceNameCacheService;
|
||||
import org.apache.skywalking.apm.collector.core.module.ModuleManager;
|
||||
import org.apache.skywalking.apm.collector.core.util.Const;
|
||||
import org.apache.skywalking.apm.collector.storage.StorageModule;
|
||||
import org.apache.skywalking.apm.collector.storage.dao.ui.IApplicationAlarmListUIDAO;
|
||||
import org.apache.skywalking.apm.collector.storage.dao.ui.IApplicationAlarmUIDAO;
|
||||
import org.apache.skywalking.apm.collector.storage.dao.ui.IInstanceAlarmUIDAO;
|
||||
import org.apache.skywalking.apm.collector.storage.dao.ui.IInstanceUIDAO;
|
||||
import org.apache.skywalking.apm.collector.storage.dao.ui.IServiceAlarmUIDAO;
|
||||
import org.apache.skywalking.apm.collector.storage.table.register.Instance;
|
||||
import org.apache.skywalking.apm.collector.storage.table.register.ServiceName;
|
||||
import org.apache.skywalking.apm.collector.storage.ui.alarm.Alarm;
|
||||
import org.apache.skywalking.apm.collector.storage.ui.application.Application;
|
||||
import org.apache.skywalking.apm.collector.storage.ui.common.Step;
|
||||
import org.apache.skywalking.apm.collector.storage.ui.overview.AlarmTrend;
|
||||
import org.apache.skywalking.apm.collector.storage.utils.DurationPoint;
|
||||
import org.apache.skywalking.apm.collector.ui.utils.DurationUtils;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
|
|
@ -41,11 +53,16 @@ public class AlarmService {
|
|||
|
||||
private final Logger logger = LoggerFactory.getLogger(AlarmService.class);
|
||||
|
||||
private final Gson gson = new Gson();
|
||||
private final IInstanceUIDAO instanceDAO;
|
||||
private final IApplicationAlarmUIDAO applicationAlarmUIDAO;
|
||||
private final IInstanceAlarmUIDAO instanceAlarmUIDAO;
|
||||
private final IServiceAlarmUIDAO serviceAlarmUIDAO;
|
||||
private final IApplicationAlarmListUIDAO applicationAlarmListUIDAO;
|
||||
private final ApplicationCacheService applicationCacheService;
|
||||
private final ServiceNameCacheService serviceNameCacheService;
|
||||
private static final String RESPONSE_TIME_ALARM = " response time alarm.";
|
||||
private static final String SUCCESS_RATE_ALARM = " success rate alarm.";
|
||||
|
||||
public AlarmService(ModuleManager moduleManager) {
|
||||
this.instanceDAO = moduleManager.find(StorageModule.NAME).getService(IInstanceUIDAO.class);
|
||||
|
|
@ -53,35 +70,93 @@ public class AlarmService {
|
|||
this.instanceAlarmUIDAO = moduleManager.find(StorageModule.NAME).getService(IInstanceAlarmUIDAO.class);
|
||||
this.serviceAlarmUIDAO = moduleManager.find(StorageModule.NAME).getService(IServiceAlarmUIDAO.class);
|
||||
this.applicationAlarmListUIDAO = moduleManager.find(StorageModule.NAME).getService(IApplicationAlarmListUIDAO.class);
|
||||
this.applicationCacheService = moduleManager.find(CacheModule.NAME).getService(ApplicationCacheService.class);
|
||||
this.serviceNameCacheService = moduleManager.find(CacheModule.NAME).getService(ServiceNameCacheService.class);
|
||||
}
|
||||
|
||||
public Alarm loadApplicationAlarmList(String keyword, long start, long end,
|
||||
public Alarm loadApplicationAlarmList(String keyword, long startTimeBucket, long endTimeBucket,
|
||||
int limit, int from) throws ParseException {
|
||||
logger.debug("keyword: {}, start: {}, end: {}, limit: {}, from: {}", keyword, start, end, limit, from);
|
||||
return applicationAlarmUIDAO.loadAlarmList(keyword, start, end, limit, from);
|
||||
logger.debug("keyword: {}, startTimeBucket: {}, endTimeBucket: {}, limit: {}, from: {}", keyword, startTimeBucket, endTimeBucket, limit, from);
|
||||
Alarm alarm = applicationAlarmUIDAO.loadAlarmList(keyword, startTimeBucket, endTimeBucket, limit, from);
|
||||
alarm.getItems().forEach(item -> {
|
||||
String applicationCode = applicationCacheService.getApplicationById(item.getId()).getApplicationCode();
|
||||
switch (item.getCauseType()) {
|
||||
case SLOW_RESPONSE:
|
||||
item.setTitle("Application " + applicationCode + RESPONSE_TIME_ALARM);
|
||||
break;
|
||||
case LOW_SUCCESS_RATE:
|
||||
item.setTitle("Application " + applicationCode + SUCCESS_RATE_ALARM);
|
||||
break;
|
||||
}
|
||||
});
|
||||
return alarm;
|
||||
}
|
||||
|
||||
public Alarm loadInstanceAlarmList(String keyword, long start, long end,
|
||||
public Alarm loadInstanceAlarmList(String keyword, long startTimeBucket, long endTimeBucket,
|
||||
int limit, int from) throws ParseException {
|
||||
logger.debug("keyword: {}, start: {}, end: {}, limit: {}, from: {}", keyword, start, end, limit, from);
|
||||
return instanceAlarmUIDAO.loadAlarmList(keyword, start, end, limit, from);
|
||||
logger.debug("keyword: {}, startTimeBucket: {}, endTimeBucket: {}, limit: {}, from: {}", keyword, startTimeBucket, endTimeBucket, limit, from);
|
||||
Alarm alarm = instanceAlarmUIDAO.loadAlarmList(keyword, startTimeBucket, endTimeBucket, limit, from);
|
||||
alarm.getItems().forEach(item -> {
|
||||
Instance instance = instanceDAO.getInstance(item.getId());
|
||||
String applicationCode = applicationCacheService.getApplicationById(instance.getApplicationId()).getApplicationCode();
|
||||
String serverName = buildServerName(instance.getOsInfo());
|
||||
switch (item.getCauseType()) {
|
||||
case SLOW_RESPONSE:
|
||||
item.setTitle("Server " + serverName + " of Application " + applicationCode + RESPONSE_TIME_ALARM);
|
||||
break;
|
||||
case LOW_SUCCESS_RATE:
|
||||
item.setTitle("Server " + serverName + " of Application " + applicationCode + SUCCESS_RATE_ALARM);
|
||||
break;
|
||||
}
|
||||
});
|
||||
|
||||
return alarm;
|
||||
}
|
||||
|
||||
public Alarm loadServiceAlarmList(String keyword, long start, long end,
|
||||
public Alarm loadServiceAlarmList(String keyword, long startTimeBucket, long endTimeBucket,
|
||||
int limit, int from) throws ParseException {
|
||||
logger.debug("keyword: {}, start: {}, end: {}, limit: {}, from: {}", keyword, start, end, limit, from);
|
||||
return serviceAlarmUIDAO.loadAlarmList(keyword, start, end, limit, from);
|
||||
logger.debug("keyword: {}, startTimeBucket: {}, endTimeBucket: {}, limit: {}, from: {}", keyword, startTimeBucket, endTimeBucket, limit, from);
|
||||
Alarm alarm = serviceAlarmUIDAO.loadAlarmList(keyword, startTimeBucket, endTimeBucket, limit, from);
|
||||
alarm.getItems().forEach(item -> {
|
||||
ServiceName serviceName = serviceNameCacheService.get(item.getId());
|
||||
String applicationCode = applicationCacheService.getApplicationById(serviceName.getApplicationId()).getApplicationCode();
|
||||
switch (item.getCauseType()) {
|
||||
case SLOW_RESPONSE:
|
||||
item.setTitle("Service " + serviceName.getServiceName() + " of Application " + applicationCode + RESPONSE_TIME_ALARM);
|
||||
break;
|
||||
case LOW_SUCCESS_RATE:
|
||||
item.setTitle("Service " + serviceName.getServiceName() + " of Application " + applicationCode + SUCCESS_RATE_ALARM);
|
||||
break;
|
||||
}
|
||||
});
|
||||
return alarm;
|
||||
}
|
||||
|
||||
public AlarmTrend getApplicationAlarmTrend(Step step, long startTimeBucket, long endTimeBucket, long start,
|
||||
long end) throws ParseException {
|
||||
List<Application> applications = instanceDAO.getApplications(start, end);
|
||||
public AlarmTrend getApplicationAlarmTrend(Step step, long startTimeBucket, long endTimeBucket,
|
||||
long startSecondTimeBucket,
|
||||
long endSecondTimeBucket) throws ParseException {
|
||||
List<Application> applications = instanceDAO.getApplications(startSecondTimeBucket, endSecondTimeBucket);
|
||||
|
||||
List<DurationPoint> durationPoints = DurationUtils.INSTANCE.getDurationPoints(step, startTimeBucket, endTimeBucket);
|
||||
|
||||
List<IApplicationAlarmListUIDAO.AlarmTrend> alarmTrends = applicationAlarmListUIDAO.getAlarmedApplicationNum(step, startTimeBucket, endTimeBucket);
|
||||
|
||||
Map<Long, Integer> trendsMap = new HashMap<>();
|
||||
alarmTrends.forEach(alarmTrend -> trendsMap.put(alarmTrend.getTimeBucket(), alarmTrend.getNumberOfApplication()));
|
||||
|
||||
List<Integer> applicationNum = applicationAlarmListUIDAO.getAlarmedApplicationNum(step, startTimeBucket, endTimeBucket);
|
||||
AlarmTrend alarmTrend = new AlarmTrend();
|
||||
applicationNum.forEach(num -> {
|
||||
alarmTrend.getNumOfAlarmRate().add((num * 10000) / (applications.size()));
|
||||
durationPoints.forEach(durationPoint -> {
|
||||
alarmTrend.getNumOfAlarmRate().add((trendsMap.getOrDefault(durationPoint.getPoint(), 0) * 10000) / (applications.size()));
|
||||
});
|
||||
return alarmTrend;
|
||||
}
|
||||
|
||||
private String buildServerName(String osInfoJson) {
|
||||
JsonObject osInfo = gson.fromJson(osInfoJson, JsonObject.class);
|
||||
String serverName = Const.UNKNOWN;
|
||||
if (osInfo.has("hostName")) {
|
||||
serverName = osInfo.get("hostName").getAsString();
|
||||
}
|
||||
return serverName;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -112,7 +112,7 @@ public class ApplicationService {
|
|||
return applicationThroughput;
|
||||
}
|
||||
|
||||
public ConjecturalAppBrief getConjecturalApps(Step step, long start, long end) throws ParseException {
|
||||
public ConjecturalAppBrief getConjecturalApps(Step step, long startSecondTimeBucket, long endSecondTimeBucket) throws ParseException {
|
||||
List<ConjecturalApp> conjecturalApps = networkAddressUIDAO.getConjecturalApps();
|
||||
conjecturalApps.forEach(conjecturalApp -> {
|
||||
String name = ServerTypeDefine.getInstance().getServerType(conjecturalApp.getId());
|
||||
|
|
|
|||
|
|
@ -60,7 +60,7 @@ public class ApplicationTopologyService {
|
|||
|
||||
public Topology getApplicationTopology(Step step, int applicationId, long startTimeBucket,
|
||||
long endTimeBucket, long startSecondTimeBucket, long endSecondTimeBucket) throws ParseException {
|
||||
logger.debug("startTime: {}, endTime: {}", startTimeBucket, endTimeBucket);
|
||||
logger.debug("startTimeBucket: {}, endTimeBucket: {}", startTimeBucket, endTimeBucket);
|
||||
List<IApplicationComponentUIDAO.ApplicationComponent> applicationComponents = applicationComponentUIDAO.load(step, startTimeBucket, endTimeBucket);
|
||||
List<IApplicationMappingUIDAO.ApplicationMapping> applicationMappings = applicationMappingUIDAO.load(step, startTimeBucket, endTimeBucket);
|
||||
|
||||
|
|
@ -82,6 +82,6 @@ public class ApplicationTopologyService {
|
|||
|
||||
TopologyBuilder builder = new TopologyBuilder(moduleManager);
|
||||
|
||||
return builder.build(applicationComponents, applicationMappings, applicationMetrics, callerReferenceMetric, calleeReferenceMetric, startSecondTimeBucket, endSecondTimeBucket);
|
||||
return builder.build(applicationComponents, applicationMappings, applicationMetrics, callerReferenceMetric, calleeReferenceMetric, startTimeBucket, endTimeBucket, startSecondTimeBucket, endSecondTimeBucket);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -72,6 +72,6 @@ public class ClusterTopologyService {
|
|||
|
||||
TopologyBuilder builder = new TopologyBuilder(moduleManager);
|
||||
|
||||
return builder.build(applicationComponents, applicationMappings, applicationMetrics, callerReferenceMetric, calleeReferenceMetric, startSecondTimeBucket, endSecondTimeBucket);
|
||||
return builder.build(applicationComponents, applicationMappings, applicationMetrics, callerReferenceMetric, calleeReferenceMetric, startTimeBucket, endTimeBucket, startSecondTimeBucket, endSecondTimeBucket);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -146,7 +146,8 @@ public class ServerService {
|
|||
return gcTrend;
|
||||
}
|
||||
|
||||
public MemoryTrend getMemoryTrend(int instanceId, Step step, long startTimeBucket, long endTimeBucket) throws ParseException {
|
||||
public MemoryTrend getMemoryTrend(int instanceId, Step step, long startTimeBucket,
|
||||
long endTimeBucket) throws ParseException {
|
||||
MemoryTrend memoryTrend = new MemoryTrend();
|
||||
List<DurationPoint> durationPoints = DurationUtils.INSTANCE.getDurationPoints(step, startTimeBucket, endTimeBucket);
|
||||
IMemoryMetricUIDAO.Trend heapMemoryTrend = memoryMetricUIDAO.getHeapMemoryTrend(instanceId, step, durationPoints);
|
||||
|
|
@ -162,9 +163,7 @@ public class ServerService {
|
|||
|
||||
private void buildAppServerInfo(List<AppServerInfo> serverInfos) {
|
||||
serverInfos.forEach(serverInfo -> {
|
||||
int applicationId = instanceCacheService.getApplicationId(serverInfo.getId());
|
||||
serverInfo.setApplicationId(applicationId);
|
||||
serverInfo.setApplicationCode(applicationCacheService.getApplicationById(applicationId).getApplicationCode());
|
||||
serverInfo.setApplicationCode(applicationCacheService.getApplicationById(serverInfo.getApplicationId()).getApplicationCode());
|
||||
if (StringUtils.isNotEmpty(serverInfo.getOsInfo())) {
|
||||
JsonObject osInfoJson = gson.fromJson(serverInfo.getOsInfo(), JsonObject.class);
|
||||
if (osInfoJson.has("osName")) {
|
||||
|
|
|
|||
|
|
@ -94,6 +94,7 @@ public class ServiceTopologyService {
|
|||
} catch (ParseException e) {
|
||||
logger.error(e.getMessage(), e);
|
||||
}
|
||||
call.setAlert(false);
|
||||
calls.add(call);
|
||||
});
|
||||
|
||||
|
|
|
|||
|
|
@ -33,6 +33,7 @@ import org.apache.skywalking.apm.collector.storage.dao.ui.IApplicationMappingUID
|
|||
import org.apache.skywalking.apm.collector.storage.dao.ui.IApplicationMetricUIDAO;
|
||||
import org.apache.skywalking.apm.collector.storage.dao.ui.IApplicationReferenceMetricUIDAO;
|
||||
import org.apache.skywalking.apm.collector.storage.table.register.Application;
|
||||
import org.apache.skywalking.apm.collector.storage.ui.alarm.Alarm;
|
||||
import org.apache.skywalking.apm.collector.storage.ui.application.ApplicationNode;
|
||||
import org.apache.skywalking.apm.collector.storage.ui.application.ConjecturalNode;
|
||||
import org.apache.skywalking.apm.collector.storage.ui.common.Call;
|
||||
|
|
@ -55,11 +56,13 @@ class TopologyBuilder {
|
|||
private final ApplicationCacheService applicationCacheService;
|
||||
private final ServerService serverService;
|
||||
private final SecondBetweenService secondBetweenService;
|
||||
private final AlarmService alarmService;
|
||||
|
||||
TopologyBuilder(ModuleManager moduleManager) {
|
||||
this.applicationCacheService = moduleManager.find(CacheModule.NAME).getService(ApplicationCacheService.class);
|
||||
this.serverService = new ServerService(moduleManager);
|
||||
this.secondBetweenService = new SecondBetweenService(moduleManager);
|
||||
this.alarmService = new AlarmService(moduleManager);
|
||||
}
|
||||
|
||||
Topology build(List<IApplicationComponentUIDAO.ApplicationComponent> applicationComponents,
|
||||
|
|
@ -67,7 +70,7 @@ class TopologyBuilder {
|
|||
List<IApplicationMetricUIDAO.ApplicationMetric> applicationMetrics,
|
||||
List<IApplicationReferenceMetricUIDAO.ApplicationReferenceMetric> callerReferenceMetric,
|
||||
List<IApplicationReferenceMetricUIDAO.ApplicationReferenceMetric> calleeReferenceMetric,
|
||||
long startSecondTimeBucket, long endSecondTimeBucket) {
|
||||
long startTimeBucket, long endTimeBucket, long startSecondTimeBucket, long endSecondTimeBucket) {
|
||||
Map<Integer, String> components = changeNodeComp2Map(applicationComponents);
|
||||
Map<Integer, Integer> mappings = changeMapping2Map(applicationMappings);
|
||||
|
||||
|
|
@ -91,9 +94,29 @@ class TopologyBuilder {
|
|||
applicationNode.setAvgResponseTime((applicationMetric.getDurations() - applicationMetric.getErrorDurations()) / (applicationMetric.getCalls() - applicationMetric.getErrorCalls()));
|
||||
applicationNode.setApdex(ApdexCalculator.INSTANCE.calculate(applicationMetric.getSatisfiedCount(), applicationMetric.getToleratingCount(), applicationMetric.getFrustratedCount()));
|
||||
applicationNode.setAlarm(false);
|
||||
try {
|
||||
Alarm alarm = alarmService.loadApplicationAlarmList(Const.EMPTY_STRING, startTimeBucket, endTimeBucket, 1, 0);
|
||||
if (alarm.getItems().size() > 0) {
|
||||
applicationNode.setAlarm(true);
|
||||
}
|
||||
} catch (ParseException e) {
|
||||
logger.error(e.getMessage(), e);
|
||||
}
|
||||
|
||||
applicationNode.setNumOfServer(serverService.getAllServer(applicationId, startSecondTimeBucket, endSecondTimeBucket).size());
|
||||
applicationNode.setNumOfServerAlarm(1);
|
||||
applicationNode.setNumOfServiceAlarm(1);
|
||||
try {
|
||||
Alarm alarm = alarmService.loadInstanceAlarmList(Const.EMPTY_STRING, startTimeBucket, endTimeBucket, 1000, 0);
|
||||
applicationNode.setNumOfServerAlarm(alarm.getItems().size());
|
||||
} catch (ParseException e) {
|
||||
logger.error(e.getMessage(), e);
|
||||
}
|
||||
|
||||
try {
|
||||
Alarm alarm = alarmService.loadServiceAlarmList(Const.EMPTY_STRING, startTimeBucket, endTimeBucket, 1000, 0);
|
||||
applicationNode.setNumOfServiceAlarm(alarm.getItems().size());
|
||||
} catch (ParseException e) {
|
||||
logger.error(e.getMessage(), e);
|
||||
}
|
||||
nodes.add(applicationNode);
|
||||
});
|
||||
|
||||
|
|
@ -117,7 +140,7 @@ class TopologyBuilder {
|
|||
int actualTargetId = mappings.getOrDefault(target.getApplicationId(), target.getApplicationId());
|
||||
call.setTarget(actualTargetId);
|
||||
call.setTargetName(applicationCacheService.getApplicationById(actualTargetId).getApplicationCode());
|
||||
call.setAlert(true);
|
||||
call.setAlert(false);
|
||||
call.setCallType(components.get(referenceMetric.getTarget()));
|
||||
try {
|
||||
call.setCallsPerSec(referenceMetric.getCalls() / secondBetweenService.calculate(source.getApplicationId(), startSecondTimeBucket, endSecondTimeBucket));
|
||||
|
|
@ -153,7 +176,7 @@ class TopologyBuilder {
|
|||
call.setSourceName(source.getApplicationCode());
|
||||
call.setTarget(target.getApplicationId());
|
||||
call.setTargetName(target.getApplicationCode());
|
||||
call.setAlert(true);
|
||||
call.setAlert(false);
|
||||
|
||||
if (source.getApplicationId() == Const.NONE_APPLICATION_ID) {
|
||||
call.setCallType(Const.EMPTY_STRING);
|
||||
|
|
|
|||
|
|
@ -0,0 +1,53 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*
|
||||
*/
|
||||
|
||||
package org.apache.skywalking.apm.collector.ui.utils;
|
||||
|
||||
import org.apache.skywalking.apm.collector.storage.ui.common.Pagination;
|
||||
|
||||
/**
|
||||
* @author peng-yongsheng
|
||||
*/
|
||||
public enum PaginationUtils {
|
||||
INSTANCE;
|
||||
|
||||
public Page exchange(Pagination paging) {
|
||||
int limit = paging.getPageSize();
|
||||
int from = paging.getPageSize() * (paging.getPageNum() - 1);
|
||||
|
||||
return new Page(from, limit);
|
||||
}
|
||||
|
||||
public class Page {
|
||||
private int from;
|
||||
private int limit;
|
||||
|
||||
Page(int from, int limit) {
|
||||
this.from = from;
|
||||
this.limit = limit;
|
||||
}
|
||||
|
||||
public int getFrom() {
|
||||
return from;
|
||||
}
|
||||
|
||||
public int getLimit() {
|
||||
return limit;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,48 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*
|
||||
*/
|
||||
|
||||
package org.apache.skywalking.apm.collector.ui.utils;
|
||||
|
||||
import org.apache.skywalking.apm.collector.storage.ui.common.Pagination;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
|
||||
/**
|
||||
* @author peng-yongsheng
|
||||
*/
|
||||
public class PaginationUtilsTestCase {
|
||||
|
||||
@Test
|
||||
public void test() {
|
||||
Pagination pagination = new Pagination();
|
||||
pagination.setPageSize(10);
|
||||
pagination.setPageNum(1);
|
||||
|
||||
PaginationUtils.Page page = PaginationUtils.INSTANCE.exchange(pagination);
|
||||
Assert.assertEquals(0, page.getFrom());
|
||||
Assert.assertEquals(10, page.getLimit());
|
||||
|
||||
pagination = new Pagination();
|
||||
pagination.setPageSize(10);
|
||||
pagination.setPageNum(2);
|
||||
|
||||
page = PaginationUtils.INSTANCE.exchange(pagination);
|
||||
Assert.assertEquals(10, page.getFrom());
|
||||
Assert.assertEquals(10, page.getLimit());
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue