|
10 | 10 | import static io.opentelemetry.instrumentation.failsafe.v3_0.CircuitBreakerEventListenerBuilders.buildInstrumentedHalfOpenListener; |
11 | 11 | import static io.opentelemetry.instrumentation.failsafe.v3_0.CircuitBreakerEventListenerBuilders.buildInstrumentedOpenListener; |
12 | 12 | import static io.opentelemetry.instrumentation.failsafe.v3_0.CircuitBreakerEventListenerBuilders.buildInstrumentedSuccessListener; |
13 | | -import static java.util.Arrays.asList; |
14 | 13 |
|
15 | 14 | import dev.failsafe.CircuitBreaker; |
16 | 15 | import dev.failsafe.CircuitBreakerConfig; |
17 | 16 | import dev.failsafe.RetryPolicy; |
18 | 17 | import dev.failsafe.RetryPolicyConfig; |
19 | | -import dev.failsafe.event.EventListener; |
20 | | -import dev.failsafe.event.ExecutionCompletedEvent; |
21 | 18 | import io.opentelemetry.api.OpenTelemetry; |
22 | 19 | import io.opentelemetry.api.common.AttributeKey; |
23 | 20 | import io.opentelemetry.api.common.Attributes; |
24 | 21 | import io.opentelemetry.api.metrics.LongCounter; |
25 | | -import io.opentelemetry.api.metrics.LongHistogram; |
26 | 22 | import io.opentelemetry.api.metrics.Meter; |
| 23 | +import io.opentelemetry.instrumentation.failsafe.v3_0.internal.RetryPolicyEventListenerBuilders; |
27 | 24 |
|
28 | 25 | /** Entrypoint for instrumenting Failsafe components. */ |
29 | 26 | public final class FailsafeTelemetry { |
30 | 27 | private static final String INSTRUMENTATION_NAME = "io.opentelemetry.failsafe-3.0"; |
31 | 28 |
|
32 | 29 | private static final AttributeKey<String> CIRCUIT_BREAKER_NAME = |
33 | 30 | AttributeKey.stringKey("failsafe.circuit_breaker.name"); |
34 | | - private static final AttributeKey<String> RETRY_POLICY_NAME = |
35 | | - AttributeKey.stringKey("failsafe.retry_policy.name"); |
36 | 31 |
|
37 | 32 | /** Returns a new {@link FailsafeTelemetry} configured with the given {@link OpenTelemetry}. */ |
38 | 33 | public static FailsafeTelemetry create(OpenTelemetry openTelemetry) { |
@@ -89,72 +84,13 @@ public <R> CircuitBreaker<R> createCircuitBreaker( |
89 | 84 | */ |
90 | 85 | public <R> RetryPolicy<R> createRetryPolicy(RetryPolicy<R> delegate, String retryPolicyName) { |
91 | 86 | RetryPolicyConfig<R> userConfig = delegate.getConfig(); |
92 | | - LongCounter executionCounter = buildRetryPolicyExecutionCounter(); |
93 | | - LongHistogram attemptsHistogram = buildRetryPolicyAttemptsHistogram(); |
94 | | - Attributes attributes = Attributes.of(RETRY_POLICY_NAME, retryPolicyName); |
95 | 87 | return RetryPolicy.builder(userConfig) |
96 | 88 | .onFailure( |
97 | 89 | RetryPolicyEventListenerBuilders.buildInstrumentedFailureListener( |
98 | | - userConfig, executionCounter, attemptsHistogram, attributes)) |
| 90 | + openTelemetry, userConfig, retryPolicyName)) |
99 | 91 | .onSuccess( |
100 | 92 | RetryPolicyEventListenerBuilders.buildInstrumentedSuccessListener( |
101 | | - userConfig, executionCounter, attemptsHistogram, attributes)) |
102 | | - .build(); |
103 | | - } |
104 | | - |
105 | | - /** |
106 | | - * Returns an instrumented failure listener. |
107 | | - * |
108 | | - * @param delegate user policy configuration |
109 | | - * @param retryPolicyName identifier for the policy being built |
110 | | - * @param <R> {@link RetryPolicyConfig}'s result type |
111 | | - * @return instrumented failure listener |
112 | | - */ |
113 | | - public <R> EventListener<ExecutionCompletedEvent<R>> createInstrumentedFailureListener( |
114 | | - RetryPolicyConfig<R> delegate, String retryPolicyName) { |
115 | | - LongCounter executionCounter = buildRetryPolicyExecutionCounter(); |
116 | | - LongHistogram attemptsHistogram = buildRetryPolicyAttemptsHistogram(); |
117 | | - Attributes attributes = Attributes.of(RETRY_POLICY_NAME, retryPolicyName); |
118 | | - return RetryPolicyEventListenerBuilders.buildInstrumentedFailureListener( |
119 | | - delegate, executionCounter, attemptsHistogram, attributes); |
120 | | - } |
121 | | - |
122 | | - /** |
123 | | - * Returns an instrumented success listener. |
124 | | - * |
125 | | - * @param delegate user policy configuration |
126 | | - * @param retryPolicyName identifier for the policy being built |
127 | | - * @param <R> {@link RetryPolicyConfig}'s result type |
128 | | - * @return instrumented success listener |
129 | | - */ |
130 | | - public <R> EventListener<ExecutionCompletedEvent<R>> createInstrumentedSuccessListener( |
131 | | - RetryPolicyConfig<R> delegate, String retryPolicyName) { |
132 | | - LongCounter executionCounter = buildRetryPolicyExecutionCounter(); |
133 | | - LongHistogram attemptsHistogram = buildRetryPolicyAttemptsHistogram(); |
134 | | - Attributes attributes = Attributes.of(RETRY_POLICY_NAME, retryPolicyName); |
135 | | - return RetryPolicyEventListenerBuilders.buildInstrumentedSuccessListener( |
136 | | - delegate, executionCounter, attemptsHistogram, attributes); |
137 | | - } |
138 | | - |
139 | | - private LongCounter buildRetryPolicyExecutionCounter() { |
140 | | - return openTelemetry |
141 | | - .getMeter(INSTRUMENTATION_NAME) |
142 | | - .counterBuilder("failsafe.retry_policy.execution.count") |
143 | | - .setDescription( |
144 | | - "Count of execution attempts processed by the retry policy, " |
145 | | - + "where one execution represents the total number of attempts.") |
146 | | - .setUnit("{execution}") |
147 | | - .build(); |
148 | | - } |
149 | | - |
150 | | - private LongHistogram buildRetryPolicyAttemptsHistogram() { |
151 | | - return openTelemetry |
152 | | - .getMeter(INSTRUMENTATION_NAME) |
153 | | - .histogramBuilder("failsafe.retry_policy.attempts") |
154 | | - .setDescription("Number of attempts for each execution.") |
155 | | - .setUnit("{attempt}") |
156 | | - .ofLongs() |
157 | | - .setExplicitBucketBoundariesAdvice(asList(1L, 2L, 3L, 5L)) |
| 93 | + openTelemetry, userConfig, retryPolicyName)) |
158 | 94 | .build(); |
159 | 95 | } |
160 | 96 | } |
0 commit comments