Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions Confidence/api/Confidence.api
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ public final class com/spotify/confidence/Confidence : com/spotify/confidence/Co
public fun stop ()V
public fun track (Lcom/spotify/confidence/Producer;)V
public fun track (Ljava/lang/String;Ljava/util/Map;)V
public final fun track (Ljava/lang/String;Ljava/util/Map;Ljava/util/Map;)V
public synthetic fun withContext (Ljava/util/Map;)Lcom/spotify/confidence/Contextual;
public fun withContext (Ljava/util/Map;)Lcom/spotify/confidence/EventSender;
}
Expand Down Expand Up @@ -111,9 +112,13 @@ public final class com/spotify/confidence/ConfidenceError$ParseError : java/lang
public final class com/spotify/confidence/ConfidenceFactory {
public static final field INSTANCE Lcom/spotify/confidence/ConfidenceFactory;
public final fun create (Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;Lcom/spotify/confidence/ConfidenceRegion;Lkotlinx/coroutines/CoroutineDispatcher;Lcom/spotify/confidence/LoggingLevel;JLjava/lang/String;)Lcom/spotify/confidence/Confidence;
public final fun create (Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;Lcom/spotify/confidence/ConfidenceRegion;Lkotlinx/coroutines/CoroutineDispatcher;Lcom/spotify/confidence/LoggingLevel;JLjava/lang/String;Ljava/lang/Long;)Lcom/spotify/confidence/Confidence;
public final fun create (Landroid/content/Context;Ljava/lang/String;Ljava/util/Map;Lcom/spotify/confidence/ConfidenceRegion;Lkotlinx/coroutines/CoroutineDispatcher;Lcom/spotify/confidence/LoggingLevel;JLjava/lang/String;)Lcom/spotify/confidence/Confidence;
public final fun create (Landroid/content/Context;Ljava/lang/String;Ljava/util/Map;Lcom/spotify/confidence/ConfidenceRegion;Lkotlinx/coroutines/CoroutineDispatcher;Lcom/spotify/confidence/LoggingLevel;JLjava/lang/String;Ljava/lang/Long;)Lcom/spotify/confidence/Confidence;
public static synthetic fun create$default (Lcom/spotify/confidence/ConfidenceFactory;Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;Lcom/spotify/confidence/ConfidenceRegion;Lkotlinx/coroutines/CoroutineDispatcher;Lcom/spotify/confidence/LoggingLevel;JLjava/lang/String;ILjava/lang/Object;)Lcom/spotify/confidence/Confidence;
public static synthetic fun create$default (Lcom/spotify/confidence/ConfidenceFactory;Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;Lcom/spotify/confidence/ConfidenceRegion;Lkotlinx/coroutines/CoroutineDispatcher;Lcom/spotify/confidence/LoggingLevel;JLjava/lang/String;Ljava/lang/Long;ILjava/lang/Object;)Lcom/spotify/confidence/Confidence;
public static synthetic fun create$default (Lcom/spotify/confidence/ConfidenceFactory;Landroid/content/Context;Ljava/lang/String;Ljava/util/Map;Lcom/spotify/confidence/ConfidenceRegion;Lkotlinx/coroutines/CoroutineDispatcher;Lcom/spotify/confidence/LoggingLevel;JLjava/lang/String;ILjava/lang/Object;)Lcom/spotify/confidence/Confidence;
public static synthetic fun create$default (Lcom/spotify/confidence/ConfidenceFactory;Landroid/content/Context;Ljava/lang/String;Ljava/util/Map;Lcom/spotify/confidence/ConfidenceRegion;Lkotlinx/coroutines/CoroutineDispatcher;Lcom/spotify/confidence/LoggingLevel;JLjava/lang/String;Ljava/lang/Long;ILjava/lang/Object;)Lcom/spotify/confidence/Confidence;
}

public final class com/spotify/confidence/ConfidenceFlagEvaluationKt {
Expand Down
89 changes: 84 additions & 5 deletions Confidence/src/main/java/com/spotify/confidence/Confidence.kt
Original file line number Diff line number Diff line change
Expand Up @@ -254,7 +254,15 @@ class Confidence internal constructor(
eventName: String,
data: ConfidenceFieldsType
) {
eventSenderEngine.emit(eventName, data, getContext())
track(eventName, data, getContext())
}

fun track(
eventName: String,
data: ConfidenceFieldsType,
eventContext: Map<String, ConfidenceValue>
) {
eventSenderEngine.emit(eventName, data, eventContext)
}

override fun flush() {
Expand Down Expand Up @@ -396,7 +404,43 @@ object ConfidenceFactory {
loggingLevel = loggingLevel,
timeoutMillis = timeoutMillis,
visitorIdContextKey = visitorIdContextKey,
resolveBaseUrl = null
resolveBaseUrl = null,
eventFlushIntervalMillis = null
)

/**
* Create a Factory Confidence instance.
* @param context application context.
* @param clientSecret confidence clientSecret, which is found in Confidence console.
* @param initialContext can be set initially, e.g. targeting_key:value.
* @param region region of operation.
* @param dispatcher coroutine dispatcher.
* @param loggingLevel allows to print warnings or debugging information to the local console.
* @param timeoutMillis sets a timeout for completing an HTTP call. Defaults to 10 seconds
* @param visitorIdContextKey key to use for the visitor id in the context. Defaults to "visitor_id".
* @param eventFlushIntervalMillis periodic flush interval in milliseconds, or null to disable.
*/
fun create(
context: Context,
clientSecret: String,
initialContext: Map<String, ConfidenceValue> = mapOf(),
region: ConfidenceRegion = ConfidenceRegion.GLOBAL,
dispatcher: CoroutineDispatcher = Dispatchers.IO,
loggingLevel: LoggingLevel = LoggingLevel.WARN,
timeoutMillis: Long = 10000,
visitorIdContextKey: String = VISITOR_ID_CONTEXT_KEY,
eventFlushIntervalMillis: Long?
): Confidence = create(
context = context,
clientSecret = clientSecret,
initialContext = initialContext,
region = region,
dispatcher = dispatcher,
loggingLevel = loggingLevel,
timeoutMillis = timeoutMillis,
visitorIdContextKey = visitorIdContextKey,
resolveBaseUrl = null,
eventFlushIntervalMillis = eventFlushIntervalMillis
)

/**
Expand All @@ -423,7 +467,37 @@ object ConfidenceFactory {
loggingLevel = loggingLevel,
timeoutMillis = timeoutMillis,
visitorIdContextKey = visitorIdContextKey,
resolveBaseUrl = getResolveBaseUrl(region, resolveBaseUrl)
resolveBaseUrl = getResolveBaseUrl(region, resolveBaseUrl),
eventFlushIntervalMillis = null
)

/**
* Create a Factory Confidence instance using a custom base URL for resolve and apply requests.
* The SDK appends `/v1/flags:resolve` and `/v1/flags:apply` to [resolveBaseUrl].
* Event tracking continues to use the Confidence events endpoint.
*/
fun create(
context: Context,
clientSecret: String,
resolveBaseUrl: String,
initialContext: Map<String, ConfidenceValue> = mapOf(),
region: ConfidenceRegion = ConfidenceRegion.GLOBAL,
dispatcher: CoroutineDispatcher = Dispatchers.IO,
loggingLevel: LoggingLevel = LoggingLevel.WARN,
timeoutMillis: Long = 10000,
visitorIdContextKey: String = VISITOR_ID_CONTEXT_KEY,
eventFlushIntervalMillis: Long?
): Confidence = create(
context = context,
clientSecret = clientSecret,
initialContext = initialContext,
region = region,
dispatcher = dispatcher,
loggingLevel = loggingLevel,
timeoutMillis = timeoutMillis,
visitorIdContextKey = visitorIdContextKey,
resolveBaseUrl = getResolveBaseUrl(region, resolveBaseUrl),
eventFlushIntervalMillis = eventFlushIntervalMillis
)

private fun create(
Expand All @@ -435,8 +509,12 @@ object ConfidenceFactory {
loggingLevel: LoggingLevel,
timeoutMillis: Long,
visitorIdContextKey: String,
resolveBaseUrl: HttpUrl?
resolveBaseUrl: HttpUrl?,
eventFlushIntervalMillis: Long? = null
): Confidence {
require(eventFlushIntervalMillis == null || eventFlushIntervalMillis > 0) {
"eventFlushIntervalMillis must be positive, or null to disable periodic flushing"
}
val debugLogger: DebugLogger? = if (loggingLevel == LoggingLevel.NONE) {
null
} else {
Expand All @@ -450,7 +528,8 @@ object ConfidenceFactory {
flushPolicies = listOf(minBatchSizeFlushPolicy),
sdkMetadata = sdkMetadata,
dispatcher = dispatcher,
debugLogger = debugLogger
debugLogger = debugLogger,
flushIntervalMillis = eventFlushIntervalMillis
)
val flagApplierClient = FlagApplierClientImpl(
clientSecret,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,5 +27,9 @@ class ConfidenceError {
override val message: String
) : Error(message)

@Deprecated(
"No longer thrown: a 'context' field in event data now overrides the " +
"evaluation context for that event instead of failing"
)
class InvalidContextInMessage : Error("Field 'context' is not allowed in event's data")
}
Loading
Loading