diff --git a/apm-collector/apm-collector-analysis/analysis-alarm/alarm-provider/pom.xml b/apm-collector/apm-collector-analysis/analysis-alarm/alarm-provider/pom.xml
index 1b2babe5e035cfd255ef201fb03d6b3e2db0fec7..22d24a16ad680f5127b22daf9a1530df3470ed12 100644
--- a/apm-collector/apm-collector-analysis/analysis-alarm/alarm-provider/pom.xml
+++ b/apm-collector/apm-collector-analysis/analysis-alarm/alarm-provider/pom.xml
@@ -51,6 +51,11 @@
collector-storage-define
${project.version}
+
+ org.apache.skywalking
+ collector-cache-define
+ ${project.version}
+
org.apache.skywalking
analysis-worker-model
diff --git a/apm-collector/apm-collector-analysis/analysis-alarm/alarm-provider/src/main/java/org/apache/skywalking/apm/collector/analysis/alarm/provider/worker/AlarmAssertWorker.java b/apm-collector/apm-collector-analysis/analysis-alarm/alarm-provider/src/main/java/org/apache/skywalking/apm/collector/analysis/alarm/provider/worker/AlarmAssertWorker.java
index 0aeabca1b9afedd65c6868123b852d953523a2b8..244d2ad869fab3b076254cd7d9354f4edf4c5c19 100644
--- a/apm-collector/apm-collector-analysis/analysis-alarm/alarm-provider/src/main/java/org/apache/skywalking/apm/collector/analysis/alarm/provider/worker/AlarmAssertWorker.java
+++ b/apm-collector/apm-collector-analysis/analysis-alarm/alarm-provider/src/main/java/org/apache/skywalking/apm/collector/analysis/alarm/provider/worker/AlarmAssertWorker.java
@@ -49,6 +49,8 @@ public abstract class AlarmAssertWorker {
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 {
+ 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();
}
diff --git a/apm-collector/apm-collector-analysis/analysis-alarm/alarm-provider/src/main/java/org/apache/skywalking/apm/collector/analysis/alarm/provider/worker/instance/InstanceMetricAlarmAssertWorker.java b/apm-collector/apm-collector-analysis/analysis-alarm/alarm-provider/src/main/java/org/apache/skywalking/apm/collector/analysis/alarm/provider/worker/instance/InstanceMetricAlarmAssertWorker.java
index 2b02dd7df7451e62977213b721e1446056224fa7..a0e9ad1c2973364cf292bf4f377863c402f43338 100644
--- a/apm-collector/apm-collector-analysis/analysis-alarm/alarm-provider/src/main/java/org/apache/skywalking/apm/collector/analysis/alarm/provider/worker/instance/InstanceMetricAlarmAssertWorker.java
+++ b/apm-collector/apm-collector-analysis/analysis-alarm/alarm-provider/src/main/java/org/apache/skywalking/apm/collector/analysis/alarm/provider/worker/instance/InstanceMetricAlarmAssertWorker.java
@@ -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 {
+ 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 {
+ 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();
}
diff --git a/apm-collector/apm-collector-analysis/analysis-alarm/alarm-provider/src/main/java/org/apache/skywalking/apm/collector/analysis/alarm/provider/worker/service/ServiceMetricAlarmAssertWorker.java b/apm-collector/apm-collector-analysis/analysis-alarm/alarm-provider/src/main/java/org/apache/skywalking/apm/collector/analysis/alarm/provider/worker/service/ServiceMetricAlarmAssertWorker.java
index e7a8242cc5c5733849d367c072eb337e049c048c..e5680d9647c3e7f74b4ebc384b2b0c6dc87ead84 100644
--- a/apm-collector/apm-collector-analysis/analysis-alarm/alarm-provider/src/main/java/org/apache/skywalking/apm/collector/analysis/alarm/provider/worker/service/ServiceMetricAlarmAssertWorker.java
+++ b/apm-collector/apm-collector-analysis/analysis-alarm/alarm-provider/src/main/java/org/apache/skywalking/apm/collector/analysis/alarm/provider/worker/service/ServiceMetricAlarmAssertWorker.java
@@ -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 {
+ 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 {
- 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 getTopNSlowService(Duration duration, int topN) throws ParseException {
diff --git a/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/AlarmService.java b/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/AlarmService.java
index 22a8be095895a6e3564b72213d476ff2c42af5a2..62bd60bfa06a33831ca5fb1f9d5553d97894a950 100644
--- a/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/AlarmService.java
+++ b/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/AlarmService.java
@@ -18,17 +18,25 @@
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;
@@ -45,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);
@@ -57,24 +70,66 @@ 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,
@@ -95,4 +150,13 @@ public class AlarmService {
});
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;
+ }
}
diff --git a/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/ApplicationService.java b/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/ApplicationService.java
index 3080af6feb5a438c3136a64b6fccb9db88fdcb97..4493781c693726ab75c86812eddc039255122e62 100644
--- a/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/ApplicationService.java
+++ b/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/ApplicationService.java
@@ -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 conjecturalApps = networkAddressUIDAO.getConjecturalApps();
conjecturalApps.forEach(conjecturalApp -> {
String name = ServerTypeDefine.getInstance().getServerType(conjecturalApp.getId());
diff --git a/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/ServerService.java b/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/ServerService.java
index f3e7d85cf105f3a654d7ddb0a8bf418fd36bb224..81a1c66b73772f8c2e02708f8befc1091ec48a1a 100644
--- a/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/ServerService.java
+++ b/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/ServerService.java
@@ -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 durationPoints = DurationUtils.INSTANCE.getDurationPoints(step, startTimeBucket, endTimeBucket);
IMemoryMetricUIDAO.Trend heapMemoryTrend = memoryMetricUIDAO.getHeapMemoryTrend(instanceId, step, durationPoints);