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