diff --git a/src/main/java/fr/soeretempo/gwt/server/resources/mail/MailService.java b/src/main/java/fr/soeretempo/gwt/server/resources/mail/MailService.java index 50720501b0d813a0e97f39eceaa73e45cff6dfff..08cc1a943a267c54dd4f2fdbbfb740a4c39958c8 100644 --- a/src/main/java/fr/soeretempo/gwt/server/resources/mail/MailService.java +++ b/src/main/java/fr/soeretempo/gwt/server/resources/mail/MailService.java @@ -313,10 +313,22 @@ public class MailService { sendEmailToAdminTeam(mailBody, adminI18n.i18n("emailFailedSynchronizationSubject", dataSourceName)); } + /** + * Send an email to admin when a synchronization failed due to timeout. + * + * @param dataSource the data source for which synchronization failed + */ + public void notifyUnreacheableDataSource(final DataSource dataSource) { + LOGGER.traceEntry(); + final String dataSourceName = dataSource.getName(); + final String mailBody = adminI18n.i18n("emailUnreacheableDataSourceBody", dataSourceName); + sendEmailToAdminTeam(mailBody, adminI18n.i18n("emailFailedSynchronizationSubject", dataSourceName)); + } + /** * Email an account on non-verified email addresses to remind to validate them. - * @param account - * account which has no verified email + * + * @param account account which has no verified email */ public void remindToValidateEmailAddress(final Account account) { LOGGER.traceEntry(); @@ -702,9 +714,9 @@ public class MailService { locale = Locale.FRENCH; final String supportEmail = props.getProperty(MAIL_SMTP_TO); final LocalDateTime date = LocalDateTime.now(); - final DateTimeFormatter dtf = DateTimeFormatter.ofPattern("dd MMMM, HH:mm:ss"); + final DateTimeFormatter dtf = DateTimeFormatter.ofPattern("dd MMMM, HH:mm:ss", locale); final Mail mail = new Mail(subject); - mail.setMessage(dtf.format(date) + "\n\n" + adminI18n.i18n("hello") + " " + supportEmail + ",\n\n" + mailBody); + mail.setMessage(dtf.format(date) + "\n\n" + adminI18n.i18n("hello", supportEmail) + "\n\n" + mailBody); mail.setTo(supportEmail); // Sending try { diff --git a/src/main/java/fr/soeretempo/gwt/server/synchrocache/SynchronizationData.java b/src/main/java/fr/soeretempo/gwt/server/synchrocache/SynchronizationData.java index 595e5fee99d40455b3b4e20f4ab20ed6bebec304..47b340112ed8df40e2f9e282ae590a4823ad1b91 100644 --- a/src/main/java/fr/soeretempo/gwt/server/synchrocache/SynchronizationData.java +++ b/src/main/java/fr/soeretempo/gwt/server/synchrocache/SynchronizationData.java @@ -22,6 +22,7 @@ import java.io.PrintWriter; import java.io.StringWriter; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; +import java.net.SocketTimeoutException; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.HashMap; @@ -779,6 +780,10 @@ public class SynchronizationData implements Runnable { LOGGER.trace("End of synchronization for {}", datasource); return true; } catch (final Exception e) { + if (e.getCause() instanceof SocketTimeoutException) { + mailService.notifyUnreacheableDataSource(datasource); + return false; + } LOGGER.throwing(e); final StringWriter errors = new StringWriter(); e.printStackTrace(new PrintWriter(errors)); diff --git a/src/main/resources/fr/soeretempo/gwt/server/resources/i18n/TempoConstants.properties b/src/main/resources/fr/soeretempo/gwt/server/resources/i18n/TempoConstants.properties index 2ac28ed36dd3b56cecffc93efc411bbab4482864..2e9c289ac953d8d9fee19e2db7bd85bb370a6f6d 100644 --- a/src/main/resources/fr/soeretempo/gwt/server/resources/i18n/TempoConstants.properties +++ b/src/main/resources/fr/soeretempo/gwt/server/resources/i18n/TempoConstants.properties @@ -20,7 +20,7 @@ unknownLicences=Unknown licence(s) msgDownloadFileProblem=There was a problem creating the archive. Please contact the administrator. -hello=Hello +hello=Hello %s, accountHasNoMailBody=Account %s does not have any mails registered and was granted an access to %s accountHasNoMailSubject=TEMPO: Admin note - Account missing at least an email additionalData=Additional data diff --git a/src/main/resources/fr/soeretempo/gwt/server/resources/i18n/TempoConstants_fr.properties b/src/main/resources/fr/soeretempo/gwt/server/resources/i18n/TempoConstants_fr.properties index 599247763709e5b5a63cf168a45a99547d9b8424..22c6f2dc8bddf800078f8f92165bcdb9774f59b0 100644 --- a/src/main/resources/fr/soeretempo/gwt/server/resources/i18n/TempoConstants_fr.properties +++ b/src/main/resources/fr/soeretempo/gwt/server/resources/i18n/TempoConstants_fr.properties @@ -22,7 +22,7 @@ unknownLicences=Licence(s) inconnu(es) msgDownloadFileProblem=Il y a eu un probl\u00e8me lors de la cr\u00e9ation de l'archive. Veuillez contacter l'administrateur. -hello=Bonjour +hello=Bonjour %s, accountHasNoMailBody=Vous recevez ce courriel car la personne titulaire du compte %s n'a aucune adresse courriel enregistr\u00e9e, et donc n'a pas pu \u00eatre pr\u00e9venue que l'acc\u00e8s \u00e0 %s lui a \u00e9t\u00e9 accord\u00e9. accountHasNoMailSubject=TEMPO : Notification admin - Acc\u00e8s accord\u00e9 \u00e0 un compte qui n'a pas d'adresse courriel additionalData=Donn\u00e9es additionnelles @@ -58,6 +58,9 @@ emailNotSignedCharterSubject=TEMPO : charte de %s non sign\u00e9e emailSignature=\n\nCordialement\n-- \nL'\u00e9quipe TEMPO\n%s\n-- \nCe message vous est envoy\u00e9 automatiquement, merci de ne pas y r\u00e9pondre.\nVous pouvez \u00e0 la place contacter support-tempo@inrae.fr. emailSignedCharterBody=Bonjour %s,\n\nNous accusons r\u00e9ception de votre signature de la charte de %s.\nVotre demande d'acc\u00e8s sera examin\u00e9e sous 8 jours. Vous recevrez un courriel lorsque votre acc\u00e8s sera valid\u00e9 et vous pourrez explorer cette source de donn\u00e9es via TEMPO. emailSignedCharterSubject=TEMPO : charte de %s sign\u00e9e +emailUnreacheableDataSourceBody=La synchronisation avec la source de donn\u00e9es %s a \u00e9chou\u00e9 car le serveur n'a pas r\u00e9epondu dans les d\u00e9lais.\n\ +%s +emailUnreacheableDataSourceSubject=TEMPO : Notification admin - D\u00e9lai d\u00e9pass\u00e9 pour la synchronisation de %s emailValidatedAccessBody=Bonjour %s,\n\nLe %s, vous avez sign\u00e9 la charte de %s.\nL'acc\u00e8s est valid\u00e9, vous pouvez d\u00e9sormais explorer cette source de donn\u00e9es via TEMPO. emailValidatedAccessSubject=TEMPO : acc\u00e8s autoris\u00e9 aux donn\u00e9es de %s emailValidatorsDeniedAccessBody=Bonjour,\n\nLe %s, %s a sign\u00e9 la charte de %s.\nL'acc\u00e8s vient d'\u00eatre refus\u00e9 par %s.\n\nVous recevez ce message car vous validez les demandes d'acc\u00e8s \u00e0 %s.