chore: Added some changes in authentication analytics events (#16432)

* chore: Added some changes in authentication analytics events

* Review Changes
This commit is contained in:
Vishnu Gp 2022-09-05 10:46:59 +05:30 committed by GitHub
parent 731bbc9428
commit 75a9858397
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 27 additions and 12 deletions

View File

@ -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 <T extends BaseDomain> 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 <T extends BaseDomain> Mono<T> sendCreateEvent(T object, Map<String, Object> extraProperties) {
return sendObjectEvent(AnalyticsEvents.CREATE, object, extraProperties);
}

View File

@ -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<Void> 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<String, String> originalVariables, Map<String, String> changes) {
private Mono<Void> sendAnalyticsEvent(User user, Map<String, String> originalVariables, Map<String, String> changes) {
// Generate analytics event properties template(s) according to the env variable changes
List<Map<String, String>> analyticsEvents = getAnalyticsEvents(originalVariables, changes, new ArrayList<>());
List<Map<String, Object>> analyticsEvents = getAnalyticsEvents(originalVariables, changes, new ArrayList<>());
for (Map<String, String> 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<Map<String, String>> getAnalyticsEvents(Map<String, String> originalVariables, Map<String, String> changes, List<String> extraAuthEnvs) {
public List<Map<String, Object>> getAnalyticsEvents(Map<String, String> originalVariables, Map<String, String> changes, List<String> extraAuthEnvs) {
List<String> 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<Map<String, String>> analyticsEvents = new ArrayList<>();
List<Map<String, Object>> analyticsEvents = new ArrayList<>();
for (String authEnv : authEnvs) {
if (changes.containsKey(authEnv)) {
Map<String, String> properties = new HashMap<>();
Map<String, Object> 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<String, String> properties, String newVariable, String originalVariable, String authEnv) {
public void setAnalyticsEventAction(Map<String, Object> properties, String newVariable, String originalVariable, String authEnv) {
// Authentication configuration added
if (!newVariable.isEmpty() && originalVariable.isEmpty()) {
properties.put("action", "Added");