Skip to content

Commit

Permalink
🔊 Logg hva som ble endret på lagrede generasjoner
Browse files Browse the repository at this point in the history
Så vi kan få innblikk i hvordan dette går for seg ute i virkeligheten,
og skaffe innsikt til tuning av databaseoperasjoner.

Co-authored-by: Christian Bülow Skovborg <[email protected]>
  • Loading branch information
havstein and chsko committed Jun 24, 2024
1 parent 9af37fa commit 41e4bdd
Showing 1 changed file with 58 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,18 @@ import kotliquery.sessionOf
import no.nav.helse.mediator.builders.GenerasjonBuilder
import no.nav.helse.modell.VedtakDao
import no.nav.helse.modell.person.vedtaksperiode.IVedtaksperiodeObserver
import no.nav.helse.modell.person.vedtaksperiode.VarselDto
import org.slf4j.LoggerFactory
import java.time.LocalDate
import java.util.UUID
import javax.sql.DataSource

internal class GenerasjonRepository(private val dataSource: DataSource) : IVedtaksperiodeObserver {
private val dao = GenerasjonDao(dataSource)
private val vedtakDao = VedtakDao(dataSource)
private var hentedeGenerasjoner: List<GenerasjonDto> = emptyList()

private val sikkerLogger = LoggerFactory.getLogger("tjenestekall")

internal fun brukVedtaksperiode(
dselsnummer: String,
Expand Down Expand Up @@ -53,7 +58,7 @@ internal class GenerasjonRepository(private val dataSource: DataSource) : IVedta

private fun TransactionalSession.finnGenerasjoner(vedtaksperiodeId: UUID): List<GenerasjonDto> {
return with(dao) {
finnGenerasjoner(vedtaksperiodeId)
finnGenerasjoner(vedtaksperiodeId).also { hentedeGenerasjoner = it }
}
}

Expand All @@ -65,6 +70,8 @@ internal class GenerasjonRepository(private val dataSource: DataSource) : IVedta
lagreVedtaksperiode(fødselsnummer, vedtaksperiode)
}
with(dao) {
loggDiffMellomHentetOgSkalLagres(vedtaksperiode)
hentedeGenerasjoner = emptyList()
vedtaksperiode.generasjoner.forEach { generasjonDto ->
lagreGenerasjon(generasjonDto)
}
Expand All @@ -74,6 +81,56 @@ internal class GenerasjonRepository(private val dataSource: DataSource) : IVedta
}
}

private fun loggDiffMellomHentetOgSkalLagres(vedtaksperiode: VedtaksperiodeDto) {
val antallHentet = hentedeGenerasjoner.size
if (antallHentet == 0) return
val generasjonerForLagring = vedtaksperiode.generasjoner
val antallNå = generasjonerForLagring.size
val builder =
StringBuilder().appendLine(
"Hentet $antallHentet generasjon(er) for ${vedtaksperiode.vedtaksperiodeId}, skal lagre $antallNå.",
)

if (antallHentet == antallNå) {
val nyesteHentet = hentedeGenerasjoner.last()
val nyesteSkalLagres = generasjonerForLagring.last()
val nyesteErEendret = nyesteHentet != nyesteSkalLagres
builder.appendLine("Ingen generasjoner ble lagt til. Nyeste versjon ble endret: $nyesteErEendret")
if (nyesteErEendret) {
builder.appendLine()
}
builder.diffMellomToGenerasjoner(nyesteHentet, nyesteSkalLagres)
}
val hentedeBortsettFraSiste = hentedeGenerasjoner.dropLast(1)
if (hentedeBortsettFraSiste.isNotEmpty()) {
val historiskeForLagring = generasjonerForLagring.take(hentedeBortsettFraSiste.size)
val historiskeErUlike = hentedeBortsettFraSiste != historiskeForLagring
if (historiskeErUlike) {
builder.appendLine("Historiske generasjoner ble endret")
builder.appendLine(" før - etter:")
hentedeGenerasjoner.zip(historiskeForLagring).forEach { (hentet, skalLagres) ->
builder.diffMellomToGenerasjoner(hentet, skalLagres)
}
} else {
builder.appendLine("Historiske generasjoner ble ikke endret")
}
}
sikkerLogger.info(builder.toString())
}

private fun StringBuilder.diffMellomToGenerasjoner(
hentet: GenerasjonDto,
skalLagres: GenerasjonDto,
) {
appendLine(" utbetaling: ${hentet.utbetalingId} - ${skalLagres.utbetalingId}")
appendLine(" varsler: ${hentet.varsler.map { it.varselkode }} - ${skalLagres.varsler.map(VarselDto::varselkode)}")
appendLine(" tags: ${hentet.tags} - ${skalLagres.tags}")
appendLine(" fom: ${hentet.fom} - ${skalLagres.fom}")
appendLine(" tom: ${hentet.tom} - ${skalLagres.tom}")
appendLine(" tilstand: ${hentet.tilstand} - ${skalLagres.tilstand}")
appendLine(" skj.tidspkt: ${hentet.skjæringstidspunkt} - ${skalLagres.skjæringstidspunkt}")
}

internal fun byggGenerasjon(
vedtaksperiodeId: UUID,
generasjonBuilder: GenerasjonBuilder,
Expand Down

0 comments on commit 41e4bdd

Please sign in to comment.