Skip to content

Commit

Permalink
feat: Update note page analytics measuring point - MEED-8096 - Meeds-…
Browse files Browse the repository at this point in the history
…io/MIPs#162

 Update note page analytics measuring point
  • Loading branch information
hakermi committed Feb 17, 2025
1 parent e5bfdca commit b63d564
Show file tree
Hide file tree
Showing 47 changed files with 97 additions and 140 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -22,13 +22,16 @@

import java.util.concurrent.CompletableFuture;

import io.meeds.social.cms.model.CMSSetting;
import io.meeds.social.cms.service.CMSService;
import org.apache.commons.lang3.StringUtils;

import io.meeds.analytics.model.StatisticData;
import io.meeds.analytics.utils.AnalyticsUtils;
import org.exoplatform.container.ExoContainerContext;
import org.exoplatform.container.PortalContainer;
import org.exoplatform.container.component.RequestLifeCycle;
import org.exoplatform.portal.pom.data.PageKey;
import org.exoplatform.services.log.ExoLogger;
import org.exoplatform.services.log.Log;
import org.exoplatform.services.security.ConversationState;
Expand All @@ -48,29 +51,27 @@ public class NotesPageListener extends PageWikiListener {

private static final Log LOG = ExoLogger.getLogger(NotesPageListener.class);

private static final String WIKI_ADD_PAGE_OPERATION = "noteCreated";
private static final String WIKI_ADD_PAGE_OPERATION = "createContent";

private static final String WIKI_UPDATE_PAGE_OPERATION = "noteUpdated";
private static final String WIKI_UPDATE_PAGE_OPERATION = "updateContent";

private static final String WIKI_DELETE_PAGE_OPERATION = "noteDeleted";

private static final String WIKI_OPEN_PAGE_TREE = "openNoteByTree";

private static final String WIKI_OPEN_PAGE_BREAD_CRUMB = "openNoteByBreadCrumb";
private static final String WIKI_DELETE_PAGE_OPERATION = "deleteContent";

protected PortalContainer container;

protected IdentityManager identityManager;

protected SpaceService spaceService;

protected CMSService cmsService;

public NotesPageListener() {
this.container = PortalContainer.getInstance();
}

@Override
public void postAddPage(String wikiType, String wikiOwner, String pageId, Page page) throws WikiException {
computeWikiPageStatistics(page, wikiType, wikiOwner, WIKI_ADD_PAGE_OPERATION, null);
computeWikiPageStatistics(page, wikiType, wikiOwner, WIKI_ADD_PAGE_OPERATION);
}

@Override
Expand All @@ -80,49 +81,47 @@ public void postUpdatePage(String wikiType,
Page page,
PageUpdateType wikiUpdateType) throws WikiException {
if (!(page instanceof DraftPage) && wikiUpdateType != null) {
computeWikiPageStatistics(page, wikiType, wikiOwner, WIKI_UPDATE_PAGE_OPERATION, wikiUpdateType);
computeWikiPageStatistics(page, wikiType, wikiOwner, WIKI_UPDATE_PAGE_OPERATION);
}
}

@Override
public void postDeletePage(String wikiType, String wikiOwner, String pageId, Page page) throws WikiException {
computeWikiPageStatistics(page, wikiType, wikiOwner, WIKI_DELETE_PAGE_OPERATION, null);
computeWikiPageStatistics(page, wikiType, wikiOwner, WIKI_DELETE_PAGE_OPERATION);
}

@Override
public void postgetPagefromTree(String wikiType, String wikiOwner, String pageId, Page page) throws WikiException {
computeWikiPageStatistics(page, wikiType, wikiOwner, WIKI_OPEN_PAGE_TREE, null);
// Nothing
}

@Override
public void postgetPagefromBreadCrumb(String wikiType, String wikiOwner, String pageId, Page page) throws WikiException {
computeWikiPageStatistics(page, wikiType, wikiOwner, WIKI_OPEN_PAGE_BREAD_CRUMB, null);
// Nothing
}

private void computeWikiPageStatistics(Page page,
String wikiType,
String wikiOwner,
String operation,
PageUpdateType wikiUpdateType) {
String operation) {
ConversationState conversationstate = ConversationState.getCurrent();
final String modifierUsername = conversationstate == null
|| conversationstate.getIdentity() == null ? null : conversationstate.getIdentity().getUserId();

computeWikiPageStatisticsAsync(page, wikiType, wikiOwner, modifierUsername, operation, wikiUpdateType);
computeWikiPageStatisticsAsync(page, wikiType, wikiOwner, modifierUsername, operation);
}

private void computeWikiPageStatisticsAsync(final Page page,
final String wikiType,
final String wikiOwner,
final String modifierUsername,
final String operation,
final PageUpdateType wikiUpdateType) {
final String operation) {
CompletableFuture.supplyAsync(() -> {
ExoContainerContext.setCurrentContainer(container);
RequestLifeCycle.begin(container);
try {
long userIdentityId = getUserIdentityId(modifierUsername);
createWikiPageStatistic(page, wikiType, wikiOwner, userIdentityId, operation, wikiUpdateType);
createWikiPageStatistic(page, wikiType, wikiOwner, userIdentityId, operation);
} catch (Exception e) {
LOG.warn("Error computing wiki statistics", e);
} finally {
Expand All @@ -136,34 +135,35 @@ private void createWikiPageStatistic(Page page,
String wikiType,
String wikiOwner,
long userIdentityId,
String operation,
PageUpdateType wikiUpdateType) {
String operation) {
StatisticData statisticData = new StatisticData();
statisticData.setModule("Note");
statisticData.setSubModule("Note");
statisticData.setModule("contents");
statisticData.setSubModule("contents");
statisticData.setOperation(operation);
statisticData.setUserId(userIdentityId);

if (StringUtils.isNotBlank(wikiOwner)
&& StringUtils.equalsIgnoreCase(WikiType.GROUP.name(), wikiType)) {
Space space = getSpaceService().getSpaceByGroupId(wikiOwner);
addSpaceStatistics(statisticData, space);
}

if (page != null) {
statisticData.addParameter("wikiPageId", page.getId());
statisticData.addParameter("wikiId", page.getWikiId());
statisticData.addParameter("contentLength", page.getContent() == null ? 0 : page.getContent().length());
statisticData.addParameter("titleLength", page.getTitle() == null ? 0 : page.getTitle().length());
statisticData.addParameter("authorId", getUserIdentityId(page.getAuthor()));
statisticData.addParameter("ownerId", getUserIdentityId(page.getOwner()));
statisticData.addParameter("wikiType", page.getWikiType());
statisticData.addParameter("createdDate", page.getCreatedDate());
}
if (wikiUpdateType != null) {
statisticData.addParameter("updateType", wikiUpdateType.name());
CMSSetting cmsSetting = getCmsService().getSetting("notePage", page.getName());
String title = page.getTitle();
if (cmsSetting != null) {
String pageReference = cmsSetting.getPageReference();
PageKey pageKey = PageKey.create(pageReference);
title = "SNV in " + pageKey.getName();
}
statisticData.addParameter("contentId", page.getId());
statisticData.addParameter("contentTitle", title);
statisticData.addParameter("contentAuthor", page.getAuthor());
statisticData.addParameter("contentLastModifier", page.getAuthor());
statisticData.addParameter("contentType", cmsSetting != null ? "SNV" : "Note");
statisticData.addParameter("contentUpdatedDate", page.getUpdatedDate());
statisticData.addParameter("contentCreationDate", page.getCreatedDate());

if (StringUtils.isNotBlank(wikiOwner) && StringUtils.equalsIgnoreCase(WikiType.GROUP.name(), wikiType)) {
Space space = getSpaceService().getSpaceByGroupId(wikiOwner);
addSpaceStatistics(statisticData, space);
}
AnalyticsUtils.addStatisticData(statisticData);
}

AnalyticsUtils.addStatisticData(statisticData);
}

private long getUserIdentityId(final String username) {
Expand Down Expand Up @@ -191,4 +191,12 @@ private IdentityManager getIdentityManager() {
return identityManager;
}

private CMSService getCmsService() {
if (cmsService == null) {
cmsService = this.container.getComponentInstanceOfType(CMSService.class);
}
return cmsService;
}


}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
analytics.field.label.wikiId=Notes: Wiki page ID
analytics.field.label.updateType=Notes: Update action type
analytics.field.label.wikiPageId=Notes: Wiki page ID
analytics.field.label.wikiType=Notes: Wiki type
analytics.Note=Notes
analytics.notes=Notes
analytics.switchToNewNotesApp=Switch to New Notes App
analytics.switchToOldNotesApp=Switch to Old Notes App
analytics.field.label.contentLanguage=Content: Language
analytics.acceptTermsAndConditions=Accept Policy
analytics.terms=Terms

analytics.contents=Content
analytics.Content=Content
analytics.createContent=Create content
analytics.updateContent=Update content
analytics.deleteContent=Delete content
analytics.viewContent=View content
analytics.field.label.contentId=Content: Content ID
analytics.field.label.contentType=Content: Type
analytics.field.label.contentAuthor=Content: Author
analytics.field.label.contentLastModifier=Content: Last Modified Date
analytics.field.label.contentUpdatedDate=Content: Updated Date
analytics.field.label.contentCreationDate=Content: Creation date
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
analytics.field.label.wikiId=Notes: ID de la note
analytics.field.label.updateType=Notes: Type de mise à jour
analytics.field.label.wikiPageId=Notes: ID de la note
analytics.field.label.wikiType=Notes: Type de note
analytics.Note=Notes
analytics.notes=Notes
analytics.switchToNewNotesApp=Passer à la nouvelle application Notes
analytics.switchToOldNotesApp=Passer à l'ancienne application Notes
analytics.field.label.contentLanguage=Contenu:Langage
analytics.acceptTermsAndConditions=Accepter la Charte Utilisateur
analytics.terms=Charte Utilisateur
analytics.contents=Contenu
analytics.Content=Contenu
analytics.createContent=Contenu cr\u00E9\u00E9
analytics.updateContent=Contenu mis \u00E0 jour
analytics.deleteContent=Contenu supprim\u00E9
analytics.viewContent=Contenu vu
analytics.field.label.contentId=Contenu : Identifiant
analytics.field.label.contentType=Contenu : Type
analytics.field.label.contentAuthor=Contenu : Auteur
analytics.field.label.contentLastModifier=Contenu : Date de mise \u00E0 jour
analytics.field.label.contentUpdatedDate=Contenu : Date de modification
analytics.field.label.contentCreationDate=Contenu : Date de cr\u00E9ation

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

0 comments on commit b63d564

Please sign in to comment.