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

[Collector] Add application id into service metric for UI (#1406)

* #1405
Add application id into service metric for the page jump from overview page to service page.

* Fixed test case error.
上级 8046aa08
......@@ -22,26 +22,21 @@ package org.apache.skywalking.apm.collector.storage.ui.service;
* @author peng-yongsheng
*/
public class ServiceMetric {
private int id;
private String name;
private ServiceInfo service;
private long calls;
private int avgResponseTime;
private int cpm;
public int getId() {
return id;
public ServiceMetric() {
this.service = new ServiceInfo();
}
public void setId(int id) {
this.id = id;
public ServiceInfo getService() {
return service;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
public void setService(ServiceInfo service) {
this.service = service;
}
public int getAvgResponseTime() {
......
......@@ -208,7 +208,8 @@ public class ServiceMetricEsUIDAO extends EsDAO implements IServiceMetricUIDAO {
int serviceId = ((Number)searchHit.getSource().get(ServiceMetricTable.SERVICE_ID.getName())).intValue();
if (!serviceIds.contains(serviceId)) {
ServiceMetric serviceMetric = new ServiceMetric();
serviceMetric.setId(serviceId);
serviceMetric.getService().setId(serviceId);
serviceMetric.getService().setApplicationId(serviceId);
serviceMetric.setCalls(((Number)searchHit.getSource().get(ServiceMetricTable.TRANSACTION_CALLS.getName())).longValue());
serviceMetric.setAvgResponseTime(((Number)searchHit.getSource().get(ServiceMetricTable.TRANSACTION_AVERAGE_DURATION.getName())).intValue());
serviceMetrics.add(serviceMetric);
......
......@@ -208,7 +208,8 @@ public class ServiceMetricShardingjdbcUIDAO extends ShardingjdbcDAO implements I
int serviceId = rs.getInt(ServiceMetricTable.SERVICE_ID.getName());
if (!serviceIds.contains(serviceId)) {
ServiceMetric serviceMetric = new ServiceMetric();
serviceMetric.setId(serviceId);
serviceMetric.getService().setId(serviceId);
serviceMetric.getService().setApplicationId(applicationId);
serviceMetric.setCalls(rs.getLong(ServiceMetricTable.TRANSACTION_CALLS.getName()));
serviceMetric.setAvgResponseTime(rs.getInt(ServiceMetricTable.TRANSACTION_AVERAGE_DURATION.getName()));
serviceMetrics.add(serviceMetric);
......
......@@ -86,14 +86,16 @@ public class ApplicationService {
long startSecondTimeBucket, long endSecondTimeBucket, Integer topN) {
List<ServiceMetric> slowServices = serviceMetricUIDAO.getSlowService(applicationId, step, startTimeBucket, endTimeBucket, topN, MetricSource.Callee);
slowServices.forEach(slowService -> {
ServiceName serviceName = serviceNameCacheService.get(slowService.getId());
ServiceName serviceName = serviceNameCacheService.get(slowService.getService().getId());
try {
slowService.setCpm((int)(slowService.getCalls() / dateBetweenService.minutesBetween(serviceName.getApplicationId(), startSecondTimeBucket, endSecondTimeBucket)));
} catch (ParseException e) {
logger.error(e.getMessage(), e);
}
slowService.setName(serviceName.getServiceName());
slowService.getService().setApplicationId(serviceName.getApplicationId());
slowService.getService().setApplicationName(applicationCacheService.getApplicationById(serviceName.getApplicationId()).getApplicationCode());
slowService.getService().setName(serviceName.getServiceName());
});
return slowServices;
}
......
......@@ -109,8 +109,10 @@ public class ServiceNameService {
long startSecondTimeBucket, long endSecondTimeBucket, Integer topN) {
List<ServiceMetric> slowServices = serviceMetricUIDAO.getSlowService(0, step, startTimeBucket, endTimeBucket, topN, MetricSource.Callee);
slowServices.forEach(slowService -> {
ServiceName serviceName = serviceNameCacheService.get(slowService.getId());
slowService.setName(serviceName.getServiceName());
ServiceName serviceName = serviceNameCacheService.get(slowService.getService().getId());
slowService.getService().setName(serviceName.getServiceName());
slowService.getService().setApplicationId(serviceName.getApplicationId());
slowService.getService().setApplicationName(applicationCacheService.getApplicationById(serviceName.getApplicationId()).getApplicationCode());
try {
slowService.setCpm((int)(slowService.getCalls() / dateBetweenService.minutesBetween(serviceName.getApplicationId(), startSecondTimeBucket, endSecondTimeBucket)));
} catch (ParseException e) {
......
......@@ -115,9 +115,9 @@ public class ApplicationServiceTest {
when(serviceMetricUIDAO.getSlowService(anyInt(), anyObject(), anyLong(), anyLong(), anyInt(), anyObject())).then(invocation -> {
ServiceMetric serviceMetric = new ServiceMetric();
serviceMetric.setCalls(200900);
serviceMetric.setName("test");
serviceMetric.getService().setName("test");
serviceMetric.setAvgResponseTime(100);
serviceMetric.setId(1);
serviceMetric.getService().setId(1);
return Collections.singletonList(serviceMetric);
});
when(serviceNameCacheService.get(anyInt())).then(invocation -> {
......@@ -125,8 +125,9 @@ public class ApplicationServiceTest {
serviceName.setServiceName("serviceName");
return serviceName;
});
mockCache();
when(dateBetweenService.minutesBetween(anyInt(), anyLong(), anyLong())).then(invocation -> 20L);
List<ServiceMetric> slowService = applicationService.getSlowService(-1, duration.getStep(), startTimeBucket, endTimeBucket, startSecondTimeBucket, endSecondTimeBucket, 10);
List<ServiceMetric> slowService = applicationService.getSlowService(1, duration.getStep(), startTimeBucket, endTimeBucket, startSecondTimeBucket, endSecondTimeBucket, 10);
Assert.assertTrue(slowService.get(0).getCpm() > 0);
}
......
......@@ -19,7 +19,7 @@ package org.apache.skywalking.apm.collector.ui.service;
import java.text.ParseException;
import java.util.*;
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.*;
import org.apache.skywalking.apm.collector.storage.dao.ui.*;
import org.apache.skywalking.apm.collector.storage.table.register.ServiceName;
......@@ -42,6 +42,7 @@ public class ServiceNameServiceTest {
private IServiceNameServiceUIDAO serviceNameServiceUIDAO;
private IServiceMetricUIDAO serviceMetricUIDAO;
private ServiceNameCacheService serviceNameCacheService;
private ApplicationCacheService applicationCacheService;
private DateBetweenService dateBetweenService;
private ServiceNameService serverNameService;
private Duration duration;
......@@ -56,9 +57,11 @@ public class ServiceNameServiceTest {
when(moduleManager.find(anyString())).then(invocation -> new MockModule());
serverNameService = new ServiceNameService(moduleManager);
serviceNameCacheService = mock(ServiceNameCacheService.class);
applicationCacheService = mock(ApplicationCacheService.class);
serviceMetricUIDAO = mock(IServiceMetricUIDAO.class);
dateBetweenService = mock(DateBetweenService.class);
Whitebox.setInternalState(serverNameService, "serviceNameCacheService", serviceNameCacheService);
Whitebox.setInternalState(serverNameService, "applicationCacheService", applicationCacheService);
Whitebox.setInternalState(serverNameService, "serviceMetricUIDAO", serviceMetricUIDAO);
Whitebox.setInternalState(serverNameService, "dateBetweenService", dateBetweenService);
duration = new Duration();
......@@ -106,9 +109,10 @@ public class ServiceNameServiceTest {
when(serviceMetricUIDAO.getSlowService(anyInt(), anyObject(), anyLong(), anyLong(), anyInt(), anyObject())).then(invocation -> {
ServiceMetric serviceMetric = new ServiceMetric();
serviceMetric.setCalls(200901);
serviceMetric.setName("test");
serviceMetric.getService().setName("test");
serviceMetric.setAvgResponseTime(100);
serviceMetric.setId(1);
serviceMetric.getService().setApplicationId(1);
serviceMetric.getService().setId(1);
return Collections.singletonList(serviceMetric);
});
when(dateBetweenService.minutesBetween(anyInt(), anyLong(), anyLong())).then(invocation -> 20L);
......@@ -121,7 +125,15 @@ public class ServiceNameServiceTest {
Mockito.when(serviceNameCacheService.get(anyInt())).then(invocation -> {
ServiceName serviceName = new ServiceName();
serviceName.setServiceName("test_name");
serviceName.setApplicationId(1);
return serviceName;
});
Mockito.when(applicationCacheService.getApplicationById(anyInt())).then(invocation -> {
org.apache.skywalking.apm.collector.storage.table.register.Application application = new org.apache.skywalking.apm.collector.storage.table.register.Application();
application.setApplicationId(1);
application.setApplicationCode("test");
return application;
});
}
}
\ No newline at end of file
......@@ -35,8 +35,7 @@ type ServiceInfo {
}
type ServiceMetric {
id: ID!
name: String
service: ServiceInfo!
# The unit is millisecond.
avgResponseTime: Int!
cpm: Int!
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册