Skip to content

Commit 39b579f

Browse files
authored
Add metrics value owner for metrics topN query result (#12737)
1 parent 9e5fb8f commit 39b579f

File tree

7 files changed

+69
-8
lines changed

7 files changed

+69
-8
lines changed

docs/en/changes/changes.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
* Support Kong monitoring.
1414
* Support adding additional attr[0-4] for service level metrics.
1515
* Support async-profiler feature for performance analysis.
16+
* Add metrics value owner for metrics topN query result.
1617

1718
#### UI
1819

oap-server/mqe-rt/src/main/java/org/apache/skywalking/mqe/rt/type/MQEValue.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,12 @@
2020
package org.apache.skywalking.mqe.rt.type;
2121

2222
import lombok.Data;
23+
import org.apache.skywalking.oap.server.core.query.type.Owner;
2324

2425
@Data
2526
public class MQEValue {
2627
private String id;
28+
private Owner owner;
2729
private String value;
2830
private String traceID;
2931

oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/AggregationQueryService.java

Lines changed: 26 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import java.util.ArrayList;
2323
import java.util.Collections;
2424
import java.util.List;
25+
import org.apache.skywalking.oap.server.core.query.type.Owner;
2526
import org.apache.skywalking.oap.server.core.query.type.debugging.DebuggingSpan;
2627
import org.apache.skywalking.oap.server.core.query.type.debugging.DebuggingTraceContext;
2728
import org.apache.skywalking.oap.server.library.util.StringUtil;
@@ -72,38 +73,56 @@ private List<SelectedRecord> invokeSortMetrics(TopNCondition condition, Duration
7273
final List<SelectedRecord> selectedRecords = getAggregationQueryDAO().sortMetricsDebuggable(
7374
condition, valueCName, duration, additionalConditions);
7475
selectedRecords.forEach(selectedRecord -> {
76+
Owner owner = new Owner();
77+
owner.setScope(condition.getScope());
78+
selectedRecord.setOwner(owner);
7579
switch (condition.getScope()) {
7680
case Service:
77-
selectedRecord.setName(IDManager.ServiceID.analysisId(selectedRecord.getId()).getName());
81+
final IDManager.ServiceID.ServiceIDDefinition serviceIDDefinition
82+
= IDManager.ServiceID.analysisId(selectedRecord.getId());
83+
selectedRecord.setName(serviceIDDefinition.getName());
84+
owner.setServiceID(selectedRecord.getId());
85+
owner.setServiceName(serviceIDDefinition.getName());
86+
owner.setNormal(serviceIDDefinition.isReal());
7887
break;
7988
case ServiceInstance:
8089
final IDManager.ServiceInstanceID.InstanceIDDefinition instanceIDDefinition
8190
= IDManager.ServiceInstanceID.analysisId(selectedRecord.getId());
91+
final IDManager.ServiceID.ServiceIDDefinition instanceServiceIDDefinition =
92+
IDManager.ServiceID.analysisId(instanceIDDefinition.getServiceId());
8293
/*
8394
* Add the service name into the name if this is global top N.
8495
*/
8596
if (StringUtil.isEmpty(condition.getParentService())) {
86-
IDManager.ServiceID.ServiceIDDefinition serviceIDDefinition =
87-
IDManager.ServiceID.analysisId(instanceIDDefinition.getServiceId());
88-
selectedRecord.setName(serviceIDDefinition.getName() + " - " + instanceIDDefinition.getName());
97+
selectedRecord.setName(instanceServiceIDDefinition.getName() + " - " + instanceIDDefinition.getName());
8998
} else {
9099
selectedRecord.setName(instanceIDDefinition.getName());
91100
}
101+
owner.setServiceID(instanceIDDefinition.getServiceId());
102+
owner.setServiceName(instanceServiceIDDefinition.getName());
103+
owner.setNormal(instanceServiceIDDefinition.isReal());
104+
owner.setServiceInstanceID(selectedRecord.getId());
105+
owner.setServiceInstanceName(instanceIDDefinition.getName());
92106
break;
93107
case Endpoint:
94108
final IDManager.EndpointID.EndpointIDDefinition endpointIDDefinition
95109
= IDManager.EndpointID.analysisId(selectedRecord.getId());
110+
final IDManager.ServiceID.ServiceIDDefinition endpointServiceIDDefinition =
111+
IDManager.ServiceID.analysisId(endpointIDDefinition.getServiceId());
96112
/*
97113
* Add the service name into the name if this is global top N.
98114
*/
99115
if (StringUtil.isEmpty(condition.getParentService())) {
100-
IDManager.ServiceID.ServiceIDDefinition serviceIDDefinition =
101-
IDManager.ServiceID.analysisId(endpointIDDefinition.getServiceId());
102-
selectedRecord.setName(serviceIDDefinition.getName()
116+
selectedRecord.setName(endpointServiceIDDefinition.getName()
103117
+ " - " + endpointIDDefinition.getEndpointName());
104118
} else {
105119
selectedRecord.setName(endpointIDDefinition.getEndpointName());
106120
}
121+
owner.setServiceID(endpointIDDefinition.getServiceId());
122+
owner.setServiceName(endpointServiceIDDefinition.getName());
123+
owner.setNormal(endpointServiceIDDefinition.isReal());
124+
owner.setEndpointID(selectedRecord.getId());
125+
owner.setEndpointName(endpointIDDefinition.getEndpointName());
107126
break;
108127
default:
109128
selectedRecord.setName(Const.UNKNOWN);
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
/*
2+
* Licensed to the Apache Software Foundation (ASF) under one or more
3+
* contributor license agreements. See the NOTICE file distributed with
4+
* this work for additional information regarding copyright ownership.
5+
* The ASF licenses this file to You under the Apache License, Version 2.0
6+
* (the "License"); you may not use this file except in compliance with
7+
* the License. You may obtain a copy of the License at
8+
*
9+
* http://www.apache.org/licenses/LICENSE-2.0
10+
*
11+
* Unless required by applicable law or agreed to in writing, software
12+
* distributed under the License is distributed on an "AS IS" BASIS,
13+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14+
* See the License for the specific language governing permissions and
15+
* limitations under the License.
16+
*
17+
*/
18+
19+
package org.apache.skywalking.oap.server.core.query.type;
20+
21+
import lombok.Data;
22+
import org.apache.skywalking.oap.server.core.query.enumeration.Scope;
23+
24+
@Data
25+
public class Owner {
26+
private Scope scope;
27+
private String serviceID;
28+
private String serviceName;
29+
private Boolean normal;
30+
private String serviceInstanceID;
31+
private String serviceInstanceName;
32+
private String endpointID;
33+
private String endpointName;
34+
}

oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/type/SelectedRecord.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,4 +43,8 @@ public class SelectedRecord {
4343
* Have value, Only if the record has related trace id. UI should show this as an attached value.
4444
*/
4545
private String refId;
46+
/**
47+
* The owner entity of this record.
48+
*/
49+
private Owner owner;
4650
}

oap-server/server-query-plugin/query-graphql-plugin/src/main/java/org/apache/skywalking/oap/query/graphql/mqe/rt/MQEVisitor.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -217,6 +217,7 @@ private void querySortMetrics(String metricName,
217217
mqeValue.setId(selectedRecord.getName());
218218
mqeValue.setEmptyValue(false);
219219
mqeValue.setDoubleValue(Double.parseDouble(selectedRecord.getValue()));
220+
mqeValue.setOwner(selectedRecord.getOwner());
220221
mqeValueList.add(mqeValue);
221222
});
222223
MQEValues mqeValues = new MQEValues();

0 commit comments

Comments
 (0)