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 cfd9456677..c05a8398e6 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 2faeaf6c97..d47ae3caf8 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 9dd5992cff..bca7fbfe22 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) } } }