From 971b713f9d44e750ccde7be632aa8dc17e37c079 Mon Sep 17 00:00:00 2001 From: Ole Christian Kvernberg Date: Fri, 2 Aug 2024 17:22:24 +0200 Subject: [PATCH] =?UTF-8?q?Linterendringer=20og=20fikset=20postgresql=20fe?= =?UTF-8?q?il=20i=20tester=20som=20f=C3=B8lge=20av=20oppgradering=20til=20?= =?UTF-8?q?spring=203.3.2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 6 + prosessering-core/pom.xml | 6 + .../no/nav/familie/prosessering/TaskFeil.kt | 4 +- .../prosessering/TaskMetadataConverter.kt | 8 +- .../domene/PropertiesToStringConverter.kt | 8 +- .../prosessering/domene/PropertiesWrapper.kt | 4 +- .../nav/familie/prosessering/domene/Task.kt | 9 +- .../familie/prosessering/domene/TaskLogg.kt | 8 +- .../prosessering/domene/TaskLoggRepository.kt | 4 +- .../prosessering/domene/TaskRepository.kt | 4 +- .../error/Rekj\303\270rSenereException.kt" | 11 +- .../error/TaskExceptionUtenStackTrace.kt | 4 +- .../internal/MdcExtendedLogContext.kt | 17 +- .../prosessering/internal/TaskService.kt | 68 +++---- .../prosessering/internal/TaskWorker.kt | 25 +-- ...StatusFeiletOgManuellOppf\303\270lging.kt" | 5 +- .../metrics/TaskMetricRepository.kt | 6 +- .../nav/familie/prosessering/rest/Ressurs.kt | 4 +- .../prosessering/rest/RestTaskService.kt | 168 +++++++++--------- .../prosessering/rest/TaskController.kt | 43 ++--- .../nav/familie/prosessering/rest/TaskDto.kt | 4 +- .../familie/prosessering/util/LeaderClient.kt | 6 +- .../prosessering/DatabaseConfiguration.kt | 5 +- .../prosessering/DbContainerInitializer.kt | 15 +- .../internal/AsyncTaskStepTest.kt | 19 +- .../internal/TaskSchedulerTest.kt | 3 +- .../familie/prosessering/task/TaskStep1.kt | 4 +- .../task/TaskStepExceptionUtenStackTrace.kt | 4 +- .../prosessering/task/TaskStepMedError.kt | 4 +- .../task/TaskStepRekj\303\270rSenere.kt" | 4 +- 30 files changed, 228 insertions(+), 252 deletions(-) diff --git a/pom.xml b/pom.xml index 885aca0c..d9b52572 100644 --- a/pom.xml +++ b/pom.xml @@ -79,6 +79,12 @@ 1.20.0 test + + org.flywaydb + flyway-database-postgresql + 10.15.2 + runtime + com.github.tomakehurst wiremock-jre8-standalone diff --git a/prosessering-core/pom.xml b/prosessering-core/pom.xml index 7e21b3f9..c3d9d45c 100644 --- a/prosessering-core/pom.xml +++ b/prosessering-core/pom.xml @@ -94,6 +94,12 @@ flyway-core test + + org.flywaydb + flyway-database-postgresql + 10.15.2 + runtime + org.testcontainers postgresql diff --git a/prosessering-core/src/main/kotlin/no/nav/familie/prosessering/TaskFeil.kt b/prosessering-core/src/main/kotlin/no/nav/familie/prosessering/TaskFeil.kt index b957cc67..07a4c71a 100644 --- a/prosessering-core/src/main/kotlin/no/nav/familie/prosessering/TaskFeil.kt +++ b/prosessering-core/src/main/kotlin/no/nav/familie/prosessering/TaskFeil.kt @@ -50,9 +50,7 @@ data class TaskFeil( ) @Throws(IOException::class) - fun writeValueAsString(): String { - return objectWriter!!.writeValueAsString(this) - } + fun writeValueAsString(): String = objectWriter!!.writeValueAsString(this) companion object { private var objectWriter: ObjectWriter? = null diff --git a/prosessering-core/src/main/kotlin/no/nav/familie/prosessering/TaskMetadataConverter.kt b/prosessering-core/src/main/kotlin/no/nav/familie/prosessering/TaskMetadataConverter.kt index 697957b2..771d702f 100644 --- a/prosessering-core/src/main/kotlin/no/nav/familie/prosessering/TaskMetadataConverter.kt +++ b/prosessering-core/src/main/kotlin/no/nav/familie/prosessering/TaskMetadataConverter.kt @@ -9,14 +9,10 @@ import org.springframework.data.convert.WritingConverter @ReadingConverter class StringTilPropertiesWrapperConverter : Converter { - override fun convert(p0: String): PropertiesWrapper? { - return PropertiesWrapper(p0.asProperties()) - } + override fun convert(p0: String): PropertiesWrapper? = PropertiesWrapper(p0.asProperties()) } @WritingConverter class PropertiesWrapperTilStringConverter : Converter { - override fun convert(taskPropertiesWrapper: PropertiesWrapper): String? { - return taskPropertiesWrapper.properties.asString() - } + override fun convert(taskPropertiesWrapper: PropertiesWrapper): String? = taskPropertiesWrapper.properties.asString() } diff --git a/prosessering-core/src/main/kotlin/no/nav/familie/prosessering/domene/PropertiesToStringConverter.kt b/prosessering-core/src/main/kotlin/no/nav/familie/prosessering/domene/PropertiesToStringConverter.kt index 6fbe44a5..22bc8ea3 100644 --- a/prosessering-core/src/main/kotlin/no/nav/familie/prosessering/domene/PropertiesToStringConverter.kt +++ b/prosessering-core/src/main/kotlin/no/nav/familie/prosessering/domene/PropertiesToStringConverter.kt @@ -11,7 +11,13 @@ fun Properties.asString(): String { } val stringWriter = StringWriter(512) // custom i stedet for Properties.store slik at vi ikke får med default timestamp - this.forEach { key, value -> stringWriter.append(key as String).append('=').append(value as String).append('\n') } + this.forEach { key, value -> + stringWriter + .append(key as String) + .append('=') + .append(value as String) + .append('\n') + } return stringWriter.toString() } diff --git a/prosessering-core/src/main/kotlin/no/nav/familie/prosessering/domene/PropertiesWrapper.kt b/prosessering-core/src/main/kotlin/no/nav/familie/prosessering/domene/PropertiesWrapper.kt index ae1fac23..df93d1e0 100644 --- a/prosessering-core/src/main/kotlin/no/nav/familie/prosessering/domene/PropertiesWrapper.kt +++ b/prosessering-core/src/main/kotlin/no/nav/familie/prosessering/domene/PropertiesWrapper.kt @@ -2,4 +2,6 @@ package no.nav.familie.prosessering.domene import java.util.Properties -class PropertiesWrapper(val properties: Properties = Properties()) +class PropertiesWrapper( + val properties: Properties = Properties(), +) diff --git a/prosessering-core/src/main/kotlin/no/nav/familie/prosessering/domene/Task.kt b/prosessering-core/src/main/kotlin/no/nav/familie/prosessering/domene/Task.kt index 69ade664..3421bf7e 100644 --- a/prosessering-core/src/main/kotlin/no/nav/familie/prosessering/domene/Task.kt +++ b/prosessering-core/src/main/kotlin/no/nav/familie/prosessering/domene/Task.kt @@ -53,11 +53,8 @@ data class Task( ), ) - fun medTriggerTid(triggerTid: LocalDateTime): Task { - return this.copy(triggerTid = triggerTid) - } + fun medTriggerTid(triggerTid: LocalDateTime): Task = this.copy(triggerTid = triggerTid) - override fun toString(): String { - return "Task(id=$id, status=$status, opprettetTid=$opprettetTid, triggerTid=$triggerTid, type='$type', versjon=$versjon)" - } + override fun toString(): String = + "Task(id=$id, status=$status, opprettetTid=$opprettetTid, triggerTid=$triggerTid, type='$type', versjon=$versjon)" } diff --git a/prosessering-core/src/main/kotlin/no/nav/familie/prosessering/domene/TaskLogg.kt b/prosessering-core/src/main/kotlin/no/nav/familie/prosessering/domene/TaskLogg.kt index df1e9797..bf77f47c 100644 --- a/prosessering-core/src/main/kotlin/no/nav/familie/prosessering/domene/TaskLogg.kt +++ b/prosessering-core/src/main/kotlin/no/nav/familie/prosessering/domene/TaskLogg.kt @@ -15,16 +15,12 @@ data class TaskLogg( val melding: String? = null, val opprettetTid: LocalDateTime = LocalDateTime.now(), ) { - override fun toString(): String { - return "TaskLogg(id=$id, type=$type, opprettetTid=$opprettetTid)" - } + override fun toString(): String = "TaskLogg(id=$id, type=$type, opprettetTid=$opprettetTid)" companion object { const val BRUKERNAVN_NÅR_SIKKERHETSKONTEKST_IKKE_FINNES = "VL" - private fun hentNodeNavn(): String { - return System.getenv("HOSTNAME") ?: "node1" - } + private fun hentNodeNavn(): String = System.getenv("HOSTNAME") ?: "node1" } } diff --git a/prosessering-core/src/main/kotlin/no/nav/familie/prosessering/domene/TaskLoggRepository.kt b/prosessering-core/src/main/kotlin/no/nav/familie/prosessering/domene/TaskLoggRepository.kt index b9f200a8..e69a475d 100644 --- a/prosessering-core/src/main/kotlin/no/nav/familie/prosessering/domene/TaskLoggRepository.kt +++ b/prosessering-core/src/main/kotlin/no/nav/familie/prosessering/domene/TaskLoggRepository.kt @@ -7,7 +7,9 @@ import org.springframework.data.repository.PagingAndSortingRepository import org.springframework.stereotype.Repository @Repository -internal interface TaskLoggRepository : PagingAndSortingRepository, CrudRepository { +internal interface TaskLoggRepository : + PagingAndSortingRepository, + CrudRepository { @Query fun findByTaskId(taskId: Long): List diff --git a/prosessering-core/src/main/kotlin/no/nav/familie/prosessering/domene/TaskRepository.kt b/prosessering-core/src/main/kotlin/no/nav/familie/prosessering/domene/TaskRepository.kt index 20e8f2ff..4bf68443 100644 --- a/prosessering-core/src/main/kotlin/no/nav/familie/prosessering/domene/TaskRepository.kt +++ b/prosessering-core/src/main/kotlin/no/nav/familie/prosessering/domene/TaskRepository.kt @@ -8,7 +8,9 @@ import org.springframework.stereotype.Repository import java.time.LocalDateTime @Repository -internal interface TaskRepository : PagingAndSortingRepository, CrudRepository { +internal interface TaskRepository : + PagingAndSortingRepository, + CrudRepository { fun findByStatusInAndTriggerTidBeforeOrderByOpprettetTid( status: List, triggerTid: LocalDateTime, diff --git "a/prosessering-core/src/main/kotlin/no/nav/familie/prosessering/error/Rekj\303\270rSenereException.kt" "b/prosessering-core/src/main/kotlin/no/nav/familie/prosessering/error/Rekj\303\270rSenereException.kt" index 49beeb30..124f0618 100644 --- "a/prosessering-core/src/main/kotlin/no/nav/familie/prosessering/error/Rekj\303\270rSenereException.kt" +++ "b/prosessering-core/src/main/kotlin/no/nav/familie/prosessering/error/Rekj\303\270rSenereException.kt" @@ -2,8 +2,11 @@ package no.nav.familie.prosessering.error import java.time.LocalDateTime -data class RekjørSenereException(val årsak: String, val triggerTid: LocalDateTime) : - RuntimeException("Rekjører senere - triggerTid=$triggerTid") +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") +data class MaxAntallRekjøringerException( + val maxAntallRekjøring: Int, +) : RuntimeException("Nådd max antall rekjøring - $maxAntallRekjøring") diff --git a/prosessering-core/src/main/kotlin/no/nav/familie/prosessering/error/TaskExceptionUtenStackTrace.kt b/prosessering-core/src/main/kotlin/no/nav/familie/prosessering/error/TaskExceptionUtenStackTrace.kt index 0c3a5bab..a9f0cebf 100644 --- a/prosessering-core/src/main/kotlin/no/nav/familie/prosessering/error/TaskExceptionUtenStackTrace.kt +++ b/prosessering-core/src/main/kotlin/no/nav/familie/prosessering/error/TaskExceptionUtenStackTrace.kt @@ -1,3 +1,5 @@ package no.nav.familie.prosessering.error -class TaskExceptionUtenStackTrace(melding: String) : RuntimeException(melding) +class TaskExceptionUtenStackTrace( + melding: String, +) : RuntimeException(melding) diff --git a/prosessering-core/src/main/kotlin/no/nav/familie/prosessering/internal/MdcExtendedLogContext.kt b/prosessering-core/src/main/kotlin/no/nav/familie/prosessering/internal/MdcExtendedLogContext.kt index 3399ca09..1718d043 100644 --- a/prosessering-core/src/main/kotlin/no/nav/familie/prosessering/internal/MdcExtendedLogContext.kt +++ b/prosessering-core/src/main/kotlin/no/nav/familie/prosessering/internal/MdcExtendedLogContext.kt @@ -7,7 +7,9 @@ import java.util.regex.Pattern * [MDC] backet parameter som tillater en semi-colon separert liste av sub-keys. * Kan dermed legge til og fjerne ekstra-kontekst data dynamisk. */ -class MdcExtendedLogContext private constructor(private val paramName: String) { +class MdcExtendedLogContext private constructor( + private val paramName: String, +) { fun add( key: String, value: String, @@ -43,9 +45,12 @@ class MdcExtendedLogContext private constructor(private val paramName: String) { .toMutableMap() } - private fun toParamValue(elements: Map): String { - return paramName + "[" + elements.map { it.key + '=' + it.value }.joinToString(";") + "]" - } + private fun toParamValue(elements: Map): String = + paramName + "[" + + elements + .map { + it.key + '=' + it.value + }.joinToString(";") + "]" fun clear() { MDC.remove(paramName) @@ -54,8 +59,6 @@ class MdcExtendedLogContext private constructor(private val paramName: String) { companion object { private val ILLEGAL_CHARS = Pattern.compile("[\\[\\];=]") - fun getContext(kontekstParamNavn: String): MdcExtendedLogContext { - return MdcExtendedLogContext(kontekstParamNavn) - } + fun getContext(kontekstParamNavn: String): MdcExtendedLogContext = MdcExtendedLogContext(kontekstParamNavn) } } diff --git a/prosessering-core/src/main/kotlin/no/nav/familie/prosessering/internal/TaskService.kt b/prosessering-core/src/main/kotlin/no/nav/familie/prosessering/internal/TaskService.kt index 5de3426c..e7abee1d 100644 --- a/prosessering-core/src/main/kotlin/no/nav/familie/prosessering/internal/TaskService.kt +++ b/prosessering-core/src/main/kotlin/no/nav/familie/prosessering/internal/TaskService.kt @@ -26,9 +26,7 @@ class TaskService internal constructor( private val logger = LoggerFactory.getLogger(javaClass) private val secureLog = LoggerFactory.getLogger("secureLogger") - fun findById(id: Long): Task { - return taskRepository.findByIdOrNull(id) ?: error("Task med id: $id ikke funnet.") - } + fun findById(id: Long): Task = taskRepository.findByIdOrNull(id) ?: error("Task med id: $id ikke funnet.") /** * Brukes for å opprette task @@ -49,9 +47,7 @@ class TaskService internal constructor( */ @Suppress("unused") // brukes av klienter @Transactional - fun saveAll(tasks: Collection): List { - return tasks.map { save(it) } - } + fun saveAll(tasks: Collection): List = tasks.map { save(it) } private fun validerTask(task: Task) { if ((task.versjon == 0L && task.id != 0L) || (task.id == 0L && task.versjon != 0L)) { @@ -59,8 +55,8 @@ class TaskService internal constructor( } } - fun finnAlleTasksKlareForProsessering(page: Pageable): List { - return taskRepository.findByStatusInAndTriggerTidBeforeOrderByOpprettetTid( + fun finnAlleTasksKlareForProsessering(page: Pageable): List = + taskRepository.findByStatusInAndTriggerTidBeforeOrderByOpprettetTid( listOf( Status.KLAR_TIL_PLUKK, Status.UBEHANDLET, @@ -68,36 +64,29 @@ class TaskService internal constructor( LocalDateTime.now(), page, ) - } - fun finnAlleFeiledeTasks(): List { - return taskRepository.findByStatus(Status.FEILET) - } + fun finnAlleFeiledeTasks(): List = taskRepository.findByStatus(Status.FEILET) - internal fun finnAllePlukkedeTasks(tid: LocalDateTime): Pair> { - return taskRepository.countByStatusIn(listOf(Status.PLUKKET)) to + internal fun finnAllePlukkedeTasks(tid: LocalDateTime): Pair> = + taskRepository.countByStatusIn(listOf(Status.PLUKKET)) to taskRepository.findAllByStatusAndLastProcessed(Status.PLUKKET, tid) - } @Deprecated("Bruk finnTasksMedStatus", ReplaceWith("finnTasksMedStatus(status, type, page)")) fun finnTasksMedStatus( status: List, page: Pageable, - ): List { - return taskRepository.findByStatusIn(status, page) - } + ): List = taskRepository.findByStatusIn(status, page) fun finnTasksMedStatus( status: List, type: String? = null, page: Pageable = Pageable.unpaged(), - ): List { - return if (type == null) { + ): List = + if (type == null) { taskRepository.findByStatusIn(status, page) } else { taskRepository.findByStatusInAndType(status, type, page) } - } @Transactional internal fun slettTasks( @@ -121,33 +110,25 @@ class TaskService internal constructor( return taskLoggRepository.finnTaskLoggMetadata(taskIds).associateBy { it.taskId } } - fun findTaskLoggByTaskId(taskId: Long): List { - return taskLoggRepository.findByTaskId(taskId) - } + fun findTaskLoggByTaskId(taskId: Long): List = taskLoggRepository.findByTaskId(taskId) @Suppress("unused") // brukes av klienter fun finnTaskMedPayloadOgType( payload: String, type: String, - ): Task? { - return taskRepository.findByPayloadAndType(payload, type) - } + ): Task? = taskRepository.findByPayloadAndType(payload, type) @Suppress("unused") // brukes av klienter fun finnAlleTaskerMedPayloadOgType( payload: String, type: String, - ): List { - return taskRepository.findAllByPayloadAndType(payload, type) - } + ): List = taskRepository.findAllByPayloadAndType(payload, type) /** * Då taskRepository er internal så kan denne fortsatt være fin å bruke fra tests */ @Suppress("unused") // brukes av klienter - fun findAll(): List { - return taskRepository.findAll().toList() - } + fun findAll(): List = taskRepository.findAll().toList() @Transactional fun delete(task: Task) { @@ -163,28 +144,19 @@ class TaskService internal constructor( taskRepository.deleteAll(tasks) } - internal fun antallTaskerTilOppfølging(): Long { - return taskRepository.countByStatusIn(listOf(Status.MANUELL_OPPFØLGING, Status.FEILET)) - } + internal fun antallTaskerTilOppfølging(): Long = taskRepository.countByStatusIn(listOf(Status.MANUELL_OPPFØLGING, Status.FEILET)) - fun antallTaskerMedStatusFeiletOgManuellOppfølging(): TaskerMedStatusFeiletOgManuellOppfølging { - return TaskerMedStatusFeiletOgManuellOppfølging( + fun antallTaskerMedStatusFeiletOgManuellOppfølging(): TaskerMedStatusFeiletOgManuellOppfølging = + TaskerMedStatusFeiletOgManuellOppfølging( taskRepository.countByStatusIn(listOf(Status.FEILET)), taskRepository.countByStatusIn(listOf(Status.MANUELL_OPPFØLGING)), ) - } - internal fun tellAntallÅpneTasker(): List { - return taskRepository.countOpenTasks() - } + internal fun tellAntallÅpneTasker(): List = taskRepository.countOpenTasks() - fun antallFeil(taskId: Long): Int { - return taskLoggRepository.countByTaskIdAndType(taskId, Loggtype.FEILET) - } + fun antallFeil(taskId: Long): Int = taskLoggRepository.countByTaskIdAndType(taskId, Loggtype.FEILET) - fun antallGangerPlukket(taskId: Long): Int { - return taskLoggRepository.countByTaskIdAndType(taskId, Loggtype.PLUKKET) - } + fun antallGangerPlukket(taskId: Long): Int = taskLoggRepository.countByTaskIdAndType(taskId, Loggtype.PLUKKET) @Transactional internal fun avvikshåndter( diff --git a/prosessering-core/src/main/kotlin/no/nav/familie/prosessering/internal/TaskWorker.kt b/prosessering-core/src/main/kotlin/no/nav/familie/prosessering/internal/TaskWorker.kt index ce47a44f..d0525dc7 100644 --- a/prosessering-core/src/main/kotlin/no/nav/familie/prosessering/internal/TaskWorker.kt +++ b/prosessering-core/src/main/kotlin/no/nav/familie/prosessering/internal/TaskWorker.kt @@ -172,29 +172,18 @@ class TaskWorker( secureLog.info("Feilhåndtering lagret ok {}", task) } - private fun finnTriggerTidVedFeil(taskType: String): Long { - return triggerTidVedFeilMap[taskType] ?: error("Ukjent tasktype $taskType") - } + private fun finnTriggerTidVedFeil(taskType: String): Long = triggerTidVedFeilMap[taskType] ?: error("Ukjent tasktype $taskType") - private fun finnFeilteller(taskType: String): Counter { - return feiltellereForTaskSteps[taskType] ?: error("Ukjent tasktype $taskType") - } + private fun finnFeilteller(taskType: String): Counter = feiltellereForTaskSteps[taskType] ?: error("Ukjent tasktype $taskType") - private fun finnFullførtteller(taskType: String): Counter { - return fullførttellereForTaskSteps[taskType] ?: error("Ukjent tasktype $taskType") - } + private fun finnFullførtteller(taskType: String): Counter = fullførttellereForTaskSteps[taskType] ?: error("Ukjent tasktype $taskType") - private fun finnMaxAntallFeil(taskType: String): Int { - return maxAntallFeilMap[taskType] ?: error("Ukjent tasktype $taskType") - } + private fun finnMaxAntallFeil(taskType: String): Int = maxAntallFeilMap[taskType] ?: error("Ukjent tasktype $taskType") - private fun finnTaskStep(taskType: String): AsyncTaskStep { - return taskStepMap[taskType] ?: error("Ukjent tasktype $taskType") - } + private fun finnTaskStep(taskType: String): AsyncTaskStep = taskStepMap[taskType] ?: error("Ukjent tasktype $taskType") - private fun finnSettTilManuellOppfølgning(taskType: String): Boolean { - return settTilManuellOppfølgningVedFeil[taskType] ?: error("Ukjent tasktype $taskType") - } + private fun finnSettTilManuellOppfølgning(taskType: String): Boolean = + settTilManuellOppfølgningVedFeil[taskType] ?: error("Ukjent tasktype $taskType") @Transactional(propagation = Propagation.REQUIRES_NEW) fun markerPlukket(id: Long): Task? { diff --git "a/prosessering-core/src/main/kotlin/no/nav/familie/prosessering/internal/TaskerMedStatusFeiletOgManuellOppf\303\270lging.kt" "b/prosessering-core/src/main/kotlin/no/nav/familie/prosessering/internal/TaskerMedStatusFeiletOgManuellOppf\303\270lging.kt" index 8f8294ed..fed3ec48 100644 --- "a/prosessering-core/src/main/kotlin/no/nav/familie/prosessering/internal/TaskerMedStatusFeiletOgManuellOppf\303\270lging.kt" +++ "b/prosessering-core/src/main/kotlin/no/nav/familie/prosessering/internal/TaskerMedStatusFeiletOgManuellOppf\303\270lging.kt" @@ -1,3 +1,6 @@ package no.nav.familie.prosessering.internal -data class TaskerMedStatusFeiletOgManuellOppfølging(val antallFeilet: Long, val antallManuellOppfølging: Long) +data class TaskerMedStatusFeiletOgManuellOppfølging( + val antallFeilet: Long, + val antallManuellOppfølging: Long, +) diff --git a/prosessering-core/src/main/kotlin/no/nav/familie/prosessering/metrics/TaskMetricRepository.kt b/prosessering-core/src/main/kotlin/no/nav/familie/prosessering/metrics/TaskMetricRepository.kt index 7c47c189..8932d36a 100644 --- a/prosessering-core/src/main/kotlin/no/nav/familie/prosessering/metrics/TaskMetricRepository.kt +++ b/prosessering-core/src/main/kotlin/no/nav/familie/prosessering/metrics/TaskMetricRepository.kt @@ -15,4 +15,8 @@ interface TaskMetricRepository : org.springframework.data.repository.Repository< fun finnAntallFeiledeTasksPerTypeOgStatus(): List } -data class AntallTaskAvTypeOgStatus(val type: String, val status: Status, val count: Long) +data class AntallTaskAvTypeOgStatus( + val type: String, + val status: Status, + val count: Long, +) diff --git a/prosessering-core/src/main/kotlin/no/nav/familie/prosessering/rest/Ressurs.kt b/prosessering-core/src/main/kotlin/no/nav/familie/prosessering/rest/Ressurs.kt index e8c75608..b5f0806a 100644 --- a/prosessering-core/src/main/kotlin/no/nav/familie/prosessering/rest/Ressurs.kt +++ b/prosessering-core/src/main/kotlin/no/nav/familie/prosessering/rest/Ressurs.kt @@ -31,7 +31,5 @@ data class Ressurs( ) } - override fun toString(): String { - return "Ressurs(status=$status, melding='$melding')" - } + override fun toString(): String = "Ressurs(status=$status, melding='$melding')" } diff --git a/prosessering-core/src/main/kotlin/no/nav/familie/prosessering/rest/RestTaskService.kt b/prosessering-core/src/main/kotlin/no/nav/familie/prosessering/rest/RestTaskService.kt index e60a5783..f92edc14 100644 --- a/prosessering-core/src/main/kotlin/no/nav/familie/prosessering/rest/RestTaskService.kt +++ b/prosessering-core/src/main/kotlin/no/nav/familie/prosessering/rest/RestTaskService.kt @@ -15,30 +15,33 @@ import org.springframework.transaction.annotation.Transactional import java.time.LocalDateTime @Service -class RestTaskService(private val taskService: TaskService) { - fun finnAntallTaskerSomKreverOppfølging(): Ressurs { - return Result.runCatching { - taskService.antallTaskerTilOppfølging() - }.fold( - onSuccess = { Ressurs.success(it) }, - onFailure = { e -> - logger.error("Henting av antall tasker som krever oppfølging feilet", e) - Ressurs.failure(errorMessage = "Henting av antall tasker som krever oppfølging feilet.", error = e) - }, - ) - } +class RestTaskService( + private val taskService: TaskService, +) { + fun finnAntallTaskerSomKreverOppfølging(): Ressurs = + Result + .runCatching { + taskService.antallTaskerTilOppfølging() + }.fold( + onSuccess = { Ressurs.success(it) }, + onFailure = { e -> + logger.error("Henting av antall tasker som krever oppfølging feilet", e) + Ressurs.failure(errorMessage = "Henting av antall tasker som krever oppfølging feilet.", error = e) + }, + ) fun finnAntallTaskerMedStatusFeiletOgManuellOppfølging(): Ressurs { val errorMelding = "Henting av antall tasker som har feilet eller er som satt til manuell oppføling feilet." - return Result.runCatching { - taskService.antallTaskerMedStatusFeiletOgManuellOppfølging() - }.fold( - onSuccess = { Ressurs.success(it) }, - onFailure = { e -> - logger.error(errorMelding, e) - Ressurs.failure(errorMessage = errorMelding, error = e) - }, - ) + return Result + .runCatching { + taskService.antallTaskerMedStatusFeiletOgManuellOppfølging() + }.fold( + onSuccess = { Ressurs.success(it) }, + onFailure = { e -> + logger.error(errorMelding, e) + Ressurs.failure(errorMessage = errorMelding, error = e) + }, + ) } fun hentTasksForCallId( @@ -64,17 +67,16 @@ class RestTaskService(private val taskService: TaskService) { logger.info("$brukernavn henter oppgaver som er ferdige nå, men feilet før") return hentTasksGittSpørring(0) { pageRequest: PageRequest -> taskService.finnTasksSomErFerdigNåMenFeiletFør(pageRequest) - } - .fold( - onSuccess = { Ressurs.success(data = it) }, - onFailure = { e -> - logger.error("Henting av tasker feilet", e) - Ressurs.failure( - errorMessage = "Henter oppgaver som er ferdige nå, men feilet før feilet.", - error = e, - ) - }, - ) + }.fold( + onSuccess = { Ressurs.success(data = it) }, + onFailure = { e -> + logger.error("Henting av tasker feilet", e) + Ressurs.failure( + errorMessage = "Henter oppgaver som er ferdige nå, men feilet før feilet.", + error = e, + ) + }, + ) } fun hentTasks( @@ -90,14 +92,13 @@ class RestTaskService(private val taskService: TaskService) { type, pageRequest, ) - } - .fold( - onSuccess = { Ressurs.success(data = it) }, - onFailure = { e -> - logger.error("Henting av tasker feilet", e) - Ressurs.failure(errorMessage = "Henting av tasker med status '$statuses', feilet.", error = e) - }, - ) + }.fold( + onSuccess = { Ressurs.success(data = it) }, + onFailure = { e -> + logger.error("Henting av tasker feilet", e) + Ressurs.failure(errorMessage = "Henting av tasker med status '$statuses', feilet.", error = e) + }, + ) } fun hentTasksGittSpørring( @@ -122,12 +123,13 @@ class RestTaskService(private val taskService: TaskService) { ): Ressurs> { logger.info("$saksbehandlerId henter tasklogg til task=$id") - return Result.runCatching { - val taskLogg = taskService.findTaskLoggByTaskId(id) - taskLogg.sortedByDescending { it.opprettetTid } - .map { TaskloggDto(it.id, it.endretAv, it.type, it.node, it.melding, it.opprettetTid) } - } - .fold( + return Result + .runCatching { + val taskLogg = taskService.findTaskLoggByTaskId(id) + taskLogg + .sortedByDescending { it.opprettetTid } + .map { TaskloggDto(it.id, it.endretAv, it.type, it.node, it.melding, it.opprettetTid) } + }.fold( onSuccess = { Ressurs.success(data = it) }, onFailure = { e -> logger.error("Henting av tasker feilet", e) @@ -156,11 +158,12 @@ class RestTaskService(private val taskService: TaskService) { ): Ressurs { logger.info("$saksbehandlerId rekjører alle tasks med status $status") - return Result.runCatching { - taskService.finnTasksMedStatus(listOf(status)) - .map { taskService.klarTilPlukk(it.medTriggerTid(LocalDateTime.now()), saksbehandlerId) } - } - .fold( + return Result + .runCatching { + taskService + .finnTasksMedStatus(listOf(status)) + .map { taskService.klarTilPlukk(it.medTriggerTid(LocalDateTime.now()), saksbehandlerId) } + }.fold( onSuccess = { Ressurs.success(data = "") }, onFailure = { e -> logger.error("Rekjøring av tasker med status '$status' feilet", e) @@ -180,15 +183,15 @@ class RestTaskService(private val taskService: TaskService) { logger.info("$saksbehandlerId setter task $taskId til avvikshåndtert", taskId) - return Result.runCatching { - taskService.avvikshåndter( - task = task, - avvikstype = avvikstype, - årsak = årsak, - endretAv = saksbehandlerId, - ) - } - .fold( + return Result + .runCatching { + taskService.avvikshåndter( + task = task, + avvikstype = avvikstype, + årsak = årsak, + endretAv = saksbehandlerId, + ) + }.fold( onSuccess = { Ressurs.success(data = "") }, @@ -209,15 +212,15 @@ class RestTaskService(private val taskService: TaskService) { logger.info("$saksbehandlerId legger inn kommentar på task $taskId", taskId) - return Result.runCatching { - taskService.kommenter( - task = task, - kommentar = kommentarDTO.kommentar, - endretAv = saksbehandlerId, - settTilManuellOppfølgning = kommentarDTO.settTilManuellOppfølging, - ) - } - .fold( + return Result + .runCatching { + taskService.kommenter( + task = task, + kommentar = kommentarDTO.kommentar, + endretAv = saksbehandlerId, + settTilManuellOppfølgning = kommentarDTO.settTilManuellOppfølging, + ) + }.fold( onSuccess = { Ressurs.success(data = "") }, @@ -233,19 +236,20 @@ class RestTaskService(private val taskService: TaskService) { saksbehandlerId: String, ): Ressurs? { logger.info("$saksbehandlerId henter task med id=$id") - return Result.runCatching { - val task = taskService.findById(id) - val taskLoggMetadata = taskService.finnTaskLoggMetadata(listOf(id))[id] - tilTaskDto(task, taskLoggMetadata) - }.fold( - onSuccess = { - Ressurs.success(data = it) - }, - onFailure = { e -> - logger.info("Fant ikke task med id=$id") - Ressurs.failure("Fant ikke task med id $id", error = e) - }, - ) + return Result + .runCatching { + val task = taskService.findById(id) + val taskLoggMetadata = taskService.finnTaskLoggMetadata(listOf(id))[id] + tilTaskDto(task, taskLoggMetadata) + }.fold( + onSuccess = { + Ressurs.success(data = it) + }, + onFailure = { e -> + logger.info("Fant ikke task med id=$id") + Ressurs.failure("Fant ikke task med id $id", error = e) + }, + ) } private fun tilTaskDto( diff --git a/prosessering-core/src/main/kotlin/no/nav/familie/prosessering/rest/TaskController.kt b/prosessering-core/src/main/kotlin/no/nav/familie/prosessering/rest/TaskController.kt index 03253e95..64609a14 100644 --- a/prosessering-core/src/main/kotlin/no/nav/familie/prosessering/rest/TaskController.kt +++ b/prosessering-core/src/main/kotlin/no/nav/familie/prosessering/rest/TaskController.kt @@ -21,16 +21,12 @@ class TaskController( private val restTaskService: RestTaskService, private val prosesseringInfoProvider: ProsesseringInfoProvider, ) { - fun hentBrukernavn(): String { - return prosesseringInfoProvider.hentBrukernavn() - } + fun hentBrukernavn(): String = prosesseringInfoProvider.hentBrukernavn() @GetMapping(path = ["/task/{id}"]) fun taskMedId( @PathVariable id: Long, - ): ResponseEntity> { - return ResponseEntity.ok(restTaskService.hentTaskMedId(id, hentBrukernavn())) - } + ): ResponseEntity> = ResponseEntity.ok(restTaskService.hentTaskMedId(id, hentBrukernavn())) @GetMapping(path = ["task/v2"]) fun task2( @@ -45,52 +41,41 @@ class TaskController( @GetMapping(path = ["task/callId/{callId}"]) fun tasksForCallId( @PathVariable callId: String, - ): ResponseEntity>> { - return ResponseEntity.ok(restTaskService.hentTasksForCallId(callId, hentBrukernavn())) - } + ): ResponseEntity>> = ResponseEntity.ok(restTaskService.hentTasksForCallId(callId, hentBrukernavn())) @GetMapping(path = ["/task/ferdigNaaFeiletFoer"]) fun tasksSomErFerdigNåMenFeiletFør(): ResponseEntity>> = ResponseEntity.ok(restTaskService.hentTasksSomErFerdigNåMenFeiletFør(hentBrukernavn())) @GetMapping(path = ["/task/antall-til-oppfolging"]) - fun antallTilOppfølging(): ResponseEntity> { - return ResponseEntity.ok(restTaskService.finnAntallTaskerSomKreverOppfølging()) - } + fun antallTilOppfølging(): ResponseEntity> = ResponseEntity.ok(restTaskService.finnAntallTaskerSomKreverOppfølging()) @GetMapping(path = ["/task/antall-feilet-og-manuell-oppfolging"]) - fun antallFeiletOgManuellOppfølging(): ResponseEntity> { - return ResponseEntity.ok(restTaskService.finnAntallTaskerMedStatusFeiletOgManuellOppfølging()) - } + fun antallFeiletOgManuellOppfølging(): ResponseEntity> = + ResponseEntity.ok(restTaskService.finnAntallTaskerMedStatusFeiletOgManuellOppfølging()) @GetMapping(path = ["/task/logg/{id}"]) fun tasklogg( @PathVariable id: Long, @RequestParam(required = false) page: Int?, - ): ResponseEntity>> { - return ResponseEntity.ok(restTaskService.hentTaskLogg(id, hentBrukernavn())) - } + ): ResponseEntity>> = ResponseEntity.ok(restTaskService.hentTaskLogg(id, hentBrukernavn())) @PutMapping(path = ["/task/rekjor"]) fun rekjørTask( @RequestParam taskId: Long, - ): ResponseEntity> { - return ResponseEntity.ok(restTaskService.rekjørTask(taskId, hentBrukernavn())) - } + ): ResponseEntity> = ResponseEntity.ok(restTaskService.rekjørTask(taskId, hentBrukernavn())) @PutMapping(path = ["task/rekjorAlle"]) fun rekjørTasks( @RequestHeader status: Status, - ): ResponseEntity> { - return ResponseEntity.ok(restTaskService.rekjørTasks(status, hentBrukernavn())) - } + ): ResponseEntity> = ResponseEntity.ok(restTaskService.rekjørTasks(status, hentBrukernavn())) @PutMapping(path = ["/task/avvikshaandter"]) fun avvikshåndterTask( @RequestParam taskId: Long, @RequestBody avvikshåndterDTO: AvvikshåndterDTO, - ): ResponseEntity> { - return ResponseEntity.ok( + ): ResponseEntity> = + ResponseEntity.ok( restTaskService.avvikshåndterTask( taskId, avvikshåndterDTO.avvikstype, @@ -98,19 +83,17 @@ class TaskController( hentBrukernavn(), ), ) - } @PutMapping(path = ["/task/kommenter"]) fun kommenterTask( @RequestParam taskId: Long, @RequestBody kommentarDTO: KommentarDTO, - ): ResponseEntity> { - return ResponseEntity.ok( + ): ResponseEntity> = + ResponseEntity.ok( restTaskService.kommenterTask( taskId, kommentarDTO, hentBrukernavn(), ), ) - } } diff --git a/prosessering-core/src/main/kotlin/no/nav/familie/prosessering/rest/TaskDto.kt b/prosessering-core/src/main/kotlin/no/nav/familie/prosessering/rest/TaskDto.kt index c690ebd4..7828e4d8 100644 --- a/prosessering-core/src/main/kotlin/no/nav/familie/prosessering/rest/TaskDto.kt +++ b/prosessering-core/src/main/kotlin/no/nav/familie/prosessering/rest/TaskDto.kt @@ -7,7 +7,9 @@ import java.time.LocalDateTime import java.util.Properties // Legger opp for fremtidlig mulighet for å legge inn metadata som sidnummer, etc -data class PaginableResponse(val tasks: List) +data class PaginableResponse( + val tasks: List, +) data class TaskDto( val id: Long, diff --git a/prosessering-core/src/main/kotlin/no/nav/familie/prosessering/util/LeaderClient.kt b/prosessering-core/src/main/kotlin/no/nav/familie/prosessering/util/LeaderClient.kt index f8d12334..0d2e5f61 100644 --- a/prosessering-core/src/main/kotlin/no/nav/familie/prosessering/util/LeaderClient.kt +++ b/prosessering-core/src/main/kotlin/no/nav/familie/prosessering/util/LeaderClient.kt @@ -15,7 +15,8 @@ internal object LeaderClient { private val TIMEOUT = Duration.ofSeconds(3) private val client = - HttpClient.newBuilder() + HttpClient + .newBuilder() .connectTimeout(TIMEOUT) .build() @@ -26,7 +27,8 @@ internal object LeaderClient { val electorPath = hentLeaderSystemEnv() ?: return null val request = - HttpRequest.newBuilder() + HttpRequest + .newBuilder() .timeout(TIMEOUT) .uri(URI.create("http://$electorPath")) .GET() diff --git a/prosessering-core/src/test/kotlin/no/nav/familie/prosessering/DatabaseConfiguration.kt b/prosessering-core/src/test/kotlin/no/nav/familie/prosessering/DatabaseConfiguration.kt index 2d01c672..ba48902e 100644 --- a/prosessering-core/src/test/kotlin/no/nav/familie/prosessering/DatabaseConfiguration.kt +++ b/prosessering-core/src/test/kotlin/no/nav/familie/prosessering/DatabaseConfiguration.kt @@ -8,12 +8,11 @@ import org.springframework.data.jdbc.repository.config.AbstractJdbcConfiguration @Configuration class DatabaseConfiguration : AbstractJdbcConfiguration() { @Bean - override fun jdbcCustomConversions(): JdbcCustomConversions { - return JdbcCustomConversions( + override fun jdbcCustomConversions(): JdbcCustomConversions = + JdbcCustomConversions( listOf( StringTilPropertiesWrapperConverter(), PropertiesWrapperTilStringConverter(), ), ) - } } diff --git a/prosessering-core/src/test/kotlin/no/nav/familie/prosessering/DbContainerInitializer.kt b/prosessering-core/src/test/kotlin/no/nav/familie/prosessering/DbContainerInitializer.kt index 1202fc4b..5188be6c 100644 --- a/prosessering-core/src/test/kotlin/no/nav/familie/prosessering/DbContainerInitializer.kt +++ b/prosessering-core/src/test/kotlin/no/nav/familie/prosessering/DbContainerInitializer.kt @@ -8,11 +8,12 @@ import org.testcontainers.containers.PostgreSQLContainer class DbContainerInitializer : ApplicationContextInitializer { override fun initialize(applicationContext: ConfigurableApplicationContext) { postgres.start() - TestPropertyValues.of( - "spring.datasource.url=${postgres.jdbcUrl}", - "spring.datasource.username=${postgres.username}", - "spring.datasource.password=${postgres.password}", - ).applyTo(applicationContext.environment) + TestPropertyValues + .of( + "spring.datasource.url=${postgres.jdbcUrl}", + "spring.datasource.username=${postgres.username}", + "spring.datasource.password=${postgres.password}", + ).applyTo(applicationContext.environment) } companion object { @@ -27,4 +28,6 @@ class DbContainerInitializer : ApplicationContextInitializer(imageName) +class KPostgreSQLContainer( + imageName: String, +) : PostgreSQLContainer(imageName) diff --git a/prosessering-core/src/test/kotlin/no/nav/familie/prosessering/internal/AsyncTaskStepTest.kt b/prosessering-core/src/test/kotlin/no/nav/familie/prosessering/internal/AsyncTaskStepTest.kt index 4e94acb8..5840823a 100644 --- a/prosessering-core/src/test/kotlin/no/nav/familie/prosessering/internal/AsyncTaskStepTest.kt +++ b/prosessering-core/src/test/kotlin/no/nav/familie/prosessering/internal/AsyncTaskStepTest.kt @@ -15,25 +15,26 @@ class AsyncTaskStepTest : IntegrationRunnerTest() { @Test fun `skal ha annotasjon`() { - Assertions.assertThat( - tasker.any { - harIkkePåkrevdAnnotasjon(it) - }, - ).isFalse() + Assertions + .assertThat( + tasker.any { + harIkkePåkrevdAnnotasjon(it) + }, + ).isFalse() } - private fun harIkkePåkrevdAnnotasjon(it: AsyncTaskStep): Boolean { - return !AnnotationUtils.isAnnotationDeclaredLocally( + private fun harIkkePåkrevdAnnotasjon(it: AsyncTaskStep): Boolean = + !AnnotationUtils.isAnnotationDeclaredLocally( TaskStepBeskrivelse::class.java, it.javaClass, ) - } @Test fun `skal ha unike navn`() { val taskTyper = tasker.map { taskStep: AsyncTaskStep -> finnAnnotasjon(taskStep).taskStepType } - Assertions.assertThat(taskTyper) + Assertions + .assertThat(taskTyper) .isEqualTo(taskTyper.distinct()) } diff --git a/prosessering-core/src/test/kotlin/no/nav/familie/prosessering/internal/TaskSchedulerTest.kt b/prosessering-core/src/test/kotlin/no/nav/familie/prosessering/internal/TaskSchedulerTest.kt index ea24e2d8..257094fe 100644 --- a/prosessering-core/src/test/kotlin/no/nav/familie/prosessering/internal/TaskSchedulerTest.kt +++ b/prosessering-core/src/test/kotlin/no/nav/familie/prosessering/internal/TaskSchedulerTest.kt @@ -36,7 +36,8 @@ class TaskSchedulerTest : IntegrationRunnerTest() { assertThat(taskRepository.findAll()) .hasSize(1) - .extracting("status").containsOnly(Status.KLAR_TIL_PLUKK) + .extracting("status") + .containsOnly(Status.KLAR_TIL_PLUKK) assertThat(taskLoggRepository.findAll().map { it.taskId }).containsOnly(1000002) } diff --git a/prosessering-core/src/test/kotlin/no/nav/familie/prosessering/task/TaskStep1.kt b/prosessering-core/src/test/kotlin/no/nav/familie/prosessering/task/TaskStep1.kt index b6afd28a..ea016f6e 100644 --- a/prosessering-core/src/test/kotlin/no/nav/familie/prosessering/task/TaskStep1.kt +++ b/prosessering-core/src/test/kotlin/no/nav/familie/prosessering/task/TaskStep1.kt @@ -9,7 +9,9 @@ import java.util.concurrent.TimeUnit @Service @TaskStepBeskrivelse(taskStepType = TaskStep1.TASK_1, beskrivelse = "Dette er task 1") -class TaskStep1 constructor(private val taskService: TaskService) : AsyncTaskStep { +class TaskStep1 constructor( + private val taskService: TaskService, +) : AsyncTaskStep { override fun doTask(task: Task) { try { TimeUnit.MICROSECONDS.sleep(1) diff --git a/prosessering-core/src/test/kotlin/no/nav/familie/prosessering/task/TaskStepExceptionUtenStackTrace.kt b/prosessering-core/src/test/kotlin/no/nav/familie/prosessering/task/TaskStepExceptionUtenStackTrace.kt index f07719fc..0456ea00 100644 --- a/prosessering-core/src/test/kotlin/no/nav/familie/prosessering/task/TaskStepExceptionUtenStackTrace.kt +++ b/prosessering-core/src/test/kotlin/no/nav/familie/prosessering/task/TaskStepExceptionUtenStackTrace.kt @@ -9,9 +9,7 @@ import org.springframework.stereotype.Service @Service @TaskStepBeskrivelse(taskStepType = TaskStepExceptionUtenStackTrace.TYPE, beskrivelse = "") class TaskStepExceptionUtenStackTrace : AsyncTaskStep { - override fun doTask(task: Task) { - throw TaskExceptionUtenStackTrace("feilmelding") - } + override fun doTask(task: Task): Unit = throw TaskExceptionUtenStackTrace("feilmelding") override fun onCompletion(task: Task) {} diff --git a/prosessering-core/src/test/kotlin/no/nav/familie/prosessering/task/TaskStepMedError.kt b/prosessering-core/src/test/kotlin/no/nav/familie/prosessering/task/TaskStepMedError.kt index 4fb3fe5e..317dfe05 100644 --- a/prosessering-core/src/test/kotlin/no/nav/familie/prosessering/task/TaskStepMedError.kt +++ b/prosessering-core/src/test/kotlin/no/nav/familie/prosessering/task/TaskStepMedError.kt @@ -11,9 +11,7 @@ import org.springframework.stereotype.Service beskrivelse = "Task med error", ) class TaskStepMedError : AsyncTaskStep { - override fun doTask(task: Task) { - throw NotImplementedError("Ikke implementert") - } + override fun doTask(task: Task): Unit = throw NotImplementedError("Ikke implementert") companion object { const val TYPE = "taskMedError" diff --git "a/prosessering-core/src/test/kotlin/no/nav/familie/prosessering/task/TaskStepRekj\303\270rSenere.kt" "b/prosessering-core/src/test/kotlin/no/nav/familie/prosessering/task/TaskStepRekj\303\270rSenere.kt" index 334f2845..9dacd64f 100644 --- "a/prosessering-core/src/test/kotlin/no/nav/familie/prosessering/task/TaskStepRekj\303\270rSenere.kt" +++ "b/prosessering-core/src/test/kotlin/no/nav/familie/prosessering/task/TaskStepRekj\303\270rSenere.kt" @@ -10,9 +10,7 @@ import java.time.LocalDate @Service @TaskStepBeskrivelse(taskStepType = TaskStepRekjørSenere.TYPE, beskrivelse = "") class TaskStepRekjørSenere : AsyncTaskStep { - override fun doTask(task: Task) { - throw RekjørSenereException("årsak", LocalDate.of(2088, 1, 1).atStartOfDay()) - } + override fun doTask(task: Task): Unit = throw RekjørSenereException("årsak", LocalDate.of(2088, 1, 1).atStartOfDay()) override fun onCompletion(task: Task) {}