From 7052e97547025ee27a1ce5ae41edda3a785cd5b5 Mon Sep 17 00:00:00 2001 From: Abhijeet <41686026+abhvsn@users.noreply.github.com> Date: Tue, 3 Aug 2021 12:24:21 +0530 Subject: [PATCH] Added instance Id in analytics datapoint (#6252) --- .../server/controllers/ConfigController.java | 5 +++-- .../server/services/AnalyticsService.java | 20 +++++++++++++------ .../server/services/ConfigService.java | 2 +- .../server/services/ConfigServiceImpl.java | 16 ++++----------- 4 files changed, 22 insertions(+), 21 deletions(-) diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/controllers/ConfigController.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/controllers/ConfigController.java index df334a7424..ce043ec80e 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/controllers/ConfigController.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/controllers/ConfigController.java @@ -15,10 +15,11 @@ import reactor.core.publisher.Mono; @RestController @RequestMapping(Url.CONFIG_URL) -public class ConfigController extends BaseController { +public class ConfigController { + private final ConfigService service; public ConfigController(ConfigService service) { - super(service); + this.service = service; } @GetMapping("/name/{name}") diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/services/AnalyticsService.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/services/AnalyticsService.java index fed01cdaca..d3f77f98d0 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/services/AnalyticsService.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/services/AnalyticsService.java @@ -13,6 +13,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import reactor.core.publisher.Mono; +import reactor.core.scheduler.Schedulers; import java.util.HashMap; import java.util.Map; @@ -24,14 +25,17 @@ public class AnalyticsService { private final Analytics analytics; private final SessionUserService sessionUserService; private final CommonConfig commonConfig; + private final ConfigService configService; @Autowired public AnalyticsService(@Autowired(required = false) Analytics analytics, SessionUserService sessionUserService, - CommonConfig commonConfig) { + CommonConfig commonConfig, + ConfigService configService) { this.analytics = analytics; this.sessionUserService = sessionUserService; this.commonConfig = commonConfig; + this.configService = configService; } public boolean isActive() { return analytics != null; @@ -92,8 +96,6 @@ public class AnalyticsService { userId = hashedUserId; } - TrackMessage.Builder messageBuilder = TrackMessage.builder(event).userId(userId); - if (!CollectionUtils.isEmpty(analyticsProperties) && commonConfig.isCloudHosting()) { // Segment throws an NPE if any value in `properties` is null. for (final Map.Entry entry : analyticsProperties.entrySet()) { @@ -102,9 +104,16 @@ public class AnalyticsService { } } } - messageBuilder = messageBuilder.properties(analyticsProperties); - analytics.enqueue(messageBuilder); + final String finalUserId = userId; + configService.getInstanceId().map(instanceId -> { + TrackMessage.Builder messageBuilder = TrackMessage.builder(event).userId(finalUserId); + analyticsProperties.put("originService", "appsmith-server"); + analyticsProperties.put("instanceId", instanceId); + messageBuilder = messageBuilder.properties(analyticsProperties); + analytics.enqueue(messageBuilder); + return instanceId; + }).subscribeOn(Schedulers.boundedElastic()).subscribe(); } public Mono sendObjectEvent(AnalyticsEvents event, T object, Map extraProperties) { @@ -131,7 +140,6 @@ public class AnalyticsService { HashMap analyticsProperties = new HashMap<>(); analyticsProperties.put("id", username); analyticsProperties.put("oid", object.getId()); - analyticsProperties.put("originService", "appsmith-server"); if (extraProperties != null) { analyticsProperties.putAll(extraProperties); } diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/services/ConfigService.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/services/ConfigService.java index 766b5124e1..1c14df1dec 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/services/ConfigService.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/services/ConfigService.java @@ -6,7 +6,7 @@ import com.appsmith.server.domains.Datasource; import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; -public interface ConfigService extends CrudService { +public interface ConfigService { Mono getByName(String name); Mono updateByName(String name, Config config); diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/services/ConfigServiceImpl.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/services/ConfigServiceImpl.java index 505b406682..f5c1a4106b 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/services/ConfigServiceImpl.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/services/ConfigServiceImpl.java @@ -10,14 +10,10 @@ import com.appsmith.server.repositories.ApplicationRepository; import com.appsmith.server.repositories.ConfigRepository; import com.appsmith.server.repositories.DatasourceRepository; import lombok.extern.slf4j.Slf4j; -import org.springframework.data.mongodb.core.ReactiveMongoTemplate; -import org.springframework.data.mongodb.core.convert.MongoConverter; import org.springframework.stereotype.Service; import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; -import reactor.core.scheduler.Scheduler; -import javax.validation.Validator; import java.util.Collections; import java.util.List; @@ -25,27 +21,23 @@ import static org.apache.commons.lang3.ObjectUtils.defaultIfNull; @Slf4j @Service -public class ConfigServiceImpl extends BaseService implements ConfigService { +public class ConfigServiceImpl implements ConfigService { private static final String TEMPLATE_ORGANIZATION_CONFIG_NAME = "template-organization"; private final ApplicationRepository applicationRepository; private final DatasourceRepository datasourceRepository; + private final ConfigRepository repository; // This is permanently cached through the life of the JVM process as this is not intended to change at runtime ever. private String instanceId = null; - public ConfigServiceImpl(Scheduler scheduler, - Validator validator, - MongoConverter mongoConverter, - ReactiveMongoTemplate reactiveMongoTemplate, - ConfigRepository repository, - AnalyticsService analyticsService, + public ConfigServiceImpl(ConfigRepository repository, ApplicationRepository applicationRepository, DatasourceRepository datasourceRepository) { - super(scheduler, validator, mongoConverter, reactiveMongoTemplate, repository, analyticsService); this.applicationRepository = applicationRepository; this.datasourceRepository = datasourceRepository; + this.repository = repository; } @Override