Skip to content

Commit

Permalink
RUM-5977 add configuration to set uploadSchedulerStrategy
Browse files Browse the repository at this point in the history
  • Loading branch information
xgouchet committed Sep 2, 2024
1 parent fd7786e commit aaf2050
Show file tree
Hide file tree
Showing 7 changed files with 41 additions and 4 deletions.
1 change: 1 addition & 0 deletions dd-sdk-android-core/api/apiSurface
Original file line number Diff line number Diff line change
Expand Up @@ -216,6 +216,7 @@ data class com.datadog.android.core.configuration.Configuration
fun setPersistenceStrategyFactory(com.datadog.android.core.persistence.PersistenceStrategy.Factory?): Builder
fun setCrashReportsEnabled(Boolean): Builder
fun setBackpressureStrategy(BackPressureStrategy): Builder
fun setUploadSchedulerStrategy(UploadSchedulerStrategy?): Builder
companion object
class com.datadog.android.core.configuration.HostsSanitizer
fun sanitizeHosts(List<String>, String): List<String>
Expand Down
1 change: 1 addition & 0 deletions dd-sdk-android-core/api/dd-sdk-android-core.api
Original file line number Diff line number Diff line change
Expand Up @@ -588,6 +588,7 @@ public final class com/datadog/android/core/configuration/Configuration$Builder
public final fun setPersistenceStrategyFactory (Lcom/datadog/android/core/persistence/PersistenceStrategy$Factory;)Lcom/datadog/android/core/configuration/Configuration$Builder;
public final fun setProxy (Ljava/net/Proxy;Lokhttp3/Authenticator;)Lcom/datadog/android/core/configuration/Configuration$Builder;
public final fun setUploadFrequency (Lcom/datadog/android/core/configuration/UploadFrequency;)Lcom/datadog/android/core/configuration/Configuration$Builder;
public final fun setUploadSchedulerStrategy (Lcom/datadog/android/core/configuration/UploadSchedulerStrategy;)Lcom/datadog/android/core/configuration/Configuration$Builder;
public final fun setUseDeveloperModeWhenDebuggable (Z)Lcom/datadog/android/core/configuration/Configuration$Builder;
public final fun useSite (Lcom/datadog/android/DatadogSite;)Lcom/datadog/android/core/configuration/Configuration$Builder;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,8 @@ internal constructor(
val site: DatadogSite,
val batchProcessingLevel: BatchProcessingLevel,
val persistenceStrategyFactory: PersistenceStrategy.Factory?,
val backpressureStrategy: BackPressureStrategy
val backpressureStrategy: BackPressureStrategy,
val uploadSchedulerStrategy: UploadSchedulerStrategy?
)

// region Builder
Expand Down Expand Up @@ -259,6 +260,16 @@ internal constructor(
return this
}

/**
* Sets the strategy to schedule data uploads.
* @param uploadSchedulerStrategy the upload scheduler strategy,
* or null to use the default strategy (default: null)
*/
fun setUploadSchedulerStrategy(uploadSchedulerStrategy: UploadSchedulerStrategy?): Builder {
coreConfig = coreConfig.copy(uploadSchedulerStrategy = uploadSchedulerStrategy)
return this
}

internal fun allowClearTextHttp(): Builder {
coreConfig = coreConfig.copy(
needsClearTextHttp = true
Expand Down Expand Up @@ -297,7 +308,8 @@ internal constructor(
site = DatadogSite.US1,
batchProcessingLevel = BatchProcessingLevel.MEDIUM,
persistenceStrategyFactory = null,
backpressureStrategy = DEFAULT_BACKPRESSURE_STRATEGY
backpressureStrategy = DEFAULT_BACKPRESSURE_STRATEGY,
uploadSchedulerStrategy = null
)

internal const val NETWORK_REQUESTS_TRACKING_FEATURE_NAME = "Network requests"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ import com.datadog.android.core.configuration.BatchProcessingLevel
import com.datadog.android.core.configuration.BatchSize
import com.datadog.android.core.configuration.Configuration
import com.datadog.android.core.configuration.UploadFrequency
import com.datadog.android.core.configuration.UploadSchedulerStrategy
import com.datadog.android.core.internal.data.upload.CurlInterceptor
import com.datadog.android.core.internal.data.upload.GzipRequestInterceptor
import com.datadog.android.core.internal.data.upload.RotatingDnsResolver
Expand Down Expand Up @@ -139,6 +140,7 @@ internal class CoreFeature(
internal var ndkCrashHandler: NdkCrashHandler = NoOpNdkCrashHandler()
internal var site: DatadogSite = DatadogSite.US1
internal var appBuildId: String? = null
internal var customUploadSchedulerStrategy: UploadSchedulerStrategy? = null

internal lateinit var uploadExecutorService: ScheduledThreadPoolExecutor
internal lateinit var persistenceExecutorService: FlushableExecutorService
Expand Down Expand Up @@ -504,6 +506,7 @@ internal class CoreFeature(
persistenceStrategyFactory = configuration.persistenceStrategyFactory
site = configuration.site
backpressureStrategy = configuration.backpressureStrategy
customUploadSchedulerStrategy = configuration.uploadSchedulerStrategy
}

private fun setupInfoProviders(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,8 @@ internal class SdkFeature(
uploadFrequency,
batchProcessingLevel.maxBatchesPerUploadJob
)
val uploadSchedulerStrategy = DefaultUploadSchedulerStrategy(dataUploadConfiguration)
val uploadSchedulerStrategy = coreFeature.customUploadSchedulerStrategy
?: DefaultUploadSchedulerStrategy(dataUploadConfiguration)
storage = prepareStorage(
dataUploadConfiguration,
wrappedFeature,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -416,6 +416,24 @@ internal class ConfigurationBuilderTest {
)
}

@Test
fun `M build config with UploadScheduler strategy W setUploadSchedulerStrategy() and build()`() {
// Given
val mockUploadSchedulerStrategy: UploadSchedulerStrategy = mock()

// When
val config = testedBuilder
.setUploadSchedulerStrategy(mockUploadSchedulerStrategy)
.build()

// Then
assertThat(config.coreConfig).isEqualTo(
Configuration.DEFAULT_CORE_CONFIG.copy(
uploadSchedulerStrategy = mockUploadSchedulerStrategy
)
)
}

companion object {
val logger = InternalLoggerTestConfiguration()

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,8 @@ internal class ConfigurationCoreForgeryFactory :
mock(),
mock(),
forge.aValueFrom(BackPressureMitigation::class.java)
)
),
uploadSchedulerStrategy = forge.aNullable { mock() }
)
}
}

0 comments on commit aaf2050

Please sign in to comment.