12
12
import hudson .remoting .Channel ;
13
13
import hudson .slaves .ComputerListener ;
14
14
import io .jenkins .plugins .opentelemetry .OpenTelemetryAttributesAction ;
15
- import io .jenkins .plugins .opentelemetry .OpenTelemetrySdkProvider ;
15
+ import io .jenkins .plugins .opentelemetry .OtelComponent ;
16
16
import io .jenkins .plugins .opentelemetry .semconv .JenkinsOtelSemanticAttributes ;
17
17
import io .jenkins .plugins .opentelemetry .semconv .JenkinsSemanticMetrics ;
18
18
import io .opentelemetry .api .common .AttributeKey ;
19
19
import io .opentelemetry .api .metrics .LongCounter ;
20
20
import io .opentelemetry .api .metrics .Meter ;
21
+ import io .opentelemetry .api .trace .Tracer ;
22
+ import io .opentelemetry .sdk .autoconfigure .spi .ConfigProperties ;
23
+ import io .opentelemetry .sdk .logs .LogEmitter ;
21
24
import io .opentelemetry .semconv .resource .attributes .ResourceAttributes ;
22
25
import jenkins .model .Jenkins ;
23
26
import jenkins .security .MasterToSlaveCallable ;
24
27
25
- import javax .annotation .Nonnull ;
26
- import javax .annotation .PostConstruct ;
27
- import javax .inject .Inject ;
28
28
import java .io .IOException ;
29
29
import java .net .InetAddress ;
30
30
import java .util .Arrays ;
34
34
import java .util .logging .Logger ;
35
35
36
36
@ Extension
37
- public class MonitoringComputerListener extends ComputerListener {
37
+ public class MonitoringComputerListener extends ComputerListener implements OtelComponent {
38
38
private final static Logger LOGGER = Logger .getLogger (MonitoringComputerListener .class .getName ());
39
39
40
- protected Meter meter ;
41
-
42
40
private LongCounter failureAgentCounter ;
43
41
44
- @ PostConstruct
45
- public void postConstruct () {
42
+ private OtelComponent .State state = new State ();
43
+
44
+ @ Override
45
+ public void afterSdkInitialized (Meter meter , LogEmitter logEmitter , Tracer tracer , ConfigProperties configProperties ) {
46
46
final Jenkins jenkins = Jenkins .get ();
47
47
Computer controllerComputer = jenkins .getComputer ("" );
48
48
if (controllerComputer == null ) {
@@ -65,21 +65,24 @@ public void postConstruct() {
65
65
LOGGER .log (Level .WARNING , "Failure getting attributes for Jenkins Controller computer " + controllerComputer , e );
66
66
}
67
67
}
68
+ state .registerInstrument (
68
69
meter .gaugeBuilder (JenkinsSemanticMetrics .JENKINS_AGENTS_OFFLINE )
69
70
.ofLongs ()
70
71
.setDescription ("Number of offline agents" )
71
72
.setUnit ("1" )
72
- .buildWithCallback (valueObserver -> valueObserver .record (this .getOfflineAgentsCount ()));
73
- meter .gaugeBuilder (JenkinsSemanticMetrics .JENKINS_AGENTS_ONLINE )
73
+ .buildWithCallback (valueObserver -> valueObserver .record (this .getOfflineAgentsCount ())));
74
+ state .registerInstrument (
75
+ meter .gaugeBuilder (JenkinsSemanticMetrics .JENKINS_AGENTS_ONLINE )
74
76
.ofLongs ()
75
77
.setDescription ("Number of online agents" )
76
78
.setUnit ("1" )
77
- .buildWithCallback (valueObserver -> valueObserver .record (this .getOnlineAgentsCount ()));
78
- meter .gaugeBuilder (JenkinsSemanticMetrics .JENKINS_AGENTS_TOTAL )
79
+ .buildWithCallback (valueObserver -> valueObserver .record (this .getOnlineAgentsCount ())));
80
+ state .registerInstrument (
81
+ meter .gaugeBuilder (JenkinsSemanticMetrics .JENKINS_AGENTS_TOTAL )
79
82
.ofLongs ()
80
83
.setDescription ("Number of agents" )
81
84
.setUnit ("1" )
82
- .buildWithCallback (valueObserver -> valueObserver .record (this .getAgentsCount ()));
85
+ .buildWithCallback (valueObserver -> valueObserver .record (this .getAgentsCount ()))) ;
83
86
failureAgentCounter = meter .counterBuilder (JenkinsSemanticMetrics .JENKINS_AGENTS_LAUNCH_FAILURE )
84
87
.setDescription ("Number of ComputerLauncher failures" )
85
88
.setUnit ("1" )
@@ -130,6 +133,11 @@ public void onLaunchFailure(Computer computer, TaskListener taskListener) throws
130
133
LOGGER .log (Level .FINE , () -> "onLaunchFailure(" + computer + "): " );
131
134
}
132
135
136
+ @ Override
137
+ public void beforeSdkShutdown () {
138
+ state .closeInstruments ();
139
+ }
140
+
133
141
private static class GetComputerAttributes extends MasterToSlaveCallable <Map <String , String >, IOException > {
134
142
@ Override
135
143
public Map <String , String > call () throws IOException {
@@ -152,12 +160,4 @@ public Map<String, String> call() throws IOException {
152
160
return attributes ;
153
161
}
154
162
}
155
-
156
- /**
157
- * Jenkins doesn't support {@link com.google.inject.Provides} so we manually wire dependencies :-(
158
- */
159
- @ Inject
160
- public void setMeter (@ Nonnull OpenTelemetrySdkProvider openTelemetrySdkProvider ) {
161
- this .meter = openTelemetrySdkProvider .getMeter ();
162
- }
163
163
}
0 commit comments