From 5f9d105c12ab11ba04c747bde63ebb3e28303235 Mon Sep 17 00:00:00 2001 From: vahid torkaman Date: Fri, 14 Jun 2024 10:17:06 +0200 Subject: [PATCH] expose sdk id to be set with provider or from the outside --- .../main/java/com/spotify/confidence/Confidence.kt | 13 ++++++++++--- .../com/spotify/confidence/EventSenderEngine.kt | 6 +++++- .../com/spotify/confidence/RemoteFlagResolver.kt | 5 ++++- .../confidence/client/FlagApplierClientImpl.kt | 6 +++++- .../openfeature/ConfidenceFeatureProvider.kt | 3 +++ 5 files changed, 27 insertions(+), 6 deletions(-) diff --git a/Confidence/src/main/java/com/spotify/confidence/Confidence.kt b/Confidence/src/main/java/com/spotify/confidence/Confidence.kt index f454f022..b9a9b370 100644 --- a/Confidence/src/main/java/com/spotify/confidence/Confidence.kt +++ b/Confidence/src/main/java/com/spotify/confidence/Confidence.kt @@ -57,6 +57,12 @@ class Confidence internal constructor( } } + fun setSdk(sdk: SdkMetadata) { + (flagResolver as RemoteFlagResolver).setSdk(sdk) + (eventSenderEngine as EventSenderEngineImpl).setSdk(sdk) + (flagApplierClient as FlagApplierClientImpl).setSdk(sdk) + } + private val flagApplier = FlagApplierWithRetries( client = flagApplierClient, dispatcher = dispatcher, @@ -235,6 +241,7 @@ object ConfidenceFactory { fun create( context: Context, clientSecret: String, + sdk: SdkMetadata = SdkMetadata(SDK_ID, BuildConfig.SDK_VERSION), initialContext: Map = mapOf(), region: ConfidenceRegion = ConfidenceRegion.GLOBAL, dispatcher: CoroutineDispatcher = Dispatchers.IO @@ -243,12 +250,12 @@ object ConfidenceFactory { context, clientSecret, flushPolicies = listOf(minBatchSizeFlushPolicy), - sdkMetadata = SdkMetadata(SDK_ID, BuildConfig.SDK_VERSION), + sdkMetadata = sdk, dispatcher = dispatcher ) val flagApplierClient = FlagApplierClientImpl( clientSecret, - SdkMetadata(SDK_ID, BuildConfig.SDK_VERSION), + sdk, region, dispatcher ) @@ -258,7 +265,7 @@ object ConfidenceFactory { region = region, httpClient = OkHttpClient(), dispatcher = dispatcher, - sdkMetadata = SdkMetadata(SDK_ID, BuildConfig.SDK_VERSION) + sdkMetadata = sdk ) val visitorId = ConfidenceValue.String(VisitorUtil.getId(context)) val initContext = initialContext.toMutableMap() diff --git a/Confidence/src/main/java/com/spotify/confidence/EventSenderEngine.kt b/Confidence/src/main/java/com/spotify/confidence/EventSenderEngine.kt index c0d4c401..51c6b96c 100644 --- a/Confidence/src/main/java/com/spotify/confidence/EventSenderEngine.kt +++ b/Confidence/src/main/java/com/spotify/confidence/EventSenderEngine.kt @@ -29,7 +29,7 @@ internal class EventSenderEngineImpl( private val flushPolicies: MutableList = mutableListOf(), private val clock: Clock = Clock.CalendarBacked.systemUTC(), private val dispatcher: CoroutineDispatcher = Dispatchers.IO, - private val sdkMetadata: SdkMetadata + private var sdkMetadata: SdkMetadata ) : EventSenderEngine { private val writeReqChannel: Channel = Channel() private val sendChannel: Channel = Channel() @@ -95,6 +95,10 @@ internal class EventSenderEngineImpl( } } + fun setSdk(sdk: SdkMetadata) { + sdkMetadata = sdk + } + override fun onLowMemoryChannel(): Channel> { return eventStorage.onLowMemoryChannel() } diff --git a/Confidence/src/main/java/com/spotify/confidence/RemoteFlagResolver.kt b/Confidence/src/main/java/com/spotify/confidence/RemoteFlagResolver.kt index db22efe1..fb850c2d 100644 --- a/Confidence/src/main/java/com/spotify/confidence/RemoteFlagResolver.kt +++ b/Confidence/src/main/java/com/spotify/confidence/RemoteFlagResolver.kt @@ -26,7 +26,7 @@ internal class RemoteFlagResolver( private val clientSecret: String, private val region: ConfidenceRegion, private val httpClient: OkHttpClient, - private val sdkMetadata: SdkMetadata, + private var sdkMetadata: SdkMetadata, private val dispatcher: CoroutineDispatcher = Dispatchers.IO, private val baseUrl: HttpUrl? = null ) : FlagResolver { @@ -36,6 +36,9 @@ internal class RemoteFlagResolver( "Accept", "application/json" ) + internal fun setSdk(sdk: SdkMetadata) { + sdkMetadata = sdk + } override suspend fun resolve(flags: List, context: Map): Result { val sdk = Sdk(sdkMetadata.sdkId, sdkMetadata.sdkVersion) val request = ResolveFlagsRequest(flags.map { "flags/$it" }, context, clientSecret, false, sdk) diff --git a/Confidence/src/main/java/com/spotify/confidence/client/FlagApplierClientImpl.kt b/Confidence/src/main/java/com/spotify/confidence/client/FlagApplierClientImpl.kt index d4c10d56..732da3fb 100644 --- a/Confidence/src/main/java/com/spotify/confidence/client/FlagApplierClientImpl.kt +++ b/Confidence/src/main/java/com/spotify/confidence/client/FlagApplierClientImpl.kt @@ -13,7 +13,7 @@ import okhttp3.OkHttpClient internal class FlagApplierClientImpl : FlagApplierClient { private val clientSecret: String - private val sdkMetadata: SdkMetadata + private var sdkMetadata: SdkMetadata private val okHttpClient: OkHttpClient private val baseUrl: String private val headers: Headers @@ -78,6 +78,10 @@ internal class FlagApplierClientImpl : FlagApplierClient { ) } + internal fun setSdk(sdk: SdkMetadata) { + sdkMetadata = sdk + } + override suspend fun apply(flags: List, resolveToken: String): Result { val request = ApplyFlagsRequest( flags.map { AppliedFlag("flags/${it.flag}", it.applyTime) }, diff --git a/Provider/src/main/java/com/spotify/confidence/openfeature/ConfidenceFeatureProvider.kt b/Provider/src/main/java/com/spotify/confidence/openfeature/ConfidenceFeatureProvider.kt index 6da0d0f7..0b8516d9 100644 --- a/Provider/src/main/java/com/spotify/confidence/openfeature/ConfidenceFeatureProvider.kt +++ b/Provider/src/main/java/com/spotify/confidence/openfeature/ConfidenceFeatureProvider.kt @@ -1,6 +1,7 @@ package com.spotify.confidence.openfeature +import com.spotify.confidence.BuildConfig import com.spotify.confidence.Confidence import com.spotify.confidence.ConfidenceError.ErrorCode import com.spotify.confidence.ConfidenceError.FlagNotFoundError @@ -8,6 +9,7 @@ import com.spotify.confidence.ConfidenceError.ParseError import com.spotify.confidence.ConfidenceValue import com.spotify.confidence.Evaluation import com.spotify.confidence.ResolveReason +import com.spotify.confidence.client.SdkMetadata import dev.openfeature.sdk.EvaluationContext import dev.openfeature.sdk.FeatureProvider import dev.openfeature.sdk.Hook @@ -152,6 +154,7 @@ class ConfidenceFeatureProvider private constructor( eventHandler: EventHandler = EventHandler(Dispatchers.IO), dispatcher: CoroutineDispatcher = Dispatchers.IO ): ConfidenceFeatureProvider { + confidence.setSdk(SdkMetadata("SDK_ID_KOTLIN_PROVIDER", BuildConfig.SDK_VERSION)) return ConfidenceFeatureProvider( hooks = hooks, metadata = metadata,