From 75a985839750d8dd8b51280344f1e2d10a569534 Mon Sep 17 00:00:00 2001 From: Vishnu Gp Date: Mon, 5 Sep 2022 10:46:59 +0530 Subject: [PATCH] chore: Added some changes in authentication analytics events (#16432) * chore: Added some changes in authentication analytics events * Review Changes --- .../services/ce/AnalyticsServiceCEImpl.java | 17 ++++++++++++-- .../server/solutions/ce/EnvManagerCEImpl.java | 22 ++++++++++--------- 2 files changed, 27 insertions(+), 12 deletions(-) diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/services/ce/AnalyticsServiceCEImpl.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/services/ce/AnalyticsServiceCEImpl.java index 6ddf44f79c..9db6f6c9a8 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/services/ce/AnalyticsServiceCEImpl.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/services/ce/AnalyticsServiceCEImpl.java @@ -170,8 +170,7 @@ public class AnalyticsServiceCEImpl implements AnalyticsServiceCE { return Mono.just(object); } - // In case of action execution, event.getEventName() only is used to support backward compatibility of event name - final String eventTag = AnalyticsEvents.EXECUTE_ACTION.equals(event) ? event.getEventName() : event.getEventName() + "_" + object.getClass().getSimpleName().toUpperCase(); + final String eventTag = getEventTag(event, object); // We will create an anonymous user object for event tracking if no user is present // Without this, a lot of flows meant for anonymous users will error out @@ -213,6 +212,20 @@ public class AnalyticsServiceCEImpl implements AnalyticsServiceCE { }); } + /** + * Generates event name tag to analytic events + * @param event AnalyticsEvents + * @param object Analytic event resource object + * @return String + */ + private String getEventTag(AnalyticsEvents event, T object) { + // In case of action execution or instance setting update, event.getEventName() only is used to support backward compatibility of event name + boolean isNonResourceEvent = AnalyticsEvents.EXECUTE_ACTION.equals(event) || AnalyticsEvents.AUTHENTICATION_METHOD_CONFIGURATION.equals(event); + final String eventTag = isNonResourceEvent ? event.getEventName() : event.getEventName() + "_" + object.getClass().getSimpleName().toUpperCase(); + + return eventTag; + } + public Mono sendCreateEvent(T object, Map extraProperties) { return sendObjectEvent(AnalyticsEvents.CREATE, object, extraProperties); } diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/solutions/ce/EnvManagerCEImpl.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/solutions/ce/EnvManagerCEImpl.java index bdd87a7567..e1ebba5977 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/solutions/ce/EnvManagerCEImpl.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/solutions/ce/EnvManagerCEImpl.java @@ -243,13 +243,12 @@ public class EnvManagerCEImpl implements EnvManagerCE { try { Files.write(envFilePath, changedContent); - sendAnalyticsEvent(user, originalVariables, changes); } catch (IOException e) { log.error("Unable to write to env file " + envFilePath, e); return Mono.error(e); } - return Mono.just(originalVariables); + return sendAnalyticsEvent(user, originalVariables, changes).thenReturn(originalVariables); }) .flatMap(originalValues -> { Mono dependentTasks = Mono.empty(); @@ -329,14 +328,17 @@ public class EnvManagerCEImpl implements EnvManagerCE { * @param user The user who triggered the event. * @param originalVariables Already existing env variables * @param changes Changes in the env variables + * @return Mono of User */ - private void sendAnalyticsEvent(User user, Map originalVariables, Map changes) { + private Mono sendAnalyticsEvent(User user, Map originalVariables, Map changes) { // Generate analytics event properties template(s) according to the env variable changes - List> analyticsEvents = getAnalyticsEvents(originalVariables, changes, new ArrayList<>()); + List> analyticsEvents = getAnalyticsEvents(originalVariables, changes, new ArrayList<>()); - for (Map analyticsEvent : analyticsEvents) { - analyticsService.sendEvent(AnalyticsEvents.AUTHENTICATION_METHOD_CONFIGURATION.getEventName(), user.getUsername(), analyticsEvent); + // Currently supporting only one authentication method update in one env update call + if (!analyticsEvents.isEmpty()) { + return analyticsService.sendObjectEvent(AnalyticsEvents.AUTHENTICATION_METHOD_CONFIGURATION, user, analyticsEvents.get(0)).then(); } + return Mono.empty(); } /** @@ -347,17 +349,17 @@ public class EnvManagerCEImpl implements EnvManagerCE { * @param extraAuthEnvs To incorporate extra authentication methods in enterprise edition * @return A list of analytics event properties mappings. */ - public List> getAnalyticsEvents(Map originalVariables, Map changes, List extraAuthEnvs) { + public List> getAnalyticsEvents(Map originalVariables, Map changes, List extraAuthEnvs) { List authEnvs = new ArrayList<>(List.of(APPSMITH_OAUTH2_GOOGLE_CLIENT_ID.name(), APPSMITH_OAUTH2_GITHUB_CLIENT_ID.name())); // Add extra authentication methods authEnvs.addAll(extraAuthEnvs); // Generate analytics event(s) properties - List> analyticsEvents = new ArrayList<>(); + List> analyticsEvents = new ArrayList<>(); for (String authEnv : authEnvs) { if (changes.containsKey(authEnv)) { - Map properties = new HashMap<>(); + Map properties = new HashMap<>(); properties.put("provider", authEnv); setAnalyticsEventAction(properties, changes.get(authEnv), originalVariables.get(authEnv), authEnv); if (properties.containsKey("action")) { @@ -377,7 +379,7 @@ public class EnvManagerCEImpl implements EnvManagerCE { * @param originalVariable Already existing env variable value * @param authEnv Env variable name */ - public void setAnalyticsEventAction(Map properties, String newVariable, String originalVariable, String authEnv) { + public void setAnalyticsEventAction(Map properties, String newVariable, String originalVariable, String authEnv) { // Authentication configuration added if (!newVariable.isEmpty() && originalVariable.isEmpty()) { properties.put("action", "Added");