Skip to content
This repository was archived by the owner on Oct 6, 2025. It is now read-only.

Commit 818ba36

Browse files
committed
added DSF MailService impl for validation errors and failed processes
Auto generated mails include a links to the Task resource that started the process instance. Mails for validation errors and failed processes can be enabled by corresponding config variables. Fixed wrong logData...Failed method called by the LogError classes of the send and translate processes.
1 parent 4e58921 commit 818ba36

4 files changed

Lines changed: 75 additions & 10 deletions

File tree

Original file line numberDiff line numberDiff line change
@@ -1,41 +1,90 @@
11
package de.netzwerk_universitaetsmedizin.codex.processes.data_transfer.logging;
22

3+
import java.util.Objects;
4+
5+
import org.highmed.dsf.bpe.service.MailService;
36
import org.hl7.fhir.r4.model.IdType;
47
import org.slf4j.Logger;
58
import org.slf4j.LoggerFactory;
9+
import org.springframework.beans.factory.InitializingBean;
610

7-
public class ErrorLogger
11+
public class ErrorLogger implements InitializingBean
812
{
913
private static final Logger validationLogger = LoggerFactory.getLogger("validation-error-logger");
1014
private static final Logger errorLogger = LoggerFactory.getLogger("error-logger");
1115

16+
private final MailService mailService;
17+
18+
private final boolean sendValidationFailedMail;
19+
private final boolean sendProcessFailedMail;
20+
21+
public ErrorLogger(MailService mailService, boolean sendValidationFailedMail, boolean sendProcessFailedMail)
22+
{
23+
this.mailService = mailService;
24+
25+
this.sendValidationFailedMail = sendValidationFailedMail;
26+
this.sendProcessFailedMail = sendProcessFailedMail;
27+
}
28+
29+
@Override
30+
public void afterPropertiesSet() throws Exception
31+
{
32+
Objects.requireNonNull(mailService, "mailService");
33+
}
34+
1235
public void logValidationFailed(IdType taskId)
1336
{
14-
validationLogger.debug("Validation of FHIR resources failed, started by Task {}", taskId.getValue());
37+
validationLogger.debug("Validation of FHIR resources failed in process started by {}",
38+
taskId.toVersionless().getValue());
39+
40+
if (sendValidationFailedMail)
41+
mailService.send("Validation Error",
42+
"Validation of FHIR resources failed in process started by " + taskId.toVersionless().getValue());
1543
}
1644

1745
public void logValidationFailedLocal(IdType taskId)
1846
{
19-
validationLogger.debug("Local validation of FHIR resources failed, started by Task {}", taskId.getValue());
47+
validationLogger.debug("Local validation of FHIR resources failed in process started by {}",
48+
taskId.toVersionless().getValue());
49+
50+
if (sendValidationFailedMail)
51+
mailService.send("Validation Error", "Local validation of FHIR resources failed in process started by "
52+
+ taskId.toVersionless().getValue());
2053
}
2154

2255
public void logValidationFailedRemote(IdType taskId)
2356
{
24-
validationLogger.debug("Remote validation of FHIR resources failed, started by Task {}", taskId.getValue());
57+
validationLogger.debug("Remote validation of FHIR resources failed in process started by {}",
58+
taskId.toVersionless().getValue());
59+
60+
if (sendValidationFailedMail)
61+
mailService.send("Validation Error", "Remote validation of FHIR resources failed in process started by "
62+
+ taskId.toVersionless().getValue());
2563
}
2664

2765
public void logDataSendFailed(IdType taskId)
2866
{
29-
errorLogger.debug("Send process failed, started by Task {}", taskId.getValue());
67+
errorLogger.debug("Send process failed started by {}", taskId.toVersionless().getValue());
68+
69+
if (sendProcessFailedMail)
70+
mailService.send("Proccess Failed", "Send process failed started by " + taskId.toVersionless().getValue());
3071
}
3172

3273
public void logDataTranslateFailed(IdType taskId)
3374
{
34-
errorLogger.debug("Translate process failed, started by Task {}", taskId.getValue());
75+
errorLogger.debug("Translate process failed started by {}", taskId.toVersionless().getValue());
76+
77+
if (sendProcessFailedMail)
78+
mailService.send("Proccess Failed",
79+
"Translate process failed started by " + taskId.toVersionless().getValue());
3580
}
3681

3782
public void logDataReceiveFailed(IdType taskId)
3883
{
39-
errorLogger.debug("Receive process failed, started by Task {}", taskId.getValue());
84+
errorLogger.debug("Receive process failed started by {}", taskId.toVersionless().getValue());
85+
86+
if (sendProcessFailedMail)
87+
mailService.send("Proccess Failed",
88+
"Receive process failed started by " + taskId.toVersionless().getValue());
4089
}
4190
}

codex-process-data-transfer/src/main/java/de/netzwerk_universitaetsmedizin/codex/processes/data_transfer/service/send/LogError.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ protected void doExecute(DelegateExecution execution) throws BpmnError, Exceptio
7777
logger.error("Error while executing process at {}; code: '{}', message: {}", errorSource, errorCode,
7878
errorMessage);
7979

80-
errorLogger.logDataReceiveFailed(getLeadingTaskFromExecutionVariables().getIdElement()
80+
errorLogger.logDataSendFailed(getLeadingTaskFromExecutionVariables().getIdElement()
8181
.withServerBase(getFhirWebserviceClientProvider().getLocalBaseUrl(), ResourceType.Task.name()));
8282
}
8383

codex-process-data-transfer/src/main/java/de/netzwerk_universitaetsmedizin/codex/processes/data_transfer/service/translate/LogError.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ protected void doExecute(DelegateExecution execution) throws BpmnError, Exceptio
7979
logger.warn("Error while executing process at {}; code: '{}', message: {}", errorSource, errorCode,
8080
errorMessage);
8181

82-
errorLogger.logDataReceiveFailed(getLeadingTaskFromExecutionVariables().getIdElement()
82+
errorLogger.logDataTranslateFailed(getLeadingTaskFromExecutionVariables().getIdElement()
8383
.withServerBase(getFhirWebserviceClientProvider().getLocalBaseUrl(), ResourceType.Task.name()));
8484
}
8585

codex-process-data-transfer/src/main/java/de/netzwerk_universitaetsmedizin/codex/processes/data_transfer/spring/config/TransferDataConfig.java

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import java.nio.file.Paths;
66
import java.util.List;
77

8+
import org.highmed.dsf.bpe.service.MailService;
89
import org.highmed.dsf.fhir.authorization.read.ReadAccessHelper;
910
import org.highmed.dsf.fhir.client.FhirWebserviceClientProvider;
1011
import org.highmed.dsf.fhir.organization.EndpointProvider;
@@ -53,6 +54,9 @@ public class TransferDataConfig
5354
@Autowired
5455
private BundleValidatorFactory bundleValidatorFactory;
5556

57+
@Autowired
58+
private MailService mailService;
59+
5660
@ProcessDocumentation(description = "PEM encoded file with trusted certificates to validate the server-certificate of the GECCO FHIR server", processNames = {
5761
"wwwnetzwerk-universitaetsmedizinde_dataSend",
5862
"wwwnetzwerk-universitaetsmedizinde_dataReceive" }, recommendation = "Use docker secret file to configure", example = "/run/secrets/gecco_fhir_server_ca.pem")
@@ -278,6 +282,18 @@ public class TransferDataConfig
278282
@Value("${de.netzwerk.universitaetsmedizin.codex.fttp.proxy.password:#{null}}")
279283
private String fttpProxyPassword;
280284

285+
@ProcessDocumentation(description = "To enable mails being send on validation errors, set to 'true'. This requires the SMPT mail service client to be configured in the DSF", processNames = {
286+
"wwwnetzwerk-universitaetsmedizinde_dataSend", "wwwnetzwerk-universitaetsmedizinde_dataTranslate",
287+
"wwwnetzwerk-universitaetsmedizinde_dataReceive" })
288+
@Value("${de.netzwerk.universitaetsmedizin.codex.mail.sendValidationFailedMails:false}")
289+
private boolean sendValidationFailedMail;
290+
291+
@ProcessDocumentation(description = "To enable a mail being send if a 'send', 'translate' or 'receive' process instance fails, set to 'true'. This requires the SMPT mail service client to be configured in the DSF", processNames = {
292+
"wwwnetzwerk-universitaetsmedizinde_dataSend", "wwwnetzwerk-universitaetsmedizinde_dataTranslate",
293+
"wwwnetzwerk-universitaetsmedizinde_dataReceive" })
294+
@Value("${de.netzwerk.universitaetsmedizin.codex.mail.sendProcessFailedMails:false}")
295+
private boolean sendProcessFailedMail;
296+
281297
@Value("${org.highmed.dsf.bpe.fhir.server.organization.identifier.value}")
282298
private String localIdentifierValue;
283299

@@ -422,6 +438,6 @@ public ErrorOutputParameterGenerator errorOutputParameterGenerator()
422438
@Bean
423439
public ErrorLogger errorLogger()
424440
{
425-
return new ErrorLogger();
441+
return new ErrorLogger(mailService, sendValidationFailedMail, sendProcessFailedMail);
426442
}
427443
}

0 commit comments

Comments
 (0)