private List invokeSortMetrics()

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;
    }