Skip to content

Commit fd37866

Browse files
Support Jenkins restart (#1039)
* Support Jenkins restart * Support Jenkins restart
1 parent b4af0a0 commit fd37866

File tree

3 files changed

+33
-1
lines changed

3 files changed

+33
-1
lines changed

src/main/java/io/jenkins/plugins/opentelemetry/JenkinsOpenTelemetryPluginConfiguration.java

+6
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import hudson.PluginWrapper;
1717
import hudson.init.InitMilestone;
1818
import hudson.init.Initializer;
19+
import hudson.init.Terminator;
1920
import hudson.model.Describable;
2021
import hudson.model.Descriptor;
2122
import hudson.tasks.BuildStep;
@@ -716,6 +717,11 @@ public FormValidation doCheckExportOtelConfigurationAsEnvironmentVariables(@Quer
716717
return FormValidation.warning("Note that OpenTelemetry credentials, if configured, will be exposed as environment variables (likely in OTEL_EXPORTER_OTLP_HEADERS)");
717718
}
718719

720+
/**
721+
* Close the @link LogStorageRetriever}.
722+
* As <code>@PreDestroy</code> doesn't seem to be honored by Jenkins, we use <code>@Terminator</code> in addition.
723+
*/
724+
@Terminator
719725
@PreDestroy
720726
public void preDestroy() throws Exception {
721727
if (logStorageRetriever != null) {

src/main/java/io/jenkins/plugins/opentelemetry/init/OtelJulHandler.java

+14-1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
package io.jenkins.plugins.opentelemetry.init;
77

88
import hudson.Extension;
9+
import hudson.init.Terminator;
910
import io.jenkins.plugins.opentelemetry.api.OpenTelemetryLifecycleListener;
1011
import io.jenkins.plugins.opentelemetry.api.ReconfigurableOpenTelemetry;
1112
import io.opentelemetry.api.common.Attributes;
@@ -19,6 +20,7 @@
1920
import jenkins.YesNoMaybe;
2021

2122
import javax.annotation.PostConstruct;
23+
import javax.annotation.PreDestroy;
2224
import javax.inject.Inject;
2325
import java.io.PrintWriter;
2426
import java.io.StringWriter;
@@ -175,7 +177,18 @@ public void postConstruct() {
175177
this.loggerProvider = openTelemetry.getLogsBridge();
176178
this.captureExperimentalAttributes = openTelemetry.getConfig().getBoolean("otel.instrumentation.java-util-logging.experimental-log-attributes", false);
177179
Logger.getLogger("").addHandler(this);
178-
logger.log(Level.FINE, "Otel java.util.logging bridge initialized");
180+
logger.log(Level.INFO, "OTel logging Handler registered on java.util.logging");
181+
}
182+
183+
/**
184+
* Unregister the java.util.logging handler.
185+
* As <code>@PreDestroy</code> doesn't seem to be honored by Jenkins, we use <code>@Terminator</code> in addition.
186+
*/
187+
@Terminator
188+
@PreDestroy
189+
public void preDestroy() {
190+
Logger.getLogger("").removeHandler(this);
191+
logger.log(Level.INFO, "OTel logging Handler unregistered from java.util.logging");
179192
}
180193

181194
/**

src/main/java/io/jenkins/plugins/opentelemetry/init/ServletFilterInitializer.java

+13
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,15 @@
66
package io.jenkins.plugins.opentelemetry.init;
77

88
import hudson.Extension;
9+
import hudson.init.Terminator;
910
import hudson.util.PluginServletFilter;
1011
import io.jenkins.plugins.opentelemetry.api.OpenTelemetryLifecycleListener;
1112
import io.jenkins.plugins.opentelemetry.servlet.StaplerInstrumentationServletFilter;
1213
import io.jenkins.plugins.opentelemetry.servlet.TraceContextServletFilter;
1314
import jenkins.YesNoMaybe;
1415

1516
import javax.annotation.PostConstruct;
17+
import javax.annotation.PreDestroy;
1618
import javax.inject.Inject;
1719
import jakarta.servlet.Filter;
1820
import jakarta.servlet.ServletException;
@@ -40,6 +42,17 @@ public void postConstruct() {
4042
addToPluginServletFilter(staplerInstrumentationServletFilter);
4143
}
4244

45+
/**
46+
* Unregister the {@link Filter}s from the {@link PluginServletFilter}.
47+
* As <code>@PreDestroy</code> doesn't seem to be honored by Jenkins, we use <code>@Terminator</code> in addition.
48+
*/
49+
@Terminator
50+
@PreDestroy
51+
public void preDestroy() throws ServletException {
52+
PluginServletFilter.removeFilter(traceContextServletFilter);
53+
PluginServletFilter.removeFilter(staplerInstrumentationServletFilter);
54+
}
55+
4356
private void addToPluginServletFilter(Filter filter) {
4457
if (PluginServletFilter.hasFilter(filter)) {
4558
logger.log(Level.INFO, () -> filter.getClass().getName() + " already enabled");

0 commit comments

Comments
 (0)