From e51cfd3df5f55f70083ebc4793962f8bf90c09c1 Mon Sep 17 00:00:00 2001 From: kristenhaerum Date: Mon, 16 Sep 2024 07:12:14 +0200 Subject: [PATCH] Simplify error handling in organization services #deploy-dolly-backend Added onErrorResume to handle exceptions gracefully and avoid blocking. Streamlined status processing by checking for null values and refining status detail mapping logic. These changes enhance code robustness and maintainability. --- .../OrganisasjonConsumer.java | 6 +++-- .../command/GetOrganisasjonCommand.java | 3 ++- .../BestillingOrganisasjonStatusMapper.java | 11 ++++---- .../OrganisasjonBestillingService.java | 27 ++++++++++++------- 4 files changed, 29 insertions(+), 18 deletions(-) diff --git a/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/organisasjonforvalter/OrganisasjonConsumer.java b/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/organisasjonforvalter/OrganisasjonConsumer.java index c877fa52fea..9a31762819b 100644 --- a/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/organisasjonforvalter/OrganisasjonConsumer.java +++ b/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/organisasjonforvalter/OrganisasjonConsumer.java @@ -19,6 +19,7 @@ import org.springframework.stereotype.Service; import org.springframework.web.reactive.function.client.WebClient; import reactor.core.publisher.Flux; +import reactor.core.publisher.Mono; import reactor.util.retry.Retry; import java.time.Duration; @@ -85,8 +86,9 @@ public OrganisasjonDeployStatus hentOrganisasjonStatus(List orgnumre) { .header(HEADER_NAV_CONSUMER_ID, CONSUMER) .retrieve() .bodyToMono(OrganisasjonDeployStatus.class) - .retryWhen(Retry.backoff(3, Duration.ofSeconds(5)) - .filter(WebClientFilter::is5xxException))) + .doOnError(WebClientFilter::logErrorMessage) + .onErrorResume(throwable -> Mono.empty()) + ) .block(); } diff --git a/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/organisasjonforvalter/command/GetOrganisasjonCommand.java b/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/organisasjonforvalter/command/GetOrganisasjonCommand.java index a69e12e3491..9ffd0b43654 100644 --- a/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/organisasjonforvalter/command/GetOrganisasjonCommand.java +++ b/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/organisasjonforvalter/command/GetOrganisasjonCommand.java @@ -37,6 +37,7 @@ public Flux call() { .bodyToFlux(OrganisasjonDetaljer.class) .doOnError(WebClientFilter::logErrorMessage) .retryWhen(Retry.backoff(3, Duration.ofSeconds(5)) - .filter(WebClientFilter::is5xxException)); + .filter(WebClientFilter::is5xxException)) + .onErrorResume(throwable -> Flux.empty()); } } diff --git a/apps/dolly-backend/src/main/java/no/nav/dolly/mapper/BestillingOrganisasjonStatusMapper.java b/apps/dolly-backend/src/main/java/no/nav/dolly/mapper/BestillingOrganisasjonStatusMapper.java index 9ac84438a63..4154ea2282b 100644 --- a/apps/dolly-backend/src/main/java/no/nav/dolly/mapper/BestillingOrganisasjonStatusMapper.java +++ b/apps/dolly-backend/src/main/java/no/nav/dolly/mapper/BestillingOrganisasjonStatusMapper.java @@ -14,6 +14,7 @@ import static java.util.Collections.emptyList; import static java.util.Collections.singletonList; import static java.util.Objects.isNull; +import static java.util.Objects.nonNull; import static no.nav.dolly.domain.resultset.SystemTyper.ORGANISASJON_FORVALTER; @NoArgsConstructor(access = AccessLevel.PRIVATE) @@ -29,8 +30,6 @@ public static List buildOrganisasjonStatusMap(Organ List.of(progress.getOrganisasjonsforvalterStatus() .replace(",q", "$q") - .replace(",t", "$t") - .replace(",u", "$u") .split("\\$")).forEach(status -> { String[] environMsg = status.split(":", 2); if (environMsg.length < 2) { @@ -65,9 +64,11 @@ public static List buildOrganisasjonStatusMap(Organ } private static String getOrgStatusDetailForMiljo(List orgStatuser, String miljo) { - return orgStatuser.stream() + + return nonNull(orgStatuser) ? orgStatuser.stream() .filter(orgStatus -> miljo.equals(orgStatus.getEnvironment())) - .findFirst().orElseGet(OrganisasjonDeployStatus.OrgStatus::new) - .getDetails(); + .map(status -> "%s %s".formatted(status.getDetails(), + status.getDetails().contains("feil") ? status.getError() : "")) + .findFirst().orElse("") : ""; } } diff --git a/apps/dolly-backend/src/main/java/no/nav/dolly/service/OrganisasjonBestillingService.java b/apps/dolly-backend/src/main/java/no/nav/dolly/service/OrganisasjonBestillingService.java index 4552d458c67..e02d2483b12 100644 --- a/apps/dolly-backend/src/main/java/no/nav/dolly/service/OrganisasjonBestillingService.java +++ b/apps/dolly-backend/src/main/java/no/nav/dolly/service/OrganisasjonBestillingService.java @@ -44,6 +44,7 @@ import static no.nav.dolly.bestilling.organisasjonforvalter.domain.OrganisasjonStatusDTO.Status.ERROR; import static no.nav.dolly.bestilling.organisasjonforvalter.domain.OrganisasjonStatusDTO.Status.FAILED; import static no.nav.dolly.util.CurrentAuthentication.getUserId; +import static org.apache.commons.lang3.BooleanUtils.isNotTrue; import static org.apache.commons.lang3.BooleanUtils.isTrue; import static org.apache.logging.log4j.util.Strings.isBlank; import static org.apache.logging.log4j.util.Strings.isNotBlank; @@ -75,13 +76,15 @@ public RsOrganisasjonBestillingStatus fetchBestillingStatusById(Long bestillingI .orElseThrow(() -> new NotFoundException("Fant ikke bestilling med id " + bestillingId)); OrganisasjonBestillingProgress bestillingProgress; - List orgStatusList; + List orgStatusList = null; try { bestillingProgress = progressService.fetchOrganisasjonBestillingProgressByBestillingsId(bestillingId) .stream().findFirst().orElseThrow(() -> new NotFoundException("Status ikke funnet for bestillingId " + bestillingId)); - orgStatusList = getOrgforvalterStatus(bestilling, bestillingProgress); + if (isNotTrue(bestilling.getFerdig())) { + orgStatusList = getOrgforvalterStatus(bestilling, bestillingProgress); + } } catch (WebClientResponseException e) { log.info("Status ennå ikke opprettet for bestilling"); @@ -272,17 +275,21 @@ private List getOrgforvalterStatus(OrganisasjonBestilling bestilling, log.info("Status for org deploy på org: {} - {}", bestillingProgress.getOrganisasjonsnummer(), organisasjonDeployStatus); - var orgStatus = organisasjonDeployStatus.getOrgStatus() - .getOrDefault(bestillingProgress.getOrganisasjonsnummer(), emptyList()); + if (nonNull(organisasjonDeployStatus)) { + var orgStatus = organisasjonDeployStatus.getOrgStatus() + .getOrDefault(bestillingProgress.getOrganisasjonsnummer(), emptyList()); - updateBestilling(bestilling, orgStatus); + updateBestilling(bestilling, orgStatus); - var forvalterStatus = orgStatus.stream() - .map(org -> org.getEnvironment() + ":" + forvalterStatusDetails(org)) - .collect(Collectors.joining(",")); - bestillingProgress.setOrganisasjonsforvalterStatus(forvalterStatus); + var forvalterStatus = orgStatus.stream() + .map(org -> org.getEnvironment() + ":" + forvalterStatusDetails(org)) + .collect(Collectors.joining(",")); + bestillingProgress.setOrganisasjonsforvalterStatus(forvalterStatus); + return orgStatus; - return orgStatus; + } else { + return emptyList(); + } } private String toJson(Object object) {