diff --git a/duniter4j-es-subscription/src/main/java/org/duniter/elasticsearch/subscription/PluginSettings.java b/duniter4j-es-subscription/src/main/java/org/duniter/elasticsearch/subscription/PluginSettings.java index 4d1473f82ff178d93af2ff3266c497404bd0b811..cff17baeb2507aabebb0ad7ab8f26eac43342f40 100644 --- a/duniter4j-es-subscription/src/main/java/org/duniter/elasticsearch/subscription/PluginSettings.java +++ b/duniter4j-es-subscription/src/main/java/org/duniter/elasticsearch/subscription/PluginSettings.java @@ -91,6 +91,15 @@ public class PluginSettings extends AbstractLifecycleComponent<PluginSettings> { return settings.getAsBoolean("duniter.subscription.email.atStartup", false); } + /** + * Should email subscription execute as DEBUG mode ? + * @return + */ + public boolean isEmailSubscriptionsDebug() { + return settings.getAsBoolean("duniter.subscription.email.debug", false); + } + + /** * Day of the week to trigger weekly email subscription (default: 2 = monday) * @return diff --git a/duniter4j-es-subscription/src/main/java/org/duniter/elasticsearch/subscription/service/SubscriptionService.java b/duniter4j-es-subscription/src/main/java/org/duniter/elasticsearch/subscription/service/SubscriptionService.java index 8a955cbca1bd254ba38f1bd93c44da6b2d2eb463..86d613713d5a86641372e6e814fcbb41e5e5ba63 100644 --- a/duniter4j-es-subscription/src/main/java/org/duniter/elasticsearch/subscription/service/SubscriptionService.java +++ b/duniter4j-es-subscription/src/main/java/org/duniter/elasticsearch/subscription/service/SubscriptionService.java @@ -152,8 +152,8 @@ public class SubscriptionService extends AbstractService { logger.warn(I18n.t("duniter4j.es.subscription.email.start", pluginSettings.getEmailSubscriptionsExecuteHour(), dayOfWeek)); } - // Execution at startup - if (pluginSettings.isEmailSubscriptionsExecuteAtStartup()) { + // Execution at startup (or DEBUG mode) + if (pluginSettings.isEmailSubscriptionsExecuteAtStartup() || pluginSettings.isEmailSubscriptionsDebug()) { threadPool.schedule( () -> executeEmailSubscriptions(EmailSubscription.Frequency.daily), new TimeValue(20, TimeUnit.SECONDS) /* after 20s */ @@ -213,7 +213,7 @@ public class SubscriptionService extends AbstractService { from += size; } - logger.info(String.format("Executing %s email subscription... [OK] (%s executions in %s ms)", + logger.info(String.format("Executing %s email subscription... [OK] emails sent [%s] (in %s ms)", frequency.name(), executionCount, System.currentTimeMillis()-now)); } @@ -259,7 +259,24 @@ public class SubscriptionService extends AbstractService { final Map<String, String> profileTitles) { Preconditions.checkNotNull(subscription); - logger.info(String.format("Processing email subscription [%s]", subscription.getId())); + boolean debug = pluginSettings.isEmailSubscriptionsDebug(); + if (subscription.getContent() != null && subscription.getContent().getEmail() != null) { + if (debug) { + logger.info(String.format("Processing email subscription to [%s - %s] on account [%s]", + senderName, + subscription.getContent().getEmail(), + ModelUtils.minifyPubkey(subscription.getIssuer()))); + } + else { + logger.info(String.format("Processing email subscription [%s] on account [%s]", + subscription.getId(), + ModelUtils.minifyPubkey(subscription.getIssuer()))); + } + } + else { + logger.warn(String.format("Processing email subscription [%s] - no email found in subscription content: skipping", subscription.getId())); + return null; + } SubscriptionExecution lastExecution = subscriptionExecutionDao.getLastExecution(subscription); Long lastExecutionTime; @@ -319,12 +336,21 @@ public class SubscriptionService extends AbstractService { pluginSettings.getCesiumUrl()) .render(issuerLocale); - // Schedule email sending - threadPool.schedule(() -> mailService.sendHtmlEmailWithText( - emailSubjectPrefix + I18n.t("duniter4j.es.subscription.email.subject", userEvents.size()), - text, - "<body>" + html + "</body>", - subscription.getContent().getEmail())); + final String object = emailSubjectPrefix + I18n.t("duniter4j.es.subscription.email.subject", userEvents.size()); + if (pluginSettings.isEmailSubscriptionsDebug()) { + logger.info(String.format("---- Email to send (debug mode) ------\nTo:%s\nObject: %s\nText content:\n%s", + subscription.getContent().getEmail(), + object, + text)); + } + else { + // Schedule email sending + threadPool.schedule(() -> mailService.sendHtmlEmailWithText( + object, + text, + "<body>" + html + "</body>", + subscription.getContent().getEmail())); + } // Compute last time (should be the first one, as events are sorted in DESC order) Long lastEventTime = userEvents.get(0).getTime(); @@ -352,6 +378,9 @@ public class SubscriptionService extends AbstractService { issuerProfilNames.get(subscription.getIssuer()) : ModelUtils.minifyPubkey(subscription.getIssuer()); + // Remove comma (to avoid to be used as many args in the i18n_args template) + issuerName = issuerName.replaceAll("[, ]+", " "); + senderName = StringUtils.isNotBlank(senderName) ? senderName.replaceAll("[, ]+", " ") : senderName; try { // Compute body @@ -393,11 +422,10 @@ public class SubscriptionService extends AbstractService { execution.setSignature(cryptoService.sign(json, pluginSettings.getNodeKeypair().getSecKey())); if (execution.getId() == null) { - - //subscriptionExecutionDao.create(json, false/*not wait*/); + subscriptionExecutionDao.create(toJson(execution), false/*not wait*/); } else { - //subscriptionExecutionDao.update(execution.getId(), json, false/*not wait*/); + subscriptionExecutionDao.update(execution.getId(), toJson(execution), false/*not wait*/); } return execution; } diff --git a/duniter4j-es-subscription/src/main/resources/templates/text_event_item.st b/duniter4j-es-subscription/src/main/resources/templates/text_event_item.st index 701a00ec5f4c16cd5e632b5674879ce598ee2f6a..df9c16e49beda7258a3423b83ccc2a483d3a6771 100644 --- a/duniter4j-es-subscription/src/main/resources/templates/text_event_item.st +++ b/duniter4j-es-subscription/src/main/resources/templates/text_event_item.st @@ -1,3 +1,4 @@ text_event_item(e) ::= << - [$e.time; format="short"$] $e.description$ + >> \ No newline at end of file diff --git a/duniter4j-es-user/src/main/java/org/duniter/elasticsearch/user/service/SynchroService.java b/duniter4j-es-user/src/main/java/org/duniter/elasticsearch/user/service/SynchroService.java index 0fc9540733629281c6c8a252714a691ab71d1bfe..38cdb593fc2347b7938e347d327de553c1f49700 100644 --- a/duniter4j-es-user/src/main/java/org/duniter/elasticsearch/user/service/SynchroService.java +++ b/duniter4j-es-user/src/main/java/org/duniter/elasticsearch/user/service/SynchroService.java @@ -73,7 +73,7 @@ public class SynchroService extends AbstractSynchroService { importInvitationChanges(result, peer, sinceTime); long duration = System.currentTimeMillis() - time; - logger.info(String.format("[%s] Synchronizing user data since %s [OK] %s (ins %s ms)", peer.toString(), sinceTime, result.toString(), duration)); + logger.info(String.format("[%s] Synchronizing user data since %s [OK] %s (in %s ms)", peer.toString(), sinceTime, result.toString(), duration)); } protected void importHistoryChanges(SynchroResult result, Peer peer, long sinceTime) {