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.
This commit is contained in:
parent
4c41648c05
commit
d24c325384
|
|
@ -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,32 +17,20 @@
|
|||
|
||||
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 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.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.mockito.Mockito;
|
||||
import org.mockito.internal.util.reflection.Whitebox;
|
||||
|
||||
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.*;
|
||||
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.*;
|
||||
import org.mockito.Mockito;
|
||||
import org.mockito.internal.util.reflection.Whitebox;
|
||||
|
||||
import static org.mockito.Matchers.*;
|
||||
import static org.mockito.Mockito.mock;
|
||||
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Reference in New Issue