From b7096235c25e590eee7c17102dccd3a011bacb73 Mon Sep 17 00:00:00 2001 From: Wenxi Zeng Date: Wed, 5 Jun 2024 10:30:22 -0500 Subject: [PATCH 1/5] bug fix --- .../analytics/plugins/DestinationFilters.kt | 51 +++++++++++-------- 1 file changed, 30 insertions(+), 21 deletions(-) diff --git a/destination-filters-kotlin/src/main/java/com/segment/analytics/plugins/DestinationFilters.kt b/destination-filters-kotlin/src/main/java/com/segment/analytics/plugins/DestinationFilters.kt index 96256ef..f5eca85 100644 --- a/destination-filters-kotlin/src/main/java/com/segment/analytics/plugins/DestinationFilters.kt +++ b/destination-filters-kotlin/src/main/java/com/segment/analytics/plugins/DestinationFilters.kt @@ -5,16 +5,18 @@ import com.segment.analytics.kotlin.core.Settings import com.segment.analytics.kotlin.core.platform.Plugin import com.segment.analytics.kotlin.core.utilities.safeJsonArray import com.segment.analytics.liveplugins.kotlin.LivePlugins +import com.segment.analytics.liveplugins.kotlin.LivePluginsDependent +import com.segment.analytics.substrata.kotlin.JSObject import com.segment.analytics.substrata.kotlin.JSScope import com.segment.analytics.substrata.kotlin.JsonElementConverter import kotlinx.serialization.json.contentOrNull import kotlinx.serialization.json.jsonObject import kotlinx.serialization.json.jsonPrimitive -class DestinationFilters : Plugin { +class DestinationFilters : Plugin, LivePluginsDependent { companion object { - public const val version = "1.0.0" + public const val version = "1.0.1" } private val tsubScript = """ @@ -22,27 +24,27 @@ class DestinationFilters : Plugin { """.trimIndent() private val destinationFilterEdgeFunctionTypes = """ - class DestinationFilter extends EdgeFn { + class DestinationFilter extends LivePlugin { constructor(destination, rules) { - super(EdgeFnType.enrichment, destination); + super(LivePluginType.enrichment, destination); this.rules = rules; } execute(event) { const result = dest_filters.evaluateDestinationFilters(this.rules, event); - if (!result) { - console.log(`\${'$'}\{this.destination} filtered the event, \${'$'}\{JSON.stringify(event)} `); - } else { - console.log(`\${'$'}\{this.destination} did not filter the event, \${'$'}\{JSON.stringify(event)} `); - } - return result + return result; } } function createDestinationFilter(destination, rules) { var dest = new DestinationFilter(destination, rules); - console.log(`Adding filter for \${'$'}\{destination}`) - return analytics.add(dest); + console.log(`Adding filter for \${'$'}\{destination}`); + if (analytics.add(dest)) { + return dest; + } + else { + return null; + } } """.trimIndent() @@ -53,13 +55,9 @@ class DestinationFilters : Plugin { override fun setup(analytics: Analytics) { super.setup(analytics) - val edgeFn = analytics.find(LivePlugins::class) + val livePlugin = analytics.find(LivePlugins::class) ?: LivePlugins().also { analytics.add(it) } - engine = edgeFn.engine - engine.sync { - evaluate(tsubScript) - evaluate(destinationFilterEdgeFunctionTypes) - } + livePlugin.addDependent(this) } override fun update(settings: Settings, type: Plugin.UpdateType) { @@ -71,14 +69,14 @@ class DestinationFilters : Plugin { val destination: String = rule["destinationName"]?.jsonPrimitive?.contentOrNull ?: "" if (destination.isNotBlank()) { - val added = engine.await { + val added = engine.await(global = true) { return@await call( - "createDestinationFilter", + function = "createDestinationFilter", destination, JsonElementConverter.write(rule, context) ) } - if (added == true) { + if (added is JSObject) { setOfActiveDestinations.add(destination) } } @@ -87,4 +85,15 @@ class DestinationFilters : Plugin { analytics.add(MetricsPlugin(setOfActiveDestinations)) } + + override fun prepare(engine: JSScope) { + this.engine = engine + this.engine.sync(global = true) { + evaluate(tsubScript) + evaluate(destinationFilterEdgeFunctionTypes) + } + } + + override fun readyToStart() { + } } \ No newline at end of file From 22936a38b9396ed385bc845bf6b231f87b7a13d5 Mon Sep 17 00:00:00 2001 From: Wenxi Zeng Date: Wed, 5 Jun 2024 10:31:02 -0500 Subject: [PATCH 2/5] update dependencies --- destination-filters-kotlin/build.gradle | 5 +++-- sample/build.gradle | 3 ++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/destination-filters-kotlin/build.gradle b/destination-filters-kotlin/build.gradle index 3292069..f415bac 100644 --- a/destination-filters-kotlin/build.gradle +++ b/destination-filters-kotlin/build.gradle @@ -27,12 +27,13 @@ android { kotlinOptions { jvmTarget = '1.8' } + namespace 'com.segment.analytics.plugins' } dependencies { - implementation 'com.segment.analytics.kotlin:analytics-kotlin-live:1.0.0' + implementation 'com.segment.analytics.kotlin:analytics-kotlin-live:1.0.1' implementation 'com.segment.analytics.kotlin:substrata:1.0.0' - implementation 'com.segment.analytics.kotlin:android:1.16.0' + implementation 'com.segment.analytics.kotlin:android:1.16.3' implementation 'androidx.core:core-ktx:1.7.0' testImplementation 'junit:junit:4.13.2' androidTestImplementation 'androidx.test.ext:junit:1.1.3' diff --git a/sample/build.gradle b/sample/build.gradle index 5c878f6..21ab9f7 100644 --- a/sample/build.gradle +++ b/sample/build.gradle @@ -35,7 +35,8 @@ android { dependencies { implementation project(":destination-filters-kotlin") implementation 'com.segment.analytics.kotlin:substrata:1.0.0' - implementation 'com.segment.analytics.kotlin:android:1.16.0' + implementation 'com.segment.analytics.kotlin:analytics-kotlin-live:1.0.1' + implementation 'com.segment.analytics.kotlin:android:1.16.3' implementation 'com.segment.analytics.kotlin.destinations:appsflyer:1.5.1' From 1f626366a7c4ef9ea6755199be98fa5b980a1d91 Mon Sep 17 00:00:00 2001 From: Wenxi Zeng Date: Wed, 5 Jun 2024 11:13:45 -0500 Subject: [PATCH 3/5] fix lateinit issue --- .../java/com/segment/analytics/plugins/DestinationFilters.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/destination-filters-kotlin/src/main/java/com/segment/analytics/plugins/DestinationFilters.kt b/destination-filters-kotlin/src/main/java/com/segment/analytics/plugins/DestinationFilters.kt index f5eca85..e4d79ba 100644 --- a/destination-filters-kotlin/src/main/java/com/segment/analytics/plugins/DestinationFilters.kt +++ b/destination-filters-kotlin/src/main/java/com/segment/analytics/plugins/DestinationFilters.kt @@ -57,6 +57,7 @@ class DestinationFilters : Plugin, LivePluginsDependent { super.setup(analytics) val livePlugin = analytics.find(LivePlugins::class) ?: LivePlugins().also { analytics.add(it) } + this.engine = livePlugin.engine livePlugin.addDependent(this) } @@ -87,7 +88,6 @@ class DestinationFilters : Plugin, LivePluginsDependent { } override fun prepare(engine: JSScope) { - this.engine = engine this.engine.sync(global = true) { evaluate(tsubScript) evaluate(destinationFilterEdgeFunctionTypes) From 2aec0aae3cf554b1ddc28d66e237ce160e2dbdd3 Mon Sep 17 00:00:00 2001 From: Wenxi Zeng Date: Wed, 5 Jun 2024 11:14:16 -0500 Subject: [PATCH 4/5] update sample app to force using destination filters on segment.io --- .../filters/app/MainApplication.kt | 54 +++++++++++++++++-- 1 file changed, 51 insertions(+), 3 deletions(-) diff --git a/sample/src/main/java/com/segment/analytics/destination/filters/app/MainApplication.kt b/sample/src/main/java/com/segment/analytics/destination/filters/app/MainApplication.kt index f8beca5..f2ce0e6 100644 --- a/sample/src/main/java/com/segment/analytics/destination/filters/app/MainApplication.kt +++ b/sample/src/main/java/com/segment/analytics/destination/filters/app/MainApplication.kt @@ -4,8 +4,15 @@ import android.app.Application import com.segment.analytics.destination.filters.app.filters.WebhookPlugin import com.segment.analytics.kotlin.android.Analytics import com.segment.analytics.kotlin.core.Analytics +import com.segment.analytics.kotlin.core.platform.Plugin +import com.segment.analytics.kotlin.core.utilities.updateJsonObject import com.segment.analytics.kotlin.destinations.appsflyer.AppsFlyerDestination import com.segment.analytics.plugins.DestinationFilters +import kotlinx.coroutines.delay +import kotlinx.coroutines.launch +import kotlinx.serialization.json.Json +import kotlinx.serialization.json.JsonArray +import kotlinx.serialization.json.JsonObject import java.util.concurrent.Executors class MainApplication : Application() { @@ -17,7 +24,7 @@ class MainApplication : Application() { super.onCreate() analytics = Analytics( - "93EMLzmXzP6EJ3cJOhdaAgEVNnZjwRqA", + "tteOFND0bb5ugJfALOJWpF0wu1tcxYgr", applicationContext ) { this.collectDeviceId = true @@ -27,10 +34,51 @@ class MainApplication : Application() { this.flushInterval = 0 } - analytics.add(WebhookPlugin("https://webhook.site/c6349c6a-bc14-49be-9677-0c8df3e07b58", Executors.newSingleThreadExecutor())) +// analytics.add(WebhookPlugin("https://webhook.site/c6349c6a-bc14-49be-9677-0c8df3e07b58", Executors.newSingleThreadExecutor())) analytics.add(AppsFlyerDestination(applicationContext, false)) - analytics.add(DestinationFilters()) + val df = DestinationFilters() + analytics.add(df) + + analytics.analyticsScope.launch { + delay(5000L) + analytics.settingsAsync()?.let { settings -> + settings.middlewareSettings = updateJsonObject(settings.middlewareSettings) { + it["routingRules"] = Json.decodeFromString(""" + [{ + "matchers": [ + { + "ir": "", + "type": "all" + } + ], + "scope": "destinations", + "target_type": "workspace::project::destination::config", + "transformers": [ + [ + { + "type": "drop_properties", + "config": { + "drop": { + "context.device": [ + "id", + "advertisingId", + "model", + "manufacturer" + ] + } + } + } + ] + ], + "destinationName": "Segment.io" + }] + """.trimIndent()) + } + df.update(settings, Plugin.UpdateType.Initial) + } + } + } } \ No newline at end of file From 323bd1f4d04f51150d9b95e2608afbb97198f529 Mon Sep 17 00:00:00 2001 From: Wenxi Zeng Date: Wed, 5 Jun 2024 11:17:34 -0500 Subject: [PATCH 5/5] update log --- .../java/com/segment/analytics/plugins/DestinationFilters.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/destination-filters-kotlin/src/main/java/com/segment/analytics/plugins/DestinationFilters.kt b/destination-filters-kotlin/src/main/java/com/segment/analytics/plugins/DestinationFilters.kt index e4d79ba..dc9e347 100644 --- a/destination-filters-kotlin/src/main/java/com/segment/analytics/plugins/DestinationFilters.kt +++ b/destination-filters-kotlin/src/main/java/com/segment/analytics/plugins/DestinationFilters.kt @@ -38,7 +38,7 @@ class DestinationFilters : Plugin, LivePluginsDependent { function createDestinationFilter(destination, rules) { var dest = new DestinationFilter(destination, rules); - console.log(`Adding filter for \${'$'}\{destination}`); + console.log(`Adding filter for ` + destination); if (analytics.add(dest)) { return dest; }