提交 d24c3253 编写于 作者: 彭勇升 pengys 提交者: wu-sheng

Do not get alarm metric for overview and application topology. (#1173)

* Do not get alarm metric for overview and application topology.

* Delete server and service alarm metric only.
上级 4c41648c
......@@ -19,6 +19,7 @@
package org.apache.skywalking.apm.collector.storage.dao.ui;
import java.text.ParseException;
import java.util.List;
import org.apache.skywalking.apm.collector.storage.base.dao.DAO;
import org.apache.skywalking.apm.collector.storage.ui.alarm.Alarm;
......@@ -35,9 +36,11 @@ public interface IApplicationAlarmUIDAO extends DAO {
* <p>SQL as: select APPLICATION_ID, ALARM_CONTENT, LAST_TIME_BUCKET, ALARM_TYPE from APPLICATION_ALARM
* where LAST_TIME_BUCKET ge ${startTimeBucket} and LAST_TIME_BUCKET le ${endTimeBucket}
* and ALARM_CONTENT like '%{keyword}%'
* and APPLICATION_ID in (${applicationIds})
* <p>Note: keyword maybe not given
*
* @param keyword fuzzy query
* @param applicationIds may not be given
* @param startTimeBucket start time bucket
* @param endTimeBucket end time bucket
* @param limit limits the number of rows returned by the query
......@@ -45,6 +48,6 @@ public interface IApplicationAlarmUIDAO extends DAO {
* @return application alarm items
* @throws ParseException alarm time parse exception
*/
Alarm loadAlarmList(String keyword, long startTimeBucket, long endTimeBucket, int limit,
int from) throws ParseException;
Alarm loadAlarmList(String keyword, List<Integer> applicationIds, long startTimeBucket, long endTimeBucket,
int limit, int from) throws ParseException;
}
......@@ -19,21 +19,15 @@
package org.apache.skywalking.apm.collector.storage.es.dao.ui;
import java.text.ParseException;
import java.util.List;
import org.apache.skywalking.apm.collector.client.elasticsearch.ElasticSearchClient;
import org.apache.skywalking.apm.collector.core.util.StringUtils;
import org.apache.skywalking.apm.collector.core.util.TimeBucketUtils;
import org.apache.skywalking.apm.collector.core.util.*;
import org.apache.skywalking.apm.collector.storage.dao.ui.IApplicationAlarmUIDAO;
import org.apache.skywalking.apm.collector.storage.es.base.dao.EsDAO;
import org.apache.skywalking.apm.collector.storage.table.alarm.ApplicationAlarmTable;
import org.apache.skywalking.apm.collector.storage.ui.alarm.Alarm;
import org.apache.skywalking.apm.collector.storage.ui.alarm.AlarmItem;
import org.apache.skywalking.apm.collector.storage.ui.alarm.AlarmType;
import org.apache.skywalking.apm.collector.storage.ui.alarm.CauseType;
import org.elasticsearch.action.search.SearchRequestBuilder;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.action.search.SearchType;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.apache.skywalking.apm.collector.storage.ui.alarm.*;
import org.elasticsearch.action.search.*;
import org.elasticsearch.index.query.*;
import org.elasticsearch.search.SearchHit;
/**
......@@ -46,8 +40,8 @@ public class ApplicationAlarmEsUIDAO extends EsDAO implements IApplicationAlarmU
}
@Override
public Alarm loadAlarmList(String keyword, long startTimeBucket, long endTimeBucket, int limit,
int from) throws ParseException {
public Alarm loadAlarmList(String keyword, List<Integer> applicationIds, 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);
......@@ -57,6 +51,9 @@ public class ApplicationAlarmEsUIDAO extends EsDAO implements IApplicationAlarmU
if (StringUtils.isNotEmpty(keyword)) {
boolQueryBuilder.must().add(QueryBuilders.matchQuery(ApplicationAlarmTable.ALARM_CONTENT.getName(), keyword));
}
if (CollectionUtils.isNotEmpty(applicationIds)) {
boolQueryBuilder.must().add(QueryBuilders.termsQuery(ApplicationAlarmTable.APPLICATION_ID.getName(), applicationIds));
}
searchRequestBuilder.setQuery(boolQueryBuilder);
searchRequestBuilder.setSize(limit);
......
......@@ -19,6 +19,7 @@
package org.apache.skywalking.apm.collector.storage.h2.dao.ui;
import java.text.ParseException;
import java.util.List;
import org.apache.skywalking.apm.collector.client.h2.H2Client;
import org.apache.skywalking.apm.collector.storage.dao.ui.IApplicationAlarmUIDAO;
import org.apache.skywalking.apm.collector.storage.h2.base.dao.H2DAO;
......@@ -34,7 +35,8 @@ public class ApplicationAlarmH2UIDAO extends H2DAO implements IApplicationAlarmU
}
@Override
public Alarm loadAlarmList(String keyword, long startTimeBucket, long endTimeBucket, int limit, int from) throws ParseException {
public Alarm loadAlarmList(String keyword, List<Integer> applicationIds, long startTimeBucket, long endTimeBucket,
int limit, int from) throws ParseException {
return null;
}
}
......@@ -18,17 +18,13 @@
package org.apache.skywalking.apm.collector.ui.query;
import java.text.ParseException;
import org.apache.skywalking.apm.collector.core.module.ModuleManager;
import org.apache.skywalking.apm.collector.storage.ui.alarm.Alarm;
import org.apache.skywalking.apm.collector.storage.ui.alarm.AlarmType;
import org.apache.skywalking.apm.collector.storage.ui.common.Duration;
import org.apache.skywalking.apm.collector.storage.ui.common.Pagination;
import org.apache.skywalking.apm.collector.storage.ui.alarm.*;
import org.apache.skywalking.apm.collector.storage.ui.common.*;
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;
import java.text.ParseException;
import org.apache.skywalking.apm.collector.ui.utils.*;
import static java.util.Objects.isNull;
......@@ -60,7 +56,7 @@ public class AlarmQuery implements Query {
switch (alarmType) {
case APPLICATION:
return getAlarmService().loadApplicationAlarmList(keyword, duration.getStep(), startTimeBucket, endTimeBucket, page.getLimit(), page.getFrom());
return getAlarmService().loadApplicationAlarmList(keyword, 0, duration.getStep(), startTimeBucket, endTimeBucket, page.getLimit(), page.getFrom());
case SERVER:
return getAlarmService().loadInstanceAlarmList(keyword, duration.getStep(), startTimeBucket, endTimeBucket, page.getLimit(), page.getFrom());
case SERVICE:
......
......@@ -18,34 +18,23 @@
package org.apache.skywalking.apm.collector.ui.service;
import com.google.gson.Gson;
import com.google.gson.JsonObject;
import com.google.gson.*;
import java.text.ParseException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
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.cache.service.*;
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.IApplicationMappingUIDAO;
import org.apache.skywalking.apm.collector.storage.dao.ui.IInstanceAlarmUIDAO;
import org.apache.skywalking.apm.collector.storage.dao.ui.IInstanceUIDAO;
import org.apache.skywalking.apm.collector.storage.dao.ui.IServiceAlarmUIDAO;
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.dao.ui.*;
import org.apache.skywalking.apm.collector.storage.table.register.*;
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;
import org.slf4j.*;
/**
* @author peng-yongsheng
......@@ -77,13 +66,24 @@ public class AlarmService {
this.serviceNameCacheService = moduleManager.find(CacheModule.NAME).getService(ServiceNameCacheService.class);
}
public Alarm loadApplicationAlarmList(String keyword, Step step, long startTimeBucket, long endTimeBucket,
int limit, int from) throws ParseException {
public Alarm loadApplicationAlarmList(String keyword, int applicationId, Step step, long startTimeBucket,
long endTimeBucket, int limit, int from) throws ParseException {
logger.debug("keyword: {}, startTimeBucket: {}, endTimeBucket: {}, limit: {}, from: {}", keyword, startTimeBucket, endTimeBucket, limit, from);
Alarm alarm = applicationAlarmUIDAO.loadAlarmList(keyword, startTimeBucket, endTimeBucket, limit, from);
List<IApplicationMappingUIDAO.ApplicationMapping> applicationMappings = applicationMappingUIDAO.load(step, startTimeBucket, endTimeBucket);
Map<Integer, Integer> mappings = new HashMap<>();
applicationMappings.forEach(applicationMapping -> mappings.put(applicationMapping.getMappingApplicationId(), applicationMapping.getApplicationId()));
List<Integer> applicationIds = new LinkedList<>();
if (applicationId != 0) {
applicationIds.add(applicationId);
}
applicationMappings.forEach(applicationMapping -> {
mappings.put(applicationMapping.getMappingApplicationId(), applicationMapping.getApplicationId());
if (applicationMapping.getApplicationId() == applicationId) {
applicationIds.add(applicationMapping.getMappingApplicationId());
}
});
Alarm alarm = applicationAlarmUIDAO.loadAlarmList(keyword, applicationIds, startTimeBucket, endTimeBucket, limit, from);
alarm.getItems().forEach(item -> {
String applicationCode = applicationCacheService.getApplicationById(mappings.getOrDefault(item.getId(), item.getId())).getApplicationCode();
......
......@@ -89,7 +89,7 @@ class TopologyBuilder {
applicationNode.setApdex(ApdexCalculator.INSTANCE.calculate(applicationMetric.getSatisfiedCount(), applicationMetric.getToleratingCount(), applicationMetric.getFrustratedCount()));
applicationNode.setAlarm(false);
try {
Alarm alarm = alarmService.loadApplicationAlarmList(Const.EMPTY_STRING, step, startTimeBucket, endTimeBucket, 1, 0);
Alarm alarm = alarmService.loadApplicationAlarmList(Const.EMPTY_STRING, applicationId, step, startTimeBucket, endTimeBucket, 1, 0);
if (alarm.getItems().size() > 0) {
applicationNode.setAlarm(true);
}
......@@ -98,19 +98,6 @@ class TopologyBuilder {
}
applicationNode.setNumOfServer(serverService.getAllServer(applicationId, startSecondTimeBucket, endSecondTimeBucket).size());
try {
Alarm alarm = alarmService.loadInstanceAlarmList(Const.EMPTY_STRING, step, startTimeBucket, endTimeBucket, 1000, 0);
applicationNode.setNumOfServerAlarm(alarm.getItems().size());
} catch (ParseException e) {
logger.error(e.getMessage(), e);
}
try {
Alarm alarm = alarmService.loadServiceAlarmList(Const.EMPTY_STRING, step, startTimeBucket, endTimeBucket, 1000, 0);
applicationNode.setNumOfServiceAlarm(alarm.getItems().size());
} catch (ParseException e) {
logger.error(e.getMessage(), e);
}
nodes.add(applicationNode);
});
......
......@@ -18,18 +18,14 @@
package org.apache.skywalking.apm.collector.ui.query;
import java.text.ParseException;
import org.apache.skywalking.apm.collector.storage.ui.alarm.AlarmType;
import org.apache.skywalking.apm.collector.storage.ui.common.Duration;
import org.apache.skywalking.apm.collector.storage.ui.common.Pagination;
import org.apache.skywalking.apm.collector.storage.ui.common.Step;
import org.apache.skywalking.apm.collector.storage.ui.common.*;
import org.apache.skywalking.apm.collector.ui.service.AlarmService;
import org.junit.Assert;
import org.junit.Test;
import org.junit.*;
import org.mockito.Mockito;
import org.mockito.internal.util.reflection.Whitebox;
import java.text.ParseException;
/**
* @author lican
*/
......@@ -41,18 +37,18 @@ public class AlarmQueryTestCase {
AlarmService alarmService = Mockito.mock(AlarmService.class);
Whitebox.setInternalState(query, "alarmService", alarmService);
Mockito.when(alarmService.loadApplicationAlarmList(
Mockito.anyString(), Mockito.anyObject(),
Mockito.anyLong(), Mockito.anyLong(), Mockito.anyInt(), Mockito.anyInt()
Mockito.anyString(), Mockito.anyInt(), Mockito.anyObject(),
Mockito.anyLong(), Mockito.anyLong(), Mockito.anyInt(), Mockito.anyInt()
)).then(invocation -> {
Object[] arguments = invocation.getArguments();
Assert.assertEquals(201701000000L, arguments[2]);
Assert.assertEquals(201701999999L, arguments[3]);
Assert.assertEquals(201701000000L, arguments[3]);
Assert.assertEquals(201701999999L, arguments[4]);
return null;
});
Mockito.when(alarmService.loadInstanceAlarmList(
Mockito.anyString(), Mockito.anyObject(),
Mockito.anyLong(), Mockito.anyLong(), Mockito.anyInt(), Mockito.anyInt()
Mockito.anyString(), Mockito.anyObject(),
Mockito.anyLong(), Mockito.anyLong(), Mockito.anyInt(), Mockito.anyInt()
)).then(invocation -> {
Object[] arguments = invocation.getArguments();
Assert.assertEquals(201701000000L, arguments[2]);
......@@ -61,8 +57,8 @@ public class AlarmQueryTestCase {
});
Mockito.when(alarmService.loadServiceAlarmList(
Mockito.anyString(), Mockito.anyObject(),
Mockito.anyLong(), Mockito.anyLong(), Mockito.anyInt(), Mockito.anyInt()
Mockito.anyString(), Mockito.anyObject(),
Mockito.anyLong(), Mockito.anyLong(), Mockito.anyInt(), Mockito.anyInt()
)).then(invocation -> {
Object[] arguments = invocation.getArguments();
Assert.assertEquals(201701000000L, arguments[2]);
......
......@@ -17,33 +17,21 @@
package org.apache.skywalking.apm.collector.ui.service;
import com.google.gson.Gson;
import com.google.gson.JsonObject;
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.MockModule;
import org.apache.skywalking.apm.collector.core.module.ModuleManager;
import com.google.gson.*;
import java.text.ParseException;
import java.util.Collections;
import org.apache.skywalking.apm.collector.cache.service.*;
import org.apache.skywalking.apm.collector.core.module.*;
import org.apache.skywalking.apm.collector.storage.dao.ui.*;
import org.apache.skywalking.apm.collector.storage.table.register.Application;
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.alarm.AlarmItem;
import org.apache.skywalking.apm.collector.storage.ui.alarm.AlarmType;
import org.apache.skywalking.apm.collector.storage.ui.alarm.CauseType;
import org.apache.skywalking.apm.collector.storage.ui.common.Duration;
import org.apache.skywalking.apm.collector.storage.ui.common.Step;
import org.apache.skywalking.apm.collector.storage.table.register.*;
import org.apache.skywalking.apm.collector.storage.ui.alarm.*;
import org.apache.skywalking.apm.collector.storage.ui.common.*;
import org.apache.skywalking.apm.collector.storage.ui.overview.AlarmTrend;
import org.apache.skywalking.apm.collector.ui.utils.DurationUtils;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.*;
import org.mockito.Mockito;
import org.mockito.internal.util.reflection.Whitebox;
import java.text.ParseException;
import java.util.Collections;
import static org.mockito.Matchers.*;
import static org.mockito.Mockito.mock;
import static org.powermock.api.mockito.PowerMockito.when;
......@@ -94,7 +82,7 @@ public class AlarmServiceTest {
@Test
public void loadApplicationAlarmList() throws ParseException {
Mockito.when(applicationAlarmUIDAO.loadAlarmList(anyString(), anyLong(), anyLong(), anyInt(), anyInt())).then(invocation -> {
Mockito.when(applicationAlarmUIDAO.loadAlarmList(anyString(), anyList(), anyLong(), anyLong(), anyInt(), anyInt())).then(invocation -> {
return testAlarm();
});
long startTimeBucket = DurationUtils.INSTANCE.startTimeDurationToSecondTimeBucket(duration.getStep(), duration.getStart()) / 100;
......@@ -106,7 +94,7 @@ public class AlarmServiceTest {
return Collections.singletonList(applicationMapping);
});
mockCache();
Alarm alarm = alarmService.loadApplicationAlarmList("keyword", Step.MONTH, startTimeBucket, endTimeBucket, 10, 0);
Alarm alarm = alarmService.loadApplicationAlarmList("keyword", 0, Step.MONTH, startTimeBucket, endTimeBucket, 10, 0);
Assert.assertTrue(alarm.getItems().size() == 1);
Assert.assertNotNull(alarm.getItems().get(0).getTitle());
}
......
......@@ -113,7 +113,7 @@ public class TopologyBuilderTest {
calleeReferenceMetric.add(metric);
mockCache();
when(alarmService.loadApplicationAlarmList(anyString(), anyObject(), anyLong(), anyLong(), anyInt(), anyInt())).then(invocation -> {
when(alarmService.loadApplicationAlarmList(anyString(), anyInt(), anyObject(), anyLong(), anyLong(), anyInt(), anyInt())).then(invocation -> {
Alarm alarm = new Alarm();
alarm.setItems(Collections.singletonList(new AlarmItem()));
return alarm;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册