Skip to content

Commit

Permalink
Forcing MeterRegistry post processing to enable all metrics (fixes #296)
Browse files Browse the repository at this point in the history
  • Loading branch information
berndruecker committed Mar 14, 2023
1 parent 10137da commit 1603539
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
import io.camunda.zeebe.client.ZeebeClient;
import io.camunda.zeebe.client.api.JsonMapper;
import io.camunda.zeebe.client.impl.ZeebeObjectMapper;
import io.camunda.zeebe.spring.client.actuator.ZeebeActuatorConfiguration;
import io.camunda.zeebe.spring.client.configuration.ZeebeActuatorConfiguration;
import io.camunda.zeebe.spring.client.annotation.customizer.ZeebeWorkerValueCustomizer;
import io.camunda.zeebe.spring.client.configuration.ZeebeClientConfiguration;
import io.camunda.zeebe.spring.client.configuration.ExecutorServiceConfiguration;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,16 @@
package io.camunda.zeebe.spring.client.actuator;
package io.camunda.zeebe.spring.client.configuration;

import io.camunda.zeebe.client.ZeebeClient;
import io.camunda.zeebe.spring.client.actuator.MicrometerMetricsRecorder;
import io.camunda.zeebe.spring.client.actuator.ZeebeClientHealthIndicator;
import io.camunda.zeebe.spring.client.metrics.DefaultNoopMetricsRecorder;
import io.camunda.zeebe.spring.client.configuration.MetricsDefaultConfiguration;
import io.camunda.zeebe.spring.client.metrics.MetricsRecorder;
import io.micrometer.core.instrument.MeterRegistry;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.boot.actuate.autoconfigure.endpoint.EndpointAutoConfiguration;
import org.springframework.boot.actuate.health.HealthIndicator;
import org.springframework.boot.autoconfigure.AutoConfigureBefore;
Expand All @@ -21,10 +26,10 @@
@ConditionalOnClass({EndpointAutoConfiguration.class, MeterRegistry.class}) // only if actuator is on classpath
public class ZeebeActuatorConfiguration {
@Bean
// ConditionalOnBean for MeterRegistry does not work (always missing, seems to be created too late)
// so using @Autowired(required=false) with null check
public MetricsRecorder micrometerMetricsRecorder(
// ConditionalOnBean does not work, because the MetricsRecorder is created too late
final @Autowired(required = false) @Lazy MeterRegistry meterRegistry) {

if (meterRegistry == null) {
// We might have Actuator on the classpath without starting a MetricsRecorder in some cases
return new DefaultNoopMetricsRecorder();
Expand All @@ -33,6 +38,20 @@ public MetricsRecorder micrometerMetricsRecorder(
}
}

/**
* Workaround to fix premature initialization of MeterRegistry that seems to happen here, see https://github.com/camunda-community-hub/spring-zeebe/issues/296
*/
@Bean
InitializingBean forceMeterRegistryPostProcessor(
final @Autowired(required = false) @Qualifier("meterRegistryPostProcessor") BeanPostProcessor meterRegistryPostProcessor,
final @Autowired(required = false) MeterRegistry registry) {
if (registry == null || meterRegistryPostProcessor==null) {
return () -> {};
} else {
return () -> meterRegistryPostProcessor.postProcessAfterInitialization(registry, "");
}
}

@Bean
@ConditionalOnProperty(prefix = "management.health.zeebe", name = "enabled", matchIfMissing = true)
@ConditionalOnClass(HealthIndicator.class)
Expand Down

0 comments on commit 1603539

Please sign in to comment.