diff --git a/pom.xml b/pom.xml index 7af530e6..ba0f4979 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ dev.dsf dsf-process-ping-pong - 2.0.0.0-SNAPSHOT + 2.0.0.1-SNAPSHOT jar @@ -13,7 +13,8 @@ 17 17 - 1.8.0 + 1.9.0 + 6.2.12 ../dsf @@ -45,14 +46,7 @@ org.springframework spring-web - 6.0.10 - provided - - - - org.slf4j - slf4j-api - 2.0.7 + ${spring.version} provided diff --git a/src/main/java/dev/dsf/bpe/CodeSystem.java b/src/main/java/dev/dsf/bpe/CodeSystem.java index b06d884e..eec4075e 100644 --- a/src/main/java/dev/dsf/bpe/CodeSystem.java +++ b/src/main/java/dev/dsf/bpe/CodeSystem.java @@ -387,6 +387,10 @@ public enum Concept "send-message-http-502", "Sending a message to the remote instance resulted in HTTP status 502" ), + SEND_MESSAGE_HTTP_504( + "send-message-http-504", + "Sending a message to the remote instance resulted in HTTP status 504" + ), SEND_MESSAGE_HTTP_UNEXPECTED( "send-message-http-unexpected", "Sending a message to the remote instance resulted in an unexpected HTTP status code" @@ -428,6 +432,10 @@ public enum Concept "receive-message-http-502", "Received a message and responded with HTTP status 502" ), + RECEIVE_MESSAGE_HTTP_504( + "receive-message-http-504", + "Received a message and responded with HTTP status 504" + ), RECEIVE_MESSAGE_HTTP_UNEXPECTED( "receive-message-http-unexpected", "Received a message and responded with an unexpected HTTP status code" @@ -477,6 +485,10 @@ public enum Concept "local-binary-delete-http-502", "Local instance encountered a HTTP status 502 trying to clean up the binary resource" ), + LOCAL_BINARY_DELETE_HTTP_504( + "local-binary-delete-http-504", + "Local instance encountered a HTTP status 504 trying to clean up the binary resource" + ), LOCAL_BINARY_DELETE_HTTP_UNEXPECTED( "local-binary-delete-http-unexpected", "Local instance encountered an unexpected HTTP status code trying to clean up the binary resource" @@ -510,6 +522,10 @@ public enum Concept "remote-binary-delete-http-502", "Remote instance encountered a HTTP status 502 trying to clean up the binary resource" ), + REMOTE_BINARY_DELETE_HTTP_504( + "remote-binary-delete-http-504", + "Remote instance encountered a HTTP status 504 trying to clean up the binary resource" + ), REMOTE_BINARY_DELETE_HTTP_UNEXPECTED( "remote-binary-delete-http-unexpected", "Remote instance encountered an unexpected HTTP status code trying to clean up the binary resource" @@ -535,6 +551,10 @@ public enum Concept "local-binary-post-http-502", "Local instance encountered a HTTP status 502 trying to post the binary resource to its own FHIR server" ), + LOCAL_BINARY_POST_HTTP_504( + "local-binary-post-http-504", + "Local instance encountered a HTTP status 504 trying to post the binary resource to its own FHIR server" + ), LOCAL_BINARY_POST_HTTP_UNEXPECTED( "local-binary-post-http-unexpected", "Local instance encountered an unexpected HTTP status code trying to post the binary resource to its own FHIR server" @@ -572,6 +592,10 @@ public enum Concept "remote-binary-post-http-502", "Remote instance encountered a HTTP status 502 trying to post the binary resource to its own FHIR server" ), + REMOTE_BINARY_POST_HTTP_504( + "remote-binary-post-http-504", + "Remote instance encountered a HTTP status 504 trying to post the binary resource to its own FHIR server" + ), REMOTE_BINARY_POST_HTTP_UNEXPECTED( "remote-binary-post-http-unexpected", "Remote instance encountered an unexpected HTTP status code trying to post the binary resource to its own FHIR server" @@ -626,6 +650,10 @@ public enum Concept "response-message-timeout-http-502", "Response message timed out. Received HTTP status 502 trying to check request status on the target" ), + RESPONSE_MESSAGE_TIMEOUT_HTTP_504( + "response-message-timeout-http-504", + "Response message timed out. Received HTTP status 504 trying to check request status on the target" + ), RESPONSE_MESSAGE_TIMEOUT_HTTP_UNEXPECTED( "response-message-timeout-http-unexpected", "Response message timed out. Received an unexpected HTTP status code trying to check request status on the target" @@ -654,7 +682,11 @@ public enum Concept ), LOCAL_BINARY_DOWNLOAD_HTTP_502( "local-binary-download-http-502", - "Local instance received HTTP status 500 trying to download the binary resource from the target" + "Local instance received HTTP status 502 trying to download the binary resource from the target" + ), + LOCAL_BINARY_DOWNLOAD_HTTP_504( + "local-binary-download-http-504", + "Local instance received HTTP status 504 trying to download the binary resource from the target" ), LOCAL_BINARY_DOWNLOAD_HTTP_UNEXPECTED( "local-binary-download-http-unexpected", @@ -697,6 +729,10 @@ public enum Concept "remote-binary-download-http-502", "Remote instance received HTTP status 502 trying to download the binary resource from this server" ), + REMOTE_BINARY_DOWNLOAD_HTTP_504( + "remote-binary-download-http-504", + "Remote instance received HTTP status 504 trying to download the binary resource from this server" + ), REMOTE_BINARY_DOWNLOAD_HTTP_UNEXPECTED( "remote-binary-download-http-unexpected", "Remote instance received an unexpected HTTP status trying to download the binary resource from this server" diff --git a/src/main/java/dev/dsf/bpe/ConstantsPing.java b/src/main/java/dev/dsf/bpe/ConstantsPing.java index b7392619..cca333b8 100644 --- a/src/main/java/dev/dsf/bpe/ConstantsPing.java +++ b/src/main/java/dev/dsf/bpe/ConstantsPing.java @@ -61,6 +61,8 @@ private ConstantsPing() public static final String TIMER_INTERVAL_DEFAULT_VALUE = "PT24H"; + public static final String PONG_TIMEOUT_DURATION_DEFAULT_VALUE = "PT30S"; + public static final String BPMN_ERROR_CODE_UNEXPECTED_ERROR = "unexpected-error"; public static final String POTENTIAL_FIX_URL_BASE = "https://dsf.dev/s"; diff --git a/src/main/java/dev/dsf/bpe/PingProcessPluginDefinition.java b/src/main/java/dev/dsf/bpe/PingProcessPluginDefinition.java index e2f1d5c4..cf2ed8b5 100644 --- a/src/main/java/dev/dsf/bpe/PingProcessPluginDefinition.java +++ b/src/main/java/dev/dsf/bpe/PingProcessPluginDefinition.java @@ -13,7 +13,7 @@ public class PingProcessPluginDefinition implements ProcessPluginDefinition public static final String RESOURCE_VERSION = "2.0"; public static final String NON_RESOURCE_VERSION = "0.0"; public static final String VERSION = RESOURCE_VERSION + "." + NON_RESOURCE_VERSION; - public static final LocalDate RELEASE_DATE = LocalDate.of(2023, 9, 12); + public static final LocalDate RELEASE_DATE = LocalDate.of(2025, 10, 21); @Override public String getName() diff --git a/src/main/java/dev/dsf/bpe/listener/PingPongProcessPluginDeploymentStateListener.java b/src/main/java/dev/dsf/bpe/listener/PingPongProcessPluginDeploymentStateListener.java index 5bf59b0b..6bcf9560 100644 --- a/src/main/java/dev/dsf/bpe/listener/PingPongProcessPluginDeploymentStateListener.java +++ b/src/main/java/dev/dsf/bpe/listener/PingPongProcessPluginDeploymentStateListener.java @@ -3,21 +3,27 @@ import java.util.List; import java.util.Map; import java.util.Objects; +import java.util.Optional; import java.util.Set; import java.util.function.BiConsumer; import java.util.stream.Collectors; import org.hl7.fhir.r4.model.Bundle; import org.hl7.fhir.r4.model.CodeSystem; +import org.hl7.fhir.r4.model.Coding; +import org.hl7.fhir.r4.model.DecimalType; import org.hl7.fhir.r4.model.MetadataResource; import org.hl7.fhir.r4.model.Resource; +import org.hl7.fhir.r4.model.StringType; import org.hl7.fhir.r4.model.StructureDefinition; +import org.hl7.fhir.r4.model.Task; import org.springframework.beans.factory.InitializingBean; import dev.dsf.bpe.ConstantsPing; import dev.dsf.bpe.PingProcessPluginDefinition; import dev.dsf.bpe.v1.ProcessPluginApi; import dev.dsf.bpe.v1.ProcessPluginDeploymentStateListener; +import dev.dsf.fhir.client.FhirWebserviceClient; public class PingPongProcessPluginDeploymentStateListener implements ProcessPluginDeploymentStateListener, InitializingBean @@ -52,6 +58,61 @@ public void onProcessesDeployed(List activeProcesses) updateOlderResourcesIfCurrentIsNewestResource(ConstantsPing.STRUCTURE_DEFINITION_URL_EXTENSION_PING_STATUS, StructureDefinition.class, adaptExtensionStructureDefinitions()); + + updateDraftTaskResources(); + } + + private void updateDraftTaskResources() + { + FhirWebserviceClient client = api.getFhirWebserviceClientProvider().getLocalWebserviceClient(); + + List draftTaskResourceProfiles = List.of("http://dsf.dev/fhir/StructureDefinition/task-start-ping", + "http://dsf.dev/fhir/StructureDefinition/task-start-ping-autostart"); + + for (String profile : draftTaskResourceProfiles) + { + Optional optionalTask = searchTask(profile, PingProcessPluginDefinition.RESOURCE_VERSION).getEntry() + .stream().map(Bundle.BundleEntryComponent::getResource).map(Task.class::cast).findFirst(); + + if (optionalTask.isPresent()) + { + Task toUpdate = optionalTask.get(); + adaptDraftTask(toUpdate); + client.update(toUpdate); + } + } + } + + private void adaptDraftTask(Task task) + { + Coding downloadResourceSizeBytesCoding = new Coding(); + downloadResourceSizeBytesCoding.setSystem(dev.dsf.bpe.CodeSystem.DsfPing.URL) + .setCode(dev.dsf.bpe.CodeSystem.DsfPing.Code.DOWNLOAD_RESOURCE_SIZE_BYTES.getValue()) + .setVersion(PingProcessPluginDefinition.RESOURCE_VERSION); + + Optional optInput = api.getTaskHelper().getFirstInputParameter(task, + downloadResourceSizeBytesCoding, DecimalType.class); + if (optInput.isEmpty()) + { + Task.ParameterComponent downloadResourceSizeBytes = new Task.ParameterComponent(); + downloadResourceSizeBytes.getType().addCoding(downloadResourceSizeBytesCoding); + downloadResourceSizeBytes.setValue(new DecimalType(ConstantsPing.DOWNLOAD_RESOURCE_SIZE_BYTES_DEFAULT)); + task.addInput(downloadResourceSizeBytes); + } + + Coding pongTimeoutDurationCoding = new Coding(); + pongTimeoutDurationCoding.setSystem(dev.dsf.bpe.CodeSystem.DsfPing.URL) + .setCode(dev.dsf.bpe.CodeSystem.DsfPing.Code.PONG_TIMEOUT_DURATION_ISO_8601.getValue()) + .setVersion(PingProcessPluginDefinition.RESOURCE_VERSION); + + optInput = api.getTaskHelper().getFirstInputParameter(task, pongTimeoutDurationCoding, StringType.class); + if (optInput.isEmpty()) + { + Task.ParameterComponent pongTimeoutDuration = new Task.ParameterComponent(); + pongTimeoutDuration.getType().addCoding(pongTimeoutDurationCoding); + pongTimeoutDuration.setValue(new StringType(ConstantsPing.PONG_TIMEOUT_DURATION_DEFAULT_VALUE)); + task.addInput(pongTimeoutDuration); + } } private void updateOlderResourcesIfCurrentIsNewestResource(String url, Class type, @@ -74,6 +135,12 @@ private Bundle search(Class type, String url) Map.of("url", List.of(url))); } + private Bundle searchTask(String profile, String version) + { + return api.getFhirWebserviceClientProvider().getLocalWebserviceClient().search(Task.class, + Map.of("_profile", List.of(profile + "|" + version), "status", List.of("draft"))); + } + private List extractAndSortResources(Bundle bundle, Class type, String url) { return bundle.getEntry().stream().filter(Bundle.BundleEntryComponent::hasResource) @@ -104,6 +171,11 @@ private boolean currentIsNewestResource(List resourc .equals(resources.get(resources.size() - 1).getVersion()); } + private Optional getNewestResource(List resources) + { + return resources.isEmpty() ? Optional.empty() : Optional.of(resources.get(resources.size() - 1)); + } + private MinorMajorVersion getMajorMinorVersion(String version) { if (version.matches("\\d\\.\\d")) diff --git a/src/main/java/dev/dsf/bpe/mail/AggregateErrorMailService.java b/src/main/java/dev/dsf/bpe/mail/AggregateErrorMailService.java index 6d92f0b8..57d380cf 100644 --- a/src/main/java/dev/dsf/bpe/mail/AggregateErrorMailService.java +++ b/src/main/java/dev/dsf/bpe/mail/AggregateErrorMailService.java @@ -9,7 +9,6 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.InitializingBean; -import dev.dsf.bpe.ConstantsPing; import dev.dsf.bpe.ProcessError; import dev.dsf.bpe.v1.ProcessPluginApi; import dev.dsf.bpe.v1.variables.Target; @@ -18,15 +17,19 @@ public class AggregateErrorMailService implements InitializingBean { private static final Logger errorMailServiceLogger = LoggerFactory.getLogger("error-mail-service-logger"); private static final String MAIL_MESSAGE_INTRO = "Error(s) while executing ping-pong process:"; - private static final String PING_PROCESS_HAS_ERRORS = "Ping process has errors"; + + public static final String PING_PROCESS_HAS_ERRORS = "Ping process has errors"; + public static final String PONG_PROCESS_HAS_ERRORS = "Pong process has errors"; private final ProcessPluginApi api; private final boolean sendProcessFailedMail; + private final String subject; - public AggregateErrorMailService(ProcessPluginApi api, boolean sendProcessFailedMail) + public AggregateErrorMailService(ProcessPluginApi api, boolean sendProcessFailedMail, String subject) { this.api = api; this.sendProcessFailedMail = sendProcessFailedMail; + this.subject = subject; } @Override @@ -39,7 +42,7 @@ public void send(IdType taskId, Map> errorsPerTarget) { if (sendProcessFailedMail) { - api.getMailService().send(PING_PROCESS_HAS_ERRORS, buildMailMessage(taskId, errorsPerTarget)); + api.getMailService().send(subject, buildMailMessage(taskId, errorsPerTarget)); errorMailServiceLogger.info("Sent e-mail with process errors"); } } @@ -72,40 +75,25 @@ protected String createMessage(Target target, ProcessError error) if (error != null && error.process() != null) { - if (ConstantsPing.PROCESS_NAME_PING.equals(error.process())) - { - b.append(api.getOrganizationProvider().getLocalOrganizationIdentifierValue().orElse("?")); - b.append('/'); - b.append(api.getEndpointProvider().getLocalEndpointIdentifierValue().orElse("?")); - - b.append(" -> "); - - b.append(target.getOrganizationIdentifierValue()); - b.append('/'); - b.append(target.getEndpointIdentifierValue()); - - b.append(":"); - } - else - { - b.append(target.getOrganizationIdentifierValue()); - b.append('/'); - b.append(target.getEndpointIdentifierValue()); - - b.append(" -> "); - - b.append(api.getOrganizationProvider().getLocalOrganizationIdentifierValue().orElse("?")); - b.append('/'); - b.append(api.getEndpointProvider().getLocalEndpointIdentifierValue().orElse("?")); - - b.append(": "); - } + b.append(api.getOrganizationProvider().getLocalOrganizationIdentifierValue().orElse("?")); + b.append('/'); + b.append(api.getEndpointProvider().getLocalEndpointIdentifierValue().orElse("?")); + + b.append(" -> "); + + b.append(target.getOrganizationIdentifierValue()); + b.append('/'); + b.append(target.getEndpointIdentifierValue()); + + b.append(":"); b.append("\n\t"); b.append("Description: ").append(error.concept().getDisplay()); } else { - b.append("Unable to display error because error is null or process is neither of 'ping' or 'pong'"); + b.append("Other:"); + b.append("\n\t"); + b.append("Description: ").append(error.concept().getDisplay()); } return b.toString(); diff --git a/src/main/java/dev/dsf/bpe/message/SendPongMessage.java b/src/main/java/dev/dsf/bpe/message/SendPongMessage.java index c5c34497..7aed532e 100644 --- a/src/main/java/dev/dsf/bpe/message/SendPongMessage.java +++ b/src/main/java/dev/dsf/bpe/message/SendPongMessage.java @@ -1,7 +1,6 @@ package dev.dsf.bpe.message; import java.time.Duration; -import java.util.Objects; import java.util.stream.Stream; import org.camunda.bpm.engine.delegate.DelegateExecution; @@ -13,7 +12,6 @@ import dev.dsf.bpe.ConstantsPing; import dev.dsf.bpe.ExecutionVariables; import dev.dsf.bpe.ProcessErrors; -import dev.dsf.bpe.mail.AggregateErrorMailService; import dev.dsf.bpe.util.ErrorListUtils; import dev.dsf.bpe.util.task.SendTaskErrorConverter; import dev.dsf.bpe.util.task.input.generator.DownloadResourceReferenceGenerator; @@ -31,21 +29,9 @@ public class SendPongMessage extends AbstractTaskMessageSend { private static final Logger logger = LoggerFactory.getLogger(SendPongMessage.class); - private final AggregateErrorMailService errorMailService; - - public SendPongMessage(ProcessPluginApi api, AggregateErrorMailService errorMailService) + public SendPongMessage(ProcessPluginApi api) { super(api); - - this.errorMailService = errorMailService; - } - - @Override - public void afterPropertiesSet() throws Exception - { - super.afterPropertiesSet(); - - Objects.requireNonNull(errorMailService, "errorMailService"); } @Override diff --git a/src/main/java/dev/dsf/bpe/service/GenerateAndStoreResource.java b/src/main/java/dev/dsf/bpe/service/GenerateAndStoreResource.java index 840055d1..ebf39e90 100644 --- a/src/main/java/dev/dsf/bpe/service/GenerateAndStoreResource.java +++ b/src/main/java/dev/dsf/bpe/service/GenerateAndStoreResource.java @@ -111,6 +111,12 @@ public void doExecuteWithErrorHandling(DelegateExecution delegateExecution, Vari errorRemote = new ProcessError(process, CodeSystem.DsfPingError.Concept.REMOTE_BINARY_POST_HTTP_502, ConstantsPing.POTENTIAL_FIX_URL_ERROR_HTTP); break; + case 504: + error = new ProcessError(process, CodeSystem.DsfPingError.Concept.LOCAL_BINARY_POST_HTTP_504, + ConstantsPing.POTENTIAL_FIX_URL_ERROR_HTTP); + errorRemote = new ProcessError(process, CodeSystem.DsfPingError.Concept.REMOTE_BINARY_POST_HTTP_504, + ConstantsPing.POTENTIAL_FIX_URL_ERROR_HTTP); + break; default: error = new ProcessError(process, CodeSystem.DsfPingError.Concept.LOCAL_BINARY_POST_HTTP_UNEXPECTED, ConstantsPing.POTENTIAL_FIX_URL_ERROR_HTTP); diff --git a/src/main/java/dev/dsf/bpe/service/pong/StoreErrors.java b/src/main/java/dev/dsf/bpe/service/pong/StoreErrors.java index 5eca9bc8..571c6881 100644 --- a/src/main/java/dev/dsf/bpe/service/pong/StoreErrors.java +++ b/src/main/java/dev/dsf/bpe/service/pong/StoreErrors.java @@ -1,5 +1,8 @@ package dev.dsf.bpe.service.pong; +import java.util.Map; +import java.util.Objects; + import org.camunda.bpm.engine.delegate.BpmnError; import org.camunda.bpm.engine.delegate.DelegateExecution; import org.hl7.fhir.r4.model.Task; @@ -9,19 +12,33 @@ import dev.dsf.bpe.CodeSystem; import dev.dsf.bpe.ExecutionVariables; import dev.dsf.bpe.ProcessErrors; +import dev.dsf.bpe.mail.AggregateErrorMailService; import dev.dsf.bpe.service.AbstractService; import dev.dsf.bpe.util.ErrorListUtils; import dev.dsf.bpe.util.task.output.generator.PingStatusGenerator; import dev.dsf.bpe.v1.ProcessPluginApi; +import dev.dsf.bpe.v1.variables.Target; import dev.dsf.bpe.v1.variables.Variables; public class StoreErrors extends AbstractService { private static final Logger logger = LoggerFactory.getLogger(StoreErrors.class); - public StoreErrors(ProcessPluginApi api) + private final AggregateErrorMailService errorMailService; + + public StoreErrors(ProcessPluginApi api, AggregateErrorMailService errorMailService) { super(api); + + this.errorMailService = errorMailService; + } + + @Override + public void afterPropertiesSet() throws Exception + { + super.afterPropertiesSet(); + + Objects.requireNonNull(errorMailService, "errorMailService"); } @Override @@ -38,6 +55,10 @@ protected void doExecuteWithErrorHandling(DelegateExecution execution, Variables PingStatusGenerator.updatePongStatusOutput(startTask, status); variables.updateTask(startTask); + + Target target = variables.getTarget(); + errorMailService.send(startTask.getIdElement(), Map.of(target, errors.getEntries())); + logger.debug("Stored errors in task: " + startTask.getIdElement().getValue()); } } diff --git a/src/main/java/dev/dsf/bpe/spring/config/PingConfig.java b/src/main/java/dev/dsf/bpe/spring/config/PingConfig.java index d837e15c..facf729a 100644 --- a/src/main/java/dev/dsf/bpe/spring/config/PingConfig.java +++ b/src/main/java/dev/dsf/bpe/spring/config/PingConfig.java @@ -27,6 +27,7 @@ import dev.dsf.bpe.service.ping.CheckPingTaskStatus; import dev.dsf.bpe.service.ping.DownloadResourceAndMeasureSpeedInSubProcess; import dev.dsf.bpe.service.ping.LogAndSaveError; +import dev.dsf.bpe.service.ping.LogAndSaveSendError; import dev.dsf.bpe.service.ping.LogAndSaveUploadErrorPing; import dev.dsf.bpe.service.ping.SavePong; import dev.dsf.bpe.service.ping.SelectPingTargets; @@ -45,6 +46,7 @@ import dev.dsf.bpe.service.pong.StoreUploadSpeed; import dev.dsf.bpe.v1.ProcessPluginApi; import dev.dsf.bpe.v1.documentation.ProcessDocumentation; +import dev.dsf.bpe.variables.codesystem.dsfpingstatus.CodeValueSerializer; import dev.dsf.bpe.variables.duration.DurationValueSerializer; import dev.dsf.bpe.variables.process_error.ProcessErrorValueSerializer; import dev.dsf.bpe.variables.process_errors.ProcessErrorsValueSerializer; @@ -138,13 +140,15 @@ public SendStartPing sendStartPing() @Bean public AggregateErrorMailService aggregateErrorMailServicePing() { - return new AggregateErrorMailService(api, sendPingProcessFailedMail); + return new AggregateErrorMailService(api, sendPingProcessFailedMail, + AggregateErrorMailService.PING_PROCESS_HAS_ERRORS); } @Bean public AggregateErrorMailService aggregateErrorMailServicePong() { - return new AggregateErrorMailService(api, sendPongProcessFailedMail); + return new AggregateErrorMailService(api, sendPongProcessFailedMail, + AggregateErrorMailService.PONG_PROCESS_HAS_ERRORS); } @@ -201,7 +205,7 @@ public SelectPongTarget selectPongTarget() @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) public SendPongMessage sendPong() { - return new SendPongMessage(api, aggregateErrorMailServicePong()); + return new SendPongMessage(api); } @Bean @@ -297,9 +301,9 @@ public StoreDownloadSpeed storeDownloadSpeed() @Bean @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) - public dev.dsf.bpe.service.ping.LogAndSaveSendError logAndSaveSendError() + public LogAndSaveSendError logAndSaveSendError() { - return new dev.dsf.bpe.service.ping.LogAndSaveSendError(api); + return new LogAndSaveSendError(api); } @Bean @@ -320,7 +324,7 @@ public SaveTimeoutError saveTimeoutError() @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) public StoreErrors storeErrors() { - return new StoreErrors(api); + return new StoreErrors(api, aggregateErrorMailServicePong()); } @Bean @@ -338,9 +342,9 @@ public LogAndSaveUploadErrorPong logAndSaveUploadErrorPong() } @Bean - public dev.dsf.bpe.variables.codesystem.dsfpingstatus.CodeValueSerializer pingStatusCodeSerializer() + public CodeValueSerializer pingStatusCodeSerializer() { - return new dev.dsf.bpe.variables.codesystem.dsfpingstatus.CodeValueSerializer(); + return new CodeValueSerializer(); } @Bean diff --git a/src/main/java/dev/dsf/bpe/util/BinaryResourceDownloader.java b/src/main/java/dev/dsf/bpe/util/BinaryResourceDownloader.java index 1e131187..5777d4ad 100644 --- a/src/main/java/dev/dsf/bpe/util/BinaryResourceDownloader.java +++ b/src/main/java/dev/dsf/bpe/util/BinaryResourceDownloader.java @@ -127,6 +127,13 @@ public DownloadResult download(Variables variables, ProcessPluginApi api, Task t CodeSystem.DsfPingError.Concept.REMOTE_BINARY_DOWNLOAD_HTTP_502, ConstantsPing.POTENTIAL_FIX_URL_ERROR_HTTP); break; + case 504: + error = new ProcessError(process, CodeSystem.DsfPingError.Concept.LOCAL_BINARY_DOWNLOAD_HTTP_504, + ConstantsPing.POTENTIAL_FIX_URL_ERROR_HTTP); + errorRemote = new ProcessError(process, + CodeSystem.DsfPingError.Concept.REMOTE_BINARY_DOWNLOAD_HTTP_504, + ConstantsPing.POTENTIAL_FIX_URL_ERROR_HTTP); + break; default: error = new ProcessError(process, CodeSystem.DsfPingError.Concept.LOCAL_BINARY_DOWNLOAD_HTTP_UNEXPECTED, null); diff --git a/src/main/java/dev/dsf/bpe/util/task/SendTaskErrorConverter.java b/src/main/java/dev/dsf/bpe/util/task/SendTaskErrorConverter.java index 76b43560..213fa58b 100644 --- a/src/main/java/dev/dsf/bpe/util/task/SendTaskErrorConverter.java +++ b/src/main/java/dev/dsf/bpe/util/task/SendTaskErrorConverter.java @@ -315,6 +315,11 @@ yield new ProcessErrorWithStatusCode( CodeSystem.DsfPingError.Concept.SEND_MESSAGE_HTTP_502, ConstantsPing.POTENTIAL_FIX_URL_ERROR_HTTP), CodeSystem.DsfPingStatus.Code.NOT_REACHABLE); + case 504 -> new ProcessErrorWithStatusCode( + new ProcessError(ConstantsPing.PROCESS_NAME_PING, + CodeSystem.DsfPingError.Concept.SEND_MESSAGE_HTTP_504, + ConstantsPing.POTENTIAL_FIX_URL_ERROR_HTTP), + CodeSystem.DsfPingStatus.Code.NOT_REACHABLE); default -> new ProcessErrorWithStatusCode( new ProcessError(ConstantsPing.PROCESS_NAME_PING, CodeSystem.DsfPingError.Concept.SEND_MESSAGE_HTTP_UNEXPECTED, null), @@ -356,6 +361,11 @@ yield new ProcessErrorWithStatusCode( CodeSystem.DsfPingError.Concept.RECEIVE_MESSAGE_HTTP_502, ConstantsPing.POTENTIAL_FIX_URL_ERROR_HTTP), CodeSystem.DsfPingStatus.Code.NOT_REACHABLE); + case 504 -> new ProcessErrorWithStatusCode( + new ProcessError(ConstantsPing.PROCESS_NAME_PING, + CodeSystem.DsfPingError.Concept.RECEIVE_MESSAGE_HTTP_504, + ConstantsPing.POTENTIAL_FIX_URL_ERROR_HTTP), + CodeSystem.DsfPingStatus.Code.NOT_REACHABLE); default -> new ProcessErrorWithStatusCode( new ProcessError(ConstantsPing.PROCESS_NAME_PING, CodeSystem.DsfPingError.Concept.RECEIVE_MESSAGE_HTTP_UNEXPECTED, null), @@ -389,6 +399,11 @@ else if (ConstantsPing.PROCESS_NAME_PONG.equals(process)) CodeSystem.DsfPingError.Concept.SEND_MESSAGE_HTTP_502, ConstantsPing.POTENTIAL_FIX_URL_ERROR_HTTP), CodeSystem.DsfPingStatus.Code.NOT_REACHABLE); + case 504 -> new ProcessErrorWithStatusCode( + new ProcessError(ConstantsPing.PROCESS_NAME_PONG, + CodeSystem.DsfPingError.Concept.SEND_MESSAGE_HTTP_504, + ConstantsPing.POTENTIAL_FIX_URL_ERROR_HTTP), + CodeSystem.DsfPingStatus.Code.NOT_REACHABLE); default -> new ProcessErrorWithStatusCode( new ProcessError(ConstantsPing.PROCESS_NAME_PONG, CodeSystem.DsfPingError.Concept.SEND_MESSAGE_HTTP_UNEXPECTED, null), @@ -416,6 +431,11 @@ else if (ConstantsPing.PROCESS_NAME_PONG.equals(process)) CodeSystem.DsfPingError.Concept.RECEIVE_MESSAGE_HTTP_502, ConstantsPing.POTENTIAL_FIX_URL_ERROR_HTTP), CodeSystem.DsfPingStatus.Code.NOT_REACHABLE); + case 504 -> new ProcessErrorWithStatusCode( + new ProcessError(ConstantsPing.PROCESS_NAME_PONG, + CodeSystem.DsfPingError.Concept.RECEIVE_MESSAGE_HTTP_504, + ConstantsPing.POTENTIAL_FIX_URL_ERROR_HTTP), + CodeSystem.DsfPingStatus.Code.NOT_REACHABLE); default -> new ProcessErrorWithStatusCode( new ProcessError(ConstantsPing.PROCESS_NAME_PONG, CodeSystem.DsfPingError.Concept.RECEIVE_MESSAGE_HTTP_UNEXPECTED, null), diff --git a/src/main/resources/fhir/CodeSystem/dsf-ping-error.xml b/src/main/resources/fhir/CodeSystem/dsf-ping-error.xml index 5724256a..db18184a 100644 --- a/src/main/resources/fhir/CodeSystem/dsf-ping-error.xml +++ b/src/main/resources/fhir/CodeSystem/dsf-ping-error.xml @@ -41,6 +41,10 @@ + + + + @@ -83,6 +87,10 @@ + + + + @@ -132,6 +140,10 @@ + + + + @@ -165,6 +177,10 @@ + + + + @@ -190,6 +206,10 @@ + + + + @@ -227,6 +247,10 @@ + + + + @@ -281,6 +305,10 @@ + + + + @@ -309,7 +337,11 @@ - + + + + + @@ -352,6 +384,10 @@ + + + + diff --git a/src/main/resources/fhir/Task/dsf-task-start-ping-autostart.xml b/src/main/resources/fhir/Task/dsf-task-start-ping-autostart.xml index c74ab172..b7d63573 100644 --- a/src/main/resources/fhir/Task/dsf-task-start-ping-autostart.xml +++ b/src/main/resources/fhir/Task/dsf-task-start-ping-autostart.xml @@ -55,7 +55,9 @@ - + + diff --git a/src/main/resources/fhir/Task/dsf-task-start-ping.xml b/src/main/resources/fhir/Task/dsf-task-start-ping.xml index 97741f32..f83d1b20 100644 --- a/src/main/resources/fhir/Task/dsf-task-start-ping.xml +++ b/src/main/resources/fhir/Task/dsf-task-start-ping.xml @@ -45,7 +45,9 @@ - + +