From 9cb2c1dbc67065c8ddbfab68952be5dbf10e813a Mon Sep 17 00:00:00 2001 From: Cyrille Le Clerc Date: Sun, 9 Feb 2025 23:50:11 +0100 Subject: [PATCH 1/2] Support Jenkins restart --- .../JenkinsOpenTelemetryPluginConfiguration.java | 6 ++++++ .../opentelemetry/init/OtelJulHandler.java | 15 ++++++++++++++- .../init/ServletFilterInitializer.java | 13 +++++++++++++ 3 files changed, 33 insertions(+), 1 deletion(-) diff --git a/src/main/java/io/jenkins/plugins/opentelemetry/JenkinsOpenTelemetryPluginConfiguration.java b/src/main/java/io/jenkins/plugins/opentelemetry/JenkinsOpenTelemetryPluginConfiguration.java index bdfd4d3f3..45836e124 100644 --- a/src/main/java/io/jenkins/plugins/opentelemetry/JenkinsOpenTelemetryPluginConfiguration.java +++ b/src/main/java/io/jenkins/plugins/opentelemetry/JenkinsOpenTelemetryPluginConfiguration.java @@ -16,6 +16,7 @@ import hudson.PluginWrapper; import hudson.init.InitMilestone; import hudson.init.Initializer; +import hudson.init.Terminator; import hudson.model.Describable; import hudson.model.Descriptor; import hudson.tasks.BuildStep; @@ -716,6 +717,11 @@ public FormValidation doCheckExportOtelConfigurationAsEnvironmentVariables(@Quer return FormValidation.warning("Note that OpenTelemetry credentials, if configured, will be exposed as environment variables (likely in OTEL_EXPORTER_OTLP_HEADERS)"); } + /** + * Close the @link LogStorageRetriever}. + * As {@link @PreDestroy} doesn't seem to be honored by Jenkins, we use {@link @Terminator} in addition. + */ + @Terminator @PreDestroy public void preDestroy() throws Exception { if (logStorageRetriever != null) { diff --git a/src/main/java/io/jenkins/plugins/opentelemetry/init/OtelJulHandler.java b/src/main/java/io/jenkins/plugins/opentelemetry/init/OtelJulHandler.java index 89d17a4c7..415b9198e 100644 --- a/src/main/java/io/jenkins/plugins/opentelemetry/init/OtelJulHandler.java +++ b/src/main/java/io/jenkins/plugins/opentelemetry/init/OtelJulHandler.java @@ -6,6 +6,7 @@ package io.jenkins.plugins.opentelemetry.init; import hudson.Extension; +import hudson.init.Terminator; import io.jenkins.plugins.opentelemetry.api.OpenTelemetryLifecycleListener; import io.jenkins.plugins.opentelemetry.api.ReconfigurableOpenTelemetry; import io.opentelemetry.api.common.Attributes; @@ -19,6 +20,7 @@ import jenkins.YesNoMaybe; import javax.annotation.PostConstruct; +import javax.annotation.PreDestroy; import javax.inject.Inject; import java.io.PrintWriter; import java.io.StringWriter; @@ -175,7 +177,18 @@ public void postConstruct() { this.loggerProvider = openTelemetry.getLogsBridge(); this.captureExperimentalAttributes = openTelemetry.getConfig().getBoolean("otel.instrumentation.java-util-logging.experimental-log-attributes", false); Logger.getLogger("").addHandler(this); - logger.log(Level.FINE, "Otel java.util.logging bridge initialized"); + logger.log(Level.INFO, "OTel logging Handler registered on java.util.logging"); + } + + /** + * Unregister the java.util.logging handler. + * As {@link @PreDestroy} doesn't seem to be honored by Jenkins, we use {@link @Terminator} in addition. + */ + @Terminator + @PreDestroy + public void preDestroy() { + Logger.getLogger("").removeHandler(this); + logger.log(Level.INFO, "OTel logging Handler unregistered from java.util.logging"); } /** diff --git a/src/main/java/io/jenkins/plugins/opentelemetry/init/ServletFilterInitializer.java b/src/main/java/io/jenkins/plugins/opentelemetry/init/ServletFilterInitializer.java index 7fd6fda0a..eceb7597a 100644 --- a/src/main/java/io/jenkins/plugins/opentelemetry/init/ServletFilterInitializer.java +++ b/src/main/java/io/jenkins/plugins/opentelemetry/init/ServletFilterInitializer.java @@ -6,6 +6,7 @@ package io.jenkins.plugins.opentelemetry.init; import hudson.Extension; +import hudson.init.Terminator; import hudson.util.PluginServletFilter; import io.jenkins.plugins.opentelemetry.api.OpenTelemetryLifecycleListener; import io.jenkins.plugins.opentelemetry.servlet.StaplerInstrumentationServletFilter; @@ -13,6 +14,7 @@ import jenkins.YesNoMaybe; import javax.annotation.PostConstruct; +import javax.annotation.PreDestroy; import javax.inject.Inject; import jakarta.servlet.Filter; import jakarta.servlet.ServletException; @@ -40,6 +42,17 @@ public void postConstruct() { addToPluginServletFilter(staplerInstrumentationServletFilter); } + /** + * Unregister the {@link Filter}s from the {@link PluginServletFilter}. + * As {@link @PreDestroy} doesn't seem to be honored by Jenkins, we use {@link @Terminator} in addition. + */ + @Terminator + @PreDestroy + public void preDestroy() throws ServletException { + PluginServletFilter.removeFilter(traceContextServletFilter); + PluginServletFilter.removeFilter(staplerInstrumentationServletFilter); + } + private void addToPluginServletFilter(Filter filter) { if (PluginServletFilter.hasFilter(filter)) { logger.log(Level.INFO, () -> filter.getClass().getName() + " already enabled"); From 11cf9a4eed3b117768dd061a4daa7b006c068423 Mon Sep 17 00:00:00 2001 From: Cyrille Le Clerc Date: Mon, 10 Feb 2025 08:35:28 +0100 Subject: [PATCH 2/2] Support Jenkins restart --- .../opentelemetry/JenkinsOpenTelemetryPluginConfiguration.java | 2 +- .../io/jenkins/plugins/opentelemetry/init/OtelJulHandler.java | 2 +- .../plugins/opentelemetry/init/ServletFilterInitializer.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/io/jenkins/plugins/opentelemetry/JenkinsOpenTelemetryPluginConfiguration.java b/src/main/java/io/jenkins/plugins/opentelemetry/JenkinsOpenTelemetryPluginConfiguration.java index 45836e124..fde833b5c 100644 --- a/src/main/java/io/jenkins/plugins/opentelemetry/JenkinsOpenTelemetryPluginConfiguration.java +++ b/src/main/java/io/jenkins/plugins/opentelemetry/JenkinsOpenTelemetryPluginConfiguration.java @@ -719,7 +719,7 @@ public FormValidation doCheckExportOtelConfigurationAsEnvironmentVariables(@Quer /** * Close the @link LogStorageRetriever}. - * As {@link @PreDestroy} doesn't seem to be honored by Jenkins, we use {@link @Terminator} in addition. + * As @PreDestroy doesn't seem to be honored by Jenkins, we use @Terminator in addition. */ @Terminator @PreDestroy diff --git a/src/main/java/io/jenkins/plugins/opentelemetry/init/OtelJulHandler.java b/src/main/java/io/jenkins/plugins/opentelemetry/init/OtelJulHandler.java index 415b9198e..2cb37f930 100644 --- a/src/main/java/io/jenkins/plugins/opentelemetry/init/OtelJulHandler.java +++ b/src/main/java/io/jenkins/plugins/opentelemetry/init/OtelJulHandler.java @@ -182,7 +182,7 @@ public void postConstruct() { /** * Unregister the java.util.logging handler. - * As {@link @PreDestroy} doesn't seem to be honored by Jenkins, we use {@link @Terminator} in addition. + * As @PreDestroy doesn't seem to be honored by Jenkins, we use @Terminator in addition. */ @Terminator @PreDestroy diff --git a/src/main/java/io/jenkins/plugins/opentelemetry/init/ServletFilterInitializer.java b/src/main/java/io/jenkins/plugins/opentelemetry/init/ServletFilterInitializer.java index eceb7597a..cc5923396 100644 --- a/src/main/java/io/jenkins/plugins/opentelemetry/init/ServletFilterInitializer.java +++ b/src/main/java/io/jenkins/plugins/opentelemetry/init/ServletFilterInitializer.java @@ -44,7 +44,7 @@ public void postConstruct() { /** * Unregister the {@link Filter}s from the {@link PluginServletFilter}. - * As {@link @PreDestroy} doesn't seem to be honored by Jenkins, we use {@link @Terminator} in addition. + * As @PreDestroy doesn't seem to be honored by Jenkins, we use @Terminator in addition. */ @Terminator @PreDestroy