Skip to content

Commit 1b2c3c6

Browse files
committed
La til mer tracing for bekreftelse
1 parent 04b6caf commit 1b2c3c6

File tree

3 files changed

+82
-7
lines changed

3 files changed

+82
-7
lines changed

apps/bekreftelse-tjeneste/src/main/kotlin/no/nav/paw/bekreftelsetjeneste/topology/BekreftelsePunctuatorFunctions.kt

+44-7
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
package no.nav.paw.bekreftelsetjeneste.topology
22

33
import arrow.core.andThen
4+
import io.opentelemetry.api.common.Attributes
5+
import io.opentelemetry.api.trace.Span
6+
import io.opentelemetry.api.trace.SpanKind.INTERNAL
47
import io.opentelemetry.instrumentation.annotations.WithSpan
58
import no.nav.paw.bekreftelse.internehendelser.BekreftelseHendelse
69
import no.nav.paw.bekreftelse.internehendelser.BekreftelseTilgjengelig
@@ -9,6 +12,7 @@ import no.nav.paw.bekreftelse.internehendelser.RegisterGracePeriodeGjenstaaendeT
912
import no.nav.paw.bekreftelse.internehendelser.RegisterGracePeriodeUtloept
1013
import no.nav.paw.bekreftelsetjeneste.tilstand.Bekreftelse
1114
import no.nav.paw.bekreftelsetjeneste.tilstand.BekreftelseTilstand
15+
import no.nav.paw.bekreftelsetjeneste.tilstand.BekreftelseTilstandStatus
1216
import no.nav.paw.bekreftelsetjeneste.tilstand.BekreftelseTilstandsLogg
1317
import no.nav.paw.bekreftelsetjeneste.tilstand.GracePeriodeUtloept
1418
import no.nav.paw.bekreftelsetjeneste.tilstand.GracePeriodeVarselet
@@ -30,7 +34,8 @@ import java.util.*
3034

3135

3236
@WithSpan(
33-
37+
value = "punctuator_process bekreftelse_tilstand",
38+
kind = INTERNAL
3439
)
3540
fun BekreftelseContext.prosesser(bekreftelseTilstand: BekreftelseTilstand): BekreftelseProsesseringsResultat =
3641
(::opprettInitielBekreftelse andThen
@@ -54,6 +59,15 @@ fun BekreftelseContext.opprettInitielBekreftelse(bekreftelser: List<Bekreftelse>
5459
startTid = fra,
5560
interval = konfigurasjon.interval
5661
)
62+
Span.current().addEvent(
63+
intern,
64+
Attributes.of(
65+
actionKey, bekreftelseOpprettetAction,
66+
initielBekreftelseKey, true,
67+
fraOgMedDagKey, fra.tilFraTilAttributeKeyValue(),
68+
tilDagKey, til.tilFraTilAttributeKeyValue()
69+
)
70+
)
5771
pawNonEmptyListOf(
5872
Bekreftelse(
5973
bekreftelseId = UUID.randomUUID(),
@@ -72,10 +86,21 @@ fun BekreftelseContext.opprettManglendeBekreftelser(bekreftelser: PawNonEmptyLis
7286
val siste = bekreftelser.maxBy { it.gjelderTil }
7387
val ventende = bekreftelser.toList().filter { it.sisteTilstand() is VenterPaaSvar }
7488
return if (siste.gjelderTil.isBefore(wallClock.value) && ventende.size < konfigurasjon.maksAntallVentendeBekreftelser) {
89+
val fra = siste.gjelderTil
90+
val til = sluttTidForBekreftelsePeriode(siste.gjelderTil, konfigurasjon.interval)
91+
Span.current().addEvent(
92+
intern,
93+
Attributes.of(
94+
actionKey, bekreftelseOpprettetAction,
95+
initielBekreftelseKey, true,
96+
fraOgMedDagKey, fra.tilFraTilAttributeKeyValue(),
97+
tilDagKey, til.tilFraTilAttributeKeyValue()
98+
)
99+
)
75100
val neste = Bekreftelse(
76101
bekreftelseId = UUID.randomUUID(),
77-
gjelderFra = siste.gjelderTil,
78-
gjelderTil = sluttTidForBekreftelsePeriode(siste.gjelderTil, konfigurasjon.interval),
102+
gjelderFra = fra,
103+
gjelderTil = til,
79104
tilstandsLogg = BekreftelseTilstandsLogg(
80105
siste = IkkeKlarForUtfylling(wallClock.value),
81106
tidligere = emptyList()
@@ -91,7 +116,7 @@ fun BekreftelseContext.oppdaterBekreftelser(bekreftelser: PawNonEmptyList<Bekref
91116
bekreftelser.map { bekreftelse ->
92117
when {
93118
bekreftelse.erKlarForUtfylling(wallClock.value, konfigurasjon.tilgjengeligOffset) -> {
94-
bekreftelse.plus(KlarForUtfylling(wallClock.value)) to BekreftelseTilgjengelig(
119+
bekreftelse.setStatus(KlarForUtfylling(wallClock.value)) to BekreftelseTilgjengelig(
95120
hendelseId = UUID.randomUUID(),
96121
periodeId = periodeInfo.periodeId,
97122
arbeidssoekerId = periodeInfo.arbeidsoekerId,
@@ -103,7 +128,7 @@ fun BekreftelseContext.oppdaterBekreftelser(bekreftelser: PawNonEmptyList<Bekref
103128
}
104129

105130
bekreftelse.harFristUtloept(wallClock.value) -> {
106-
bekreftelse.plus(VenterSvar(wallClock.value)) to LeveringsfristUtloept(
131+
bekreftelse.setStatus(VenterSvar(wallClock.value)) to LeveringsfristUtloept(
107132
hendelseId = UUID.randomUUID(),
108133
periodeId = periodeInfo.periodeId,
109134
arbeidssoekerId = periodeInfo.arbeidsoekerId,
@@ -117,7 +142,7 @@ fun BekreftelseContext.oppdaterBekreftelser(bekreftelser: PawNonEmptyList<Bekref
117142
wallClock.value,
118143
konfigurasjon.varselFoerGraceperiodeUtloept
119144
) -> {
120-
bekreftelse.plus(GracePeriodeVarselet(wallClock.value)) to RegisterGracePeriodeGjenstaaendeTid(
145+
bekreftelse.setStatus(GracePeriodeVarselet(wallClock.value)) to RegisterGracePeriodeGjenstaaendeTid(
121146
hendelseId = UUID.randomUUID(),
122147
periodeId = periodeInfo.periodeId,
123148
arbeidssoekerId = periodeInfo.arbeidsoekerId,
@@ -131,7 +156,7 @@ fun BekreftelseContext.oppdaterBekreftelser(bekreftelser: PawNonEmptyList<Bekref
131156
}
132157

133158
bekreftelse.harGraceperiodeUtloept(wallClock.value, konfigurasjon.graceperiode) -> {
134-
bekreftelse.plus(GracePeriodeUtloept(wallClock.value)) to RegisterGracePeriodeUtloept(
159+
bekreftelse.setStatus(GracePeriodeUtloept(wallClock.value)) to RegisterGracePeriodeUtloept(
135160
hendelseId = UUID.randomUUID(),
136161
periodeId = periodeInfo.periodeId,
137162
arbeidssoekerId = periodeInfo.arbeidsoekerId,
@@ -148,3 +173,15 @@ fun BekreftelseContext.oppdaterBekreftelser(bekreftelser: PawNonEmptyList<Bekref
148173
oppdaterteBekreftelser to hendelser
149174
}
150175

176+
fun Bekreftelse.setStatus(nyStatus: BekreftelseTilstandStatus): Bekreftelse {
177+
val siste = sisteTilstand()
178+
Span.current().addEvent(
179+
intern,
180+
Attributes.of(
181+
actionKey, bekreftelseSattStatusAction,
182+
nyBekreftelseStatusKey, nyStatus::class.simpleName?.snakeCase() ?: "ukjent",
183+
gjeldeneBekreftelseStatusKey, siste::class.simpleName?.snakeCase() ?: "ukjent"
184+
)
185+
)
186+
return this + nyStatus
187+
}
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,45 @@
11
package no.nav.paw.bekreftelsetjeneste.topology
22

33
import io.opentelemetry.api.common.AttributeKey
4+
import java.time.Instant
5+
import java.time.LocalDate
6+
import java.time.ZoneId
7+
import java.time.format.DateTimeFormatter
48

59
//hendelser
10+
const val intern = "intern"
611
const val okEvent = "ok"
712
const val errorEvent = "error"
813

14+
915
//felles
1016
val bekreftelseloesingKey = AttributeKey.stringKey("bekreftelsesloesning")
1117
val periodeFunnetKey = AttributeKey.booleanKey("periode_funnet")
1218
val harAnsvarKey = AttributeKey.booleanKey("har_ansvar")
1319
val feilMeldingKey = AttributeKey.stringKey("feilmelding")
1420
val domainKey = AttributeKey.stringKey("domain")
1521
val actionKey = AttributeKey.stringKey("action")
22+
val fraOgMedDagKey = AttributeKey.stringKey("fra_og_meg_dag")
23+
val tilDagKey = AttributeKey.stringKey("til_dag")
24+
25+
private val fraTilKeyValueformatter = DateTimeFormatter.ofPattern("yyyyMMdd")
26+
val norskTid = ZoneId.of("Europe/Oslo")
27+
fun Instant.tilFraTilAttributeKeyValue(): String = LocalDate.ofInstant(this, norskTid).format(fraTilKeyValueformatter)
1628

1729
//Bekreftelse
1830
val tilstandKey = AttributeKey.stringKey("tilstand")
31+
val initielBekreftelseKey = AttributeKey.booleanKey("initiel_bekreftelse")
32+
val nyBekreftelseStatusKey = AttributeKey.stringKey("ny_bekreftelse_status")
33+
val gjeldeneBekreftelseStatusKey = AttributeKey.stringKey("gjeldene_bekreftelse_status")
1934
const val bekreftelseLevertAction = "bekreftelse_levert"
35+
const val bekreftelseOpprettetAction = "bekreftelse_opprettet"
36+
const val bekreftelseSattStatusAction = "bekreftelse_satt_status"
37+
2038

2139
//PaaVegneAv
2240
const val paaVegneAvStartet ="paa_vegne_av_startet"
2341
const val paaVegneAvStoppet ="paa_vegne_av_stoppet"
42+
val registerFristUtloept = AttributeKey.booleanKey("register_frist_utloept")
43+
44+
45+
fun String.snakeCase(): String = this.replace(Regex("([a-z])([A-Z]+)"), "$1_$2").lowercase()
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package no.nav.paw.tracing
2+
3+
const val SPAN_ATTRIBUTE_PREFIX = "nav.arbeidssoekerregisteret"
4+
const val PATH_SEPARATOR = "."
5+
6+
interface Domene {
7+
8+
}
9+
10+
fun spanAttributeName(domene: Domene): String = TODO()
11+
12+
13+
14+
fun test() {
15+
16+
}

0 commit comments

Comments
 (0)