From 188be214ab56c6101e78709fa758d0aaa2d34989 Mon Sep 17 00:00:00 2001 From: guruprasad Date: Thu, 6 Feb 2025 15:18:40 +0530 Subject: [PATCH] provide a way to extract last logged event via logging in duplicates admin monitor (checking if this is the best, if yes then will write a test for it) --- .../admin/GitHubDuplicateEventsMonitor.java | 17 ++++++++++++++++- .../subscriber/DuplicateEventsSubscriber.java | 7 ++----- .../plugins/github/Messages.properties | 3 ++- 3 files changed, 20 insertions(+), 7 deletions(-) diff --git a/src/main/java/org/jenkinsci/plugins/github/admin/GitHubDuplicateEventsMonitor.java b/src/main/java/org/jenkinsci/plugins/github/admin/GitHubDuplicateEventsMonitor.java index 3a563e90b..85f4d5f39 100644 --- a/src/main/java/org/jenkinsci/plugins/github/admin/GitHubDuplicateEventsMonitor.java +++ b/src/main/java/org/jenkinsci/plugins/github/admin/GitHubDuplicateEventsMonitor.java @@ -1,5 +1,7 @@ package org.jenkinsci.plugins.github.admin; +import java.util.logging.Logger; + import hudson.Extension; import hudson.model.AdministrativeMonitor; import jenkins.model.Jenkins; @@ -10,6 +12,9 @@ @Extension public class GitHubDuplicateEventsMonitor extends AdministrativeMonitor { + private static final Logger LOGGER = Logger.getLogger(GitHubDuplicateEventsMonitor.class.getName()); + private static String previouslyLoggedEventId; + @Override public String getDisplayName() { return Messages.duplicate_events_administrative_monitor_displayname(); @@ -25,7 +30,17 @@ public String getBlurb() { @Override public boolean isActivated() { - return DuplicateEventsSubscriber.isDuplicateEventSeen(); + boolean isActivated = DuplicateEventsSubscriber.isDuplicateEventSeen(); + if (isActivated) { + var curDuplicate = DuplicateEventsSubscriber.getLastDuplicate(); + if (!curDuplicate.eventGuid().equals(previouslyLoggedEventId)) { + LOGGER.finest(() -> { + previouslyLoggedEventId = curDuplicate.eventGuid(); + return "Latest tracked event payload: " + curDuplicate.ghSubscriberEvent().getPayload(); + }); + } + } + return isActivated; } @Override diff --git a/src/main/java/org/jenkinsci/plugins/github/webhook/subscriber/DuplicateEventsSubscriber.java b/src/main/java/org/jenkinsci/plugins/github/webhook/subscriber/DuplicateEventsSubscriber.java index 491794244..946bb2b01 100644 --- a/src/main/java/org/jenkinsci/plugins/github/webhook/subscriber/DuplicateEventsSubscriber.java +++ b/src/main/java/org/jenkinsci/plugins/github/webhook/subscriber/DuplicateEventsSubscriber.java @@ -38,8 +38,7 @@ public final class DuplicateEventsSubscriber extends GHEventsSubscriber { private static final Map EVENT_TRACKER = new ConcurrentHashMap<>(); private static volatile TrackedDuplicateEvent lastDuplicate; - @VisibleForTesting - record TrackedDuplicateEvent(String eventGuid, long lastUpdated, GHSubscriberEvent ghSubscriberEvent) { } + public record TrackedDuplicateEvent(String eventGuid, long lastUpdated, GHSubscriberEvent ghSubscriberEvent) { } /** * This subscriber is not applicable to any item @@ -113,9 +112,7 @@ static Map getEventCountsTracker() { return Collections.unmodifiableMap(EVENT_TRACKER); } - @VisibleForTesting - @Restricted(NoExternalUse.class) - static TrackedDuplicateEvent getLastDuplicate() { + public static TrackedDuplicateEvent getLastDuplicate() { return lastDuplicate; } diff --git a/src/main/resources/org/jenkinsci/plugins/github/Messages.properties b/src/main/resources/org/jenkinsci/plugins/github/Messages.properties index c952d87ad..78ab72d2b 100644 --- a/src/main/resources/org/jenkinsci/plugins/github/Messages.properties +++ b/src/main/resources/org/jenkinsci/plugins/github/Messages.properties @@ -15,4 +15,5 @@ duplicate.events.administrative.monitor.displayname=GitHub Duplicate Events duplicate.events.administrative.monitor.description=Warns about duplicate events received from GitHub. duplicate.events.administrative.monitor.blurb=Duplicate events were received from GitHub, possibly due to \ misconfiguration (e.g., multiple webhooks targeting the same Jenkins controller at the repository or organization \ - level), potentially causing redundant job executions. + level), potentially causing redundant job executions. To inspect the last tracked duplicate event payload, \ + enable logging at the `FINEST` level for the class `org.jenkinsci.plugins.github.admin.GitHubDuplicateEventsMonitor`.