From 392004e50a1cc722bf14e4d86cd18f1ac1b83408 Mon Sep 17 00:00:00 2001 From: freddyDOTCMS <147462678+freddyDOTCMS@users.noreply.github.com> Date: Thu, 1 Feb 2024 09:11:28 -0600 Subject: [PATCH] =?UTF-8?q?#27451=20Checking=20if=20the=20Experiment=20is?= =?UTF-8?q?=20still=20running=20before=20send=20the=20Ev=E2=80=A6=20(#2747?= =?UTF-8?q?5)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * #27451 Checking if the Experiment is still running before send the Event to Jitsu * Making sonnar happy --- .../com/dotcms/jitsu/EventLogRunnable.java | 1 + .../dotcms/jitsu/EventLogWebInterceptor.java | 41 ++++++++++++++----- .../java/com/dotcms/jitsu/EventsPayload.java | 4 ++ 3 files changed, 35 insertions(+), 11 deletions(-) diff --git a/dotCMS/src/main/java/com/dotcms/jitsu/EventLogRunnable.java b/dotCMS/src/main/java/com/dotcms/jitsu/EventLogRunnable.java index 6df75283f52a..a8bece64d6f9 100644 --- a/dotCMS/src/main/java/com/dotcms/jitsu/EventLogRunnable.java +++ b/dotCMS/src/main/java/com/dotcms/jitsu/EventLogRunnable.java @@ -40,6 +40,7 @@ public void run() { } private Optional> sendEvent(final CircuitBreakerUrlBuilder builder, final EventPayload payload) { + final CircuitBreakerUrl postLog = builder .setRawData(payload.toString()) .build(); diff --git a/dotCMS/src/main/java/com/dotcms/jitsu/EventLogWebInterceptor.java b/dotCMS/src/main/java/com/dotcms/jitsu/EventLogWebInterceptor.java index 13acf8576412..c4780159b7b4 100644 --- a/dotCMS/src/main/java/com/dotcms/jitsu/EventLogWebInterceptor.java +++ b/dotCMS/src/main/java/com/dotcms/jitsu/EventLogWebInterceptor.java @@ -5,11 +5,14 @@ import com.dotcms.analytics.helper.AnalyticsHelper; import com.dotcms.analytics.experience.metric.MetricsAPI; +import com.dotcms.experiments.business.ExperimentsAPI; +import com.dotcms.experiments.model.Experiment; import com.dotcms.filters.interceptor.Result; import com.dotcms.filters.interceptor.WebInterceptor; import com.dotcms.metrics.MetricsSenderSubmitter; import com.dotcms.util.JsonUtil; import com.dotmarketing.beans.Host; +import com.dotmarketing.business.APILocator; import com.dotmarketing.business.web.WebAPILocator; import com.dotmarketing.exception.DotDataException; import com.dotmarketing.exception.DotRuntimeException; @@ -21,8 +24,9 @@ import com.liferay.portal.SystemException; import io.vavr.Lazy; import io.vavr.control.Try; -import java.util.List; -import java.util.Map; + +import java.util.*; + import org.apache.commons.io.IOUtils; import java.io.BufferedReader; @@ -52,6 +56,7 @@ public class EventLogWebInterceptor implements WebInterceptor { private final MetricsSenderSubmitter submitter; private final Lazy jitsuLib; + private final ExperimentsAPI experimentsAPI = APILocator.getExperimentsAPI(); public EventLogWebInterceptor() { submitter = new MetricsSenderSubmitter(); @@ -125,16 +130,17 @@ public void doPost(final HttpServletRequest request, WebAPILocator.getPersonalizationWebAPI().getContainerPersonalization(request)); //eventPayload.put("clusterId", ClusterFactory.getClusterId()); - for (final Map experiment : experiments) { - eventPayload.addExperiment(experiment); - } - try { - final Host host = WebAPILocator.getHostWebAPI().getCurrentHost(request); - this.submitter.logEvent( - MetricsAPI.createAnalyticsAppPayload( - AnalyticsHelper.get().appFromHost(host), - eventPayload)); + addRunningExperimentAsPayload(experiments, eventPayload); + + if (!eventPayload.isEmpty()) { + final Host host = WebAPILocator.getHostWebAPI().getCurrentHost(request); + + this.submitter.logEvent( + MetricsAPI.createAnalyticsAppPayload( + AnalyticsHelper.get().appFromHost(host), + eventPayload)); + } } catch (DotDataException | DotSecurityException | PortalException | SystemException e) { Logger.error(this, "Error resolving current host", e); } catch(Exception e) { @@ -143,6 +149,19 @@ public void doPost(final HttpServletRequest request, } } + private void addRunningExperimentAsPayload(List> experiments, EventsPayload eventPayload) throws DotDataException { + final Collection runningExperimentIds = experimentsAPI.getRunningExperiments().stream() + .map(Experiment::getIdentifier) + .collect(Collectors.toSet()); + + + for (final Map experiment : experiments) { + if (runningExperimentIds.contains(experiment.get("experiment"))) { + eventPayload.addExperiment(experiment); + } + } + } + public void doOptions(final HttpServletRequest request, final HttpServletResponse response) { response.setHeader(CONTENT_LENGTH, "0"); response.setStatus(200); diff --git a/dotCMS/src/main/java/com/dotcms/jitsu/EventsPayload.java b/dotCMS/src/main/java/com/dotcms/jitsu/EventsPayload.java index ca8b84abd82c..48d86b10da61 100644 --- a/dotCMS/src/main/java/com/dotcms/jitsu/EventsPayload.java +++ b/dotCMS/src/main/java/com/dotcms/jitsu/EventsPayload.java @@ -52,6 +52,10 @@ public Iterable payloads() { return eventPayloads; } + public boolean isEmpty() { + return shortExperiments.isEmpty(); + } + public static class EventPayload { private JSONObject jsonObject;