diff --git a/docs/en/changes/changes.md b/docs/en/changes/changes.md index 5f9440d020..86fd375b0c 100644 --- a/docs/en/changes/changes.md +++ b/docs/en/changes/changes.md @@ -43,6 +43,7 @@ * Add "execution_hint": "map", "collect_mode": "breadth_first" for aggregation and topology query to improve 5-10x performance. * Clean up scroll contexts after used. * Support autocomplete tags in logs query. +* Enhance Deprecated MetricQuery(v1) getValues querying to asynchronous concurrency query #### UI diff --git a/oap-server/server-query-plugin/query-graphql-plugin/src/main/java/org/apache/skywalking/oap/query/graphql/resolver/MetricQuery.java b/oap-server/server-query-plugin/query-graphql-plugin/src/main/java/org/apache/skywalking/oap/query/graphql/resolver/MetricQuery.java index d267d911b0..2183a34c54 100644 --- a/oap-server/server-query-plugin/query-graphql-plugin/src/main/java/org/apache/skywalking/oap/query/graphql/resolver/MetricQuery.java +++ b/oap-server/server-query-plugin/query-graphql-plugin/src/main/java/org/apache/skywalking/oap/query/graphql/resolver/MetricQuery.java @@ -22,7 +22,9 @@ import graphql.kickstart.tools.GraphQLQueryResolver; import java.io.IOException; import java.util.ArrayList; import java.util.List; +import java.util.stream.Collectors; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.apache.skywalking.oap.query.graphql.type.BatchMetricConditions; import org.apache.skywalking.oap.server.core.query.input.Duration; import org.apache.skywalking.oap.server.core.query.input.Entity; @@ -40,6 +42,7 @@ import org.apache.skywalking.oap.server.library.module.ModuleManager; * @since 8.0.0 This query is replaced by {@link MetricsQuery} */ @Deprecated +@Slf4j public class MetricQuery implements GraphQLQueryResolver { private MetricsQuery query; @@ -59,17 +62,21 @@ public class MetricQuery implements GraphQLQueryResolver { kv.setValue(query.readMetricsValue(condition, duration)); values.addKVInt(kv); } else { - for (final String id : metrics.getIds()) { - KVInt kv = new KVInt(); - kv.setId(id); - + List ints = metrics.getIds().parallelStream().map(id -> { MetricsCondition condition = new MetricsCondition(); condition.setName(metrics.getName()); condition.setEntity(new MockEntity(id)); + try { + KVInt kv = new KVInt(); + kv.setId(id); + kv.setValue(query.readMetricsValue(condition, duration)); + return kv; + } catch (IOException e) { + throw new RuntimeException(e); + } + }).collect(Collectors.toList()); + ints.forEach(v -> values.addKVInt(v)); - kv.setValue(query.readMetricsValue(condition, duration)); - values.addKVInt(kv); - } } return values;