This is an automated email from the ASF dual-hosted git repository.

riemer pushed a commit to branch adapter-monitoring-single-request
in repository https://gitbox.apache.org/repos/asf/streampipes.git

commit eda4765d9d2187afc49d328fee3d5961ca0bcdb9
Author: Dominik Riemer <[email protected]>
AuthorDate: Sat Aug 10 12:09:32 2024 +0200

    chore: Load adapter metrics in a single request
---
 .../monitoring/pipeline/ExtensionsLogProvider.java     |  8 ++++++++
 .../rest/impl/AdapterMonitoringResource.java           | 11 +++++++++++
 .../src/lib/apis/adapter-monitoring.service.ts         | 10 ++++++++++
 .../existing-adapters/existing-adapters.component.ts   | 18 ++++--------------
 4 files changed, 33 insertions(+), 14 deletions(-)

diff --git 
a/streampipes-pipeline-management/src/main/java/org/apache/streampipes/manager/monitoring/pipeline/ExtensionsLogProvider.java
 
b/streampipes-pipeline-management/src/main/java/org/apache/streampipes/manager/monitoring/pipeline/ExtensionsLogProvider.java
index cf5940cb3e..f5d6009cab 100644
--- 
a/streampipes-pipeline-management/src/main/java/org/apache/streampipes/manager/monitoring/pipeline/ExtensionsLogProvider.java
+++ 
b/streampipes-pipeline-management/src/main/java/org/apache/streampipes/manager/monitoring/pipeline/ExtensionsLogProvider.java
@@ -94,6 +94,14 @@ public enum ExtensionsLogProvider {
     }
   }
 
+  public Map<String, SpMetricsEntry> getMetricsInfoForResources(List<String> 
resourceIds) {
+    return allMetricsInfos
+        .entrySet()
+        .stream()
+        .filter(entry -> resourceIds.contains(entry.getKey()))
+        .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
+  }
+
   public Map<String, SpMetricsEntry> getMetricInfosForPipeline(String 
pipelineId) {
     var pipeline = PipelineManager.getPipeline(pipelineId);
 
diff --git 
a/streampipes-rest/src/main/java/org/apache/streampipes/rest/impl/AdapterMonitoringResource.java
 
b/streampipes-rest/src/main/java/org/apache/streampipes/rest/impl/AdapterMonitoringResource.java
index b3d91cda69..8260c4c9c6 100644
--- 
a/streampipes-rest/src/main/java/org/apache/streampipes/rest/impl/AdapterMonitoringResource.java
+++ 
b/streampipes-rest/src/main/java/org/apache/streampipes/rest/impl/AdapterMonitoringResource.java
@@ -20,6 +20,7 @@
 package org.apache.streampipes.rest.impl;
 
 import 
org.apache.streampipes.manager.monitoring.pipeline.ExtensionsLogProvider;
+import 
org.apache.streampipes.manager.monitoring.pipeline.ExtensionsServiceLogExecutor;
 import org.apache.streampipes.model.monitoring.SpLogEntry;
 import org.apache.streampipes.model.monitoring.SpMetricsEntry;
 
@@ -28,9 +29,11 @@ import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
 import java.util.List;
+import java.util.Map;
 
 @RestController
 @RequestMapping("/api/v2/adapter-monitoring")
@@ -45,4 +48,12 @@ public class AdapterMonitoringResource extends 
AbstractMonitoringResource {
   public ResponseEntity<SpMetricsEntry> 
getMetricsInfoForAdapter(@PathVariable("elementId") String elementId) {
     return 
ok(ExtensionsLogProvider.INSTANCE.getMetricInfosForResource(elementId));
   }
+
+  @GetMapping(path = "metrics", produces = MediaType.APPLICATION_JSON_VALUE)
+  public ResponseEntity<Map<String, SpMetricsEntry>> getMetricsInfos(
+      @RequestParam(value = "filter") List<String> elementIds
+  ) {
+    new ExtensionsServiceLogExecutor().triggerUpdate();
+    return 
ok(ExtensionsLogProvider.INSTANCE.getMetricsInfoForResources(elementIds));
+  }
 }
diff --git 
a/ui/projects/streampipes/platform-services/src/lib/apis/adapter-monitoring.service.ts
 
b/ui/projects/streampipes/platform-services/src/lib/apis/adapter-monitoring.service.ts
index 0ce1098f74..a208e6822c 100644
--- 
a/ui/projects/streampipes/platform-services/src/lib/apis/adapter-monitoring.service.ts
+++ 
b/ui/projects/streampipes/platform-services/src/lib/apis/adapter-monitoring.service.ts
@@ -47,6 +47,16 @@ export class AdapterMonitoringService extends 
AbstractMonitoringService {
             .pipe(map(response => response as SpMetricsEntry));
     }
 
+    getMetricsInfoForAdapters(
+        elementIds: string[],
+    ): Observable<Record<string, SpMetricsEntry>> {
+        return this.http
+            .get(`${this.monitoringBasePath}/metrics`, {
+                params: { filter: elementIds.toString() },
+            })
+            .pipe(map(response => response as Record<string, SpMetricsEntry>));
+    }
+
     protected get monitoringBasePath(): string {
         return 
`${this.platformServicesCommons.apiBasePath}/adapter-monitoring`;
     }
diff --git 
a/ui/src/app/connect/components/existing-adapters/existing-adapters.component.ts
 
b/ui/src/app/connect/components/existing-adapters/existing-adapters.component.ts
index 7d880838e0..fdf0c5986f 100644
--- 
a/ui/src/app/connect/components/existing-adapters/existing-adapters.component.ts
+++ 
b/ui/src/app/connect/components/existing-adapters/existing-adapters.component.ts
@@ -185,22 +185,12 @@ export class ExistingAdaptersComponent implements OnInit, 
OnDestroy {
     }
 
     getMonitoringInfos(adapters: AdapterDescription[]) {
-        const observables = adapters
-            .map(adapter => adapter.elementId)
-            .map(elementId =>
-                this.adapterMonitoringService.getMetricsInfoForAdapter(
-                    elementId,
-                ),
-            );
+        const filteredElementIds = adapters.map(adapter => adapter.elementId);
 
         this.adapterMonitoringService
-            .triggerMonitoringUpdate()
-            .subscribe(() => {
-                zip(...observables).subscribe(metrics => {
-                    adapters.forEach((adapter, index) => {
-                        this.adapterMetrics[adapter.elementId] = 
metrics[index];
-                    });
-                });
+            .getMetricsInfoForAdapters(filteredElementIds)
+            .subscribe(metrics => {
+                this.adapterMetrics = metrics;
             });
     }
 

Reply via email to