in oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/AggregationQueryService.java [59:132]
private List<SelectedRecord> invokeSortMetrics(TopNCondition condition, Duration duration) throws IOException {
if (!condition.senseScope()) {
return Collections.emptyList();
}
final String valueCName = ValueColumnMetadata.INSTANCE.getValueCName(condition.getName());
List<KeyValue> additionalConditions = null;
if (StringUtil.isNotEmpty(condition.getParentService())) {
if (condition.getNormal() == null) {
return Collections.emptyList();
}
additionalConditions = new ArrayList<>(1);
final String serviceId = IDManager.ServiceID.buildId(condition.getParentService(), condition.getNormal());
additionalConditions.add(new KeyValue(InstanceTraffic.SERVICE_ID, serviceId));
}
final List<SelectedRecord> selectedRecords = getAggregationQueryDAO().sortMetricsDebuggable(
condition, valueCName, duration, additionalConditions);
selectedRecords.forEach(selectedRecord -> {
Owner owner = new Owner();
owner.setScope(condition.getScope());
selectedRecord.setOwner(owner);
switch (condition.getScope()) {
case Service:
final IDManager.ServiceID.ServiceIDDefinition serviceIDDefinition
= IDManager.ServiceID.analysisId(selectedRecord.getId());
selectedRecord.setName(serviceIDDefinition.getName());
owner.setServiceID(selectedRecord.getId());
owner.setServiceName(serviceIDDefinition.getName());
owner.setNormal(serviceIDDefinition.isReal());
break;
case ServiceInstance:
final IDManager.ServiceInstanceID.InstanceIDDefinition instanceIDDefinition
= IDManager.ServiceInstanceID.analysisId(selectedRecord.getId());
final IDManager.ServiceID.ServiceIDDefinition instanceServiceIDDefinition =
IDManager.ServiceID.analysisId(instanceIDDefinition.getServiceId());
/*
* Add the service name into the name if this is global top N.
*/
if (StringUtil.isEmpty(condition.getParentService())) {
selectedRecord.setName(instanceServiceIDDefinition.getName() + " - " + instanceIDDefinition.getName());
} else {
selectedRecord.setName(instanceIDDefinition.getName());
}
owner.setServiceID(instanceIDDefinition.getServiceId());
owner.setServiceName(instanceServiceIDDefinition.getName());
owner.setNormal(instanceServiceIDDefinition.isReal());
owner.setServiceInstanceID(selectedRecord.getId());
owner.setServiceInstanceName(instanceIDDefinition.getName());
break;
case Endpoint:
final IDManager.EndpointID.EndpointIDDefinition endpointIDDefinition
= IDManager.EndpointID.analysisId(selectedRecord.getId());
final IDManager.ServiceID.ServiceIDDefinition endpointServiceIDDefinition =
IDManager.ServiceID.analysisId(endpointIDDefinition.getServiceId());
/*
* Add the service name into the name if this is global top N.
*/
if (StringUtil.isEmpty(condition.getParentService())) {
selectedRecord.setName(endpointServiceIDDefinition.getName()
+ " - " + endpointIDDefinition.getEndpointName());
} else {
selectedRecord.setName(endpointIDDefinition.getEndpointName());
}
owner.setServiceID(endpointIDDefinition.getServiceId());
owner.setServiceName(endpointServiceIDDefinition.getName());
owner.setNormal(endpointServiceIDDefinition.isReal());
owner.setEndpointID(selectedRecord.getId());
owner.setEndpointName(endpointIDDefinition.getEndpointName());
break;
default:
selectedRecord.setName(Const.UNKNOWN);
}
});
return selectedRecords;
}