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 extends Resource> 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 extends MetadataResource> 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 @@
-
+
+