Skip to content

Commit

Permalink
La til metrics for freg status og oppholdstillatelse
Browse files Browse the repository at this point in the history
  • Loading branch information
nilsmsa committed Sep 16, 2024
1 parent 9d3f66c commit 70d1549
Show file tree
Hide file tree
Showing 8 changed files with 78 additions and 11 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -30,10 +30,12 @@ fun main() {
logger.info("Starter ${ApplicationInfo.id}")
val applicationConfig = loadNaisOrLocalConfiguration<Config>(CONFIG_FILE_NAME)
val kafkaConfig = loadNaisOrLocalConfiguration<KafkaConfig>(KAFKA_CONFIG)
val registry = PrometheusMeterRegistry(PrometheusConfig.DEFAULT)
val (startStoppRequestHandler, opplysningerRequestHandler) = requestHandlers(
config = applicationConfig,
kafkaFactory = KafkaFactory(kafkaConfig),
regler = InngangsReglerV1
regler = InngangsReglerV1,
registry = registry
)
val server = embeddedServer(
factory = Netty,
Expand All @@ -45,7 +47,7 @@ fun main() {
}
) {
module(
registry = PrometheusMeterRegistry(PrometheusConfig.DEFAULT),
registry = registry,
authProviders = applicationConfig.authProviders,
startStoppRequestHandler = startStoppRequestHandler,
opplysningerRequestHandler = opplysningerRequestHandler
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package no.nav.paw.arbeidssokerregisteret

import io.ktor.client.*
import io.micrometer.prometheusmetrics.PrometheusMeterRegistry
import no.nav.common.token_client.client.AzureAdMachineToMachineTokenClient
import no.nav.paw.arbeidssokerregisteret.application.OpplysningerRequestHandler
import no.nav.paw.arbeidssokerregisteret.application.Regler
Expand All @@ -21,7 +22,8 @@ import org.apache.kafka.common.serialization.LongSerializer
fun requestHandlers(
config: Config,
kafkaFactory: KafkaFactory,
regler: Regler
regler: Regler,
registry: PrometheusMeterRegistry
): Pair<StartStoppRequestHandler, OpplysningerRequestHandler> {
val clients = with(azureAdM2MTokenClient(config.naisEnv, config.authProviders.azure)) {
clientsFactory(config)
Expand All @@ -35,7 +37,8 @@ fun requestHandlers(
val requestValidator = RequestValidator(
autorisasjonService = AutorisasjonService(clients.poaoTilgangClient),
personInfoService = PersonInfoService(clients.pdlClient),
regler = regler
regler = regler,
registry = registry
)
val startStoppRequestHandler = StartStoppRequestHandler(
hendelseTopic = config.eventLogTopic,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package no.nav.paw.arbeidssokerregisteret.application
import arrow.core.Either
import arrow.core.NonEmptyList
import arrow.core.flatMap
import io.micrometer.prometheusmetrics.PrometheusMeterRegistry
import io.opentelemetry.instrumentation.annotations.WithSpan
import no.nav.paw.arbeidssokerregisteret.RequestScope
import no.nav.paw.arbeidssokerregisteret.application.authfaktka.navAnsattTilgangFakta
Expand All @@ -12,12 +13,15 @@ import no.nav.paw.arbeidssokerregisteret.application.regler.TilgangsRegler
import no.nav.paw.arbeidssokerregisteret.domain.Identitetsnummer
import no.nav.paw.arbeidssokerregisteret.services.AutorisasjonService
import no.nav.paw.arbeidssokerregisteret.services.PersonInfoService
import no.nav.paw.arbeidssokerregisteret.services.personInfoStats
import no.nav.paw.arbeidssokerregisteret.utils.logger
import no.nav.paw.pdl.graphql.generated.hentperson.Person

class RequestValidator(
private val autorisasjonService: AutorisasjonService,
private val personInfoService: PersonInfoService,
private val regler: Regler
private val regler: Regler,
private val registry: PrometheusMeterRegistry
) {

context(RequestScope)
Expand Down Expand Up @@ -46,6 +50,11 @@ class RequestValidator(
.flatMap { grunnlagForGodkjentAuth ->
val person = personInfoService.hentPersonInfo(identitetsnummer.verdi)
val opplysning = person?.let { genererPersonFakta(it) } ?: setOf(DomeneOpplysning.PersonIkkeFunnet)
try {
person?.let { p -> registry.personInfoStats(p, opplysning) }
} catch (ex: Exception) {
logger.warn("Feil under stats generering", ex)
}
regler.evaluer(
opplysning + grunnlagForGodkjentAuth.opplysning
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package no.nav.paw.arbeidssokerregisteret.application

import arrow.core.Either
import arrow.core.NonEmptyList
import io.micrometer.prometheusmetrics.PrometheusMeterRegistry
import io.opentelemetry.instrumentation.annotations.WithSpan
import kotlinx.coroutines.async
import kotlinx.coroutines.coroutineScope
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package no.nav.paw.arbeidssokerregisteret.services

import io.micrometer.prometheusmetrics.PrometheusMeterRegistry
import kotlinx.coroutines.channels.ClosedReceiveChannelException
import no.nav.paw.arbeidssokerregisteret.RequestScope
import no.nav.paw.arbeidssokerregisteret.plugins.InternFeilkode
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
package no.nav.paw.arbeidssokerregisteret.services

import io.micrometer.core.instrument.Tag
import io.micrometer.prometheusmetrics.PrometheusMeterRegistry
import no.nav.paw.arbeidssokerregisteret.application.opplysninger.DomeneOpplysning
import no.nav.paw.arbeidssokerregisteret.application.opplysninger.Opplysning
import no.nav.paw.pdl.graphql.generated.hentperson.Person
import java.time.LocalDate
import java.time.temporal.ChronoUnit

fun PrometheusMeterRegistry.personInfoStats(person: Person, opplysninger: Collection<Opplysning>) {
val tags = listOf(
Tag.of("bosatt", opplysninger.contains(DomeneOpplysning.BosattEtterFregLoven).toString()),
Tag.of(
"oppholdstillatelse",
opplysninger.find { it.id.contains("Oppholdstillatelse", ignoreCase = true) }?.id ?: "null"
),
Tag.of(
"dager_siden_oppholdstillatelse_start",
person.opphold.firstOrNull()?.oppholdFra?.let(LocalDate::parse)?.let(::daysBetweenNow)?.let(::asBucket) ?: "null"
),
Tag.of(
"dager_til_oppholdstillatelse_stopp",
person.opphold.firstOrNull()?.oppholdTil?.let(LocalDate::parse)?.let(::daysBetweenNow)?.let(::asBucket) ?: "null"
),
Tag.of(
"avtale_land", (opplysninger.contains(DomeneOpplysning.ErEuEoesStatsborger) || opplysninger.contains(DomeneOpplysning.ErGbrStatsborger)).toString()
)
)
counter("paw_arbeidssoeker_inngang_opplysninger", tags)
}

fun daysBetweenNow(then: LocalDate): Long {
val now = LocalDate.now()
return ChronoUnit.DAYS.between(now, then)
}

fun asBucket(number: Long): String =
when {
number < 14 -> "[0, 14>"
number < 28 -> "[14-28>"
number < 56 -> "[28-56>"
number < 112 -> "[56-112>"
number < 224 -> "[112-224>"
else -> "[224-"
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package no.nav.paw.arbeidssokerregisteret

import io.micrometer.prometheusmetrics.PrometheusConfig
import io.micrometer.prometheusmetrics.PrometheusMeterRegistry
import io.mockk.mockk
import no.nav.paw.arbeidssokerregisteret.application.Regler
import no.nav.paw.arbeidssokerregisteret.application.RequestValidator
Expand Down Expand Up @@ -34,7 +36,8 @@ fun initTestCaseContext(regler: Regler): TestCaseContext {
requestValidator = RequestValidator(
autorisasjonService = autorisasjonService,
personInfoService = personInfoService,
regler = regler
regler = regler,
registry = PrometheusMeterRegistry(PrometheusConfig.DEFAULT)
),
producer = producer,
kafkaKeysClient = kafkaKeys
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ import io.kotest.matchers.collections.shouldContain
import io.kotest.matchers.collections.shouldNotContain
import io.kotest.matchers.shouldBe
import io.kotest.matchers.types.shouldBeInstanceOf
import io.micrometer.prometheusmetrics.PrometheusConfig
import io.micrometer.prometheusmetrics.PrometheusMeterRegistry
import io.mockk.coEvery
import io.mockk.mockk
import no.nav.paw.arbeidssokerregisteret.RequestScope
Expand All @@ -28,7 +30,7 @@ import java.util.*

class RequestValidatorTest : FreeSpec({
"Tester requestvalidator" - {

val registry = PrometheusMeterRegistry(PrometheusConfig.DEFAULT)
val identitsnummer = Identitetsnummer("12345678909")
val personInfoService: PersonInfoService = mockk()
"Når veileder er logget inn" - {
Expand All @@ -47,7 +49,7 @@ class RequestValidatorTest : FreeSpec({
coEvery {
autorisasjonService.verifiserVeilederTilgangTilBruker(any(), any())
} returns true
val requestValidator = RequestValidator(autorisasjonService, personInfoService, InngangsReglerV2)
val requestValidator = RequestValidator(autorisasjonService, personInfoService, InngangsReglerV2, registry)
"Når forhandsgodkjent av veileder er false" {
val tilgangskontrollresultat = with(requestScope) {
requestValidator.validerTilgang(identitsnummer)
Expand All @@ -68,7 +70,7 @@ class RequestValidatorTest : FreeSpec({
coEvery {
autorisasjonService.verifiserVeilederTilgangTilBruker(any(), any())
} returns false
val requestValidator = RequestValidator(autorisasjonService, personInfoService, InngangsReglerV2)
val requestValidator = RequestValidator(autorisasjonService, personInfoService, InngangsReglerV2, registry)

val tilgangskontrollresultat = with(requestScope) {
requestValidator.validerTilgang(identitsnummer)
Expand All @@ -86,7 +88,7 @@ class RequestValidatorTest : FreeSpec({
path = "test"
)
val autorisasjonService: AutorisasjonService = mockk()
val requestValidator = RequestValidator(autorisasjonService, personInfoService, InngangsReglerV2)
val requestValidator = RequestValidator(autorisasjonService, personInfoService, InngangsReglerV2, registry)
"standardbruker" {
val tilgangskontrollresultat = with(requestScope) {
requestValidator.validerTilgang(identitsnummer)
Expand All @@ -110,7 +112,7 @@ class RequestValidatorTest : FreeSpec({
"Når bruker er innlogget" - {

val autorisasjonService: AutorisasjonService = mockk()
val requestValidator = RequestValidator(autorisasjonService, personInfoService, InngangsReglerV2)
val requestValidator = RequestValidator(autorisasjonService, personInfoService, InngangsReglerV2, registry)
"over 18 år og bosatt etter folketrygdloven" - {
val requestScope = RequestScope(
claims = ResolvedClaims()
Expand Down

0 comments on commit 70d1549

Please sign in to comment.