From d96b8e9d6d173203abcd0fff64a2c6cf746152bd Mon Sep 17 00:00:00 2001 From: Christian Klem Date: Mon, 25 Sep 2023 10:57:29 +0200 Subject: [PATCH] Legg til jobb som oppdaterer virksomhetsstatistikk_for_prioritering Co-authored-by: Per-Christian Nielsen --- src/main/kotlin/no/nav/lydia/App.kt | 5 ++ .../vedlikehold/StatistikkViewOppdaterer.kt | 66 +++++++++++++++++++ 2 files changed, 71 insertions(+) create mode 100644 src/main/kotlin/no/nav/lydia/vedlikehold/StatistikkViewOppdaterer.kt diff --git a/src/main/kotlin/no/nav/lydia/App.kt b/src/main/kotlin/no/nav/lydia/App.kt index d75c5ee5..61db8f25 100644 --- a/src/main/kotlin/no/nav/lydia/App.kt +++ b/src/main/kotlin/no/nav/lydia/App.kt @@ -67,6 +67,7 @@ import no.nav.lydia.sykefraversstatistikk.api.geografi.GeografiService import no.nav.lydia.sykefraversstatistikk.api.sykefraversstatistikk import no.nav.lydia.sykefraversstatistikk.import.StatistikkMetadataVirksomhetConsumer import no.nav.lydia.sykefraversstatistikk.import.StatistikkPerKategoriConsumer +import no.nav.lydia.vedlikehold.StatistikkViewOppdaterer import no.nav.lydia.virksomhet.VirksomhetRepository import no.nav.lydia.virksomhet.VirksomhetService import no.nav.lydia.virksomhet.api.VIRKSOMHET_PATH @@ -124,6 +125,10 @@ fun startLydiaBackend() { run() }.also { HelseMonitor.leggTilHelsesjekk(it) } + StatistikkViewOppdaterer.apply { + run(dataSource = dataSource) + } + embeddedServer(Netty, port = 8080) { lydiaRestApi( naisEnvironment = naisEnv, diff --git a/src/main/kotlin/no/nav/lydia/vedlikehold/StatistikkViewOppdaterer.kt b/src/main/kotlin/no/nav/lydia/vedlikehold/StatistikkViewOppdaterer.kt new file mode 100644 index 00000000..ea8aaf55 --- /dev/null +++ b/src/main/kotlin/no/nav/lydia/vedlikehold/StatistikkViewOppdaterer.kt @@ -0,0 +1,66 @@ +package no.nav.lydia.vedlikehold + +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.Job +import kotlinx.coroutines.cancelAndJoin +import kotlinx.coroutines.delay +import kotlinx.coroutines.launch +import kotlinx.coroutines.runBlocking +import kotlinx.datetime.Clock.System.now +import kotlinx.datetime.TimeZone +import kotlinx.datetime.toLocalDateTime +import kotliquery.queryOf +import kotliquery.sessionOf +import kotliquery.using +import org.slf4j.Logger +import org.slf4j.LoggerFactory +import javax.sql.DataSource +import kotlin.coroutines.CoroutineContext +import kotlin.system.measureTimeMillis + +object StatistikkViewOppdaterer: CoroutineScope { + private val logger: Logger = LoggerFactory.getLogger(this::class.java) + lateinit var job: Job + lateinit var dataSource: DataSource + + override val coroutineContext: CoroutineContext + get() = Dispatchers.IO + job + + init { + Runtime.getRuntime().addShutdownHook(Thread(StatistikkViewOppdaterer::cancel)) + } + + fun run(dataSource: DataSource) { + logger.info("Starter statistikkview oppdaterer") + + job = Job() + StatistikkViewOppdaterer.dataSource = dataSource + + launch { + while (job.isActive) { + if (now().toLocalDateTime(TimeZone.UTC).hour == 0) { + logger.info("Oppdaterer statistikkview...") + val tidBrukt = measureTimeMillis { + using(sessionOf(dataSource)) { session -> + session.run( + queryOf( + "REFRESH MATERIALIZED VIEW virksomhetsstatistikk_for_prioritering" + ).asExecute + ) + } + } + logger.info("Oppdaterte statistikkview på $tidBrukt ms") + } else + logger.debug("Statistikkview oppdateres kun mellom kl 00:00 og 00:59") + + delay(1000 * 60 * 30) // 30 minutter + } + } + } + + fun cancel() = runBlocking { + logger.info("Avslutter statistikkview oppdaterer") + job.cancelAndJoin() + } +} \ No newline at end of file