Skip to content

Commit bc3880a

Browse files
author
a.popov
committed
JAICF-421: add HttpClientSpec.kt and update README.md
1 parent 4e55d2b commit bc3880a

File tree

7 files changed

+77
-15
lines changed

7 files changed

+77
-15
lines changed

gradle-plugins/caila-publish-plugin/README.md

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,13 @@ Configure the plugin to build and push Docker images automatically:
8383

8484
```kotlin
8585
cailaPublish {
86+
httpClient {
87+
logLevel.set("INFO")
88+
connectTimeoutMs.set(10_000)
89+
requestTimeoutMs.set(35_000)
90+
keepAliveTimeMs.set(35_000)
91+
}
92+
8693
docker {
8794
registryCredentials {
8895
url.set("https://index.docker.io/v1/")
@@ -101,17 +108,17 @@ cailaPublish {
101108
}
102109

103110
image {
104-
name.set("my-caila-image") // Required - image name on CAILA
111+
name.set("my-caila-image") // Required
105112
accessMode.set(AccessMode.PRIVATE.mode)
106113
}
107114

108115
model {
109-
modelName.set("my-model") // Required - model name on CALIA
116+
modelName.set("my-model") // Required
110117
taskType.set(TaskType.CUSTOM.tag)
111118

112119
httpSettings {
113-
httpPort.set(8080) // Required when httpSettings used - port that the application web server listens on
114-
mainPageEndpoint.set("/health") // Required when httpSettings used - path for availability check (healthcheck endpoint)
120+
httpPort.set(8080) // Required when httpSettings used
121+
mainPageEndpoint.set("/health") // Required when httpSettings used
115122
}
116123

117124
publicSettings {
@@ -168,6 +175,19 @@ cailaPublish {
168175

169176
## Configuration Reference
170177

178+
### HTTP Client Configuration
179+
180+
Configure HTTP client settings for CAILA API requests:
181+
182+
```kotlin
183+
httpClient {
184+
logLevel.set("INFO") // HTTP log level: ALL, HEADERS, BODY, INFO, NONE. Default: ALL
185+
connectTimeoutMs.set(10_000) // Connection timeout in milliseconds. Default: 10000
186+
requestTimeoutMs.set(35_000) // Request timeout in milliseconds. Default: 35000
187+
keepAliveTimeMs.set(35_000) // Keep-alive time in milliseconds. Default: 35000
188+
}
189+
```
190+
171191
### Image Configuration
172192

173193
```kotlin

gradle-plugins/caila-publish-plugin/src/main/kotlin/com/justai/jaicf/plugins/caila/publish/CailaPublishPlugin.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ class CailaPublishPlugin : Plugin<Project> {
2929

3030
val imageFromDockerTask = project.tasks.register("publishCailaImageFromDocker", PublishCailaImageFromDockerTask::class.java) {
3131
spec.set(extension.image)
32+
httpClientSpec.set(extension.httpClient)
3233

3334
dockerImageName.convention(
3435
project.provider {
@@ -43,18 +44,21 @@ class CailaPublishPlugin : Plugin<Project> {
4344

4445
val imageFromRegistryTask = project.tasks.register("publishCailaImageFromRegistry", PublishCailaImageFromRegistryTask::class.java) {
4546
spec.set(extension.image)
47+
httpClientSpec.set(extension.httpClient)
4648
cailaBaseUrl.convention(extension.url)
4749
}
4850

4951
val modelFromDockerTask = project.tasks.register("publishCailaModelFromDocker", CailaModelTask::class.java) {
5052
spec.set(extension.model)
53+
httpClientSpec.set(extension.httpClient)
5154
imageId.set(imageFromDockerTask.flatMap { it.publishedImageId })
5255
cailaBaseUrl.convention(extension.url)
5356
dependsOn(imageFromDockerTask)
5457
}
5558

5659
val modelFromRegistryTask = project.tasks.register("publishCailaModelFromRegistry", CailaModelTask::class.java) {
5760
spec.set(extension.model)
61+
httpClientSpec.set(extension.httpClient)
5862
imageId.set(imageFromRegistryTask.flatMap { it.publishedImageId })
5963
cailaBaseUrl.convention(extension.url)
6064
dependsOn(imageFromRegistryTask)

gradle-plugins/caila-publish-plugin/src/main/kotlin/com/justai/jaicf/plugins/caila/publish/extension/CailaPublishExtension.kt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,18 +16,18 @@ open class CailaPublishExtension @Inject constructor(
1616
) {
1717
val url: Property<String> = objectFactory.property<String>().convention(CAILA_BASE_URL)
1818

19-
val httpLogLevel: Property<String> = objectFactory.property<String>().convention("ALL")
20-
val connectTimeoutMs: Property<Int> = objectFactory.property<Int>().convention(10_000)
21-
val requestTimeoutMs: Property<Int> = objectFactory.property<Int>().convention(35_000)
22-
val keepAliveTimeMs: Property<Int> = objectFactory.property<Int>().convention(35_000)
23-
19+
val httpClient: HttpClientSpec = objectFactory.newInstance(HttpClientSpec::class.java)
2420
val image: CailaImageSpec = objectFactory.newInstance(CailaImageSpec::class.java)
2521
val model: CailaModelSpec = objectFactory.newInstance(CailaModelSpec::class.java)
2622

2723
fun docker(configuration: DockerExtension.() -> Unit) {
2824
project.extensions.configure(DockerExtension::class.java, configuration)
2925
}
3026

27+
fun httpClient(action: Action<HttpClientSpec>) {
28+
action.execute(httpClient)
29+
}
30+
3131
fun image(action: Action<CailaImageSpec>) {
3232
action.execute(image)
3333
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package com.justai.jaicf.plugins.caila.publish.extension
2+
3+
import org.gradle.api.model.ObjectFactory
4+
import org.gradle.api.provider.Property
5+
import org.gradle.kotlin.dsl.property
6+
import javax.inject.Inject
7+
8+
open class HttpClientSpec @Inject constructor(
9+
objectFactory: ObjectFactory
10+
) {
11+
val logLevel: Property<String> = objectFactory.property<String>().convention("ALL")
12+
val connectTimeoutMs: Property<Int> = objectFactory.property<Int>().convention(10_000)
13+
val requestTimeoutMs: Property<Int> = objectFactory.property<Int>().convention(35_000)
14+
val keepAliveTimeMs: Property<Int> = objectFactory.property<Int>().convention(35_000)
15+
}

gradle-plugins/caila-publish-plugin/src/main/kotlin/com/justai/jaicf/plugins/caila/publish/internal/client/CailaApiClient.kt

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,12 @@
11
package com.justai.jaicf.plugins.caila.publish.internal.client
22

3-
import com.justai.jaicf.plugins.caila.publish.internal.http.HttpClientFactory
43
import com.justai.jaicf.plugins.caila.publish.model.GetImageResponse
54
import com.justai.jaicf.plugins.caila.publish.model.GetModelResponse
65
import com.justai.jaicf.plugins.caila.publish.model.PublishImageRequestDto
76
import com.justai.jaicf.plugins.caila.publish.model.PublishImageResponseDto
87
import com.justai.jaicf.plugins.caila.publish.model.PublishModelRequestDto
98
import io.ktor.client.HttpClient
109
import io.ktor.client.call.body
11-
import io.ktor.client.plugins.logging.LogLevel
1210
import io.ktor.client.request.delete
1311
import io.ktor.client.request.get
1412
import io.ktor.client.request.headers
@@ -23,7 +21,7 @@ import kotlinx.coroutines.runBlocking
2321
class CailaApiClient(
2422
private val accessToken: String,
2523
val baseUrl: String,
26-
val httpClient: HttpClient = HttpClientFactory.create(LogLevel.ALL),
24+
val httpClient: HttpClient,
2725
) {
2826
suspend fun publishImage(accountId: Int, body: PublishImageRequestDto): PublishImageResponseDto {
2927
return httpClient.post("$baseUrl/account/$accountId/image") {

gradle-plugins/caila-publish-plugin/src/main/kotlin/com/justai/jaicf/plugins/caila/publish/task/AbstractPublishCailaImageTask.kt

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,11 @@ package com.justai.jaicf.plugins.caila.publish.task
22

33
import com.justai.jaicf.plugins.caila.publish.extension.CAILA_BASE_URL
44
import com.justai.jaicf.plugins.caila.publish.extension.CailaImageSpec
5+
import com.justai.jaicf.plugins.caila.publish.extension.HttpClientSpec
56
import com.justai.jaicf.plugins.caila.publish.internal.client.CailaApiClient
7+
import com.justai.jaicf.plugins.caila.publish.internal.http.HttpClientFactory
68
import com.justai.jaicf.plugins.caila.publish.model.PublishImageRequestDto
9+
import io.ktor.client.plugins.logging.LogLevel
710
import org.gradle.api.DefaultTask
811
import org.gradle.api.provider.Property
912
import org.gradle.api.tasks.Input
@@ -18,6 +21,9 @@ abstract class AbstractPublishCailaImageTask : DefaultTask() {
1821
@get:Nested
1922
abstract val spec: Property<CailaImageSpec>
2023

24+
@get:Nested
25+
abstract val httpClientSpec: Property<HttpClientSpec>
26+
2127
@get:Input
2228
@get:Optional
2329
abstract val cailaApiToken: Property<String>
@@ -61,7 +67,14 @@ abstract class AbstractPublishCailaImageTask : DefaultTask() {
6167
logger.lifecycle("Caila image name: $cailaImageName")
6268

6369
try {
64-
val client = CailaApiClient(token, baseUrl)
70+
val httpSpec = httpClientSpec.get()
71+
val httpClient = HttpClientFactory.create(
72+
logLevel = LogLevel.valueOf(httpSpec.logLevel.get()),
73+
connectTimeoutMs = httpSpec.connectTimeoutMs.get(),
74+
requestTimeoutMs = httpSpec.requestTimeoutMs.get(),
75+
keepAliveTimeMs = httpSpec.keepAliveTimeMs.get(),
76+
)
77+
val client = CailaApiClient(token, baseUrl, httpClient)
6578
val request = PublishImageRequestDto(
6679
name = cailaImageName,
6780
image = dockerImage,

gradle-plugins/caila-publish-plugin/src/main/kotlin/com/justai/jaicf/plugins/caila/publish/task/CailaModelTask.kt

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,11 @@ package com.justai.jaicf.plugins.caila.publish.task
22

33
import com.justai.jaicf.plugins.caila.publish.extension.CAILA_BASE_URL
44
import com.justai.jaicf.plugins.caila.publish.extension.CailaModelSpec
5+
import com.justai.jaicf.plugins.caila.publish.extension.HttpClientSpec
56
import com.justai.jaicf.plugins.caila.publish.internal.client.CailaApiClient
7+
import com.justai.jaicf.plugins.caila.publish.internal.http.HttpClientFactory
68
import com.justai.jaicf.plugins.caila.publish.model.PublishModelRequestDto
7-
import kotlinx.coroutines.runBlocking
9+
import io.ktor.client.plugins.logging.LogLevel
810
import org.gradle.api.DefaultTask
911
import org.gradle.api.provider.Property
1012
import org.gradle.api.tasks.Input
@@ -18,6 +20,9 @@ abstract class CailaModelTask : DefaultTask() {
1820
@get:Nested
1921
abstract val spec: Property<CailaModelSpec>
2022

23+
@get:Nested
24+
abstract val httpClientSpec: Property<HttpClientSpec>
25+
2126
@get:Input
2227
abstract val imageId: Property<Int>
2328

@@ -60,7 +65,14 @@ abstract class CailaModelTask : DefaultTask() {
6065
logger.lifecycle("Image ID: $image")
6166

6267
try {
63-
val client = CailaApiClient(token, baseUrl)
68+
val httpSpec = httpClientSpec.get()
69+
val httpClient = HttpClientFactory.create(
70+
logLevel = LogLevel.valueOf(httpSpec.logLevel.get()),
71+
connectTimeoutMs = httpSpec.connectTimeoutMs.get(),
72+
requestTimeoutMs = httpSpec.requestTimeoutMs.get(),
73+
keepAliveTimeMs = httpSpec.keepAliveTimeMs.get(),
74+
)
75+
val client = CailaApiClient(token, baseUrl, httpClient)
6476
val request = PublishModelRequestDto(
6577
imageId = image,
6678
imageAccountId = accountId,

0 commit comments

Comments
 (0)