diff --git a/src/main/kotlin/no/nav/k9/los/K9Los.kt b/src/main/kotlin/no/nav/k9/los/K9Los.kt index 2899bcc6d..d298d24ac 100644 --- a/src/main/kotlin/no/nav/k9/los/K9Los.kt +++ b/src/main/kotlin/no/nav/k9/los/K9Los.kt @@ -45,9 +45,6 @@ import no.nav.k9.los.nyoppgavestyring.domeneadaptere.k9.saktillos.K9SakTilLosAda import no.nav.k9.los.nyoppgavestyring.domeneadaptere.k9.saktillos.K9SakTilLosApi import no.nav.k9.los.nyoppgavestyring.domeneadaptere.k9.statistikk.OppgavestatistikkTjeneste import no.nav.k9.los.nyoppgavestyring.domeneadaptere.k9.statistikk.StatistikkApi -import no.nav.k9.los.nyoppgavestyring.domeneadaptere.k9klagetillos.K9KlageTilLosHistorikkvaskTjeneste -import no.nav.k9.los.nyoppgavestyring.domeneadaptere.k9saktillos.K9SakTilLosHistorikkvaskTjeneste -import no.nav.k9.los.nyoppgavestyring.ko.OppgaveKoApis import no.nav.k9.los.nyoppgavestyring.mottak.feltdefinisjon.FeltdefinisjonApi import no.nav.k9.los.nyoppgavestyring.mottak.oppgave.OppgaveV3Api import no.nav.k9.los.nyoppgavestyring.mottak.oppgavetype.OppgavetypeApi @@ -161,7 +158,10 @@ fun Application.k9Los() { oppgaveKøRepository = koin.get() ) - PepCacheOppdaterer(koin.get()).start() + PepCacheOppdaterer(koin.get()).run { + startOppdateringAvÅpneOgVentende() + startOppdateringAvLukkedeOppgaver() + } val sjekkReserverteJobb = sjekkReserverteJobb(saksbehandlerRepository = koin.get(), reservasjonRepository = koin.get()) diff --git a/src/main/kotlin/no/nav/k9/los/nyoppgavestyring/pep/PepCacheOppdaterer.kt b/src/main/kotlin/no/nav/k9/los/nyoppgavestyring/pep/PepCacheOppdaterer.kt index bb9d17625..ba969c57c 100644 --- a/src/main/kotlin/no/nav/k9/los/nyoppgavestyring/pep/PepCacheOppdaterer.kt +++ b/src/main/kotlin/no/nav/k9/los/nyoppgavestyring/pep/PepCacheOppdaterer.kt @@ -1,6 +1,5 @@ package no.nav.k9.los.nyoppgavestyring.pep -import no.nav.k9.los.domene.repository.OppgaveKøRepository import org.slf4j.LoggerFactory import java.time.Duration import java.util.* @@ -15,7 +14,7 @@ class PepCacheOppdaterer( private val TRÅDNAVN = "k9los-pepcache-oppdaterer" private val log = LoggerFactory.getLogger(PepCacheOppdaterer::class.java) - fun start(): Timer { + fun startOppdateringAvÅpneOgVentende(): Timer { return timer( daemon = true, name = TRÅDNAVN, @@ -23,9 +22,24 @@ class PepCacheOppdaterer( initialDelay = forsinketOppstart.toMillis() ) { try { - pepCacheService.oppdaterCacheForOppgaverEldreEnn(alderForOppfriskning) + pepCacheService.oppdaterCacheForÅpneOgVentendeOppgaverEldreEnn(gyldighet = alderForOppfriskning) } catch (e: Exception) { - log.warn("Feil ved kjøring av PepCacheOppdaterer", e) + log.warn("Feil ved kjøring av PepCacheOppdaterer for åpne og ventene oppgaver", e) + } + } + } + + fun startOppdateringAvLukkedeOppgaver(): Timer { + return timer( + daemon = true, + name = TRÅDNAVN, + period = Duration.ofSeconds(2).toMillis(), + initialDelay = forsinketOppstart.toMillis() + ) { + try { + pepCacheService.oppdaterCacheForLukkedeOppgaverEldreEnn(gyldighet = Duration.ofDays(30)) + } catch (e: Exception) { + log.warn("Feil ved kjøring av PepCacheOppdaterer for lukkede oppgaver", e) } } } diff --git a/src/main/kotlin/no/nav/k9/los/nyoppgavestyring/pep/PepCacheService.kt b/src/main/kotlin/no/nav/k9/los/nyoppgavestyring/pep/PepCacheService.kt index 4cb0d48f5..5dc48a311 100644 --- a/src/main/kotlin/no/nav/k9/los/nyoppgavestyring/pep/PepCacheService.kt +++ b/src/main/kotlin/no/nav/k9/los/nyoppgavestyring/pep/PepCacheService.kt @@ -6,6 +6,7 @@ import kotlinx.coroutines.runBlocking import kotliquery.TransactionalSession import no.nav.k9.los.domene.lager.oppgave.v2.TransactionalManager import no.nav.k9.los.integrasjon.abac.IPepClient +import no.nav.k9.los.nyoppgavestyring.mottak.oppgave.Oppgavestatus import no.nav.k9.los.nyoppgavestyring.visningoguttrekk.Oppgave import no.nav.k9.los.nyoppgavestyring.visningoguttrekk.OppgaveRepository import java.time.Duration @@ -28,12 +29,24 @@ class PepCacheService( } } - fun oppdaterCacheForOppgaverEldreEnn(gyldighet: Duration = Duration.ofHours(23)) { + fun oppdaterCacheForÅpneOgVentendeOppgaverEldreEnn(gyldighet: Duration = Duration.ofHours(23)) { + oppdaterCacheForOppgaverMedStatusEldreEnn(gyldighet, setOf(Oppgavestatus.VENTER, Oppgavestatus.AAPEN)) + } + + fun oppdaterCacheForLukkedeOppgaverEldreEnn(gyldighet: Duration = Duration.ofDays(30)) { + oppdaterCacheForOppgaverMedStatusEldreEnn(gyldighet, setOf(Oppgavestatus.LUKKET)) + } + + private fun oppdaterCacheForOppgaverMedStatusEldreEnn( + gyldighet: Duration = Duration.ofHours(23), + status: Set + ) { transactionalManager.transaction { tx -> runBlocking { - val oppgaverSomMåOppdateres = oppgaveRepository.hentÅpneOgVentendeOppgaverMedPepCacheEldreEnn( + val oppgaverSomMåOppdateres = oppgaveRepository.hentOppgaverMedStatusOgPepCacheEldreEnn( tidspunkt = LocalDateTime.now() - gyldighet, antall = 1, + status = status, tx ) oppgaverSomMåOppdateres.forEach { oppgave -> oppdater(tx, oppgave) } diff --git a/src/main/kotlin/no/nav/k9/los/nyoppgavestyring/visningoguttrekk/OppgaveRepository.kt b/src/main/kotlin/no/nav/k9/los/nyoppgavestyring/visningoguttrekk/OppgaveRepository.kt index 8ece62a6e..86c265c89 100644 --- a/src/main/kotlin/no/nav/k9/los/nyoppgavestyring/visningoguttrekk/OppgaveRepository.kt +++ b/src/main/kotlin/no/nav/k9/los/nyoppgavestyring/visningoguttrekk/OppgaveRepository.kt @@ -3,6 +3,7 @@ package no.nav.k9.los.nyoppgavestyring.visningoguttrekk import kotliquery.Row import kotliquery.TransactionalSession import kotliquery.queryOf +import no.nav.k9.los.nyoppgavestyring.mottak.oppgave.Oppgavestatus import no.nav.k9.los.nyoppgavestyring.mottak.oppgavetype.OppgavetypeRepository import java.time.LocalDateTime import no.nav.k9.los.spi.felter.HentVerdiInput @@ -140,9 +141,10 @@ class OppgaveRepository( ) } - fun hentÅpneOgVentendeOppgaverMedPepCacheEldreEnn( + fun hentOppgaverMedStatusOgPepCacheEldreEnn( tidspunkt: LocalDateTime = LocalDateTime.now(), antall: Int = 1, + status: Set, tx: TransactionalSession ): List { return tx.run( @@ -153,8 +155,8 @@ class OppgaveRepository( LEFT JOIN OPPGAVE_PEP_CACHE opc ON ( o.kildeomrade = opc.kildeomrade AND o.ekstern_id = opc.ekstern_id ) - WHERE o.aktiv is true AND o.status IN ('VENTER', 'AAPEN') - AND opc.oppdatert < :grense + WHERE o.aktiv is true AND o.status IN ('${status.joinToString("','")}') + AND (opc.oppdatert is null OR opc.oppdatert < :grense) ORDER BY opc.oppdatert LIMIT :limit """.trimIndent(), diff --git a/src/test/kotlin/no/nav/k9/los/nyoppgavestyring/pep/PepCacheServiceTest.kt b/src/test/kotlin/no/nav/k9/los/nyoppgavestyring/pep/PepCacheServiceTest.kt index 3f060926a..d9164cde0 100644 --- a/src/test/kotlin/no/nav/k9/los/nyoppgavestyring/pep/PepCacheServiceTest.kt +++ b/src/test/kotlin/no/nav/k9/los/nyoppgavestyring/pep/PepCacheServiceTest.kt @@ -126,13 +126,13 @@ class PepCacheServiceTest : KoinTest, AbstractPostgresTest() { val eksternId = UUID.randomUUID().toString() k9sakEventHandler.prosesser(lagBehandlingprosessEventMedStatus(eksternId, saksnummer)) - pepCacheService.oppdaterCacheForOppgaverEldreEnn(gyldighet = Duration.ofHours(2)) + pepCacheService.oppdaterCacheForÅpneOgVentendeOppgaverEldreEnn(gyldighet = Duration.ofHours(2)) verify(exactly = 0) { pepRepository.lagre(any(), any()) } loggAlleOppgaverMedFelterOgCache() val tidspunktForsøktOppdatert = LocalDateTime.now() - pepCacheService.oppdaterCacheForOppgaverEldreEnn(gyldighet = Duration.ofNanos(1)) + pepCacheService.oppdaterCacheForÅpneOgVentendeOppgaverEldreEnn(gyldighet = Duration.ofNanos(1)) val slot = slot() verify(exactly = 1) { pepRepository.lagre(capture(slot), any()) } @@ -157,7 +157,7 @@ class PepCacheServiceTest : KoinTest, AbstractPostgresTest() { tidMellomKjøring = Duration.ofMillis(500), alderForOppfriskning = Duration.ofNanos(1), forsinketOppstart = Duration.ZERO - ).start() + ).startOppdateringAvÅpneOgVentende() val saksnummer = "TEST4" gjørSakOrdinær(saksnummer)