From ca3735abd36bdb84ccba2ebd8c09f697428e47ab Mon Sep 17 00:00:00 2001 From: Trond Valen Date: Thu, 27 Feb 2025 15:24:16 +0100 Subject: [PATCH] =?UTF-8?q?Lengre=20timeout=20p=C3=A5=20kall=20fra=20behan?= =?UTF-8?q?dling=20til=20brev-api=20for=20forh=C3=A5ndsvisning.=20(#7150)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Lengre timeout på kall fra behandling til brev-api for forhåndsvisning. * Fjerner timeout som vi ikke skulle ha med. * Installerer plugin for å sette timeout på httpClient. --- .../src/main/kotlin/behandling/klienter/BrevApiKlient.kt | 8 ++++++++ libs/etterlatte-ktor/src/main/kotlin/HttpClient.kt | 2 ++ .../main/kotlin/ktor/ktorobo/DownstreamResourceClient.kt | 9 +++++++++ 3 files changed, 19 insertions(+) diff --git a/apps/etterlatte-behandling/src/main/kotlin/behandling/klienter/BrevApiKlient.kt b/apps/etterlatte-behandling/src/main/kotlin/behandling/klienter/BrevApiKlient.kt index cfd94566777..c05a8398e6c 100644 --- a/apps/etterlatte-behandling/src/main/kotlin/behandling/klienter/BrevApiKlient.kt +++ b/apps/etterlatte-behandling/src/main/kotlin/behandling/klienter/BrevApiKlient.kt @@ -6,6 +6,7 @@ import com.github.michaelbull.result.mapBoth import com.github.michaelbull.result.mapError import com.typesafe.config.Config import io.ktor.client.HttpClient +import io.ktor.client.plugins.HttpTimeout import no.nav.etterlatte.behandling.objectMapper import no.nav.etterlatte.brev.BrevParametre import no.nav.etterlatte.brev.BrevPayload @@ -27,6 +28,7 @@ import no.nav.etterlatte.libs.ktor.ktor.ktorobo.DownstreamResourceClient import no.nav.etterlatte.libs.ktor.ktor.ktorobo.Resource import no.nav.etterlatte.libs.ktor.route.SAKID_CALL_PARAMETER import no.nav.etterlatte.libs.ktor.token.BrukerTokenInfo +import java.time.Duration import java.util.UUID interface BrevApiKlient { @@ -372,6 +374,10 @@ class BrevApiKlientObo( ?: throw InternfeilException("Feil ved generering av pdf vedtaksbrev") }, brukerTokenInfo = brukerTokenInfo, + timeoutConfig = { + socketTimeoutMillis = Duration.ofSeconds(30).toMillis() + requestTimeoutMillis = Duration.ofSeconds(30).toMillis() + }, ) override suspend fun tilbakestillVedtaksbrev( @@ -416,11 +422,13 @@ class BrevApiKlientObo( url: String, onSuccess: (Resource) -> T, brukerTokenInfo: BrukerTokenInfo, + timeoutConfig: (HttpTimeout.HttpTimeoutCapabilityConfiguration.() -> Unit)? = null, ): T = downstreamResourceClient .get( resource = Resource(clientId = clientId, url = url), brukerTokenInfo = brukerTokenInfo, + timeoutConfig = timeoutConfig, ).mapBoth( success = onSuccess, failure = { throwableErrorMessage -> throw throwableErrorMessage }, diff --git a/libs/etterlatte-ktor/src/main/kotlin/HttpClient.kt b/libs/etterlatte-ktor/src/main/kotlin/HttpClient.kt index 2faeaf6c97d..d47ae3caf8c 100644 --- a/libs/etterlatte-ktor/src/main/kotlin/HttpClient.kt +++ b/libs/etterlatte-ktor/src/main/kotlin/HttpClient.kt @@ -5,6 +5,7 @@ import io.ktor.client.HttpClient import io.ktor.client.HttpClientConfig import io.ktor.client.engine.okhttp.OkHttp import io.ktor.client.engine.okhttp.OkHttpConfig +import io.ktor.client.plugins.HttpTimeout import io.ktor.client.plugins.auth.Auth import io.ktor.client.plugins.contentnegotiation.ContentNegotiation import io.ktor.client.plugins.defaultRequest @@ -59,6 +60,7 @@ fun httpClient( ekstraJacksoninnstillinger(objectMapper) } install(ClientCallLogging) + install(HttpTimeout) auth.invoke(this) defaultRequest { diff --git a/libs/etterlatte-ktor/src/main/kotlin/ktor/ktorobo/DownstreamResourceClient.kt b/libs/etterlatte-ktor/src/main/kotlin/ktor/ktorobo/DownstreamResourceClient.kt index 9dd5992cffb..bca7fbfe226 100644 --- a/libs/etterlatte-ktor/src/main/kotlin/ktor/ktorobo/DownstreamResourceClient.kt +++ b/libs/etterlatte-ktor/src/main/kotlin/ktor/ktorobo/DownstreamResourceClient.kt @@ -5,6 +5,8 @@ import com.github.michaelbull.result.Ok import com.github.michaelbull.result.andThen import io.ktor.client.HttpClient import io.ktor.client.call.body +import io.ktor.client.plugins.HttpTimeout +import io.ktor.client.plugins.timeout import io.ktor.client.request.accept import io.ktor.client.request.bearerAuth import io.ktor.client.request.delete @@ -33,9 +35,16 @@ class DownstreamResourceClient( suspend fun get( resource: Resource, brukerTokenInfo: BrukerTokenInfo, + timeoutConfig: (HttpTimeout.HttpTimeoutCapabilityConfiguration.() -> Unit)? = null, ) = medToken(resource, brukerTokenInfo) { token -> httpClient.get(resource.url) { bearerAuth(token.accessToken) + timeoutConfig?.let { config -> + timeout { + apply(config) + } + } + resource.additionalHeaders?.forEach { headers.append(it.key, it.value) } } }