diff --git a/.deploy/nais-dev.yaml b/.deploy/nais-dev.yaml index 68d27e759..962226120 100644 --- a/.deploy/nais-dev.yaml +++ b/.deploy/nais-dev.yaml @@ -51,6 +51,8 @@ spec: - application: familie-prosessering namespace: teamfamilie cluster: dev-gcp + - application: statuspoll + namespace: navdig outbound: rules: - application: familie-ef-maler diff --git a/.deploy/nais-prod.yaml b/.deploy/nais-prod.yaml index 2aff620f9..dd6c4080a 100644 --- a/.deploy/nais-prod.yaml +++ b/.deploy/nais-prod.yaml @@ -51,6 +51,8 @@ spec: - application: familie-prosessering namespace: teamfamilie cluster: prod-gcp + - application: statuspoll + namespace: navdig outbound: rules: - application: familie-ef-maler diff --git a/src/main/kotlin/no/nav/familie/ef/mottak/api/StatusController.kt b/src/main/kotlin/no/nav/familie/ef/mottak/api/StatusController.kt new file mode 100644 index 000000000..6f77b9aef --- /dev/null +++ b/src/main/kotlin/no/nav/familie/ef/mottak/api/StatusController.kt @@ -0,0 +1,70 @@ +package no.nav.familie.ef.mottak.api + +import no.nav.familie.ef.mottak.repository.SøknadRepository +import no.nav.security.token.support.core.api.Unprotected +import org.springframework.http.MediaType +import org.springframework.web.bind.annotation.GetMapping +import org.springframework.web.bind.annotation.RequestMapping +import org.springframework.web.bind.annotation.RestController +import java.time.Duration +import java.time.LocalDateTime + +@RestController +@RequestMapping(path = ["/api/status"], produces = [MediaType.APPLICATION_JSON_VALUE]) +class StatusController(val søknadRepository: SøknadRepository) { + + @GetMapping() + @Unprotected + fun status(): StatusDto { + val søknad = søknadRepository.finnSisteLagredeSøknad() + val tidSidenSisteLagredeSøknad = Duration.between(LocalDateTime.now(), søknad.opprettetTid) + + when { + erNatt() -> { + return StatusDto(status = Plattformstatus.OK, description = "Alt er bra", logLink = null) + } + + tidSidenSisteLagredeSøknad.toHours() > 24 -> { + return StatusDto( + status = Plattformstatus.DOWN, + description = "Det er over 24 timer siden vi mottok en søknad", + ) + } + + tidSidenSisteLagredeSøknad.toHours() > 5 -> { + return StatusDto( + status = Plattformstatus.ISSUE, + description = "Det er over 5 timer siden vi mottok en søknad", + ) + } + + tidSidenSisteLagredeSøknad.toHours() > 1 -> { + return StatusDto( + status = Plattformstatus.ISSUE, + description = "Det er over 1 time siden vi mottok en søknad", + ) + } + + tidSidenSisteLagredeSøknad.toMinutes() > 20 -> { + return StatusDto( + status = Plattformstatus.ISSUE, + description = "Det er over 20 minutter siden siste søknad ble mottatt", + ) + } + + else -> { + return StatusDto(status = Plattformstatus.OK, description = "Alt er bra", logLink = null) + } + } + } +} + +const val LOG_URL = "https://logs.adeo.no/app/discover#/view/a3e93b80-c1a5-11ee-a029-75a0ed43c092?_g=()" + +data class StatusDto(val status: Plattformstatus, val description: String? = null, val logLink: String? = LOG_URL) + +enum class Plattformstatus { + OK, ISSUE, DOWN +} + +fun erNatt() = LocalDateTime.now().hour !in 8..21 diff --git "a/src/main/kotlin/no/nav/familie/ef/mottak/repository/S\303\270knadRepository.kt" "b/src/main/kotlin/no/nav/familie/ef/mottak/repository/S\303\270knadRepository.kt" index 4d6e106ce..47b6738ff 100644 --- "a/src/main/kotlin/no/nav/familie/ef/mottak/repository/S\303\270knadRepository.kt" +++ "b/src/main/kotlin/no/nav/familie/ef/mottak/repository/S\303\270knadRepository.kt" @@ -25,6 +25,13 @@ interface SøknadRepository : ) fun finnSisteSøknadenPerStønadtype(fnr: String): List + @Query( + """ + SELECT * FROM soknad ORDER BY opprettet_tid DESC LIMIT 1 + """, + ) + fun finnSisteLagredeSøknad(): Søknad + @Query( """ SELECT * FROM soknad WHERE fnr=:fnr AND dokumenttype=:stønadstype ORDER BY opprettet_tid DESC LIMIT 1