From c746bedcbcc7674253e1b47f4275fe4b46f0ccb3 Mon Sep 17 00:00:00 2001 From: Miranda Wilson Date: Tue, 9 Aug 2022 17:25:47 +0100 Subject: [PATCH 1/8] Start implementing Snowplow static class --- .../snowplow/tracker/Snowplow.java | 75 ++++++++ .../configuration/EmitterConfiguration.java | 121 +++++++++++++ .../configuration/NetworkConfiguration.java | 75 ++++++++ .../configuration/SubjectConfiguration.java | 166 ++++++++++++++++++ .../configuration/TrackerConfiguration.java | 70 ++++++++ .../snowplow/tracker/SnowplowTest.java | 92 ++++++++++ 6 files changed, 599 insertions(+) create mode 100644 src/main/java/com/snowplowanalytics/snowplow/tracker/Snowplow.java create mode 100644 src/main/java/com/snowplowanalytics/snowplow/tracker/configuration/EmitterConfiguration.java create mode 100644 src/main/java/com/snowplowanalytics/snowplow/tracker/configuration/NetworkConfiguration.java create mode 100644 src/main/java/com/snowplowanalytics/snowplow/tracker/configuration/SubjectConfiguration.java create mode 100644 src/main/java/com/snowplowanalytics/snowplow/tracker/configuration/TrackerConfiguration.java create mode 100644 src/test/java/com/snowplowanalytics/snowplow/tracker/SnowplowTest.java diff --git a/src/main/java/com/snowplowanalytics/snowplow/tracker/Snowplow.java b/src/main/java/com/snowplowanalytics/snowplow/tracker/Snowplow.java new file mode 100644 index 00000000..5ef3a984 --- /dev/null +++ b/src/main/java/com/snowplowanalytics/snowplow/tracker/Snowplow.java @@ -0,0 +1,75 @@ +/* + * Copyright (c) 2014-2022 Snowplow Analytics Ltd. All rights reserved. + * + * This program is licensed to you under the Apache License Version 2.0, + * and you may not use this file except in compliance with the Apache License Version 2.0. + * You may obtain a copy of the Apache License Version 2.0 at http://www.apache.org/licenses/LICENSE-2.0. + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the Apache License Version 2.0 is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the Apache License Version 2.0 for the specific language governing permissions and limitations there under. + */ +package com.snowplowanalytics.snowplow.tracker; + +import com.snowplowanalytics.snowplow.tracker.emitter.BatchEmitter; + +import java.util.HashMap; +import java.util.Map; + +public class Snowplow { + + private static final Map trackers = new HashMap<>(); + private static Tracker defaultTracker; + + public static Map getTrackers() { + return trackers; + } + + public static Tracker createTracker(String collectorUrl, String namespace, String appId) { + BatchEmitter emitter = BatchEmitter.builder().url(collectorUrl).build(); + Tracker tracker = new Tracker.TrackerBuilder(emitter, namespace, appId).build(); + registerTracker(tracker); + return tracker; + } + + public static void registerTracker(Tracker tracker) { + String namespace = tracker.getNamespace(); + if (trackers.containsKey(namespace)) { + throw new IllegalArgumentException("Tracker with this namespace already exists."); + } + + trackers.put(namespace, tracker); + + if (defaultTracker == null) { + defaultTracker = tracker; + } + } + + public static Tracker getTracker(String namespace) { + return trackers.get(namespace); + } + + public static boolean removeTracker(String namespace) { + Tracker removedTracker = trackers.remove(namespace); + if ((defaultTracker != null) && defaultTracker.getNamespace().equals(namespace)) { + defaultTracker = null; + } + return removedTracker != null; + } + + public static boolean removeTracker(Tracker tracker) { + return removeTracker(tracker.getNamespace()); + } + + + public static Tracker getDefaultTracker() { + return defaultTracker; + } + + public static void setDefaultTracker(Tracker tracker) { + defaultTracker = tracker; + } + + +} diff --git a/src/main/java/com/snowplowanalytics/snowplow/tracker/configuration/EmitterConfiguration.java b/src/main/java/com/snowplowanalytics/snowplow/tracker/configuration/EmitterConfiguration.java new file mode 100644 index 00000000..1e1cfdee --- /dev/null +++ b/src/main/java/com/snowplowanalytics/snowplow/tracker/configuration/EmitterConfiguration.java @@ -0,0 +1,121 @@ +/* + * Copyright (c) 2014-2022 Snowplow Analytics Ltd. All rights reserved. + * + * This program is licensed to you under the Apache License Version 2.0, + * and you may not use this file except in compliance with the Apache License Version 2.0. + * You may obtain a copy of the Apache License Version 2.0 at http://www.apache.org/licenses/LICENSE-2.0. + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the Apache License Version 2.0 is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the Apache License Version 2.0 for the specific language governing permissions and limitations there under. + */ +package com.snowplowanalytics.snowplow.tracker.configuration; + +import com.snowplowanalytics.snowplow.tracker.emitter.EventStore; + +import java.util.List; +import java.util.concurrent.ScheduledExecutorService; + +public class EmitterConfiguration { + + private int batchSize; // Optional + private int bufferCapacity; // Optional + private EventStore eventStore; // Optional + private List fatalResponseCodes; // Optional + private int threadCount; // Optional + private ScheduledExecutorService requestExecutorService; // Optional + + // Getters and Setters + + public int getBatchSize() { + return batchSize; + } + + public void setBatchSize(int batchSize) { + this.batchSize = batchSize; + } + + public int getBufferCapacity() { + return bufferCapacity; + } + + public void setBufferCapacity(int bufferCapacity) { + this.bufferCapacity = bufferCapacity; + } + + public EventStore getEventStore() { + return eventStore; + } + + public void setEventStore(EventStore eventStore) { + this.eventStore = eventStore; + } + + public List getFatalResponseCodes() { + return fatalResponseCodes; + } + + public void setFatalResponseCodes(List fatalResponseCodes) { + this.fatalResponseCodes = fatalResponseCodes; + } + + public int getThreadCount() { + return threadCount; + } + + public void setThreadCount(int threadCount) { + this.threadCount = threadCount; + } + + public ScheduledExecutorService getRequestExecutorService() { + return requestExecutorService; + } + + public void setRequestExecutorService(ScheduledExecutorService requestExecutorService) { + this.requestExecutorService = requestExecutorService; + } + + // Constructor + + public EmitterConfiguration() { + batchSize = 50; + bufferCapacity = Integer.MAX_VALUE; + eventStore = null; + fatalResponseCodes = null; + threadCount = 50; + requestExecutorService = null; + } + + // Builder methods + + public EmitterConfiguration batchSize(int batchSize) { + this.batchSize = batchSize; + return this; + } + + public EmitterConfiguration bufferCapacity(int bufferCapacity) { + this.bufferCapacity = bufferCapacity; + return this; + } + + public EmitterConfiguration eventStore(EventStore eventStore) { + this.eventStore = eventStore; + return this; + } + + public EmitterConfiguration fatalResponseCodes(List fatalResponseCodes) { + this.fatalResponseCodes = fatalResponseCodes; + return this; + } + + public EmitterConfiguration threadCount(int threadCount) { + this.threadCount = threadCount; + return this; + } + + public EmitterConfiguration requestExecutorService(ScheduledExecutorService requestExecutorService) { + this.requestExecutorService = requestExecutorService; + return this; + } +} diff --git a/src/main/java/com/snowplowanalytics/snowplow/tracker/configuration/NetworkConfiguration.java b/src/main/java/com/snowplowanalytics/snowplow/tracker/configuration/NetworkConfiguration.java new file mode 100644 index 00000000..8a7c2410 --- /dev/null +++ b/src/main/java/com/snowplowanalytics/snowplow/tracker/configuration/NetworkConfiguration.java @@ -0,0 +1,75 @@ +/* + * Copyright (c) 2014-2022 Snowplow Analytics Ltd. All rights reserved. + * + * This program is licensed to you under the Apache License Version 2.0, + * and you may not use this file except in compliance with the Apache License Version 2.0. + * You may obtain a copy of the Apache License Version 2.0 at http://www.apache.org/licenses/LICENSE-2.0. + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the Apache License Version 2.0 is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the Apache License Version 2.0 for the specific language governing permissions and limitations there under. + */ +package com.snowplowanalytics.snowplow.tracker.configuration; + +import com.snowplowanalytics.snowplow.tracker.http.HttpClientAdapter; +import okhttp3.CookieJar; + + +public class NetworkConfiguration { + + private HttpClientAdapter httpClientAdapter; // Optional + private String collectorUrl; // Required if not specifying a httpClientAdapter + private CookieJar cookieJar; // Optional + + // Getters and Setters + + public HttpClientAdapter getHttpClientAdapter() { + return httpClientAdapter; + } + + public void setHttpClientAdapter(HttpClientAdapter httpClientAdapter) { + this.httpClientAdapter = httpClientAdapter; + } + + public String getCollectorUrl() { + return collectorUrl; + } + + public void setCollectorUrl(String collectorUrl) { + this.collectorUrl = collectorUrl; + } + + public CookieJar getCookieJar() { + return cookieJar; + } + + public void setCookieJar(CookieJar cookieJar) { + this.cookieJar = cookieJar; + } + + // Constructor + + public NetworkConfiguration() { + httpClientAdapter = null; + collectorUrl = null; + cookieJar = null; + } + + // Builder methods + + public NetworkConfiguration httpClientAdapter(HttpClientAdapter httpClientAdapter) { + this.httpClientAdapter = httpClientAdapter; + return this; + } + + public NetworkConfiguration collectorUrl(String collectorUrl) { + this.collectorUrl = collectorUrl; + return this; + } + + public NetworkConfiguration cookieJar(CookieJar cookieJar) { + this.cookieJar = cookieJar; + return this; + } +} diff --git a/src/main/java/com/snowplowanalytics/snowplow/tracker/configuration/SubjectConfiguration.java b/src/main/java/com/snowplowanalytics/snowplow/tracker/configuration/SubjectConfiguration.java new file mode 100644 index 00000000..32885893 --- /dev/null +++ b/src/main/java/com/snowplowanalytics/snowplow/tracker/configuration/SubjectConfiguration.java @@ -0,0 +1,166 @@ +/* + * Copyright (c) 2014-2022 Snowplow Analytics Ltd. All rights reserved. + * + * This program is licensed to you under the Apache License Version 2.0, + * and you may not use this file except in compliance with the Apache License Version 2.0. + * You may obtain a copy of the Apache License Version 2.0 at http://www.apache.org/licenses/LICENSE-2.0. + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the Apache License Version 2.0 is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the Apache License Version 2.0 for the specific language governing permissions and limitations there under. + */ +package com.snowplowanalytics.snowplow.tracker.configuration; + +import com.snowplowanalytics.snowplow.tracker.Utils; +import com.snowplowanalytics.snowplow.tracker.http.HttpClientAdapter; +import okhttp3.CookieJar; +import sun.awt.www.content.image.png; + +public class SubjectConfiguration { + + private String userId; // Optional + private int screenResWidth; // Optional + private int screenResHeight; // Optional + private int viewPortWidth; // Optional + private int viewPortHeight; // Optional + private int colorDepth; // Optional + private String timezone; // Optional + private String language; // Optional + private String ipAddress; // Optional + private String useragent; // Optional + private String networkUserId; // Optional + private String domainUserId; // Optional + private String domainSessionId; // Optional + + // Getters and Setters + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + public int getScreenResWidth() { + return screenResWidth; + } + + public void setScreenResWidth(int screenResWidth) { + this.screenResWidth = screenResWidth; + } + + public int getScreenResHeight() { + return screenResHeight; + } + + public void setScreenResHeight(int screenResHeight) { + this.screenResHeight = screenResHeight; + } + + public int getViewPortWidth() { + return viewPortWidth; + } + + public void setViewPortWidth(int viewPortWidth) { + this.viewPortWidth = viewPortWidth; + } + + public int getViewPortHeight() { + return viewPortHeight; + } + + public void setViewPortHeight(int viewPortHeight) { + this.viewPortHeight = viewPortHeight; + } + + public int getColorDepth() { + return colorDepth; + } + + public void setColorDepth(int colorDepth) { + this.colorDepth = colorDepth; + } + + public String getTimezone() { + return timezone; + } + + public void setTimezone(String timezone) { + this.timezone = timezone; + } + + public String getLanguage() { + return language; + } + + public void setLanguage(String language) { + this.language = language; + } + + public String getIpAddress() { + return ipAddress; + } + + public void setIpAddress(String ipAddress) { + this.ipAddress = ipAddress; + } + + public String getUseragent() { + return useragent; + } + + public void setUseragent(String useragent) { + this.useragent = useragent; + } + + public String getNetworkUserId() { + return networkUserId; + } + + public void setNetworkUserId(String networkUserId) { + this.networkUserId = networkUserId; + } + + public String getDomainUserId() { + return domainUserId; + } + + public void setDomainUserId(String domainUserId) { + this.domainUserId = domainUserId; + } + + public String getDomainSessionId() { + return domainSessionId; + } + + public void setDomainSessionId(String domainSessionId) { + this.domainSessionId = domainSessionId; + } + + + // Constructor + + public SubjectConfiguration() { + userId = null; // Optional + screenResWidth = 0; // Optional + screenResHeight = 0; // Optional + viewPortWidth = 0; // Optional + viewPortHeight = 0; // Optional + colorDepth = 0; // Optional + timezone = Utils.getTimezone(); // Optional + language = null; // Optional + ipAddress = null; // Optional + useragent = null; // Optional + networkUserId = null; // Optional + domainUserId = null; // Optional + domainSessionId = null; // Optional + } + + // Builder methods + + + + +} diff --git a/src/main/java/com/snowplowanalytics/snowplow/tracker/configuration/TrackerConfiguration.java b/src/main/java/com/snowplowanalytics/snowplow/tracker/configuration/TrackerConfiguration.java new file mode 100644 index 00000000..189d8e19 --- /dev/null +++ b/src/main/java/com/snowplowanalytics/snowplow/tracker/configuration/TrackerConfiguration.java @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2014-2022 Snowplow Analytics Ltd. All rights reserved. + * + * This program is licensed to you under the Apache License Version 2.0, + * and you may not use this file except in compliance with the Apache License Version 2.0. + * You may obtain a copy of the Apache License Version 2.0 at http://www.apache.org/licenses/LICENSE-2.0. + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the Apache License Version 2.0 is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the Apache License Version 2.0 for the specific language governing permissions and limitations there under. + */ +package com.snowplowanalytics.snowplow.tracker.configuration; + +import com.snowplowanalytics.snowplow.tracker.DevicePlatform; + + +public class TrackerConfiguration { + private final String namespace; // Required + private final String appId; // Required + private DevicePlatform platform; // Optional + private boolean base64Encoded; // Optional + + // Getters and Setters + + public String getNamespace() { + return namespace; + } + + public String getAppId() { + return appId; + } + + public DevicePlatform getPlatform() { + return platform; + } + + public void setPlatform(DevicePlatform platform) { + this.platform = platform; + } + + public boolean isBase64Encoded() { + return base64Encoded; + } + + public void setBase64Encoded(boolean base64Encoded) { + this.base64Encoded = base64Encoded; + } + + // Constructor + + public TrackerConfiguration(String namespace, String appId) { + this.namespace = namespace; + this.appId = appId; + this.platform = DevicePlatform.ServerSideApp; + this.base64Encoded = true; + } + + // Builder methods + + public TrackerConfiguration platform(DevicePlatform platform) { + this.platform = platform; + return this; + } + + public TrackerConfiguration base64Encoded(boolean base64Encoded) { + this.base64Encoded = base64Encoded; + return this; + } +} diff --git a/src/test/java/com/snowplowanalytics/snowplow/tracker/SnowplowTest.java b/src/test/java/com/snowplowanalytics/snowplow/tracker/SnowplowTest.java new file mode 100644 index 00000000..1c4afabd --- /dev/null +++ b/src/test/java/com/snowplowanalytics/snowplow/tracker/SnowplowTest.java @@ -0,0 +1,92 @@ +/* + * Copyright (c) 2014-2022 Snowplow Analytics Ltd. All rights reserved. + * + * This program is licensed to you under the Apache License Version 2.0, + * and you may not use this file except in compliance with the Apache License Version 2.0. + * You may obtain a copy of the Apache License Version 2.0 at http://www.apache.org/licenses/LICENSE-2.0. + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the Apache License Version 2.0 is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the Apache License Version 2.0 for the specific language governing permissions and limitations there under. + */ +package com.snowplowanalytics.snowplow.tracker; + +import com.google.common.collect.ImmutableMap; +import com.snowplowanalytics.snowplow.tracker.emitter.Emitter; +import com.snowplowanalytics.snowplow.tracker.events.*; +import com.snowplowanalytics.snowplow.tracker.payload.SelfDescribingJson; +import com.snowplowanalytics.snowplow.tracker.payload.TrackerPayload; +import org.junit.Before; +import org.junit.Test; + +import java.util.*; + +import static java.util.Collections.singletonList; +import static org.junit.Assert.*; + +public class SnowplowTest { + + @Test + public void createsAndRetrievesATracker() { + assertTrue(Snowplow.getTrackers().isEmpty()); + + Tracker tracker = Snowplow.createTracker("http://endpoint", "namespace", "appId"); + Tracker retrievedTracker = Snowplow.getTracker("namespace"); + + assertFalse(Snowplow.getTrackers().isEmpty()); + assertEquals(tracker, retrievedTracker); + assertEquals("namespace", tracker.getNamespace()); + assertEquals("appId", tracker.getAppId()); + assertTrue(tracker.getBase64Encoded()); + } + + @Test + public void preventsDuplicateNamespaces() { + Exception exception = assertThrows(IllegalArgumentException.class, () -> { + Snowplow.createTracker("http://endpoint", "namespace", "appId"); + Snowplow.createTracker("http://endpoint2", "namespace", "appId2"); + }); + + assertEquals("Tracker with this namespace already exists.", exception.getMessage()); + } + + @Test + public void deletesStoredTracker() { + Snowplow.createTracker("http://endpoint", "namespace", "appId"); + boolean result = Snowplow.removeTracker("namespace"); + assertTrue(result); + + Tracker tracker = Snowplow.createTracker("http://endpoint", "namespace2", "appId"); + boolean result2 = Snowplow.removeTracker(tracker); + assertTrue(result2); + } + + @Test + public void hasDefaultTracker() { + assertNull(Snowplow.getDefaultTracker()); + + Tracker tracker = Snowplow.createTracker("http://endpoint", "namespace", "appId"); + assertEquals(tracker, Snowplow.getDefaultTracker()); + + Tracker tracker2 = Snowplow.createTracker("http://endpoint", "namespace2", "appId"); + assertEquals(tracker, Snowplow.getDefaultTracker()); + + Snowplow.setDefaultTracker(tracker2); + assertEquals(tracker2, Snowplow.getDefaultTracker()); + } + + @Test + public void addsDefaultTrackerIfNotCurrentlyStored() { +// assertNull(Snowplow.getDefaultTracker()); +// +// Tracker tracker = Snowplow.createTracker("http://endpoint", "namespace", "appId"); +// assertEquals(tracker, Snowplow.getDefaultTracker()); +// +// Tracker tracker2 = Snowplow.createTracker("http://endpoint", "namespace2", "appId"); +// assertEquals(tracker, Snowplow.getDefaultTracker()); +// +// Snowplow.setDefaultTracker(tracker2); +// assertEquals(tracker2, Snowplow.getDefaultTracker()); + } +} From 0a44aa372cd23889f39f4055e512c5284a1c7ea3 Mon Sep 17 00:00:00 2001 From: Miranda Wilson Date: Wed, 10 Aug 2022 10:40:29 +0100 Subject: [PATCH 2/8] Add another test for Snowplow class --- .../snowplow/tracker/Snowplow.java | 19 ++++++------- .../snowplow/tracker/SnowplowTest.java | 27 ++++++------------- 2 files changed, 16 insertions(+), 30 deletions(-) diff --git a/src/main/java/com/snowplowanalytics/snowplow/tracker/Snowplow.java b/src/main/java/com/snowplowanalytics/snowplow/tracker/Snowplow.java index 5ef3a984..164f84bd 100644 --- a/src/main/java/com/snowplowanalytics/snowplow/tracker/Snowplow.java +++ b/src/main/java/com/snowplowanalytics/snowplow/tracker/Snowplow.java @@ -26,6 +26,14 @@ public static Map getTrackers() { return trackers; } + public static Tracker getDefaultTracker() { + return defaultTracker; + } + + public static void setDefaultTracker(Tracker tracker) { + defaultTracker = tracker; + } + public static Tracker createTracker(String collectorUrl, String namespace, String appId) { BatchEmitter emitter = BatchEmitter.builder().url(collectorUrl).build(); Tracker tracker = new Tracker.TrackerBuilder(emitter, namespace, appId).build(); @@ -61,15 +69,4 @@ public static boolean removeTracker(String namespace) { public static boolean removeTracker(Tracker tracker) { return removeTracker(tracker.getNamespace()); } - - - public static Tracker getDefaultTracker() { - return defaultTracker; - } - - public static void setDefaultTracker(Tracker tracker) { - defaultTracker = tracker; - } - - } diff --git a/src/test/java/com/snowplowanalytics/snowplow/tracker/SnowplowTest.java b/src/test/java/com/snowplowanalytics/snowplow/tracker/SnowplowTest.java index 1c4afabd..15f0b0a2 100644 --- a/src/test/java/com/snowplowanalytics/snowplow/tracker/SnowplowTest.java +++ b/src/test/java/com/snowplowanalytics/snowplow/tracker/SnowplowTest.java @@ -12,17 +12,10 @@ */ package com.snowplowanalytics.snowplow.tracker; -import com.google.common.collect.ImmutableMap; +import com.snowplowanalytics.snowplow.tracker.emitter.BatchEmitter; import com.snowplowanalytics.snowplow.tracker.emitter.Emitter; -import com.snowplowanalytics.snowplow.tracker.events.*; -import com.snowplowanalytics.snowplow.tracker.payload.SelfDescribingJson; -import com.snowplowanalytics.snowplow.tracker.payload.TrackerPayload; -import org.junit.Before; import org.junit.Test; -import java.util.*; - -import static java.util.Collections.singletonList; import static org.junit.Assert.*; public class SnowplowTest { @@ -77,16 +70,12 @@ public void hasDefaultTracker() { } @Test - public void addsDefaultTrackerIfNotCurrentlyStored() { -// assertNull(Snowplow.getDefaultTracker()); -// -// Tracker tracker = Snowplow.createTracker("http://endpoint", "namespace", "appId"); -// assertEquals(tracker, Snowplow.getDefaultTracker()); -// -// Tracker tracker2 = Snowplow.createTracker("http://endpoint", "namespace2", "appId"); -// assertEquals(tracker, Snowplow.getDefaultTracker()); -// -// Snowplow.setDefaultTracker(tracker2); -// assertEquals(tracker2, Snowplow.getDefaultTracker()); + public void registersATrackerMadeWithoutSnowplowClass() { + BatchEmitter emitter = BatchEmitter.builder().url("http://collector").build(); + Tracker tracker = new Tracker.TrackerBuilder(emitter, "namespace", "appId").build(); + + Snowplow.registerTracker(tracker); + assertEquals(tracker, Snowplow.getDefaultTracker()); + assertEquals(1, Snowplow.getTrackers().size()); } } From a8b3c05ff669ab9cb5906b5185ca00f9e4c214fe Mon Sep 17 00:00:00 2001 From: Miranda Wilson Date: Wed, 10 Aug 2022 10:45:49 +0100 Subject: [PATCH 3/8] Remove unused import --- .../snowplow/tracker/configuration/SubjectConfiguration.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/main/java/com/snowplowanalytics/snowplow/tracker/configuration/SubjectConfiguration.java b/src/main/java/com/snowplowanalytics/snowplow/tracker/configuration/SubjectConfiguration.java index 32885893..01c36e58 100644 --- a/src/main/java/com/snowplowanalytics/snowplow/tracker/configuration/SubjectConfiguration.java +++ b/src/main/java/com/snowplowanalytics/snowplow/tracker/configuration/SubjectConfiguration.java @@ -13,9 +13,6 @@ package com.snowplowanalytics.snowplow.tracker.configuration; import com.snowplowanalytics.snowplow.tracker.Utils; -import com.snowplowanalytics.snowplow.tracker.http.HttpClientAdapter; -import okhttp3.CookieJar; -import sun.awt.www.content.image.png; public class SubjectConfiguration { From 66b851483fd92b6b4bc5ecb7ebe66e01e16e57f5 Mon Sep 17 00:00:00 2001 From: Miranda Wilson Date: Wed, 10 Aug 2022 11:30:05 +0100 Subject: [PATCH 4/8] Add method to reset Snowplow class --- .../com/snowplowanalytics/snowplow/tracker/Snowplow.java | 5 +++++ .../snowplowanalytics/snowplow/tracker/SnowplowTest.java | 7 ++++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/snowplowanalytics/snowplow/tracker/Snowplow.java b/src/main/java/com/snowplowanalytics/snowplow/tracker/Snowplow.java index 164f84bd..54b1771c 100644 --- a/src/main/java/com/snowplowanalytics/snowplow/tracker/Snowplow.java +++ b/src/main/java/com/snowplowanalytics/snowplow/tracker/Snowplow.java @@ -69,4 +69,9 @@ public static boolean removeTracker(String namespace) { public static boolean removeTracker(Tracker tracker) { return removeTracker(tracker.getNamespace()); } + + public static void reset() { + trackers.clear(); + defaultTracker = null; + } } diff --git a/src/test/java/com/snowplowanalytics/snowplow/tracker/SnowplowTest.java b/src/test/java/com/snowplowanalytics/snowplow/tracker/SnowplowTest.java index 15f0b0a2..e8984fd0 100644 --- a/src/test/java/com/snowplowanalytics/snowplow/tracker/SnowplowTest.java +++ b/src/test/java/com/snowplowanalytics/snowplow/tracker/SnowplowTest.java @@ -13,13 +13,18 @@ package com.snowplowanalytics.snowplow.tracker; import com.snowplowanalytics.snowplow.tracker.emitter.BatchEmitter; -import com.snowplowanalytics.snowplow.tracker.emitter.Emitter; +import org.junit.After; import org.junit.Test; import static org.junit.Assert.*; public class SnowplowTest { + @After + public void cleanUp(){ + Snowplow.reset(); + } + @Test public void createsAndRetrievesATracker() { assertTrue(Snowplow.getTrackers().isEmpty()); From 97471f884ce819eca77e9543865f1dc0587d025b Mon Sep 17 00:00:00 2001 From: Miranda Wilson Date: Wed, 10 Aug 2022 14:46:07 +0100 Subject: [PATCH 5/8] Create BatchEmitter from config objects --- .../snowplow/tracker/Snowplow.java | 8 +++ .../tracker/emitter/BatchEmitter.java | 50 +++++++++++++++++++ .../snowplow/tracker/SnowplowTest.java | 22 ++++++++ 3 files changed, 80 insertions(+) diff --git a/src/main/java/com/snowplowanalytics/snowplow/tracker/Snowplow.java b/src/main/java/com/snowplowanalytics/snowplow/tracker/Snowplow.java index 54b1771c..5a1e4d25 100644 --- a/src/main/java/com/snowplowanalytics/snowplow/tracker/Snowplow.java +++ b/src/main/java/com/snowplowanalytics/snowplow/tracker/Snowplow.java @@ -12,7 +12,11 @@ */ package com.snowplowanalytics.snowplow.tracker; +import com.snowplowanalytics.snowplow.tracker.configuration.EmitterConfiguration; +import com.snowplowanalytics.snowplow.tracker.configuration.NetworkConfiguration; +import com.snowplowanalytics.snowplow.tracker.configuration.TrackerConfiguration; import com.snowplowanalytics.snowplow.tracker.emitter.BatchEmitter; +import com.snowplowanalytics.snowplow.tracker.emitter.Emitter; import java.util.HashMap; import java.util.Map; @@ -41,6 +45,10 @@ public static Tracker createTracker(String collectorUrl, String namespace, Strin return tracker; } +// public static Tracker createTracker(TrackerConfiguration trackerConfig, EmitterConfiguration emitterConfig, NetworkConfiguration networkConfig) { +// +// } + public static void registerTracker(Tracker tracker) { String namespace = tracker.getNamespace(); if (trackers.containsKey(namespace)) { diff --git a/src/main/java/com/snowplowanalytics/snowplow/tracker/emitter/BatchEmitter.java b/src/main/java/com/snowplowanalytics/snowplow/tracker/emitter/BatchEmitter.java index 645f4da5..6a089877 100644 --- a/src/main/java/com/snowplowanalytics/snowplow/tracker/emitter/BatchEmitter.java +++ b/src/main/java/com/snowplowanalytics/snowplow/tracker/emitter/BatchEmitter.java @@ -23,6 +23,8 @@ import java.util.concurrent.atomic.AtomicInteger; import com.google.common.base.Preconditions; +import com.snowplowanalytics.snowplow.tracker.configuration.EmitterConfiguration; +import com.snowplowanalytics.snowplow.tracker.configuration.NetworkConfiguration; import com.snowplowanalytics.snowplow.tracker.constants.Constants; import com.snowplowanalytics.snowplow.tracker.constants.Parameter; import com.snowplowanalytics.snowplow.tracker.http.HttpClientAdapter; @@ -247,6 +249,54 @@ protected BatchEmitter(final Builder builder) { } } + public BatchEmitter(EmitterConfiguration emitterConfig, NetworkConfiguration networkConfig) { + OkHttpClient client; + + // Precondition checks + Preconditions.checkArgument(emitterConfig.getThreadCount() > 0, "threadCount must be greater than 0"); + Preconditions.checkArgument(emitterConfig.getBatchSize() > 0, "batchSize must be greater than 0"); + + if (networkConfig.getHttpClientAdapter() != null) { + httpClientAdapter = networkConfig.getHttpClientAdapter(); + } else { + Preconditions.checkNotNull(networkConfig.getCollectorUrl(), "Collector url must be specified if not using a httpClientAdapter"); + + if (networkConfig.getCookieJar() != null) { + client = new OkHttpClient.Builder() + .cookieJar(networkConfig.getCookieJar()) + .build(); + } else { + client = new OkHttpClient.Builder().build(); + } + + httpClientAdapter = OkHttpClientAdapter.builder() // use okhttp as a default + .url(networkConfig.getCollectorUrl()) + .httpClient(client) + .build(); + } + + retryDelay = new AtomicInteger(0); + batchSize = emitterConfig.getBatchSize(); + + if (emitterConfig.getEventStore() != null) { + eventStore = emitterConfig.getEventStore(); + } else { + eventStore = new InMemoryEventStore(emitterConfig.getBufferCapacity()); + } + + if (emitterConfig.getFatalResponseCodes() != null) { + fatalResponseCodes = emitterConfig.getFatalResponseCodes(); + } else { + fatalResponseCodes = new ArrayList<>(); + } + + if (emitterConfig.getRequestExecutorService() != null) { + executor = emitterConfig.getRequestExecutorService(); + } else { + executor = Executors.newScheduledThreadPool(emitterConfig.getThreadCount(), new EmitterThreadFactory()); + } + } + /** * Adds a TrackerPayload to the EventStore buffer. * If the buffer is full, the payload will be lost. diff --git a/src/test/java/com/snowplowanalytics/snowplow/tracker/SnowplowTest.java b/src/test/java/com/snowplowanalytics/snowplow/tracker/SnowplowTest.java index e8984fd0..0f192e5f 100644 --- a/src/test/java/com/snowplowanalytics/snowplow/tracker/SnowplowTest.java +++ b/src/test/java/com/snowplowanalytics/snowplow/tracker/SnowplowTest.java @@ -12,7 +12,11 @@ */ package com.snowplowanalytics.snowplow.tracker; +import com.snowplowanalytics.snowplow.tracker.configuration.EmitterConfiguration; +import com.snowplowanalytics.snowplow.tracker.configuration.NetworkConfiguration; +import com.snowplowanalytics.snowplow.tracker.configuration.TrackerConfiguration; import com.snowplowanalytics.snowplow.tracker.emitter.BatchEmitter; +import com.snowplowanalytics.snowplow.tracker.emitter.Emitter; import org.junit.After; import org.junit.Test; @@ -83,4 +87,22 @@ public void registersATrackerMadeWithoutSnowplowClass() { assertEquals(tracker, Snowplow.getDefaultTracker()); assertEquals(1, Snowplow.getTrackers().size()); } + + @Test + public void createsTrackerFromConfigs() { + TrackerConfiguration trackerConfig = new TrackerConfiguration("namespace", "appId"); + EmitterConfiguration emitterConfig = new EmitterConfiguration(); + NetworkConfiguration networkConfig = new NetworkConfiguration().collectorUrl("http://collector-endpoint"); + + BatchEmitter emitter = new BatchEmitter(emitterConfig, networkConfig); + +// Tracker tracker = Snowplow.createTracker(trackerConfig, emitterConfig, networkConfig); +// Tracker retrievedTracker = Snowplow.getTracker("namespace"); +// +// assertFalse(Snowplow.getTrackers().isEmpty()); +// assertEquals(tracker, retrievedTracker); +// assertEquals("namespace", tracker.getNamespace()); +// assertEquals("appId", tracker.getAppId()); +// assertTrue(tracker.getBase64Encoded()); + } } From 30d586346359d7c77af74e0eecee73450890f74e Mon Sep 17 00:00:00 2001 From: Miranda Wilson Date: Wed, 10 Aug 2022 17:47:58 +0100 Subject: [PATCH 6/8] Create Tracker from config --- .../snowplow/tracker/Snowplow.java | 12 +++- .../snowplow/tracker/Tracker.java | 25 ++++++- .../tracker/emitter/BatchEmitter.java | 69 +++++-------------- .../snowplow/tracker/SnowplowTest.java | 8 +-- 4 files changed, 56 insertions(+), 58 deletions(-) diff --git a/src/main/java/com/snowplowanalytics/snowplow/tracker/Snowplow.java b/src/main/java/com/snowplowanalytics/snowplow/tracker/Snowplow.java index 5a1e4d25..29d86a1c 100644 --- a/src/main/java/com/snowplowanalytics/snowplow/tracker/Snowplow.java +++ b/src/main/java/com/snowplowanalytics/snowplow/tracker/Snowplow.java @@ -14,6 +14,7 @@ import com.snowplowanalytics.snowplow.tracker.configuration.EmitterConfiguration; import com.snowplowanalytics.snowplow.tracker.configuration.NetworkConfiguration; +import com.snowplowanalytics.snowplow.tracker.configuration.SubjectConfiguration; import com.snowplowanalytics.snowplow.tracker.configuration.TrackerConfiguration; import com.snowplowanalytics.snowplow.tracker.emitter.BatchEmitter; import com.snowplowanalytics.snowplow.tracker.emitter.Emitter; @@ -45,9 +46,14 @@ public static Tracker createTracker(String collectorUrl, String namespace, Strin return tracker; } -// public static Tracker createTracker(TrackerConfiguration trackerConfig, EmitterConfiguration emitterConfig, NetworkConfiguration networkConfig) { -// -// } + public static Tracker createTracker(TrackerConfiguration trackerConfig, + NetworkConfiguration networkConfig, + EmitterConfiguration emitterConfig, + SubjectConfiguration subjectConfig) { + BatchEmitter emitter = new BatchEmitter(networkConfig, emitterConfig); +// Subject subject = new Subject(subjectConfig); + return new Tracker(trackerConfig, emitter); + } public static void registerTracker(Tracker tracker) { String namespace = tracker.getNamespace(); diff --git a/src/main/java/com/snowplowanalytics/snowplow/tracker/Tracker.java b/src/main/java/com/snowplowanalytics/snowplow/tracker/Tracker.java index c9d69872..1ea861d1 100644 --- a/src/main/java/com/snowplowanalytics/snowplow/tracker/Tracker.java +++ b/src/main/java/com/snowplowanalytics/snowplow/tracker/Tracker.java @@ -14,6 +14,7 @@ import com.google.common.base.Preconditions; +import com.snowplowanalytics.snowplow.tracker.configuration.TrackerConfiguration; import com.snowplowanalytics.snowplow.tracker.constants.Constants; import com.snowplowanalytics.snowplow.tracker.constants.Parameter; import com.snowplowanalytics.snowplow.tracker.emitter.Emitter; @@ -53,6 +54,25 @@ private Tracker(TrackerBuilder builder) { } + public Tracker(TrackerConfiguration trackerConfig, Emitter emitter) { + this(trackerConfig, emitter, new Subject.SubjectBuilder().build()); + } + + public Tracker(TrackerConfiguration trackerConfig, Emitter emitter, Subject subject) { + + // Precondition checks + Preconditions.checkNotNull(emitter); + Preconditions.checkNotNull(trackerConfig.getNamespace()); + Preconditions.checkNotNull(trackerConfig.getAppId()); + Preconditions.checkArgument(!trackerConfig.getNamespace().isEmpty(), "namespace cannot be empty"); + Preconditions.checkArgument(!trackerConfig.getAppId().isEmpty(), "appId cannot be empty"); + + this.parameters = new TrackerParameters(trackerConfig.getAppId(), trackerConfig.getPlatform(), trackerConfig.getNamespace(), Version.TRACKER, trackerConfig.isBase64Encoded()); + this.emitter = emitter; + this.subject = subject; + + } + /** * Builder for the Tracker */ @@ -113,7 +133,10 @@ public TrackerBuilder base64(Boolean base64) { * @return a new Tracker object */ public Tracker build() { - return new Tracker(this); + TrackerConfiguration trackerConfig = new TrackerConfiguration(namespace, appId) + .platform(platform) + .base64Encoded(base64Encoded); + return new Tracker(trackerConfig, emitter, subject); } } diff --git a/src/main/java/com/snowplowanalytics/snowplow/tracker/emitter/BatchEmitter.java b/src/main/java/com/snowplowanalytics/snowplow/tracker/emitter/BatchEmitter.java index 6a089877..567f3234 100644 --- a/src/main/java/com/snowplowanalytics/snowplow/tracker/emitter/BatchEmitter.java +++ b/src/main/java/com/snowplowanalytics/snowplow/tracker/emitter/BatchEmitter.java @@ -186,7 +186,20 @@ public T cookieJar(final CookieJar cookieJar) { } public BatchEmitter build() { - return new BatchEmitter(this); + NetworkConfiguration networkConfig = new NetworkConfiguration() + .collectorUrl(collectorUrl) + .httpClientAdapter(httpClientAdapter) + .cookieJar(cookieJar); + + EmitterConfiguration emitterConfig = new EmitterConfiguration() + .batchSize(batchSize) + .bufferCapacity(bufferCapacity) + .eventStore(eventStore) + .fatalResponseCodes(fatalResponseCodes) + .threadCount(threadCount) + .requestExecutorService(requestExecutorService); + + return new BatchEmitter(networkConfig, emitterConfig); } } @@ -201,55 +214,7 @@ public static Builder builder() { return new Builder2(); } - protected BatchEmitter(final Builder builder) { - OkHttpClient client; - - // Precondition checks - Preconditions.checkArgument(builder.threadCount > 0, "threadCount must be greater than 0"); - Preconditions.checkArgument(builder.batchSize > 0, "batchSize must be greater than 0"); - - if (builder.httpClientAdapter != null) { - httpClientAdapter = builder.httpClientAdapter; - } else { - Preconditions.checkNotNull(builder.collectorUrl, "Collector url must be specified if not using a httpClientAdapter"); - - if (builder.cookieJar != null) { - client = new OkHttpClient.Builder() - .cookieJar(builder.cookieJar) - .build(); - } else { - client = new OkHttpClient.Builder().build(); - } - - httpClientAdapter = OkHttpClientAdapter.builder() // use okhttp as a default - .url(builder.collectorUrl) - .httpClient(client) - .build(); - } - - retryDelay = new AtomicInteger(0); - batchSize = builder.batchSize; - - if (builder.eventStore != null) { - eventStore = builder.eventStore; - } else { - eventStore = new InMemoryEventStore(builder.bufferCapacity); - } - - if (builder.fatalResponseCodes != null) { - fatalResponseCodes = builder.fatalResponseCodes; - } else { - fatalResponseCodes = new ArrayList<>(); - } - - if (builder.requestExecutorService != null) { - executor = builder.requestExecutorService; - } else { - executor = Executors.newScheduledThreadPool(builder.threadCount, new EmitterThreadFactory()); - } - } - - public BatchEmitter(EmitterConfiguration emitterConfig, NetworkConfiguration networkConfig) { + public BatchEmitter(NetworkConfiguration networkConfig, EmitterConfiguration emitterConfig) { OkHttpClient client; // Precondition checks @@ -297,6 +262,10 @@ public BatchEmitter(EmitterConfiguration emitterConfig, NetworkConfiguration net } } + public BatchEmitter(NetworkConfiguration networkConfig) { + this(networkConfig, new EmitterConfiguration()); + } + /** * Adds a TrackerPayload to the EventStore buffer. * If the buffer is full, the payload will be lost. diff --git a/src/test/java/com/snowplowanalytics/snowplow/tracker/SnowplowTest.java b/src/test/java/com/snowplowanalytics/snowplow/tracker/SnowplowTest.java index 0f192e5f..9f5f61fe 100644 --- a/src/test/java/com/snowplowanalytics/snowplow/tracker/SnowplowTest.java +++ b/src/test/java/com/snowplowanalytics/snowplow/tracker/SnowplowTest.java @@ -91,12 +91,12 @@ public void registersATrackerMadeWithoutSnowplowClass() { @Test public void createsTrackerFromConfigs() { TrackerConfiguration trackerConfig = new TrackerConfiguration("namespace", "appId"); - EmitterConfiguration emitterConfig = new EmitterConfiguration(); NetworkConfiguration networkConfig = new NetworkConfiguration().collectorUrl("http://collector-endpoint"); - BatchEmitter emitter = new BatchEmitter(emitterConfig, networkConfig); - -// Tracker tracker = Snowplow.createTracker(trackerConfig, emitterConfig, networkConfig); + BatchEmitter emitter = new BatchEmitter(networkConfig); + int size = emitter.getBatchSize(); + System.out.println(size); +// Tracker tracker = Snowplow.createTracker(trackerConfig, networkConfig); // Tracker retrievedTracker = Snowplow.getTracker("namespace"); // // assertFalse(Snowplow.getTrackers().isEmpty()); From a83a15a77d52491398899ceda218fa4e80e7ae66 Mon Sep 17 00:00:00 2001 From: Miranda Wilson Date: Wed, 10 Aug 2022 18:34:30 +0100 Subject: [PATCH 7/8] Create Tracker from configs using Snowplow class --- .../snowplow/tracker/Snowplow.java | 23 ++++- .../snowplow/tracker/Subject.java | 47 ++++++---- .../snowplow/tracker/Tracker.java | 15 +--- .../configuration/SubjectConfiguration.java | 88 +++++++++++++++++++ .../snowplow/tracker/SnowplowTest.java | 19 ++-- 5 files changed, 147 insertions(+), 45 deletions(-) diff --git a/src/main/java/com/snowplowanalytics/snowplow/tracker/Snowplow.java b/src/main/java/com/snowplowanalytics/snowplow/tracker/Snowplow.java index 29d86a1c..bc99c784 100644 --- a/src/main/java/com/snowplowanalytics/snowplow/tracker/Snowplow.java +++ b/src/main/java/com/snowplowanalytics/snowplow/tracker/Snowplow.java @@ -51,8 +51,27 @@ public static Tracker createTracker(TrackerConfiguration trackerConfig, EmitterConfiguration emitterConfig, SubjectConfiguration subjectConfig) { BatchEmitter emitter = new BatchEmitter(networkConfig, emitterConfig); -// Subject subject = new Subject(subjectConfig); - return new Tracker(trackerConfig, emitter); + Subject subject = new Subject(subjectConfig); + Tracker tracker = new Tracker(trackerConfig, emitter, subject); + registerTracker(tracker); + return tracker; + } + + public static Tracker createTracker(TrackerConfiguration trackerConfig, + NetworkConfiguration networkConfig, + EmitterConfiguration emitterConfig) { + return createTracker(trackerConfig, networkConfig, emitterConfig, new SubjectConfiguration()); + } + + public static Tracker createTracker(TrackerConfiguration trackerConfig, + NetworkConfiguration networkConfig) { + return createTracker(trackerConfig, networkConfig, new EmitterConfiguration(), new SubjectConfiguration()); + } + + public static Tracker createTracker(TrackerConfiguration trackerConfig, + NetworkConfiguration networkConfig, + SubjectConfiguration subjectConfig) { + return createTracker(trackerConfig, networkConfig, new EmitterConfiguration(), subjectConfig); } public static void registerTracker(Tracker tracker) { diff --git a/src/main/java/com/snowplowanalytics/snowplow/tracker/Subject.java b/src/main/java/com/snowplowanalytics/snowplow/tracker/Subject.java index fb803f9a..454ec5dd 100644 --- a/src/main/java/com/snowplowanalytics/snowplow/tracker/Subject.java +++ b/src/main/java/com/snowplowanalytics/snowplow/tracker/Subject.java @@ -17,6 +17,7 @@ import java.util.Map; // This library +import com.snowplowanalytics.snowplow.tracker.configuration.SubjectConfiguration; import com.snowplowanalytics.snowplow.tracker.constants.Parameter; /** @@ -28,23 +29,18 @@ public class Subject { private HashMap standardPairs = new HashMap<>(); - /** - * Creates a Subject which will add extra data to each event. - * - * @param builder The builder that constructs a subject - */ - private Subject(SubjectBuilder builder) { - this.setUserId(builder.userId); - this.setScreenResolution(builder.screenResWidth, builder.screenResHeight); - this.setViewPort(builder.viewPortWidth, builder.viewPortHeight); - this.setColorDepth(builder.colorDepth); - this.setTimezone(builder.timezone); - this.setLanguage(builder.language); - this.setIpAddress(builder.ipAddress); - this.setUseragent(builder.useragent); - this.setNetworkUserId(builder.networkUserId); - this.setDomainUserId(builder.domainUserId); - this.setDomainSessionId(builder.domainSessionId); + public Subject(SubjectConfiguration subjectConfig) { + setUserId(subjectConfig.getUserId()); + setScreenResolution(subjectConfig.getScreenResWidth(), subjectConfig.getScreenResHeight()); + setViewPort(subjectConfig.getViewPortWidth(), subjectConfig.getViewPortHeight()); + setColorDepth(subjectConfig.getColorDepth()); + setTimezone(subjectConfig.getTimezone()); + setLanguage(subjectConfig.getLanguage()); + setIpAddress(subjectConfig.getIpAddress()); + setUseragent(subjectConfig.getUseragent()); + setNetworkUserId(subjectConfig.getNetworkUserId()); + setDomainUserId(subjectConfig.getDomainUserId()); + setDomainSessionId(subjectConfig.getDomainSessionId()); } /** @@ -185,7 +181,22 @@ public SubjectBuilder domainSessionId(String domainSessionId) { * @return a new Subject object */ public Subject build() { - return new Subject(this); + SubjectConfiguration subjectConfig = new SubjectConfiguration(); + + +// setUserId(subjectConfig.getUserId()); +// setScreenResolution(subjectConfig.getScreenResWidth(), subjectConfig.getScreenResHeight()); +// setViewPort(subjectConfig.getViewPortWidth(), subjectConfig.getViewPortHeight()); +// setColorDepth(subjectConfig.getColorDepth()); +// setTimezone(subjectConfig.getTimezone()); +// setLanguage(subjectConfig.getLanguage()); +// setIpAddress(subjectConfig.getIpAddress()); +// setUseragent(subjectConfig.getUseragent()); +// setNetworkUserId(subjectConfig.getNetworkUserId()); +// setDomainUserId(subjectConfig.getDomainUserId()); +// setDomainSessionId(subjectConfig.getDomainSessionId()); + + return new Subject(subjectConfig); } } diff --git a/src/main/java/com/snowplowanalytics/snowplow/tracker/Tracker.java b/src/main/java/com/snowplowanalytics/snowplow/tracker/Tracker.java index 1ea861d1..d1a1538c 100644 --- a/src/main/java/com/snowplowanalytics/snowplow/tracker/Tracker.java +++ b/src/main/java/com/snowplowanalytics/snowplow/tracker/Tracker.java @@ -39,25 +39,12 @@ public class Tracker { * * @param builder The builder that constructs a tracker */ - private Tracker(TrackerBuilder builder) { - // Precondition checks - Preconditions.checkNotNull(builder.emitter); - Preconditions.checkNotNull(builder.namespace); - Preconditions.checkNotNull(builder.appId); - Preconditions.checkArgument(!builder.namespace.isEmpty(), "namespace cannot be empty"); - Preconditions.checkArgument(!builder.appId.isEmpty(), "appId cannot be empty"); - - this.parameters = new TrackerParameters(builder.appId, builder.platform, builder.namespace, Version.TRACKER, builder.base64Encoded); - this.emitter = builder.emitter; - this.subject = builder.subject; - - } public Tracker(TrackerConfiguration trackerConfig, Emitter emitter) { this(trackerConfig, emitter, new Subject.SubjectBuilder().build()); } - + public Tracker(TrackerConfiguration trackerConfig, Emitter emitter, Subject subject) { // Precondition checks diff --git a/src/main/java/com/snowplowanalytics/snowplow/tracker/configuration/SubjectConfiguration.java b/src/main/java/com/snowplowanalytics/snowplow/tracker/configuration/SubjectConfiguration.java index 01c36e58..d4ecd1e7 100644 --- a/src/main/java/com/snowplowanalytics/snowplow/tracker/configuration/SubjectConfiguration.java +++ b/src/main/java/com/snowplowanalytics/snowplow/tracker/configuration/SubjectConfiguration.java @@ -13,6 +13,7 @@ package com.snowplowanalytics.snowplow.tracker.configuration; import com.snowplowanalytics.snowplow.tracker.Utils; +import com.snowplowanalytics.snowplow.tracker.http.HttpClientAdapter; public class SubjectConfiguration { @@ -157,7 +158,94 @@ public SubjectConfiguration() { // Builder methods + public SubjectConfiguration userId(String userId) { + this.userId = userId; + return this; + } + + public SubjectConfiguration screenResolution(int width, int height) { + screenResWidth = width; + screenResHeight = height; + return this; + } + + public SubjectConfiguration viewPort(int width, int height) { + viewPortWidth = width; + viewPortHeight = height; + return this; + } + + /** + * @param depth a color depth integer + * @return itself + */ + public SubjectConfiguration colorDepth(int depth) { + colorDepth = depth; + return this; + } + + /** + * Note that timezone is set by default to the server's timezone + * (`TimeZone tz = Calendar.getInstance().getTimeZone().getID()`) + * @param timezone a timezone string + * @return itself + */ + public SubjectConfiguration timezone(String timezone) { + this.timezone = timezone; + return this; + } + + /** + * @param language a language string + * @return itself + */ + public SubjectConfiguration language(String language) { + this.language = language; + return this; + } + /** + * @param ipAddress a ipAddress string + * @return itself + */ + public SubjectConfiguration ipAddress(String ipAddress) { + this.ipAddress = ipAddress; + return this; + } + /** + * @param useragent a useragent string + * @return itself + */ + public SubjectConfiguration useragent(String useragent) { + this.useragent = useragent; + return this; + } + /** + * @param networkUserId a networkUserId string + * @return itself + */ + public SubjectConfiguration networkUserId(String networkUserId) { + this.networkUserId = networkUserId; + return this; + } + + /** + * @param domainUserId a domainUserId string + * @return itself + */ + public SubjectConfiguration domainUserId(String domainUserId) { + this.domainUserId = domainUserId; + return this; + } + + /** + * @param domainSessionId a domainSessionId string + * @return itself + */ + public SubjectConfiguration domainSessionId(String domainSessionId) { + this.domainSessionId = domainSessionId; + return this; + } } diff --git a/src/test/java/com/snowplowanalytics/snowplow/tracker/SnowplowTest.java b/src/test/java/com/snowplowanalytics/snowplow/tracker/SnowplowTest.java index 9f5f61fe..195ffffc 100644 --- a/src/test/java/com/snowplowanalytics/snowplow/tracker/SnowplowTest.java +++ b/src/test/java/com/snowplowanalytics/snowplow/tracker/SnowplowTest.java @@ -93,16 +93,13 @@ public void createsTrackerFromConfigs() { TrackerConfiguration trackerConfig = new TrackerConfiguration("namespace", "appId"); NetworkConfiguration networkConfig = new NetworkConfiguration().collectorUrl("http://collector-endpoint"); - BatchEmitter emitter = new BatchEmitter(networkConfig); - int size = emitter.getBatchSize(); - System.out.println(size); -// Tracker tracker = Snowplow.createTracker(trackerConfig, networkConfig); -// Tracker retrievedTracker = Snowplow.getTracker("namespace"); -// -// assertFalse(Snowplow.getTrackers().isEmpty()); -// assertEquals(tracker, retrievedTracker); -// assertEquals("namespace", tracker.getNamespace()); -// assertEquals("appId", tracker.getAppId()); -// assertTrue(tracker.getBase64Encoded()); + Tracker tracker = Snowplow.createTracker(trackerConfig, networkConfig); + Tracker retrievedTracker = Snowplow.getTracker("namespace"); + + assertFalse(Snowplow.getTrackers().isEmpty()); + assertEquals(tracker, retrievedTracker); + assertEquals("namespace", tracker.getNamespace()); + assertEquals("appId", tracker.getAppId()); + assertTrue(tracker.getBase64Encoded()); } } From 7b8bbbfb590b35c6f86b758c5220e9f7d2cc983c Mon Sep 17 00:00:00 2001 From: Miranda Wilson Date: Mon, 22 Aug 2022 14:22:39 +0100 Subject: [PATCH 8/8] Remove unused imports --- .../snowplow/tracker/configuration/SubjectConfiguration.java | 1 - .../com/snowplowanalytics/snowplow/tracker/SnowplowTest.java | 2 -- 2 files changed, 3 deletions(-) diff --git a/src/main/java/com/snowplowanalytics/snowplow/tracker/configuration/SubjectConfiguration.java b/src/main/java/com/snowplowanalytics/snowplow/tracker/configuration/SubjectConfiguration.java index d4ecd1e7..987d5c97 100644 --- a/src/main/java/com/snowplowanalytics/snowplow/tracker/configuration/SubjectConfiguration.java +++ b/src/main/java/com/snowplowanalytics/snowplow/tracker/configuration/SubjectConfiguration.java @@ -13,7 +13,6 @@ package com.snowplowanalytics.snowplow.tracker.configuration; import com.snowplowanalytics.snowplow.tracker.Utils; -import com.snowplowanalytics.snowplow.tracker.http.HttpClientAdapter; public class SubjectConfiguration { diff --git a/src/test/java/com/snowplowanalytics/snowplow/tracker/SnowplowTest.java b/src/test/java/com/snowplowanalytics/snowplow/tracker/SnowplowTest.java index 195ffffc..ebb0800d 100644 --- a/src/test/java/com/snowplowanalytics/snowplow/tracker/SnowplowTest.java +++ b/src/test/java/com/snowplowanalytics/snowplow/tracker/SnowplowTest.java @@ -12,11 +12,9 @@ */ package com.snowplowanalytics.snowplow.tracker; -import com.snowplowanalytics.snowplow.tracker.configuration.EmitterConfiguration; import com.snowplowanalytics.snowplow.tracker.configuration.NetworkConfiguration; import com.snowplowanalytics.snowplow.tracker.configuration.TrackerConfiguration; import com.snowplowanalytics.snowplow.tracker.emitter.BatchEmitter; -import com.snowplowanalytics.snowplow.tracker.emitter.Emitter; import org.junit.After; import org.junit.Test;