From d303b74ad5f3739c54796f52b5413a5ece8de0d4 Mon Sep 17 00:00:00 2001 From: nilansh Date: Fri, 14 Jun 2024 10:55:37 +0530 Subject: [PATCH 1/2] chore: added new relic telemetry for spans --- .../external/constants/spans/TenantSpan.java | 9 +++++++ .../CacheableRepositoryHelperImpl.java | 6 +++-- .../ce/CacheableRepositoryHelperCEImpl.java | 26 +++++++++++++------ ...eableRepositoryHelperCECompatibleImpl.java | 6 +++-- .../server/services/TenantServiceImpl.java | 7 +++-- .../services/ce/TenantServiceCEImpl.java | 13 +++++++++- 6 files changed, 52 insertions(+), 15 deletions(-) create mode 100644 app/server/appsmith-interfaces/src/main/java/com/appsmith/external/constants/spans/TenantSpan.java diff --git a/app/server/appsmith-interfaces/src/main/java/com/appsmith/external/constants/spans/TenantSpan.java b/app/server/appsmith-interfaces/src/main/java/com/appsmith/external/constants/spans/TenantSpan.java new file mode 100644 index 000000000000..45ff5c162a9f --- /dev/null +++ b/app/server/appsmith-interfaces/src/main/java/com/appsmith/external/constants/spans/TenantSpan.java @@ -0,0 +1,9 @@ +package com.appsmith.external.constants.spans; + +import static com.appsmith.external.constants.spans.BaseSpan.APPSMITH_SPAN_PREFIX; + +public class TenantSpan { + public static final String FETCHING_DEFAULT_TENANT = APPSMITH_SPAN_PREFIX + "fetch_default_tenant"; + public static final String FETCH_TENANT_CACHE_POST_ERROR = APPSMITH_SPAN_PREFIX + "fetch_tenant_cache_error"; + public static final String FETCH_TENANT_FROM_DB = APPSMITH_SPAN_PREFIX + "fetch_tenant_by_id"; +} diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/repositories/CacheableRepositoryHelperImpl.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/repositories/CacheableRepositoryHelperImpl.java index ed91d3b62139..aa018f297e5a 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/repositories/CacheableRepositoryHelperImpl.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/repositories/CacheableRepositoryHelperImpl.java @@ -2,6 +2,7 @@ import com.appsmith.server.helpers.InMemoryCacheableRepositoryHelper; import com.appsmith.server.repositories.ce_compatible.CacheableRepositoryHelperCECompatibleImpl; +import io.micrometer.observation.ObservationRegistry; import org.springframework.data.mongodb.core.ReactiveMongoOperations; import org.springframework.stereotype.Component; @@ -11,7 +12,8 @@ public class CacheableRepositoryHelperImpl extends CacheableRepositoryHelperCECo public CacheableRepositoryHelperImpl( ReactiveMongoOperations mongoOperations, - InMemoryCacheableRepositoryHelper inMemoryCacheableRepositoryHelper) { - super(mongoOperations, inMemoryCacheableRepositoryHelper); + InMemoryCacheableRepositoryHelper inMemoryCacheableRepositoryHelper, + ObservationRegistry observationRegistry) { + super(mongoOperations, inMemoryCacheableRepositoryHelper, observationRegistry); } } diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/repositories/ce/CacheableRepositoryHelperCEImpl.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/repositories/ce/CacheableRepositoryHelperCEImpl.java index 9db94b33ccf5..4b4600ea711d 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/repositories/ce/CacheableRepositoryHelperCEImpl.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/repositories/ce/CacheableRepositoryHelperCEImpl.java @@ -14,16 +14,19 @@ import com.appsmith.server.helpers.InMemoryCacheableRepositoryHelper; import com.appsmith.server.helpers.ce.bridge.Bridge; import com.appsmith.server.helpers.ce.bridge.BridgeQuery; +import io.micrometer.observation.ObservationRegistry; import lombok.extern.slf4j.Slf4j; import net.minidev.json.JSONObject; import org.springframework.data.mongodb.core.ReactiveMongoOperations; import org.springframework.data.mongodb.core.query.Query; import org.springframework.stereotype.Component; +import reactor.core.observability.micrometer.Micrometer; import reactor.core.publisher.Mono; import java.util.Set; import java.util.stream.Collectors; +import static com.appsmith.external.constants.spans.TenantSpan.FETCH_TENANT_FROM_DB; import static com.appsmith.server.constants.FieldName.PERMISSION_GROUP_ID; import static com.appsmith.server.constants.ce.FieldNameCE.ANONYMOUS_USER; import static com.appsmith.server.constants.ce.FieldNameCE.DEFAULT_PERMISSION_GROUP; @@ -35,12 +38,15 @@ public class CacheableRepositoryHelperCEImpl implements CacheableRepositoryHelperCE { private final ReactiveMongoOperations mongoOperations; private final InMemoryCacheableRepositoryHelper inMemoryCacheableRepositoryHelper; + private final ObservationRegistry observationRegistry; public CacheableRepositoryHelperCEImpl( ReactiveMongoOperations mongoOperations, - InMemoryCacheableRepositoryHelper inMemoryCacheableRepositoryHelper) { + InMemoryCacheableRepositoryHelper inMemoryCacheableRepositoryHelper, + ObservationRegistry observationRegistry) { this.mongoOperations = mongoOperations; this.inMemoryCacheableRepositoryHelper = inMemoryCacheableRepositoryHelper; + this.observationRegistry = observationRegistry; } @Cache(cacheName = "permissionGroupsForUser", key = "{#user.email + #user.tenantId}") @@ -182,13 +188,17 @@ public Mono fetchDefaultTenant(String tenantId) { BridgeQuery andCriteria = Bridge.and(defaultTenantCriteria, notDeletedCriteria); Query query = new Query(); query.addCriteria(andCriteria); - - return mongoOperations.findOne(query, Tenant.class).map(tenant -> { - if (tenant.getTenantConfiguration() == null) { - tenant.setTenantConfiguration(new TenantConfiguration()); - } - return tenant; - }); + log.info("FETCHING TENANT FROM DATABASE AS NOT PRESENT IN CACHE!"); + return mongoOperations + .findOne(query, Tenant.class) + .map(tenant -> { + if (tenant.getTenantConfiguration() == null) { + tenant.setTenantConfiguration(new TenantConfiguration()); + } + return tenant; + }) + .name(FETCH_TENANT_FROM_DB) + .tap(Micrometer.observation(observationRegistry)); } @CacheEvict(cacheName = "tenant", key = "{#tenantId}") diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/repositories/ce_compatible/CacheableRepositoryHelperCECompatibleImpl.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/repositories/ce_compatible/CacheableRepositoryHelperCECompatibleImpl.java index d7c0f10cfade..2bdef88fc9bb 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/repositories/ce_compatible/CacheableRepositoryHelperCECompatibleImpl.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/repositories/ce_compatible/CacheableRepositoryHelperCECompatibleImpl.java @@ -2,6 +2,7 @@ import com.appsmith.server.helpers.InMemoryCacheableRepositoryHelper; import com.appsmith.server.repositories.ce.CacheableRepositoryHelperCEImpl; +import io.micrometer.observation.ObservationRegistry; import lombok.extern.slf4j.Slf4j; import org.springframework.data.mongodb.core.ReactiveMongoOperations; import org.springframework.stereotype.Component; @@ -12,7 +13,8 @@ public class CacheableRepositoryHelperCECompatibleImpl extends CacheableReposito implements CacheableRepositoryHelperCECompatible { public CacheableRepositoryHelperCECompatibleImpl( ReactiveMongoOperations mongoOperations, - InMemoryCacheableRepositoryHelper inMemoryCacheableRepositoryHelper) { - super(mongoOperations, inMemoryCacheableRepositoryHelper); + InMemoryCacheableRepositoryHelper inMemoryCacheableRepositoryHelper, + ObservationRegistry observationRegistry) { + super(mongoOperations, inMemoryCacheableRepositoryHelper, observationRegistry); } } diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/services/TenantServiceImpl.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/services/TenantServiceImpl.java index 94b62d21d064..fba38e745aad 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/services/TenantServiceImpl.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/services/TenantServiceImpl.java @@ -6,6 +6,7 @@ import com.appsmith.server.repositories.TenantRepository; import com.appsmith.server.services.ce.TenantServiceCEImpl; import com.appsmith.server.solutions.EnvManager; +import io.micrometer.observation.ObservationRegistry; import jakarta.validation.Validator; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; @@ -23,7 +24,8 @@ public TenantServiceImpl( @Lazy EnvManager envManager, FeatureFlagMigrationHelper featureFlagMigrationHelper, CacheableRepositoryHelper cacheableRepositoryHelper, - CommonConfig commonConfig) { + CommonConfig commonConfig, + ObservationRegistry observationRegistry) { super( validator, repository, @@ -32,6 +34,7 @@ public TenantServiceImpl( envManager, featureFlagMigrationHelper, cacheableRepositoryHelper, - commonConfig); + commonConfig, + observationRegistry); } } diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/services/ce/TenantServiceCEImpl.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/services/ce/TenantServiceCEImpl.java index 7d3a02439af2..68c5223f726d 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/services/ce/TenantServiceCEImpl.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/services/ce/TenantServiceCEImpl.java @@ -19,14 +19,18 @@ import com.appsmith.server.services.BaseService; import com.appsmith.server.services.ConfigService; import com.appsmith.server.solutions.EnvManager; +import io.micrometer.observation.ObservationRegistry; import jakarta.validation.Validator; import lombok.extern.slf4j.Slf4j; import org.springframework.context.annotation.Lazy; import org.springframework.util.StringUtils; +import reactor.core.observability.micrometer.Micrometer; import reactor.core.publisher.Mono; import java.util.Map; +import static com.appsmith.external.constants.spans.TenantSpan.FETCHING_DEFAULT_TENANT; +import static com.appsmith.external.constants.spans.TenantSpan.FETCH_TENANT_CACHE_POST_ERROR; import static com.appsmith.server.acl.AclPermission.MANAGE_TENANT; import static java.lang.Boolean.TRUE; @@ -44,6 +48,7 @@ public class TenantServiceCEImpl extends BaseService getDefaultTenant() { // Fetching Tenant from redis cache return getDefaultTenantId() .flatMap(tenantId -> cacheableRepositoryHelper.fetchDefaultTenant(tenantId)) + .name(FETCHING_DEFAULT_TENANT) + .tap(Micrometer.observation(observationRegistry)) .flatMap(tenant -> repository.setUserPermissionsInObject(tenant).switchIfEmpty(Mono.just(tenant))) .onErrorResume(e -> { log.error("Error fetching default tenant from redis!", e); @@ -191,6 +200,8 @@ public Mono getDefaultTenant() { } return tenant; })) + .name(FETCH_TENANT_CACHE_POST_ERROR) + .tap(Micrometer.observation(observationRegistry)) .flatMap(tenant -> repository .setUserPermissionsInObject(tenant) .switchIfEmpty(Mono.just(tenant))); From d4dc99e250372ce86847b6904c0e642c636ec9ad Mon Sep 17 00:00:00 2001 From: nilansh Date: Fri, 14 Jun 2024 11:38:29 +0530 Subject: [PATCH 2/2] renamed spans --- .../com/appsmith/external/constants/spans/TenantSpan.java | 7 ++++--- .../repositories/ce/CacheableRepositoryHelperCEImpl.java | 4 ++-- .../appsmith/server/services/ce/TenantServiceCEImpl.java | 8 ++++---- 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/app/server/appsmith-interfaces/src/main/java/com/appsmith/external/constants/spans/TenantSpan.java b/app/server/appsmith-interfaces/src/main/java/com/appsmith/external/constants/spans/TenantSpan.java index 45ff5c162a9f..5aeaf78f9971 100644 --- a/app/server/appsmith-interfaces/src/main/java/com/appsmith/external/constants/spans/TenantSpan.java +++ b/app/server/appsmith-interfaces/src/main/java/com/appsmith/external/constants/spans/TenantSpan.java @@ -3,7 +3,8 @@ import static com.appsmith.external.constants.spans.BaseSpan.APPSMITH_SPAN_PREFIX; public class TenantSpan { - public static final String FETCHING_DEFAULT_TENANT = APPSMITH_SPAN_PREFIX + "fetch_default_tenant"; - public static final String FETCH_TENANT_CACHE_POST_ERROR = APPSMITH_SPAN_PREFIX + "fetch_tenant_cache_error"; - public static final String FETCH_TENANT_FROM_DB = APPSMITH_SPAN_PREFIX + "fetch_tenant_by_id"; + public static final String FETCH_DEFAULT_TENANT_SPAN = APPSMITH_SPAN_PREFIX + "fetch_default_tenant"; + public static final String FETCH_TENANT_CACHE_POST_DESERIALIZATION_ERROR_SPAN = + APPSMITH_SPAN_PREFIX + "fetch_tenant_cache_post_deserialization_error"; + public static final String FETCH_TENANT_FROM_DB_SPAN = APPSMITH_SPAN_PREFIX + "fetch_tenant_from_db"; } diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/repositories/ce/CacheableRepositoryHelperCEImpl.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/repositories/ce/CacheableRepositoryHelperCEImpl.java index 4b4600ea711d..b2eaf8bdc12e 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/repositories/ce/CacheableRepositoryHelperCEImpl.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/repositories/ce/CacheableRepositoryHelperCEImpl.java @@ -26,7 +26,7 @@ import java.util.Set; import java.util.stream.Collectors; -import static com.appsmith.external.constants.spans.TenantSpan.FETCH_TENANT_FROM_DB; +import static com.appsmith.external.constants.spans.TenantSpan.FETCH_TENANT_FROM_DB_SPAN; import static com.appsmith.server.constants.FieldName.PERMISSION_GROUP_ID; import static com.appsmith.server.constants.ce.FieldNameCE.ANONYMOUS_USER; import static com.appsmith.server.constants.ce.FieldNameCE.DEFAULT_PERMISSION_GROUP; @@ -197,7 +197,7 @@ public Mono fetchDefaultTenant(String tenantId) { } return tenant; }) - .name(FETCH_TENANT_FROM_DB) + .name(FETCH_TENANT_FROM_DB_SPAN) .tap(Micrometer.observation(observationRegistry)); } diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/services/ce/TenantServiceCEImpl.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/services/ce/TenantServiceCEImpl.java index 68c5223f726d..d37b761f1aba 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/services/ce/TenantServiceCEImpl.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/services/ce/TenantServiceCEImpl.java @@ -29,8 +29,8 @@ import java.util.Map; -import static com.appsmith.external.constants.spans.TenantSpan.FETCHING_DEFAULT_TENANT; -import static com.appsmith.external.constants.spans.TenantSpan.FETCH_TENANT_CACHE_POST_ERROR; +import static com.appsmith.external.constants.spans.TenantSpan.FETCH_DEFAULT_TENANT_SPAN; +import static com.appsmith.external.constants.spans.TenantSpan.FETCH_TENANT_CACHE_POST_DESERIALIZATION_ERROR_SPAN; import static com.appsmith.server.acl.AclPermission.MANAGE_TENANT; import static java.lang.Boolean.TRUE; @@ -182,7 +182,7 @@ public Mono getDefaultTenant() { // Fetching Tenant from redis cache return getDefaultTenantId() .flatMap(tenantId -> cacheableRepositoryHelper.fetchDefaultTenant(tenantId)) - .name(FETCHING_DEFAULT_TENANT) + .name(FETCH_DEFAULT_TENANT_SPAN) .tap(Micrometer.observation(observationRegistry)) .flatMap(tenant -> repository.setUserPermissionsInObject(tenant).switchIfEmpty(Mono.just(tenant))) .onErrorResume(e -> { @@ -200,7 +200,7 @@ public Mono getDefaultTenant() { } return tenant; })) - .name(FETCH_TENANT_CACHE_POST_ERROR) + .name(FETCH_TENANT_CACHE_POST_DESERIALIZATION_ERROR_SPAN) .tap(Micrometer.observation(observationRegistry)) .flatMap(tenant -> repository .setUserPermissionsInObject(tenant)