Skip to content

Commit

Permalink
Forbedrer logging i etterlatte-hendelser-ufoere og fikser integrasjon…
Browse files Browse the repository at this point in the history
…stest
  • Loading branch information
henrikg committed Jan 15, 2025
1 parent 13249d0 commit dd2c320
Show file tree
Hide file tree
Showing 5 changed files with 140 additions and 60 deletions.
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
package no.nav.etterlatte.hendelserufoere

import no.nav.etterlatte.BehandlingKlient
import no.nav.etterlatte.libs.common.logging.sikkerlogger
import no.nav.etterlatte.libs.common.person.maskerFnr
import no.nav.etterlatte.libs.common.toJson
import org.slf4j.Logger
import org.slf4j.LoggerFactory
import java.time.temporal.ChronoUnit
Expand All @@ -13,37 +15,52 @@ class UfoereHendelseFordeler(

suspend fun haandterHendelse(hendelse: UfoereHendelse) {
try {
val attenAarIMaaneder = 12 * 18
val tjueenAarIMaaneder = 12 * 21
logger.info("Mottok hendelse for vedtak av type ${hendelse.vedtaksType} for bruker ${hendelse.personIdent.maskerFnr()}")
sikkerlogger().info("Mottok hendelse for vedtak av type ${hendelse.vedtaksType} for bruker ${hendelse.personIdent}")

val alderVedVirkningstidspunkt = ChronoUnit.MONTHS.between(hendelse.fodselsdato, hendelse.virkningsdato)
val alderIMaanederVedVirkningstidspunkt = ChronoUnit.MONTHS.between(hendelse.fodselsdato, hendelse.virkningsdato)
val alderIAarVedVirkningstidspunkt = ChronoUnit.YEARS.between(hendelse.fodselsdato, hendelse.virkningsdato)

if (alderVedVirkningstidspunkt in attenAarIMaaneder..tjueenAarIMaaneder) {
logger.info("Bruker er mellom 18 og 21 på på virkningstidspunktet. Sender ufoerehendelse til behandling")
behandlingKlient.postTilBehandling(
ufoereHendelse = hendelse,
// Skal inkludere personer fra og med måneden de fyller 18 år og til og med måneden de fyller 21 år
if (alderIMaanederVedVirkningstidspunkt in ATTEN_AAR_I_MAANEDER..TJUEEN_AAR_I_MAANEDER) {
logger.info(
"Bruker er mellom 18 og 21 år på virkningstidspunktet (alderIAarVedVirkningstidspunkt = " +
"$alderIAarVedVirkningstidspunkt, alderIMaanederVedVirkningstidspunkt = " +
"$alderIMaanederVedVirkningstidspunkt). Hendelse sendes videre til behandling for sjekk mot " +
"løpende barnepensjonssaker.",
)
behandlingKlient.postTilBehandling(hendelse)
} else {
logger.info(
"Ufoerehendelse med personidentifikator=${hendelse.personIdent.maskerFnr()} " +
"og alderVedVirkningstidspunkt=$alderVedVirkningstidspunkt " +
"er ikke innenfor aldersgruppen 18-21. Hendelsen blir ikke sendt videre.",
"Hendelse ignoreres da bruker ikke er innenfor intervallet som kvalifiserer for barnepensjon " +
"(alderIAarVedVirkningstidspunkt = $alderIAarVedVirkningstidspunkt, " +
"alderIMaanederVedVirkningstidspunkt = $alderIMaanederVedVirkningstidspunkt).",
)
}
} catch (e: Exception) {
loggFeilVedHaandteringAvHendelse(hendelse.vedtaksType.name, e)
loggFeilVedHaandteringAvHendelse(hendelse, e)
throw e
}
}

private fun loggFeilVedHaandteringAvHendelse(
hendelsestype: String?,
hendelse: UfoereHendelse,
e: Exception,
) {
logger.error(
"Kunne ikke haandtere $hendelsestype. Dette skyldes sannsynligvis at " +
"ufoerehendelsen ser annerledes ut enn forventet.",
"Kunne ikke håndtere hendelse for ${hendelse.personIdent.maskerFnr()}. " +
"Dette skyldes sannsynligvis at hendelsen ser annerledes ut enn forventet. Se sikkerlogg for detaljer.",
e,
)
sikkerlogger().error(
"Kunne ikke håndtere hendelse for ${hendelse.personIdent}. Dette skyldes sannsynligvis at " +
"hendelsen ser annerledes ut enn forventet: ${hendelse.toJson()}",
e,
)
}

private companion object {
private const val ATTEN_AAR_I_MAANEDER = 12 * 18
private const val TJUEEN_AAR_I_MAANEDER = 12 * 21
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import no.nav.etterlatte.hendelserufoere.UfoereHendelse
import no.nav.etterlatte.hendelserufoere.UfoereHendelseFordeler
import no.nav.etterlatte.kafka.Kafkakonsument
import no.nav.etterlatte.libs.common.deserialize
import no.nav.etterlatte.libs.common.logging.sikkerlogger
import org.apache.kafka.clients.consumer.KafkaConsumer
import org.slf4j.LoggerFactory
import java.time.Duration
Expand All @@ -26,10 +27,16 @@ class UfoerehendelseKonsument(
stream { hendelser ->
runBlocking {
val ventbareHendelser =
hendelser.map {
hendelser.map { hendelse ->
async(context = Dispatchers.Default) {
val ufoereHendelse: UfoereHendelse = deserialize(it.value())
ufoereHendelseFordeler.haandterHendelse(ufoereHendelse)
try {
val ufoereHendelse: UfoereHendelse = deserialize(hendelse.value())
ufoereHendelseFordeler.haandterHendelse(ufoereHendelse)
} catch (e: Exception) {
logger.error("Feilet ved innlesing av uførehendelse. Se sikkerlogg for detaljer.")
sikkerlogger().error("Feilet ved innlesing av uførehendelse: ${hendelse.value()}")
throw e
}
}
}
ventbareHendelser.forEach { it.await() }
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import io.mockk.coVerify
import io.mockk.mockk
import kotlinx.coroutines.runBlocking
import no.nav.etterlatte.BehandlingKlient
import no.nav.etterlatte.libs.testdata.grunnlag.SOEKER_FOEDSELSNUMMER
import org.junit.jupiter.api.BeforeEach
import org.junit.jupiter.api.Test
import java.time.LocalDate
Expand All @@ -24,7 +25,7 @@ internal class UfoereHendelseFordelerTest {

val ufoereHendelse =
UfoereHendelse(
personIdent = "12312312312",
personIdent = SOEKER_FOEDSELSNUMMER.value,
virkningsdato = LocalDate.parse("2018-01-01"),
fodselsdato = LocalDate.parse("2000-01-01"),
vedtaksType = VedtaksType.INNV,
Expand All @@ -38,12 +39,12 @@ internal class UfoereHendelseFordelerTest {
}

@Test
fun `skal håndtere ufoerehendelse der bruker fyller 21 virkningstidspunkt`() {
fun `skal håndtere ufoerehendelse der bruker fyller 21 i måneden for virkningstidspunkt`() {
coEvery { behandlingKlient.postTilBehandling(any()) } returns Unit

val ufoereHendelse =
UfoereHendelse(
personIdent = "12312312312",
personIdent = SOEKER_FOEDSELSNUMMER.value,
virkningsdato = LocalDate.parse("2021-01-01"),
fodselsdato = LocalDate.parse("2000-01-01"),
vedtaksType = VedtaksType.INNV,
Expand All @@ -57,17 +58,36 @@ internal class UfoereHendelseFordelerTest {
}

@Test
fun `skal ignorere ufoerehendelse der bruker ikke er mellom og 18 og 21 på virkningstidspunkt`() {
fun `skal ignorere ufoerehendelse der bruker er 21 år og 1 mnd på virkningstidspunkt`() {
val ufoereHendelse =
UfoereHendelse(
personIdent = "12312312312",
virkningsdato = LocalDate.parse("2021-01-01"),
fodselsdato = LocalDate.parse("1980-01-01"),
personIdent = SOEKER_FOEDSELSNUMMER.value,
virkningsdato = LocalDate.parse("2021-02-01"),
fodselsdato = LocalDate.parse("2000-01-01"),
vedtaksType = VedtaksType.INNV,
)

runBlocking {
ufoereHendelseFordeler.haandterHendelse(ufoereHendelse)
}

coVerify(exactly = 0) { behandlingKlient.postTilBehandling(any()) }
}

@Test
fun `skal ignorere ufoerehendelse der bruker er 17 år og 11 mnd på virkningstidspunkt`() {
val ufoereHendelse =
UfoereHendelse(
personIdent = SOEKER_FOEDSELSNUMMER.value,
virkningsdato = LocalDate.parse("2017-12-01"),
fodselsdato = LocalDate.parse("2000-01-01"),
vedtaksType = VedtaksType.INNV,
)

runBlocking {
ufoereHendelseFordeler.haandterHendelse(ufoereHendelse)
}

coVerify(exactly = 0) { behandlingKlient.postTilBehandling(any()) }
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
package no.nav.etterlatte.hendelserufoere

import io.mockk.coEvery
import io.mockk.coVerify
import io.mockk.confirmVerified
import io.mockk.just
import io.mockk.mockk
import io.mockk.runs
import no.nav.etterlatte.BehandlingKlient
import no.nav.etterlatte.hendelserufoere.common.UfoerehendelseKonsument
import no.nav.etterlatte.kafka.KafkaConsumerEnvironmentTest
import no.nav.etterlatte.kafka.KafkaContainerHelper.Companion.SCHEMA_REGISTRY_URL
import no.nav.etterlatte.kafka.KafkaContainerHelper.Companion.kafkaContainer
import no.nav.etterlatte.kafka.KafkaProducerTestImpl
import no.nav.etterlatte.lesHendelserFraUfoere
import no.nav.etterlatte.libs.common.toJson
import no.nav.etterlatte.libs.testdata.grunnlag.SOEKER_FOEDSELSNUMMER
import org.apache.kafka.common.serialization.StringDeserializer
import org.apache.kafka.common.serialization.StringSerializer
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.TestInstance
import java.time.LocalDate

@TestInstance(TestInstance.Lifecycle.PER_METHOD)
internal class UfoereHendelseIntegrationTest {
private val behandlingKlient = mockk<BehandlingKlient>()

@Test
fun `skal opprette ufoerehendelse paa topicen, konsumere den, og sende videre til behandling`() {
coEvery { behandlingKlient.postTilBehandling(any()) } just runs

val ufoerehendelseKonsument =
UfoerehendelseKonsument(
UFOERE_TOPIC,
KafkaConsumerEnvironmentTest().konfigurer(
kafkaContainer,
StringDeserializer::class.java.canonicalName,
),
UfoereHendelseFordeler(behandlingKlient),
)

val ufoerehendelseProdusent =
KafkaProducerTestImpl<String>(
kafkaContainer,
serialiseringsklasse = StringSerializer::class.java.canonicalName,
schemaRegistryUrl = SCHEMA_REGISTRY_URL,
)

val hendelse =
UfoereHendelse(
personIdent = SOEKER_FOEDSELSNUMMER.value,
fodselsdato = LocalDate.parse("2000-01-01"),
virkningsdato = LocalDate.parse("2020-01-01"),
vedtaksType = VedtaksType.INNV,
)

ufoerehendelseProdusent.sendMelding(UFOERE_TOPIC, "test-key", hendelse.toJson())

lesHendelserFraUfoere(ufoerehendelseKonsument)

coVerify(exactly = 1, timeout = 5000) {
behandlingKlient.postTilBehandling(hendelse)
}

confirmVerified(behandlingKlient)
}

private companion object {
private const val UFOERE_TOPIC = "ufoere-topic"
private val kafkaContainer = kafkaContainer(UFOERE_TOPIC)
}
}

0 comments on commit dd2c320

Please sign in to comment.