diff --git a/app/server/appsmith-interfaces/src/main/java/com/appsmith/external/constants/spans/HealthSpan.java b/app/server/appsmith-interfaces/src/main/java/com/appsmith/external/constants/spans/HealthSpan.java new file mode 100644 index 000000000000..52cdc7b82ba4 --- /dev/null +++ b/app/server/appsmith-interfaces/src/main/java/com/appsmith/external/constants/spans/HealthSpan.java @@ -0,0 +1,5 @@ +package com.appsmith.external.constants.spans; + +import com.appsmith.external.constants.spans.ce.HealthSpanCE; + +public class HealthSpan extends HealthSpanCE {} diff --git a/app/server/appsmith-interfaces/src/main/java/com/appsmith/external/constants/spans/ce/HealthSpanCE.java b/app/server/appsmith-interfaces/src/main/java/com/appsmith/external/constants/spans/ce/HealthSpanCE.java new file mode 100644 index 000000000000..7c13af466434 --- /dev/null +++ b/app/server/appsmith-interfaces/src/main/java/com/appsmith/external/constants/spans/ce/HealthSpanCE.java @@ -0,0 +1,10 @@ +package com.appsmith.external.constants.spans.ce; + +import com.appsmith.external.constants.spans.BaseSpan; + +public class HealthSpanCE { + + public static final String HEALTH = "health."; + public static final String MONGO_HEALTH = BaseSpan.APPSMITH_SPAN_PREFIX + HEALTH + "mongo"; + public static final String REDIS_HEALTH = BaseSpan.APPSMITH_SPAN_PREFIX + HEALTH + "redis"; +} diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/services/HealthCheckServiceImpl.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/services/HealthCheckServiceImpl.java index 64a6614d4a08..b83bc7d46531 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/services/HealthCheckServiceImpl.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/services/HealthCheckServiceImpl.java @@ -1,6 +1,7 @@ package com.appsmith.server.services; import com.appsmith.server.services.ce.HealthCheckServiceCEImpl; +import io.micrometer.observation.ObservationRegistry; import org.springframework.data.mongodb.core.ReactiveMongoTemplate; import org.springframework.data.redis.connection.ReactiveRedisConnectionFactory; import org.springframework.stereotype.Component; @@ -9,7 +10,8 @@ public class HealthCheckServiceImpl extends HealthCheckServiceCEImpl implements HealthCheckService { public HealthCheckServiceImpl( ReactiveRedisConnectionFactory reactiveRedisConnectionFactory, - ReactiveMongoTemplate reactiveMongoTemplate) { - super(reactiveRedisConnectionFactory, reactiveMongoTemplate); + ReactiveMongoTemplate reactiveMongoTemplate, + ObservationRegistry observationRegistry) { + super(reactiveRedisConnectionFactory, reactiveMongoTemplate, observationRegistry); } } diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/services/ce/HealthCheckServiceCEImpl.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/services/ce/HealthCheckServiceCEImpl.java index e1059fd389b5..f18dcd7acfa2 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/services/ce/HealthCheckServiceCEImpl.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/services/ce/HealthCheckServiceCEImpl.java @@ -2,29 +2,37 @@ import com.appsmith.server.exceptions.AppsmithError; import com.appsmith.server.exceptions.AppsmithException; +import io.micrometer.observation.ObservationRegistry; import lombok.extern.slf4j.Slf4j; import org.springframework.boot.actuate.data.mongo.MongoReactiveHealthIndicator; import org.springframework.boot.actuate.data.redis.RedisReactiveHealthIndicator; import org.springframework.boot.actuate.health.Health; import org.springframework.data.mongodb.core.ReactiveMongoTemplate; import org.springframework.data.redis.connection.ReactiveRedisConnectionFactory; +import reactor.core.observability.micrometer.Micrometer; import reactor.core.publisher.Mono; import java.time.Duration; import java.util.concurrent.TimeoutException; import java.util.function.Function; +import static com.appsmith.external.constants.spans.ce.HealthSpanCE.MONGO_HEALTH; +import static com.appsmith.external.constants.spans.ce.HealthSpanCE.REDIS_HEALTH; + @Slf4j public class HealthCheckServiceCEImpl implements HealthCheckServiceCE { private final ReactiveRedisConnectionFactory reactiveRedisConnectionFactory; private final ReactiveMongoTemplate reactiveMongoTemplate; + private final ObservationRegistry observationRegistry; public HealthCheckServiceCEImpl( ReactiveRedisConnectionFactory reactiveRedisConnectionFactory, - ReactiveMongoTemplate reactiveMongoTemplate) { + ReactiveMongoTemplate reactiveMongoTemplate, + ObservationRegistry observationRegistry) { this.reactiveRedisConnectionFactory = reactiveRedisConnectionFactory; this.reactiveMongoTemplate = reactiveMongoTemplate; + this.observationRegistry = observationRegistry; } @Override @@ -42,7 +50,9 @@ private Mono getRedisHealth() { return redisReactiveHealthIndicator .health() .timeout(Duration.ofSeconds(3)) - .onErrorMap(TimeoutException.class, healthTimeout); + .onErrorMap(TimeoutException.class, healthTimeout) + .name(REDIS_HEALTH) + .tap(Micrometer.observation(observationRegistry)); } private Mono getMongoHealth() { @@ -55,6 +65,8 @@ private Mono getMongoHealth() { return mongoReactiveHealthIndicator .health() .timeout(Duration.ofSeconds(1)) - .onErrorMap(TimeoutException.class, healthTimeout); + .onErrorMap(TimeoutException.class, healthTimeout) + .name(MONGO_HEALTH) + .tap(Micrometer.observation(observationRegistry)); } }