From 913c35332139c5308116f7c4264dee4637015bb7 Mon Sep 17 00:00:00 2001 From: Conor Schofield Date: Fri, 4 Apr 2025 17:17:33 -0700 Subject: [PATCH 1/2] Adding error catching to ArchiverClient --- .../processors/aa/ArchiverClient.java | 38 ++++++++++++++++--- 1 file changed, 33 insertions(+), 5 deletions(-) diff --git a/src/main/java/org/phoebus/channelfinder/processors/aa/ArchiverClient.java b/src/main/java/org/phoebus/channelfinder/processors/aa/ArchiverClient.java index 4ba456ec..abdc3de1 100644 --- a/src/main/java/org/phoebus/channelfinder/processors/aa/ArchiverClient.java +++ b/src/main/java/org/phoebus/channelfinder/processors/aa/ArchiverClient.java @@ -8,6 +8,7 @@ import org.springframework.stereotype.Component; import org.springframework.web.reactive.function.client.WebClient; import org.springframework.web.util.UriComponentsBuilder; +import reactor.core.publisher.Mono; import java.net.URI; import java.time.Duration; @@ -85,6 +86,10 @@ private List> getStatusesFromPvListQuery(String archiverURL, .retrieve() .bodyToMono(String.class) .timeout(Duration.of(TIMEOUT_SECONDS, ChronoUnit.SECONDS)) + .onErrorResume(e -> { + logger.log(Level.WARNING, String.format("There was an error getting status from pv list query response with URI: %s. Error: %s", pvStatusURI, e.getMessage())); + return Mono.empty(); + }) .block(); try { @@ -93,18 +98,25 @@ private List> getStatusesFromPvListQuery(String archiverURL, }); } catch (JsonProcessingException e) { logger.log(Level.WARNING, "Could not parse pv status response: " + e.getMessage()); + } catch (Exception e) { + logger.log(Level.WARNING, String.format("Error when trying to get status from pv list query: %s", e.getMessage())); } return List.of(); } private List> getStatusesFromPvListBody(String archiverURL, List pvs) { + String uriString = archiverURL + PV_STATUS_RESOURCE; String response = client.post() - .uri(URI.create(archiverURL + PV_STATUS_RESOURCE)) + .uri(URI.create(uriString)) .contentType(MediaType.APPLICATION_JSON) .bodyValue(pvs) .retrieve() .bodyToMono(String.class) .timeout(Duration.of(TIMEOUT_SECONDS, ChronoUnit.SECONDS)) + .onErrorResume(e -> { + logger.log(Level.WARNING, String.format("There was an error getting status from pv list body response with URI: %s. Error: %s", uriString, e.getMessage())); + return Mono.empty(); + }) .block(); // Structure of response is @@ -117,19 +129,26 @@ private List> getStatusesFromPvListBody(String archiverURL, }); } catch (JsonProcessingException e) { logger.log(Level.WARNING, "Could not parse pv status response: " + e.getMessage()); + } catch (Exception e) { + logger.log(Level.WARNING, String.format("Error when trying to get status from pv list query: %s", e.getMessage())); } return List.of(); } private void submitAction(String values, String endpoint, String aaURL) { + String uriString = aaURL + MGMT_RESOURCE + endpoint; try { String response = client.post() - .uri(URI.create(aaURL + MGMT_RESOURCE + endpoint)) + .uri(URI.create(uriString)) .contentType(MediaType.APPLICATION_JSON) .bodyValue(values) .retrieve() .bodyToMono(String.class) .timeout(Duration.of(TIMEOUT_SECONDS, ChronoUnit.SECONDS)) + .onErrorResume(e -> { + logger.log(Level.WARNING, String.format("There was an error submitting action response with URI: %s. Error: %s", uriString, e.getMessage())); + return Mono.empty(); + }) .block(); logger.log(Level.FINE, () -> response); @@ -192,12 +211,17 @@ List getAAPolicies(String aaURL) { return List.of(); } try { + String uriString = aaURL + POLICY_RESOURCE; String response = client.get() .uri(URI.create(aaURL + POLICY_RESOURCE)) .retrieve() .bodyToMono(String.class) .timeout(Duration.of(10, ChronoUnit.SECONDS)) - .block(); + .onErrorResume(e -> { + logger.log(Level.WARNING, String.format("There was an error getting version response with URI: %s. Error: %s", uriString, e.getMessage())); + return Mono.empty(); + }) + .block();; Map policyMap = objectMapper.readValue(response, Map.class); return new ArrayList<>(policyMap.keySet()); } catch (Exception e) { @@ -209,13 +233,17 @@ List getAAPolicies(String aaURL) { String getVersion(String archiverURL) { try { - + String uriString = archiverURL + ARCHIVER_VERSIONS_RESOURCE; String response = client.get() .uri(URI.create(archiverURL + ARCHIVER_VERSIONS_RESOURCE)) .retrieve() .bodyToMono(String.class) .timeout(Duration.of(TIMEOUT_SECONDS, ChronoUnit.SECONDS)) - .block(); + .onErrorResume(e -> { + logger.log(Level.WARNING, String.format("There was an error getting version response with URI: %s. Error: %s", uriString, e.getMessage())); + return Mono.empty(); + }) + .block();; Map versionMap = objectMapper.readValue(response, Map.class); String[] mgmtVersion = versionMap.get("mgmt_version").split("Archiver Appliance Version "); if (mgmtVersion.length > 1) { From e8c8455907cb4be05b8b56489b549fbcbf47637c Mon Sep 17 00:00:00 2001 From: Conor Schofield Date: Mon, 7 Apr 2025 12:05:31 -0700 Subject: [PATCH 2/2] create showError method --- .../processors/aa/ArchiverClient.java | 41 ++++++++----------- 1 file changed, 16 insertions(+), 25 deletions(-) diff --git a/src/main/java/org/phoebus/channelfinder/processors/aa/ArchiverClient.java b/src/main/java/org/phoebus/channelfinder/processors/aa/ArchiverClient.java index abdc3de1..94134d31 100644 --- a/src/main/java/org/phoebus/channelfinder/processors/aa/ArchiverClient.java +++ b/src/main/java/org/phoebus/channelfinder/processors/aa/ArchiverClient.java @@ -76,7 +76,8 @@ List> getStatuses(Map archivePVS, } private List> getStatusesFromPvListQuery(String archiverURL, List pvs) { - URI pvStatusURI = UriComponentsBuilder.fromUri(URI.create(archiverURL + PV_STATUS_RESOURCE)) + String uriString = archiverURL + PV_STATUS_RESOURCE; + URI pvStatusURI = UriComponentsBuilder.fromUri(URI.create(uriString)) .queryParam("pv", String.join(",", pvs)) .build() .toUri(); @@ -86,10 +87,7 @@ private List> getStatusesFromPvListQuery(String archiverURL, .retrieve() .bodyToMono(String.class) .timeout(Duration.of(TIMEOUT_SECONDS, ChronoUnit.SECONDS)) - .onErrorResume(e -> { - logger.log(Level.WARNING, String.format("There was an error getting status from pv list query response with URI: %s. Error: %s", pvStatusURI, e.getMessage())); - return Mono.empty(); - }) + .onErrorResume(e -> showError(uriString, e)) .block(); try { @@ -113,10 +111,7 @@ private List> getStatusesFromPvListBody(String archiverURL, .retrieve() .bodyToMono(String.class) .timeout(Duration.of(TIMEOUT_SECONDS, ChronoUnit.SECONDS)) - .onErrorResume(e -> { - logger.log(Level.WARNING, String.format("There was an error getting status from pv list body response with URI: %s. Error: %s", uriString, e.getMessage())); - return Mono.empty(); - }) + .onErrorResume(e -> showError(uriString, e)) .block(); // Structure of response is @@ -145,10 +140,7 @@ private void submitAction(String values, String endpoint, String aaURL) { .retrieve() .bodyToMono(String.class) .timeout(Duration.of(TIMEOUT_SECONDS, ChronoUnit.SECONDS)) - .onErrorResume(e -> { - logger.log(Level.WARNING, String.format("There was an error submitting action response with URI: %s. Error: %s", uriString, e.getMessage())); - return Mono.empty(); - }) + .onErrorResume(e -> showError(uriString, e)) .block(); logger.log(Level.FINE, () -> response); @@ -213,15 +205,12 @@ List getAAPolicies(String aaURL) { try { String uriString = aaURL + POLICY_RESOURCE; String response = client.get() - .uri(URI.create(aaURL + POLICY_RESOURCE)) + .uri(URI.create(uriString)) .retrieve() .bodyToMono(String.class) .timeout(Duration.of(10, ChronoUnit.SECONDS)) - .onErrorResume(e -> { - logger.log(Level.WARNING, String.format("There was an error getting version response with URI: %s. Error: %s", uriString, e.getMessage())); - return Mono.empty(); - }) - .block();; + .onErrorResume(e -> showError(uriString, e)) + .block(); Map policyMap = objectMapper.readValue(response, Map.class); return new ArrayList<>(policyMap.keySet()); } catch (Exception e) { @@ -235,15 +224,12 @@ String getVersion(String archiverURL) { try { String uriString = archiverURL + ARCHIVER_VERSIONS_RESOURCE; String response = client.get() - .uri(URI.create(archiverURL + ARCHIVER_VERSIONS_RESOURCE)) + .uri(URI.create(uriString)) .retrieve() .bodyToMono(String.class) .timeout(Duration.of(TIMEOUT_SECONDS, ChronoUnit.SECONDS)) - .onErrorResume(e -> { - logger.log(Level.WARNING, String.format("There was an error getting version response with URI: %s. Error: %s", uriString, e.getMessage())); - return Mono.empty(); - }) - .block();; + .onErrorResume(e -> showError(uriString, e)) + .block(); Map versionMap = objectMapper.readValue(response, Map.class); String[] mgmtVersion = versionMap.get("mgmt_version").split("Archiver Appliance Version "); if (mgmtVersion.length > 1) { @@ -256,4 +242,9 @@ String getVersion(String archiverURL) { } return ""; } + + private Mono showError(String uriString, Throwable error) { + logger.log(Level.WARNING, String.format("There was an error getting a response with URI: %s. Error: %s", uriString, error.getMessage())); + return Mono.empty(); + } }