Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
package no.nav.dagpenger.inntekt

import io.github.oshai.kotlinlogging.KotlinLogging
import io.ktor.server.engine.embeddedServer
import io.ktor.server.netty.Netty
import kotlinx.coroutines.runBlocking
import mu.KotlinLogging
import no.nav.dagpenger.inntekt.Config.inntektApiConfig
import no.nav.dagpenger.inntekt.db.PostgresDataSourceBuilder
import no.nav.dagpenger.inntekt.db.PostgresInntektStore
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,10 @@ import com.auth0.jwk.JwkProviderBuilder
import com.natpryce.konfig.Configuration
import com.natpryce.konfig.Key
import com.natpryce.konfig.stringType
import io.github.oshai.kotlinlogging.KotlinLogging
import io.ktor.server.auth.jwt.JWTAuthenticationProvider
import io.ktor.server.auth.jwt.JWTCredential
import io.ktor.server.auth.jwt.JWTPrincipal
import mu.KotlinLogging
import java.net.URL
import java.util.concurrent.TimeUnit

Expand Down Expand Up @@ -37,13 +37,12 @@ internal fun JWTAuthenticationProvider.Config.azureAdJWT(config: Configuration)
}
}

private fun jwkProvider(url: String): JwkProvider {
return JwkProviderBuilder(URL(url))
private fun jwkProvider(url: String): JwkProvider =
JwkProviderBuilder(URL(url))
.cached(10, 24, TimeUnit.HOURS) // cache up to 10 JWKs for 24 hours
.rateLimited(
10,
1,
TimeUnit.MINUTES,
) // if not cached, only allow max 10 different keys per minute to be fetched from external provider
.build()
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package no.nav.dagpenger.inntekt

import mu.KotlinLogging
import io.github.oshai.kotlinlogging.KotlinLogging
import no.nav.dagpenger.inntekt.db.InntektId
import no.nav.dagpenger.inntekt.db.InntektStore
import no.nav.dagpenger.inntekt.db.Inntektparametre
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import com.fasterxml.jackson.core.JsonParseException
import com.fasterxml.jackson.databind.exc.MismatchedInputException
import com.natpryce.konfig.Configuration
import de.huxhorn.sulky.ulid.ULID
import io.github.oshai.kotlinlogging.KotlinLogging
import io.ktor.http.ContentType
import io.ktor.http.HttpHeaders
import io.ktor.http.HttpStatusCode
Expand Down Expand Up @@ -31,7 +32,6 @@ import io.micrometer.core.instrument.Clock
import io.micrometer.prometheusmetrics.PrometheusConfig
import io.micrometer.prometheusmetrics.PrometheusMeterRegistry
import io.prometheus.metrics.model.registry.PrometheusRegistry
import mu.KotlinLogging
import no.nav.dagpenger.inntekt.api.v1.enhetsregisteret
import no.nav.dagpenger.inntekt.api.v1.inntekt
import no.nav.dagpenger.inntekt.api.v1.opptjeningsperiodeApi
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
package no.nav.dagpenger.inntekt

import io.github.oshai.kotlinlogging.KotlinLogging
import io.ktor.http.ContentType
import io.ktor.http.HttpStatusCode
import io.ktor.server.response.respondText
import io.ktor.server.routing.Routing
import io.ktor.server.routing.get
import io.micrometer.prometheusmetrics.PrometheusMeterRegistry
import mu.KotlinLogging

private val LOGGER = KotlinLogging.logger {}

Expand All @@ -29,7 +29,10 @@ fun Routing.naischecks(
call.respondText("READY", ContentType.Text.Plain)
}
get("/metrics") {
val names = call.request.queryParameters.getAll("name[]")?.toSet() ?: setOf()
val names =
call.request.queryParameters
.getAll("name[]")
?.toSet() ?: setOf()
call.respondText(meterRegistry.scrape(), ContentType.parse("text/plain; version=0.0.4; charset=utf-8"))
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@ package no.nav.dagpenger.inntekt.api.v1

import com.auth0.jwt.exceptions.JWTDecodeException
import com.fasterxml.jackson.module.kotlin.readValue
import io.github.oshai.kotlinlogging.KotlinLogging
import io.github.oshai.kotlinlogging.withLoggingContext
import io.ktor.http.HttpStatusCode
import io.ktor.server.application.ApplicationCall
import io.ktor.server.auth.authenticate
Expand All @@ -17,8 +19,6 @@ import io.ktor.server.routing.route
import io.prometheus.metrics.core.metrics.Counter
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import mu.KotlinLogging
import mu.withLoggingContext
import no.nav.dagpenger.inntekt.api.v1.models.FullVirksomhetsInformasjon
import no.nav.dagpenger.inntekt.api.v1.models.InntekterDto
import no.nav.dagpenger.inntekt.api.v1.models.mapToStoredInntekt
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package no.nav.dagpenger.inntekt.api.v3

import io.github.oshai.kotlinlogging.KotlinLogging
import io.github.oshai.kotlinlogging.withLoggingContext
import io.ktor.http.HttpStatusCode
import io.ktor.server.plugins.callid.callId
import io.ktor.server.request.receive
Expand All @@ -9,8 +11,6 @@ import io.ktor.server.routing.post
import io.ktor.server.routing.route
import kotlinx.coroutines.Dispatchers.IO
import kotlinx.coroutines.withContext
import mu.KotlinLogging
import mu.withLoggingContext
import no.nav.dagpenger.inntekt.BehandlingsInntektsGetter
import no.nav.dagpenger.inntekt.db.InntektId
import no.nav.dagpenger.inntekt.db.InntektStore
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import com.natpryce.konfig.Key
import com.natpryce.konfig.booleanType
import com.natpryce.konfig.stringType
import com.zaxxer.hikari.HikariDataSource
import mu.KotlinLogging
import io.github.oshai.kotlinlogging.KotlinLogging
import no.nav.dagpenger.inntekt.Config
import no.nav.dagpenger.inntekt.Config.config
import org.flywaydb.core.Flyway
Expand Down Expand Up @@ -40,7 +40,8 @@ internal object PostgresDataSourceBuilder {
}

private val flyWayBuilder: FluentConfiguration =
Flyway.configure()
Flyway
.configure()
.connectRetries(10)
.validateMigrationNaming(true)
.failOnMissingLocations(true)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@ package no.nav.dagpenger.inntekt.db

import com.fasterxml.jackson.module.kotlin.readValue
import de.huxhorn.sulky.ulid.ULID
import io.github.oshai.kotlinlogging.KotlinLogging
import io.prometheus.metrics.core.metrics.Summary
import kotliquery.queryOf
import kotliquery.sessionOf
import kotliquery.using
import mu.KotlinLogging
import no.nav.dagpenger.inntekt.HealthCheck
import no.nav.dagpenger.inntekt.HealthStatus
import no.nav.dagpenger.inntekt.inntektskomponenten.v1.InntektkomponentResponse
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package no.nav.dagpenger.inntekt.inntektskomponenten.v1

import de.huxhorn.sulky.ulid.ULID
import io.github.oshai.kotlinlogging.KotlinLogging
import io.github.oshai.kotlinlogging.withLoggingContext
import io.ktor.client.HttpClient
import io.ktor.client.call.body
import io.ktor.client.engine.HttpClientEngine
Expand All @@ -21,8 +23,6 @@ import io.ktor.http.HttpHeaders
import io.ktor.serialization.jackson.JacksonConverter
import io.prometheus.metrics.core.metrics.Counter
import io.prometheus.metrics.core.metrics.Summary
import mu.KotlinLogging
import mu.withLoggingContext
import no.nav.dagpenger.inntekt.serder.jacksonObjectMapper
import kotlin.time.Duration.Companion.seconds

Expand All @@ -31,7 +31,8 @@ private val sikkerLogg = KotlinLogging.logger("tjenestekall")
private val ulid = ULID()
const val INNTEKTSKOMPONENT_CLIENT_SECONDS_METRICNAME = "inntektskomponent_client_seconds"
private val clientLatencyStats: Summary =
Summary.builder()
Summary
.builder()
.name(INNTEKTSKOMPONENT_CLIENT_SECONDS_METRICNAME)
.quantile(0.5, 0.05) // Add 50th percentile (= median) with 5% tolerated error
.quantile(0.9, 0.01) // Add 90th percentile with 1% tolerated error
Expand All @@ -40,13 +41,15 @@ private val clientLatencyStats: Summary =
.register()
const val INNTEKTSKOMPONENT_FETCH_ERROR = "inntektskomponent_fetch_error"
private val clientFetchErrors =
Counter.builder()
Counter
.builder()
.name(INNTEKTSKOMPONENT_FETCH_ERROR)
.help("Number of times fetching form inntektskomponenten has failed")
.register()
const val INNTEKTSKOMPONENT_STATUS_CODES = "inntektskomponent_status_codes"
private val inntektskomponentStatusCodesCounter =
Counter.builder()
Counter
.builder()
.name(INNTEKTSKOMPONENT_STATUS_CODES)
.help("Number of times inntektskomponenten has returned a specific status code")
.labelNames("status_code")
Expand Down Expand Up @@ -102,10 +105,10 @@ internal class InntektkomponentKtorClient(
inntektskomponentStatusCodesCounter.labelValues(statusKode.toString()).inc()
clientFetchErrors.inc()
val feilmelding =
kotlin.runCatching {
jacksonObjectMapper.readTree(error.response.bodyAsText()).get("message").asText()
}
.getOrElse { error.message }
kotlin
.runCatching {
jacksonObjectMapper.readTree(error.response.bodyAsText()).get("message").asText()
}.getOrElse { error.message }
throw InntektskomponentenHttpClientException(
statusKode,
"Failed to fetch inntekt. Problem message: $feilmelding",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package no.nav.dagpenger.inntekt.oppslag.pdl
import com.expediagroup.graphql.client.jackson.GraphQLClientJacksonSerializer
import com.expediagroup.graphql.client.ktor.GraphQLKtorClient
import com.expediagroup.graphql.client.types.GraphQLClientResponse
import io.github.oshai.kotlinlogging.KotlinLogging
import io.ktor.client.HttpClient
import io.ktor.client.engine.cio.CIO
import io.ktor.client.plugins.defaultRequest
Expand All @@ -11,7 +12,6 @@ import io.ktor.client.plugins.logging.Logger
import io.ktor.client.plugins.logging.Logging
import io.ktor.client.request.header
import io.ktor.http.HttpHeaders
import mu.KotlinLogging
import no.nav.dagpenger.inntekt.oppslag.Person
import no.nav.dagpenger.inntekt.oppslag.PersonNotFoundException
import no.nav.dagpenger.inntekt.oppslag.PersonOppslag
Expand Down Expand Up @@ -44,8 +44,17 @@ class PdlGraphQLRepository(
private fun GraphQLClientResponse<HentPerson.Result>.toPerson(): Person? {
val navn: Navn? = data?.hentPerson?.navn?.firstOrNull()
val fødselsnummer =
data?.hentIdenter?.identer?.firstOrNull { it.gruppe == IdentGruppe.FOLKEREGISTERIDENT }?.ident
val aktørId = data?.hentIdenter?.identer?.firstOrNull { it.gruppe == IdentGruppe.AKTORID }?.ident
data
?.hentIdenter
?.identer
?.firstOrNull { it.gruppe == IdentGruppe.FOLKEREGISTERIDENT }
?.ident
val aktørId =
data
?.hentIdenter
?.identer
?.firstOrNull { it.gruppe == IdentGruppe.AKTORID }
?.ident
return fødselsnummer?.let {
navn?.let {
aktørId?.let {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
package no.nav.dagpenger.inntekt.subsumsjonbrukt

import io.github.oshai.kotlinlogging.KotlinLogging
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job
import kotlinx.coroutines.SupervisorJob
import kotlinx.coroutines.launch
import mu.KotlinLogging
import no.nav.dagpenger.inntekt.Config
import no.nav.dagpenger.inntekt.HealthCheck
import no.nav.dagpenger.inntekt.HealthStatus
Expand All @@ -29,7 +29,8 @@ internal class KafkaSubsumsjonBruktDataConsumer(
private val config: InntektApiConfig,
private val inntektStore: InntektStore,
private val graceDuration: Duration = Duration.ofHours(3),
) : CoroutineScope, HealthCheck {
) : CoroutineScope,
HealthCheck {
private val logger = KotlinLogging.logger { }
override val coroutineContext: CoroutineContext
get() = Dispatchers.IO + job
Expand Down Expand Up @@ -62,7 +63,8 @@ internal class KafkaSubsumsjonBruktDataConsumer(
while (job.isActive) {
val records = consumer.poll(Duration.ofMillis(100))
val ids =
records.asSequence()
records
.asSequence()
.map { record -> record.value() }
.map { jacksonObjectMapper.readTree(it) }
.filter { packet ->
Expand All @@ -71,8 +73,7 @@ internal class KafkaSubsumsjonBruktDataConsumer(
packet.has("inntektsId") &&
packet.has("kontekst") &&
packet.get("@event_name").asText() == "brukt_inntekt"
}
.map { packet -> InntektId(packet.get("inntektsId").asText()) }
}.map { packet -> InntektId(packet.get("inntektsId").asText()) }
.toList()

try {
Expand Down Expand Up @@ -138,8 +139,8 @@ internal class KafkaSubsumsjonBruktDataConsumer(
internal fun commonConfig(
bootstrapServers: String,
credential: Config.KafkaAivenCredentials? = null,
): Properties {
return Properties().apply {
): Properties =
Properties().apply {
put(CommonClientConfigs.BOOTSTRAP_SERVERS_CONFIG, bootstrapServers)
credential?.let { creds ->
putAll(
Expand All @@ -159,19 +160,17 @@ internal class KafkaSubsumsjonBruktDataConsumer(
)
}
}
}
}

private fun consumerConfig(
groupId: String,
bootstrapServerUrl: String,
credential: Config.KafkaAivenCredentials? = null,
properties: Properties = defaultConsumerConfig,
): Properties {
return Properties().apply {
): Properties =
Properties().apply {
putAll(properties)
putAll(commonConfig(bootstrapServerUrl, credential))
put(ConsumerConfig.GROUP_ID_CONFIG, groupId)
}
}
}
Loading
Loading