[
https://issues.apache.org/jira/browse/FLINK-7694?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16236253#comment-16236253
]
ASF GitHub Bot commented on FLINK-7694:
---------------------------------------
Github user tillrohrmann commented on a diff in the pull request:
https://github.com/apache/flink/pull/4757#discussion_r148609556
--- Diff:
flink-runtime/src/main/java/org/apache/flink/runtime/rest/handler/legacy/metrics/JobMetricsHandler.java
---
@@ -48,8 +65,43 @@ public JobMetricsHandler(Executor executor,
MetricFetcher fetcher) {
@Override
protected Map<String, String> getMapFor(Map<String, String> pathParams,
MetricStore metrics) {
MetricStore.ComponentMetricStore job =
metrics.getJobMetricStore(pathParams.get(PARAMETER_JOB_ID));
- return job != null
- ? job.metrics
- : null;
+ return job != null ? job.metrics : null;
+ }
+
+ @Override
+ public CompletableFuture<MetricsOverview>
handleRequest(HandlerRequest<EmptyRequestBody, MetricMessageParameters>
request, DispatcherGateway gateway) {
+ return CompletableFuture.supplyAsync(
+ () -> {
+ fetcher.update();
+ JobID jobID =
request.getPathParameter(JobIDPathParameter.class);
+ List<String> requestedMetrics =
request.getQueryParameter(MetricNameParameter.class);
+ return getMetricsOverview(jobID,
requestedMetrics);
+ },
+ executor);
+ }
+
+ protected MetricsOverview getMetricsOverview(JobID jobID, List<String>
requestedMetrics) {
+ Map<String, String> metricsMap = getMetricsMapByJobId(jobID,
fetcher.getMetricStore());
+ if (metricsMap == null) {
+ return new MetricsOverview();
+ }
+
+ if (requestedMetrics == null || requestedMetrics.isEmpty()) {
+ return new MetricsOverview(
+ metricsMap.entrySet().stream()
+ .map(e -> new
MetricEntry(e.getKey(), e.getValue()))
+
.collect(Collectors.toList()));
+ } else {
+ return new MetricsOverview(
+ requestedMetrics.stream()
+ .filter(e ->
metricsMap.get(e) != null)
+ .map(e -> new
MetricEntry(e, metricsMap.get(e)))
+
.collect(Collectors.toList()));
--- End diff --
I think by not using Java streams we can avoid to do for every `e in
requestedMetrics` two `HashMap` lookups and instead do it with a single lookup.
> Port JobMetricsHandler to new REST handler
> ------------------------------------------
>
> Key: FLINK-7694
> URL: https://issues.apache.org/jira/browse/FLINK-7694
> Project: Flink
> Issue Type: Sub-task
> Components: REST, Webfrontend
> Reporter: Bowen Li
> Assignee: Bowen Li
> Priority: Major
> Fix For: 1.5.0
>
>
--
This message was sent by Atlassian JIRA
(v6.4.14#64029)