diff --git a/src/no/nav/statistikkapi/application.kt b/src/no/nav/statistikkapi/application.kt index 85dc1f1e..9d0fbb4b 100644 --- a/src/no/nav/statistikkapi/application.kt +++ b/src/no/nav/statistikkapi/application.kt @@ -24,6 +24,7 @@ import no.nav.statistikkapi.kafka.* import no.nav.statistikkapi.kandidatliste.KandidatlisteRepository import no.nav.statistikkapi.kandidatliste.KandidatlistehendelseLytter import no.nav.statistikkapi.kandidatutfall.* +import no.nav.statistikkapi.metrikker.AresMetrikkJobb import no.nav.statistikkapi.metrikker.MetrikkJobb import no.nav.statistikkapi.stillinger.StillingRepository import no.nav.statistikkapi.tiltak.TiltakManglerAktørIdLytter @@ -69,13 +70,6 @@ fun startApp( val visningKontaktinfoRepository = VisningKontaktinfoRepository(database.dataSource) val prometheusMeterRegistry = PrometheusMeterRegistry(PrometheusConfig.DEFAULT) - val metrikkJobb = MetrikkJobb( - kandidatutfallRepository, - kandidatlisteRepository, - visningKontaktinfoRepository, - prometheusMeterRegistry - ) - val rapid = RapidApplication.Builder( RapidApplication.RapidApplicationConfig.fromEnv( System.getenv() @@ -157,7 +151,12 @@ fun startApp( TiltakManglerAktørIdLytter(this) } - metrikkJobb.start() + AresMetrikkJobb( + kandidatutfallRepository, + kandidatlisteRepository, + visningKontaktinfoRepository, + prometheusMeterRegistry + ).start() rapid.start() } diff --git a/src/no/nav/statistikkapi/metrikker/AresMetrikkJobb.kt b/src/no/nav/statistikkapi/metrikker/AresMetrikkJobb.kt new file mode 100644 index 00000000..0709c2cb --- /dev/null +++ b/src/no/nav/statistikkapi/metrikker/AresMetrikkJobb.kt @@ -0,0 +1,161 @@ +package no.nav.statistikkapi.metrikker + +import io.micrometer.core.instrument.Tags +import io.micrometer.prometheus.PrometheusMeterRegistry +import no.nav.statistikkapi.kandidatliste.KandidatlisteRepository +import no.nav.statistikkapi.kandidatutfall.KandidatutfallRepository +import no.nav.statistikkapi.logging.log +import no.nav.statistikkapi.visningkontaktinfo.VisningKontaktinfoRepository +import java.util.concurrent.Executors +import java.util.concurrent.ScheduledExecutorService +import java.util.concurrent.TimeUnit.MINUTES + +class AresMetrikkJobb( + private val kandidatutfallRepository: KandidatutfallRepository, + private val kandidatlisteRepository: KandidatlisteRepository, + private val visningKontaktinfoRepository: VisningKontaktinfoRepository, + private val prometheusMeterRegistry: PrometheusMeterRegistry +) { + private val executor: ScheduledExecutorService = Executors.newSingleThreadScheduledExecutor() + + fun start() { + executor.scheduleWithFixedDelay(this::lesFraDbOgSkrivTilPrometheus, 1, 5, MINUTES) + } + + private fun lesFraDbOgSkrivTilPrometheus() { + try { + lesOgSkriv() + } catch (e: Exception) { + log.error("Forsøkte å lese statistikk fra DB og skrive metrikk til Prometheus", e) + } + + } + + private fun lesOgSkriv() { + prometheusMeterRegistry.gauge( + "antall_presenterte_kandidater", + kandidatutfallRepository.hentAntallPresentertForAlleNavKontor() + ) + + prometheusMeterRegistry.gauge( + "antall_fått_jobben", + kandidatutfallRepository.hentAntallFåttJobbenForAlleNavKontor() + ) + + prometheusMeterRegistry.gauge( + "antall_kandidatlister_tilknyttet_stilling", + kandidatlisteRepository.hentAntallKandidatlisterForOpprettedeStillinger() + ) + + prometheusMeterRegistry.gauge( + "antall_kandidatlister_tilknyttet_direktemeldt_stilling", + kandidatlisteRepository.hentAntallKandidatlisterTilknyttetDirektemeldteStillinger() + ) + + prometheusMeterRegistry.gauge( + "antall_kandidatlister_tilknyttet_ekstern_stilling", + kandidatlisteRepository.hentAntallKandidatlisterTilknyttetEksterneStillinger() + ) + + prometheusMeterRegistry.gauge( + "antall_stillinger_for_eksterne_stillingsannonser_med_kandidatliste", + kandidatlisteRepository.hentAntallStillingerForEksterneStillingsannonserMedKandidatliste() + ) + + prometheusMeterRegistry.gauge( + "antall_stillinger_for_direktemeldte_stillingsannonser", + kandidatlisteRepository.hentAntallStillingerForDirektemeldteStillingsannonser() + ) + + prometheusMeterRegistry.gauge( + "antall_stillinger_for_stillingsannonser_med_kandidatliste", + kandidatlisteRepository.hentAntallStillingerForStillingsannonserMedKandidatliste() + ) + + prometheusMeterRegistry.gauge( + "antall_direktemeldte_stillinger_med_minst_en_presentert_kandidat", + kandidatlisteRepository.hentAntallDirektemeldteStillingerMedMinstEnPresentertKandidat() + ) + + prometheusMeterRegistry.gauge( + "antall_kandidater_i_prioritert_malgruppe_som_har_fatt_vist_sin_kontaktinfo", + visningKontaktinfoRepository.hentAntallKandidaterIPrioritertMålgruppeSomHarFåttVistSinKontaktinfo() + ) + + prometheusMeterRegistry.gauge( + "antall_kandidatlister_med_minst_en_kandidat_i_prioritert_maalgruppe_som_har_faatt_vist_sin_kontaktinfo", + visningKontaktinfoRepository.hentAntallKandidatlisterMedMinstEnKandidatIPrioritertMålgruppeSomHarFåttVistSinKontaktinfo() + ) + + prometheusMeterRegistry.gauge( + "antall_kandidatlister_der_minst_en_kandidat_i_prioritert_maalgruppe_fikk_jobben", + kandidatlisteRepository.hentAntallKandidatlisterDerMinstEnKandidatIPrioritertMålgruppeFikkJobben() + ) + + prometheusMeterRegistry.gauge( + "antall_direktemeldte_stillinger_som_har_tom_kandidatliste", + kandidatlisteRepository.hentAntallDirektemeldteStillingerSomHarTomKandidatliste() + ) + + prometheusMeterRegistry.gauge( + "antall_unike_arbeidsgivere_for_direktemeldte_stillinger", + kandidatlisteRepository.hentAntallUnikeArbeidsgivereForDirektemeldteStillinger() + ) + + prometheusMeterRegistry.gauge( + "antall_kandidatlister_tilknyttet_direktemeldt_stilling_der_minst_en_kandidat_fikk_jobben", + kandidatlisteRepository.hentAntallKandidatlisterTilknyttetDirektemeldtStillingDerMinstEnKandidatFikkJobben() + ) + + kandidatlisteRepository.hentAntallKandidatlisterTilknyttetStillingPerMåned().forEach { + prometheusMeterRegistry.gauge( + "antall_kandidatlister_tilknyttet_stilling_per_maaned", + Tags.of("maaned", it.key), + it.value + ) + } + + kandidatlisteRepository.hentAntallKandidatlisterTilknyttetDirektemeldtStillingPerMåned().forEach { + prometheusMeterRegistry.gauge( + "antall_kandidatlister_tilknyttet_direktemeldt_stilling_per_maaned", + Tags.of("maaned", it.key), + it.value + ) + } + + kandidatlisteRepository.hentAntallDirektemeldteStillingerMedMinstEnPresentertKandidatPerMåned().forEach { + prometheusMeterRegistry.gauge( + "antall_direktemeldte_stillinger_med_minst_en_presentert_kandidat_per_maaned", + Tags.of("maaned", it.key), + it.value + ) + } + + visningKontaktinfoRepository.hentAntallKandidatlisterMedMinstEnKandidatIPrioritertMålgruppeSomHarFåttVistSinKontaktinfoPerMåned() + .forEach { + prometheusMeterRegistry.gauge( + "antall_kandidatlister_med_minst_en_kandidat_i_prioritert_maalgruppe_som_har_faatt_vist_sin_kontaktinfo_per_maaned", + Tags.of("maaned", it.key), + it.value + ) + } + + visningKontaktinfoRepository.hentAntallKandidatlisterMedMinstEnKandidatSomHarFåttVistSinKontaktinfoPerMåned() + .forEach { + prometheusMeterRegistry.gauge( + "antall_kandidatlister_med_minst_en_kandidat_som_har_faatt_vist_sin_kontaktinfo_per_maaned", + Tags.of("maaned", it.key), + it.value + ) + } + + kandidatlisteRepository.hentAntallKandidatlisterDerMinstEnKandidatIPrioritertMålgruppeFikkJobbenPerMåned() + .forEach { + prometheusMeterRegistry.gauge( + "antall_kandidatlister_der_minst_en_kandidat_i_prioritert_maalgruppe_fikk_jobben_per_maaned", + Tags.of("maaned", it.key), + it.value + ) + } + } +} diff --git a/src/no/nav/statistikkapi/metrikker/MetrikkJobb.kt b/src/no/nav/statistikkapi/metrikker/MetrikkJobb.kt index 66585536..d0da7a49 100644 --- a/src/no/nav/statistikkapi/metrikker/MetrikkJobb.kt +++ b/src/no/nav/statistikkapi/metrikker/MetrikkJobb.kt @@ -12,6 +12,7 @@ import java.util.concurrent.Executors import java.util.concurrent.TimeUnit import java.util.concurrent.atomic.AtomicLong +// TODO Are: Slett hele klassen, erstattes av AresMetrikkJobb class MetrikkJobb( private val kandidatutfallRepository: KandidatutfallRepository, private val kandidatlisteRepository: KandidatlisteRepository, @@ -279,4 +280,4 @@ class MetrikkJobb( } } } -} \ No newline at end of file +}