Skip to content

Commit 8004c16

Browse files
committed
La til metric for aktive perioder uten opplysninger
1 parent 5ee8fb3 commit 8004c16

File tree

4 files changed

+54
-4
lines changed

4 files changed

+54
-4
lines changed

apps/hendelseprosessor/src/main/kotlin/no/nav/paw/arbeidssokerregisteret/app/App.kt

+4-2
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import io.micrometer.prometheusmetrics.PrometheusConfig
55
import io.micrometer.prometheusmetrics.PrometheusMeterRegistry
66
import no.nav.paw.arbeidssokerregisteret.api.v1.Periode
77
import no.nav.paw.arbeidssokerregisteret.api.v4.OpplysningerOmArbeidssoeker
8+
import no.nav.paw.arbeidssokerregisteret.app.config.ApplicationLogicConfig
89
import no.nav.paw.arbeidssokerregisteret.app.config.KafkaKonfigurasjon
910
import no.nav.paw.arbeidssokerregisteret.app.helse.Helse
1011
import no.nav.paw.arbeidssokerregisteret.app.helse.initKtor
@@ -56,14 +57,15 @@ fun main() {
5657
Time.SYSTEM
5758
)
5859
)
60+
val appLogicCfg: ApplicationLogicConfig = loadNaisOrLocalConfiguration(applicationLogicConfigFile)
5961
val topology = topology(
6062
prometheusMeterRegistry = prometheusMeterRegistry,
6163
builder = strømBygger,
6264
dbNavn = dbNavn,
6365
innTopic = kafkaKonfigurasjon.streamKonfigurasjon.eventlogTopic,
6466
periodeTopic = kafkaKonfigurasjon.streamKonfigurasjon.periodeTopic,
6567
opplysningerOmArbeidssoekerTopic = kafkaKonfigurasjon.streamKonfigurasjon.opplysningerOmArbeidssoekerTopic,
66-
applicationLogicConfig = loadNaisOrLocalConfiguration(applicationLogicConfigFile)
68+
applicationLogicConfig = appLogicCfg
6769
)
6870

6971
val kafkaStreams = KafkaStreams(topology, StreamsConfig(kafkaKonfigurasjon.properties))
@@ -83,7 +85,7 @@ fun main() {
8385
stateStore().all().asSequence()
8486
.mapNotNull { it.value }
8587
},
86-
mapper = ::withMetricsInfoMapper
88+
mapper = (::withMetricsInfoMapper).withAppLogicCfg(appLogicCfg)
8789
)
8890
kafkaStreams.setUncaughtExceptionHandler { throwable ->
8991
streamLogger.error("Uventet feil: {}", throwable.message, throwable)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package no.nav.paw.arbeidssokerregisteret.app.metrics
2+
3+
import io.micrometer.core.instrument.Tag
4+
import no.nav.paw.arbeidssokerregisteret.PROSENT
5+
import no.nav.paw.arbeidssokerregisteret.STILLING_STYRK08
6+
import no.nav.paw.arbeidssokerregisteret.app.funksjoner.isWithinWindow
7+
import no.nav.paw.arbeidssokerregisteret.app.tilstand.GjeldeneTilstand
8+
import no.nav.paw.arbeidssokerregisteret.app.tilstand.TilstandV1
9+
import java.time.Duration
10+
import java.time.Instant
11+
12+
data class ManglerOpplysningerMaaler(
13+
override val partition: Int?,
14+
val manglerOpplysninger: Boolean
15+
): WithMetricsInfo {
16+
override val name: String get() = Names.MANGLER_OPPLYSNINGER
17+
override val labels: List<Tag> get() = listOf(
18+
Tag.of("mangler_opplysninger", manglerOpplysninger.toString()),
19+
)
20+
}
21+
22+
fun manglerOpplysningerMaaler(opplysningTidsvindu: Duration, tilstand: TilstandV1): List<ManglerOpplysningerMaaler> {
23+
return listOfNotNull(
24+
tilstand
25+
.takeIf { it.gjeldeneTilstand == GjeldeneTilstand.STARTET}
26+
?.let { aktiv ->
27+
val startet = aktiv.gjeldenePeriode?.startet?.tidspunkt
28+
val sisteOpplysning = aktiv.sisteOpplysningerOmArbeidssoeker?.metadata?.tidspunkt
29+
when {
30+
startet == null -> null
31+
sisteOpplysning == null -> ManglerOpplysningerMaaler(partition = tilstand.hendelseScope.partition, manglerOpplysninger = true)
32+
else -> {
33+
val mangler =
34+
sisteOpplysning.isAfter(startet) ||
35+
!(opplysningTidsvindu.isWithinWindow(sisteOpplysning, startet))
36+
ManglerOpplysningerMaaler(partition = tilstand.hendelseScope.partition, manglerOpplysninger = mangler)
37+
}
38+
}
39+
}
40+
)
41+
}

apps/hendelseprosessor/src/main/kotlin/no/nav/paw/arbeidssokerregisteret/app/metrics/NamesAndLabels.kt

+1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ object Names {
1212
const val ARBEIDSSOEKER_ANTALL = "${PREFIX}_arbeidssoker_antall_v2"
1313
const val ARBEIDSSOEKER_JOBB_SITUASJON = "${PREFIX}_arbeidssoker_jobb_situasjon_v2"
1414
const val ANTALL_TILSTANDER = "${PREFIX}_arbeidssoker_antall_tilstander_v2"
15+
const val MANGLER_OPPLYSNINGER = "${PREFIX}_arbeidssoker_mangler_opplysninger_v2"
1516
}
1617

1718
object Labels {

apps/hendelseprosessor/src/main/kotlin/no/nav/paw/arbeidssokerregisteret/app/metrics/StateGaugeTask.kt

+8-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package no.nav.paw.arbeidssokerregisteret.app.metrics
22

33
import io.micrometer.prometheusmetrics.PrometheusMeterRegistry
4+
import no.nav.paw.arbeidssokerregisteret.app.config.ApplicationLogicConfig
45
import no.nav.paw.arbeidssokerregisteret.app.tilstand.TilstandV1
56
import org.apache.kafka.streams.KafkaStreams
67
import org.apache.kafka.streams.errors.InvalidStateStoreException
@@ -48,7 +49,12 @@ fun <T1> initStateGaugeTask(
4849
}
4950
}
5051

51-
fun withMetricsInfoMapper(tilstand: TilstandV1): List<WithMetricsInfo> =
52+
fun withMetricsInfoMapper(logicCfg: ApplicationLogicConfig, tilstand: TilstandV1): List<WithMetricsInfo> =
5253
arbeidssoekerSituasjonsMaaler(tilstand) +
5354
listOfNotNull(arbeidssokerMaaler(tilstand)) +
54-
antallTilstanderMaaler(tilstand)
55+
antallTilstanderMaaler(tilstand) +
56+
manglerOpplysningerMaaler(logicCfg.inkluderOpplysningerInnenforTidsvindu, tilstand)
57+
58+
fun ((ApplicationLogicConfig, TilstandV1) -> List<WithMetricsInfo>).withAppLogicCfg(appLogicCfg: ApplicationLogicConfig) = { tilstand: TilstandV1 ->
59+
this(appLogicCfg, tilstand)
60+
}

0 commit comments

Comments
 (0)