1
1
package org.radarbase.output.config
2
2
3
3
import com.azure.core.credential.BasicAuthenticationCredential
4
+ import com.azure.core.util.HttpClientOptions
4
5
import com.azure.storage.blob.BlobServiceClient
5
6
import com.azure.storage.blob.BlobServiceClientBuilder
6
7
import com.azure.storage.common.StorageSharedKeyCredential
7
8
import org.radarbase.output.config.RestructureConfig.Companion.copyEnv
8
9
import org.slf4j.LoggerFactory
10
+ import java.time.Duration
9
11
10
12
data class AzureConfig (
11
13
/* * URL to reach object store at. */
@@ -24,7 +26,15 @@ data class AzureConfig(
24
26
val accountKey : String? ,
25
27
/* * Azure SAS token for a configured service. */
26
28
val sasToken : String? ,
27
- ) {
29
+ /* * HTTP connect timeout. */
30
+ val connectTimeout : Long? = null ,
31
+ /* * HTTP response timeout. */
32
+ val responseTimeout : Long? = null ,
33
+ /* * HTTP write timeout. */
34
+ val writeTimeout : Long? = null ,
35
+ /* * HTTP read timeout. */
36
+ val readTimeout : Long? = null ,
37
+ ) {
28
38
fun createAzureClient (): BlobServiceClient = BlobServiceClientBuilder ().apply {
29
39
endpoint(endpoint)
30
40
when {
@@ -35,6 +45,12 @@ data class AzureConfig(
35
45
! sasToken.isNullOrEmpty() -> sasToken(sasToken)
36
46
else -> logger.warn(" No Azure credentials supplied. Assuming a public blob storage." )
37
47
}
48
+ clientOptions(HttpClientOptions ().apply {
49
+ connectTimeout = this @AzureConfig.connectTimeout.toDurationOrNull()
50
+ responseTimeout = this @AzureConfig.responseTimeout.toDurationOrNull()
51
+ writeTimeout = this @AzureConfig.writeTimeout.toDurationOrNull()
52
+ readTimeout = this @AzureConfig.readTimeout.toDurationOrNull()
53
+ })
38
54
}.buildClient()
39
55
40
56
fun withEnv (prefix : String ): AzureConfig = this
@@ -46,5 +62,8 @@ data class AzureConfig(
46
62
47
63
companion object {
48
64
private val logger = LoggerFactory .getLogger(AzureConfig ::class .java)
65
+ private fun Long?.toDurationOrNull (): Duration ? = this
66
+ ?.takeIf { it > 0 }
67
+ ?.let { Duration .ofSeconds(it) }
49
68
}
50
69
}
0 commit comments