Skip to content

Commit

Permalink
Feature to create new behandling for old grunnlag for analysis.
Browse files Browse the repository at this point in the history
  • Loading branch information
jacob-meidell committed Oct 18, 2024
1 parent f5af3c1 commit dca6468
Show file tree
Hide file tree
Showing 26 changed files with 1,358 additions and 63 deletions.
4 changes: 2 additions & 2 deletions nais/dev-gcp.yml
Original file line number Diff line number Diff line change
Expand Up @@ -96,8 +96,8 @@ spec:
max: 1
resources:
limits:
cpu: "2"
cpu: "2000m"
memory: "4096Mi"
requests:
cpu: "100m"
cpu: "500m"
memory: "2048Mi"
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package no.nav.pensjon.opptjening.omsorgsopptjening.bestem.pensjonsopptjening.co

import no.nav.pensjon.opptjening.omsorgsopptjening.bestem.pensjonsopptjening.brev.repository.BrevRepository
import no.nav.pensjon.opptjening.omsorgsopptjening.bestem.pensjonsopptjening.godskriv.model.GodskrivOpptjeningRepo
import no.nav.pensjon.opptjening.omsorgsopptjening.bestem.pensjonsopptjening.kontrollbehandling.KontrollbehandlingRepo
import no.nav.pensjon.opptjening.omsorgsopptjening.bestem.pensjonsopptjening.monitorering.StatusCheckTask
import no.nav.pensjon.opptjening.omsorgsopptjening.bestem.pensjonsopptjening.monitorering.StatusRapporteringCachingAdapter
import no.nav.pensjon.opptjening.omsorgsopptjening.bestem.pensjonsopptjening.oppgave.repository.OppgaveRepo
Expand Down Expand Up @@ -33,13 +34,16 @@ class ScheduledTasksConfig {
@Autowired
private lateinit var godskrivOpptjeningRepo: GodskrivOpptjeningRepo

@Autowired
private lateinit var kontrollbehandlingRepo: KontrollbehandlingRepo

@Bean
fun statusCheckTask(): StatusCheckTask {
return StatusCheckTask(statusRapporteringsService)
}

@Bean
fun frigiLaserTask(): FrigiLaserTask {
return FrigiLaserTask(persongrunnlagRepo, oppgaveRepo, brevRepository, godskrivOpptjeningRepo)
return FrigiLaserTask(persongrunnlagRepo, oppgaveRepo, brevRepository, godskrivOpptjeningRepo, kontrollbehandlingRepo)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package no.nav.pensjon.opptjening.omsorgsopptjening.bestem.pensjonsopptjening.kontrollbehandling

import java.time.Instant
import java.util.UUID

data class Kontrollbehandling(
val kontrollId: UUID,
val opprettet: Instant,
val kontrollmeldingId: UUID,
val statushistorikk: List<KontrollbehandlingStatus> = listOf(KontrollbehandlingStatus.Klar()),
val referanse: String,
val omsorgsÅr: Int,
val kafkameldingid: UUID,
) {
val status: KontrollbehandlingStatus get() = statushistorikk.last()

fun ferdig(): Kontrollbehandling {
return copy(statushistorikk = statushistorikk + status.ferdig())
}

fun retry(melding: String): Kontrollbehandling {
return copy(statushistorikk = statushistorikk + status.retry(melding))
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package no.nav.pensjon.opptjening.omsorgsopptjening.bestem.pensjonsopptjening.kontrollbehandling

import no.nav.pensjon.opptjening.omsorgsopptjening.bestem.pensjonsopptjening.omsorgsopptjening.model.FullførteBehandlinger

interface KontrollbehandlingProcessingService {
fun process(): List<FullførteBehandlinger>?
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
package no.nav.pensjon.opptjening.omsorgsopptjening.bestem.pensjonsopptjening.kontrollbehandling

import no.nav.pensjon.opptjening.omsorgsopptjening.bestem.pensjonsopptjening.omsorgsopptjening.model.FullførteBehandlinger
import no.nav.pensjon.opptjening.omsorgsopptjening.bestem.pensjonsopptjening.utils.Mdc
import no.nav.pensjon.opptjening.omsorgsopptjening.bestem.pensjonsopptjening.utils.NewTransactionTemplate
import no.nav.pensjon.opptjening.omsorgsopptjening.felles.CorrelationId
import no.nav.pensjon.opptjening.omsorgsopptjening.felles.InnlesingId
import org.slf4j.Logger
import org.slf4j.LoggerFactory

internal class KontrollbehandlingProcessingServiceImpl(
private val transactionTemplate: NewTransactionTemplate,
private val service: KontrollbehandlingService,
) : KontrollbehandlingProcessingService {
companion object {
private val log: Logger = LoggerFactory.getLogger(this::class.java)
private val secureLog: Logger = LoggerFactory.getLogger("secure")
}

override fun process(): List<FullførteBehandlinger>? {
val meldinger = transactionTemplate.execute { service.hentOgLås(10) }!!
try {
return meldinger.rader.mapNotNull { melding ->
Mdc.scopedMdc(CorrelationId(melding.kontrollId)) {
Mdc.scopedMdc(InnlesingId(melding.kontrollId)) {
try {
log.info("Starter kontrollbehandling")
transactionTemplate.execute {
service.behandle(melding).also { log.info("Kontrollbehandling utført") }
}
} catch (ex: Throwable) {
transactionTemplate.execute {
log.warn("Exception ved kontrollbehandling: ${ex::class.qualifiedName}")
secureLog.warn("Exception ved kontrollbehandling: ", ex)
service.retry(melding, ex)
}
null
} finally {
log.info("Avslutter kontrollbehandling")
}
}
}
}
} catch (ex: Throwable) {
log.error("Exception ved henting kontrollbehandlinger ${ex::class.qualifiedName}")
secureLog.error("Exception ved henting kontrollbehandlinger", ex)
return null // throw ex
} finally {
transactionTemplate.execute { service.frigi(meldinger) }
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
package no.nav.pensjon.opptjening.omsorgsopptjening.bestem.pensjonsopptjening.kontrollbehandling

import io.getunleash.Unleash
import no.nav.pensjon.opptjening.omsorgsopptjening.bestem.pensjonsopptjening.config.DatasourceReadinessCheck
import no.nav.pensjon.opptjening.omsorgsopptjening.bestem.pensjonsopptjening.unleash.NavUnleashConfig
import org.slf4j.LoggerFactory

class KontrollbehandlingProcessingThread(
private val service: KontrollbehandlingProcessingService,
private val unleash: Unleash,
private val datasourceReadinessCheck: DatasourceReadinessCheck,
) : Runnable {

init {
val name = "prosesser-persongrunnlag-kontrollbehandling-thread"
log.info("Starting new thread:$name to process kontrollbehandlinger")
Thread(this, name).start()
}


companion object {
private val log = LoggerFactory.getLogger(this::class.java)!!
}


override fun run() {
while (true) {
try {
if (unleash.isEnabled(NavUnleashConfig.Feature.KONTROLL.toggleName) && datasourceReadinessCheck.isReady()) {
service.process() ?: run {
Thread.sleep(1000)
null
}
}
} catch (exception: Throwable) {
log.warn("Exception caught while processing ${exception::class.qualifiedName}")
}
}
}
}
Loading

0 comments on commit dca6468

Please sign in to comment.