From d52450ab894c986f380f20e9ace2baa5b731d8af Mon Sep 17 00:00:00 2001 From: doychin Date: Sat, 30 May 2026 16:28:25 +0300 Subject: [PATCH 1/2] Log throttled error messages for failed ticket emails to avoid flooding logs Signed-off-by: doychin --- src/main/java/site/facade/TicketService.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/main/java/site/facade/TicketService.java b/src/main/java/site/facade/TicketService.java index 0c28be3..f2a3162 100644 --- a/src/main/java/site/facade/TicketService.java +++ b/src/main/java/site/facade/TicketService.java @@ -1,5 +1,7 @@ package site.facade; +import java.time.Duration; +import java.time.Instant; import java.util.Collection; import java.util.Collections; import java.util.List; @@ -53,6 +55,8 @@ public class TicketService { @Autowired private TemplateEngine templateEngine; + private transient Instant lastSendErrorTimeStamp; + /** * Sends tickets to all visitors that have been paid or are sponsored. * @@ -132,6 +136,11 @@ public List> generateAndSendTicketEmail(String email, Lis return Pair.of(visitor, true); } catch (MessagingException e) { log.error("Unable to send ticket {} to {}", visitor.getTicket(), email); + if (lastSendErrorTimeStamp == null || Duration.between(lastSendErrorTimeStamp, Instant.now()) + .toMinutes() > 1) { + lastSendErrorTimeStamp = Instant.now(); + log.error("Error message: {}", e.getMessage()); + } return Pair.of(visitor, false); } }).toList(); From ffcce45c80ed15e89eed1835e9531770c11ab9e6 Mon Sep 17 00:00:00 2001 From: doychin Date: Sat, 30 May 2026 16:28:25 +0300 Subject: [PATCH 2/2] Log throttled error messages for failed ticket emails to avoid flooding logs Signed-off-by: doychin --- src/main/java/site/facade/TicketService.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/main/java/site/facade/TicketService.java b/src/main/java/site/facade/TicketService.java index 0c28be3..2993cd8 100644 --- a/src/main/java/site/facade/TicketService.java +++ b/src/main/java/site/facade/TicketService.java @@ -1,5 +1,7 @@ package site.facade; +import java.time.Duration; +import java.time.Instant; import java.util.Collection; import java.util.Collections; import java.util.List; @@ -53,6 +55,8 @@ public class TicketService { @Autowired private TemplateEngine templateEngine; + private volatile Instant lastSendErrorTimeStamp; + /** * Sends tickets to all visitors that have been paid or are sponsored. * @@ -132,6 +136,11 @@ public List> generateAndSendTicketEmail(String email, Lis return Pair.of(visitor, true); } catch (MessagingException e) { log.error("Unable to send ticket {} to {}", visitor.getTicket(), email); + if (lastSendErrorTimeStamp == null || Duration.between(lastSendErrorTimeStamp, Instant.now()) + .toMinutes() > 1) { + lastSendErrorTimeStamp = Instant.now(); + log.error("Error message: {}", e.getMessage()); + } return Pair.of(visitor, false); } }).toList();