From 9d913358b437b539132b223045b0de012f51fdb3 Mon Sep 17 00:00:00 2001 From: Manish Kumar <107841575+sondermanish@users.noreply.github.com> Date: Wed, 19 Jul 2023 06:45:40 +0530 Subject: [PATCH] chore: Multiple environment instrumentation (#25458) --- .../constants/ce/AnalyticsConstantsCE.java | 2 ++ .../helpers/DatasourceAnalyticsUtils.java | 17 +++++++------ .../services/ce/DatasourceServiceCEImpl.java | 10 +++++--- .../ce/DatasourceStorageServiceCE.java | 2 ++ .../ce/DatasourceStorageServiceCEImpl.java | 5 ++++ .../ce/ActionExecutionSolutionCEImpl.java | 11 +++++++-- .../ce/DatasourceStructureSolutionCEImpl.java | 24 ++++++++++++------- 7 files changed, 50 insertions(+), 21 deletions(-) diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/constants/ce/AnalyticsConstantsCE.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/constants/ce/AnalyticsConstantsCE.java index 3ae5d7f09f..eaea309ec8 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/constants/ce/AnalyticsConstantsCE.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/constants/ce/AnalyticsConstantsCE.java @@ -2,6 +2,8 @@ package com.appsmith.server.constants.ce; public class AnalyticsConstantsCE { public static final String ENVIRONMENT_ID_SHORTNAME = "envId"; + public static final String ENVIRONMENT_NAME_SHORTNAME = "envName"; + public static final String ENVIRONMENT_NAME_DEFAULT = ""; public static final String DATASOURCE_ID_SHORTNAME = "dsId"; public static final String DATASOURCE_NAME_SHORTNAME = "dsName"; public static final String DATASOURCE_IS_TEMPLATE_SHORTNAME = "dsIsTemplate"; diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/helpers/DatasourceAnalyticsUtils.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/helpers/DatasourceAnalyticsUtils.java index fc09665c24..bccf769872 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/helpers/DatasourceAnalyticsUtils.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/helpers/DatasourceAnalyticsUtils.java @@ -6,6 +6,7 @@ import com.appsmith.external.models.DatasourceConfiguration; import com.appsmith.external.models.DatasourceStorage; import com.appsmith.external.models.DatasourceTestResult; import com.appsmith.external.models.OAuth2; +import com.appsmith.server.constants.AnalyticsConstants; import org.apache.commons.lang3.ObjectUtils; import java.util.HashMap; @@ -40,8 +41,8 @@ public class DatasourceAnalyticsUtils { } public static Map getAnalyticsPropertiesForTestEventStatus( - DatasourceStorage datasourceStorage, boolean status, Throwable e) { - Map analyticsProperties = getAnalyticsPropertiesWithStorage(datasourceStorage); + DatasourceStorage datasourceStorage, boolean status, Throwable e, String environmentName) { + Map analyticsProperties = getAnalyticsPropertiesWithStorage(datasourceStorage, environmentName); analyticsProperties.put("isSuccess", status); if (e == null) { @@ -56,27 +57,29 @@ public class DatasourceAnalyticsUtils { } public static Map getAnalyticsPropertiesForTestEventStatus( - DatasourceStorage datasourceStorage, boolean status) { - Map analyticsProperties = getAnalyticsPropertiesWithStorage(datasourceStorage); + DatasourceStorage datasourceStorage, boolean status, String environmentName) { + Map analyticsProperties = getAnalyticsPropertiesWithStorage(datasourceStorage, environmentName); analyticsProperties.put("isSuccess", status); analyticsProperties.put("errors", datasourceStorage.getInvalids()); return analyticsProperties; } public static Map getAnalyticsPropertiesForTestEventStatus( - DatasourceStorage datasourceStorage, DatasourceTestResult datasourceTestResult) { - Map analyticsProperties = getAnalyticsPropertiesWithStorage(datasourceStorage); + DatasourceStorage datasourceStorage, DatasourceTestResult datasourceTestResult, String environmentName) { + Map analyticsProperties = getAnalyticsPropertiesWithStorage(datasourceStorage, environmentName); analyticsProperties.put("isSuccess", datasourceTestResult.isSuccess()); analyticsProperties.put("errors", datasourceTestResult.getInvalids()); return analyticsProperties; } - public static Map getAnalyticsPropertiesWithStorage(DatasourceStorage datasourceStorage) { + public static Map getAnalyticsPropertiesWithStorage( + DatasourceStorage datasourceStorage, String environmentName) { Map analyticsProperties = new HashMap<>(); analyticsProperties.putAll(getAnalyticsProperties(datasourceStorage)); analyticsProperties.put("pluginName", datasourceStorage.getPluginName()); analyticsProperties.put("dsName", datasourceStorage.getName()); analyticsProperties.put("envId", datasourceStorage.getEnvironmentId()); + analyticsProperties.put(AnalyticsConstants.ENVIRONMENT_NAME_SHORTNAME, environmentName); DatasourceConfiguration dsConfig = datasourceStorage.getDatasourceConfiguration(); if (dsConfig != null && dsConfig.getAuthentication() != null diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/services/ce/DatasourceServiceCEImpl.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/services/ce/DatasourceServiceCEImpl.java index 2fb985ad82..00d18ca3b3 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/services/ce/DatasourceServiceCEImpl.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/services/ce/DatasourceServiceCEImpl.java @@ -487,7 +487,11 @@ public class DatasourceServiceCEImpl implements DatasourceServiceCE { protected Mono verifyDatasourceAndTest(DatasourceStorage datasourceStorage) { return Mono.justOrEmpty(datasourceStorage) .flatMap(datasourceStorageService::validateDatasourceConfiguration) - .flatMap(storage -> { + .zipWith(datasourceStorageService.getEnvironmentNameFromEnvironmentIdForAnalytics( + datasourceStorage.getEnvironmentId())) + .flatMap(tuple2 -> { + DatasourceStorage storage = tuple2.getT1(); + String environmentName = tuple2.getT2(); Mono datasourceTestResultMono; if (CollectionUtils.isEmpty(storage.getInvalids())) { datasourceTestResultMono = testDatasourceViaPlugin(storage); @@ -503,7 +507,7 @@ public class DatasourceServiceCEImpl implements DatasourceServiceCE { AnalyticsEvents.DS_TEST_EVENT_FAILED, datasourceStorage, getAnalyticsPropertiesForTestEventStatus( - datasourceStorage, datasourceTestResult)) + datasourceStorage, datasourceTestResult, environmentName)) .thenReturn(datasourceTestResult); } else { @@ -512,7 +516,7 @@ public class DatasourceServiceCEImpl implements DatasourceServiceCE { AnalyticsEvents.DS_TEST_EVENT_SUCCESS, datasourceStorage, getAnalyticsPropertiesForTestEventStatus( - datasourceStorage, datasourceTestResult)) + datasourceStorage, datasourceTestResult, environmentName)) .thenReturn(datasourceTestResult); } }) diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/services/ce/DatasourceStorageServiceCE.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/services/ce/DatasourceStorageServiceCE.java index 8430ceb011..9f92be49f3 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/services/ce/DatasourceStorageServiceCE.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/services/ce/DatasourceStorageServiceCE.java @@ -42,4 +42,6 @@ public interface DatasourceStorageServiceCE { DatasourceStorageDTO getDatasourceStorageDTOFromDatasource(Datasource datasource, String environmentId); DatasourceStorage getDatasourceStorageFromDatasource(Datasource datasource, String environmentId); + + Mono getEnvironmentNameFromEnvironmentIdForAnalytics(String environmentId); } diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/services/ce/DatasourceStorageServiceCEImpl.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/services/ce/DatasourceStorageServiceCEImpl.java index 2539ff856f..e2e67a1875 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/services/ce/DatasourceStorageServiceCEImpl.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/services/ce/DatasourceStorageServiceCEImpl.java @@ -331,4 +331,9 @@ public class DatasourceStorageServiceCEImpl implements DatasourceStorageServiceC .flatMap(dbDatasourceStorage -> Mono.error(new AppsmithException( AppsmithError.DUPLICATE_DATASOURCE_CONFIGURATION, datasourceId, environmentId))); } + + @Override + public Mono getEnvironmentNameFromEnvironmentIdForAnalytics(String environmentId) { + return Mono.just(FieldName.UNUSED_ENVIRONMENT_ID); + } } diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/solutions/ce/ActionExecutionSolutionCEImpl.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/solutions/ce/ActionExecutionSolutionCEImpl.java index 456887a778..57b89ac9e8 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/solutions/ce/ActionExecutionSolutionCEImpl.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/solutions/ce/ActionExecutionSolutionCEImpl.java @@ -91,6 +91,8 @@ import static com.appsmith.server.constants.AnalyticsConstants.DATASOURCE_IS_MOC import static com.appsmith.server.constants.AnalyticsConstants.DATASOURCE_IS_TEMPLATE_SHORTNAME; import static com.appsmith.server.constants.AnalyticsConstants.DATASOURCE_NAME_SHORTNAME; import static com.appsmith.server.constants.AnalyticsConstants.ENVIRONMENT_ID_SHORTNAME; +import static com.appsmith.server.constants.ce.AnalyticsConstantsCE.ENVIRONMENT_NAME_DEFAULT; +import static com.appsmith.server.constants.ce.AnalyticsConstantsCE.ENVIRONMENT_NAME_SHORTNAME; import static com.appsmith.server.helpers.WidgetSuggestionHelper.getSuggestedWidgets; import static java.lang.Boolean.FALSE; import static java.lang.Boolean.TRUE; @@ -889,12 +891,15 @@ public class ActionExecutionSolutionCEImpl implements ActionExecutionSolutionCE Mono.just(application), sessionUserService.getCurrentUser(), newPageService.getNameByPageId(actionDTO.getPageId(), executeActionDto.getViewMode()), - pluginService.getById(actionDTO.getPluginId()))) + pluginService.getById(actionDTO.getPluginId()), + datasourceStorageService.getEnvironmentNameFromEnvironmentIdForAnalytics( + datasourceStorage.getEnvironmentId()))) .flatMap(tuple -> { final Application application = tuple.getT1(); final User user = tuple.getT2(); final String pageName = tuple.getT3(); final Plugin plugin = tuple.getT4(); + final String environmentName = tuple.getT5(); final PluginType pluginType = actionDTO.getPluginType(); final String appMode = TRUE.equals(executeActionDto.getViewMode()) @@ -981,7 +986,9 @@ public class ActionExecutionSolutionCEImpl implements ActionExecutionSolutionCE DATASOURCE_IS_MOCK_SHORTNAME, ObjectUtils.defaultIfNull(datasourceStorage.getIsMock(), ""), DATASOURCE_CREATED_AT_SHORTNAME, - dsCreatedAt)); + dsCreatedAt, + ENVIRONMENT_NAME_SHORTNAME, + ObjectUtils.defaultIfNull(datasourceStorage.getIsMock(), ENVIRONMENT_NAME_DEFAULT))); // Add the error message in case of erroneous execution if (FALSE.equals(actionExecutionResult.getIsExecutionSuccess())) { diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/solutions/ce/DatasourceStructureSolutionCEImpl.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/solutions/ce/DatasourceStructureSolutionCEImpl.java index 2e9286cb5e..d621754f09 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/solutions/ce/DatasourceStructureSolutionCEImpl.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/solutions/ce/DatasourceStructureSolutionCEImpl.java @@ -75,12 +75,16 @@ public class DatasourceStructureSolutionCEImpl implements DatasourceStructureSol @Override public Mono getStructure(DatasourceStorage datasourceStorage, boolean ignoreCache) { + Mono environmentNameMonoCached = datasourceStorageService + .getEnvironmentNameFromEnvironmentIdForAnalytics(datasourceStorage.getEnvironmentId()) + .cache(); + if (Boolean.FALSE.equals(datasourceStorage.getIsValid())) { - return analyticsService - .sendObjectEvent( + return environmentNameMonoCached + .zipWhen(environmentName -> analyticsService.sendObjectEvent( AnalyticsEvents.DS_SCHEMA_FETCH_EVENT, datasourceStorage, - getAnalyticsPropertiesForTestEventStatus(datasourceStorage, false)) + getAnalyticsPropertiesForTestEventStatus(datasourceStorage, false, environmentName))) .then(Mono.just(new DatasourceStructure())); } @@ -126,21 +130,23 @@ public class DatasourceStructureSolutionCEImpl implements DatasourceStructureSol return e; }) - .onErrorResume(error -> analyticsService - .sendObjectEvent( + .onErrorResume(error -> environmentNameMonoCached + .zipWhen(environmentName -> analyticsService.sendObjectEvent( AnalyticsEvents.DS_SCHEMA_FETCH_EVENT, datasourceStorage, - getAnalyticsPropertiesForTestEventStatus(datasourceStorage, false, error)) + getAnalyticsPropertiesForTestEventStatus( + datasourceStorage, false, error, environmentName))) .then(Mono.error(error))) .flatMap(structure -> { String datasourceId = datasourceStorage.getDatasourceId(); String environmentId = datasourceStorage.getEnvironmentId(); - return analyticsService - .sendObjectEvent( + return environmentNameMonoCached + .zipWhen(environmentName -> analyticsService.sendObjectEvent( AnalyticsEvents.DS_SCHEMA_FETCH_EVENT, datasourceStorage, - getAnalyticsPropertiesForTestEventStatus(datasourceStorage, true, null)) + getAnalyticsPropertiesForTestEventStatus( + datasourceStorage, true, null, environmentName))) .then( !hasText(datasourceId) ? Mono.empty()