Skip to content

Commit

Permalink
Fikser feil der rekjøring ikke tok hensyn til max antall feil (#477)
Browse files Browse the repository at this point in the history
  • Loading branch information
UyQuangNguyen authored Oct 26, 2023
1 parent 4a3b147 commit 2f17845
Show file tree
Hide file tree
Showing 3 changed files with 45 additions and 9 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,6 @@ import java.time.LocalDateTime

data class RekjørSenereException(val årsak: String, val triggerTid: LocalDateTime) :
RuntimeException("Rekjører senere - triggerTid=$triggerTid")

data class MaxAntallRekjøringerException(val maxAntallRekjøring: Int) :
RuntimeException("Nådd max antall rekjøring - $maxAntallRekjøring")
Original file line number Diff line number Diff line change
Expand Up @@ -157,6 +157,10 @@ class TaskService internal constructor(
return taskLoggRepository.countByTaskIdAndType(taskId, Loggtype.FEILET)
}

fun antallGangerPlukket(taskId: Long): Int {
return taskLoggRepository.countByTaskIdAndType(taskId, Loggtype.PLUKKET)
}

@Transactional
internal fun avvikshåndter(task: Task, avvikstype: Avvikstype, årsak: String, endretAv: String): Task {
val taskLogg = TaskLogg(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import no.nav.familie.prosessering.TaskStepBeskrivelse
import no.nav.familie.prosessering.domene.Status
import no.nav.familie.prosessering.domene.Task
import no.nav.familie.prosessering.domene.TaskLogg.Companion.BRUKERNAVN_NÅR_SIKKERHETSKONTEKST_IKKE_FINNES
import no.nav.familie.prosessering.error.MaxAntallRekjøringerException
import no.nav.familie.prosessering.error.RekjørSenereException
import org.slf4j.LoggerFactory
import org.springframework.aop.framework.AopProxyUtils
Expand Down Expand Up @@ -46,8 +47,10 @@ class TaskWorker(
}
taskStepMap = tasksTilTaskStepBeskrivelse.entries.associate { it.value.taskStepType to it.key }
maxAntallFeilMap = tasksTilTaskStepBeskrivelse.values.associate { it.taskStepType to it.maxAntallFeil }
triggerTidVedFeilMap = tasksTilTaskStepBeskrivelse.values.associate { it.taskStepType to it.triggerTidVedFeilISekunder }
settTilManuellOppfølgningVedFeil = tasksTilTaskStepBeskrivelse.values.associate { it.taskStepType to it.settTilManuellOppfølgning }
triggerTidVedFeilMap =
tasksTilTaskStepBeskrivelse.values.associate { it.taskStepType to it.triggerTidVedFeilISekunder }
settTilManuellOppfølgningVedFeil =
tasksTilTaskStepBeskrivelse.values.associate { it.taskStepType to it.settTilManuellOppfølgning }
feiltellereForTaskSteps = tasksTilTaskStepBeskrivelse.values.associate {
it.taskStepType to Metrics.counter(
"mottak.feilede.tasks",
Expand Down Expand Up @@ -96,13 +99,39 @@ class TaskWorker(
fun rekjørSenere(taskId: Long, e: RekjørSenereException) {
log.info("Rekjører task=$taskId senere, triggerTid=${e.triggerTid}")
secureLog.info("Rekjører task=$taskId senere, årsak=${e.årsak}", e)
val taskMedNyTriggerTid = taskService.findById(taskId)
.medTriggerTid(e.triggerTid)
taskService.klarTilPlukk(
taskMedNyTriggerTid,
endretAv = BRUKERNAVN_NÅR_SIKKERHETSKONTEKST_IKKE_FINNES,
melding = e.årsak,
)

val taskMedNyTriggerTid = taskService.findById(taskId).medTriggerTid(e.triggerTid)

val maxAntallFeil = finnMaxAntallFeil(taskMedNyTriggerTid.type)
val antallGangerRekjørt = taskService.antallGangerPlukket(taskId)

if (antallGangerRekjørt >= maxAntallFeil) {
val settTilManuellOppfølgning = finnSettTilManuellOppfølgning(taskMedNyTriggerTid.type)
val taskFeil = TaskFeil(taskMedNyTriggerTid, MaxAntallRekjøringerException(maxAntallFeil))

val feiletTask = taskService.feilet(
task = taskMedNyTriggerTid,
feil = taskFeil,
tidligereAntallFeil = antallGangerRekjørt,
maxAntallFeil = maxAntallFeil,
settTilManuellOppfølgning = settTilManuellOppfølgning,
)
// lager metrikker på tasks som har feilet max antall ganger.
if (feiletTask.status == Status.FEILET || feiletTask.status == Status.MANUELL_OPPFØLGING) {
finnFeilteller(feiletTask.type).increment()
log.error(
"Task ${feiletTask.id} av type ${feiletTask.type} har feilet/satt til manuell oppfølgning. " +
"Sjekk familie-prosessering for detaljer",
)
}
secureLog.info("Feilhåndtering lagret ok {}", feiletTask)
} else {
taskService.klarTilPlukk(
taskMedNyTriggerTid,
endretAv = BRUKERNAVN_NÅR_SIKKERHETSKONTEKST_IKKE_FINNES,
melding = e.årsak,
)
}
}

@Transactional(propagation = Propagation.REQUIRES_NEW)
Expand Down

0 comments on commit 2f17845

Please sign in to comment.