Skip to content

Commit 262c91b

Browse files
committed
Lagt til mer logging og metrics
1 parent 3dccde9 commit 262c91b

File tree

10 files changed

+163
-32
lines changed

10 files changed

+163
-32
lines changed

apps/min-side-varsler/nais/nais-dev.yaml

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ spec:
1919
memory: 256Mi
2020
env:
2121
- name: KAFKA_BEKREFTELSE_STREAM_SUFFIX
22-
value: bekreftelse-beta-v1
22+
value: bekreftelse-beta-v2
2323
- name: KAFKA_VARSEL_HENDELSE_STREAM_SUFFIX
2424
value: varsel-hendelser-beta-v1
2525
- name: KAFKA_PAW_ARBEIDSOKERPERIODE_TOPIC

apps/min-side-varsler/src/main/kotlin/no/nav/paw/arbeidssoekerregisteret/context/ApplicationContext.kt

+6-1
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,12 @@ data class ApplicationContext(
6161

6262
val varselMeldingBygger = VarselMeldingBygger(serverConfig.runtimeEnvironment, minSideVarselConfig)
6363

64-
val varselService = VarselService(periodeRepository, varselRepository, varselMeldingBygger)
64+
val varselService = VarselService(
65+
meterRegistry = prometheusMeterRegistry,
66+
periodeRepository = periodeRepository,
67+
varselRepository = varselRepository,
68+
varselMeldingBygger = varselMeldingBygger
69+
)
6570

6671
val bekreftelseKafkaStreams = buildBekreftelseKafkaStreams(
6772
serverConfig = serverConfig,

apps/min-side-varsler/src/main/kotlin/no/nav/paw/arbeidssoekerregisteret/repository/PeriodeRepository.kt

+5
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,11 @@ class PeriodeRepository {
2020
PeriodeTable.selectAll().count()
2121
}
2222

23+
fun findAll(): List<PeriodeRow> = transaction {
24+
PeriodeTable.selectAll()
25+
.map { it.asPeriodeRow() }
26+
}
27+
2328
fun findByPeriodeId(periodeId: UUID): PeriodeRow? = transaction {
2429
PeriodeTable.selectAll()
2530
.where { PeriodeTable.periodeId eq periodeId }

apps/min-side-varsler/src/main/kotlin/no/nav/paw/arbeidssoekerregisteret/repository/VarselRepository.kt

+5
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,11 @@ class VarselRepository {
2020
VarselTable.selectAll().count()
2121
}
2222

23+
fun findAll(): List<VarselRow> = transaction {
24+
VarselTable.selectAll()
25+
.map { it.asVarselRow() }
26+
}
27+
2328
fun findByVarselId(varselId: UUID): VarselRow? = transaction {
2429
VarselTable.selectAll()
2530
.where { VarselTable.varselId eq varselId }

apps/min-side-varsler/src/main/kotlin/no/nav/paw/arbeidssoekerregisteret/service/VarselService.kt

+63-18
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package no.nav.paw.arbeidssoekerregisteret.service
22

3+
import io.micrometer.core.instrument.MeterRegistry
34
import no.nav.paw.arbeidssoekerregisteret.model.OppgaveMelding
45
import no.nav.paw.arbeidssoekerregisteret.model.VarselHendelse
56
import no.nav.paw.arbeidssoekerregisteret.model.VarselKilde
@@ -11,6 +12,8 @@ import no.nav.paw.arbeidssoekerregisteret.model.asUpdatePeriodeRow
1112
import no.nav.paw.arbeidssoekerregisteret.model.asUpdateVarselRow
1213
import no.nav.paw.arbeidssoekerregisteret.repository.PeriodeRepository
1314
import no.nav.paw.arbeidssoekerregisteret.repository.VarselRepository
15+
import no.nav.paw.arbeidssoekerregisteret.utils.bekreftelseHendelseCounter
16+
import no.nav.paw.arbeidssoekerregisteret.utils.periodeCounter
1417
import no.nav.paw.arbeidssokerregisteret.api.v1.Periode
1518
import no.nav.paw.bekreftelse.internehendelser.BekreftelseHendelse
1619
import no.nav.paw.bekreftelse.internehendelser.BekreftelseMeldingMottatt
@@ -21,6 +24,7 @@ import org.jetbrains.exposed.sql.transactions.transaction
2124
import java.util.*
2225

2326
class VarselService(
27+
private val meterRegistry: MeterRegistry,
2428
private val periodeRepository: PeriodeRepository,
2529
private val varselRepository: VarselRepository,
2630
private val varselMeldingBygger: VarselMeldingBygger
@@ -30,11 +34,13 @@ class VarselService(
3034
fun mottaPeriode(periode: Periode) = transaction {
3135
val periodeRow = periodeRepository.findByPeriodeId(periode.id)
3236
if (periodeRow != null) {
33-
logger.warn("Oppdaterer innslag for periode")
37+
logger.warn("Oppdaterer innslag for periode {}", periode.id)
38+
meterRegistry.periodeCounter("update", periode)
3439
val updatePeriodeRow = periode.asUpdatePeriodeRow()
3540
periodeRepository.update(updatePeriodeRow)
3641
} else {
37-
logger.debug("Oppretter innslag for periode")
42+
logger.debug("Oppretter innslag for periode {}", periode.id)
43+
meterRegistry.periodeCounter("insert", periode)
3844
val insertPeriodeRow = periode.asInsertPeriodeRow()
3945
periodeRepository.insert(insertPeriodeRow)
4046
}
@@ -48,15 +54,18 @@ class VarselService(
4854
val varselRow = varselRepository.findByVarselId(hendelse.bekreftelseId)
4955
if (varselRow != null) {
5056
logger.warn(
51-
"Ignorerer bekreftelse-hendelse av type {} siden varsel allerede finnes",
57+
"Ignorerer hendelse {} siden varsel allerede finnes",
5258
hendelse.hendelseType
5359
)
60+
meterRegistry.bekreftelseHendelseCounter("ignore", hendelse)
5461
emptyList()
5562
} else {
5663
logger.debug(
57-
"Bestiller og oppretter varsel basert på bekreftelse-hendelse av type {}",
58-
hendelse.hendelseType
64+
"Bestiller og oppretter varsel for hendelse {} og periode {}",
65+
hendelse.hendelseType,
66+
hendelse.periodeId
5967
)
68+
meterRegistry.bekreftelseHendelseCounter("insert", hendelse)
6069
val insertVarselRow = hendelse.asInsertVarselRow(
6170
varselKilde = VarselKilde.BEKREFTELSE_TILGJENGELIG,
6271
varselType = VarselType.OPPGAVE,
@@ -72,7 +81,12 @@ class VarselService(
7281
)
7382
}
7483
} else {
75-
logger.warn("Fant ingen aktiv periode for bekreftelse-hendelse av type {}", hendelse.hendelseType)
84+
logger.warn(
85+
"Fant ingen aktiv periode for hendelse {} og periode {}",
86+
hendelse.hendelseType,
87+
hendelse.periodeId
88+
)
89+
meterRegistry.bekreftelseHendelseCounter("fail", hendelse)
7690
emptyList()
7791
}
7892
}
@@ -81,32 +95,56 @@ class VarselService(
8195
val varselRow = varselRepository.findByVarselId(hendelse.bekreftelseId)
8296
if (varselRow != null) {
8397
logger.debug(
84-
"Avslutter og sletter varsel for varsel på grunn av bekreftelse-hendelse av type {}",
98+
"Avslutter og sletter varsel for varsel for hendelse {}",
8599
hendelse.hendelseType
86100
)
101+
meterRegistry.bekreftelseHendelseCounter("delete", hendelse)
87102
varselRepository.deleteByVarselId(hendelse.bekreftelseId)
88-
89103
listOf(varselMeldingBygger.avsluttOppgave(hendelse.bekreftelseId))
90104
} else {
91-
logger.warn("Fant ingen varsel for bekreftelse-hendelse av type {}", hendelse.hendelseType)
105+
logger.warn("Fant ingen varsel for hendelse {}", hendelse.hendelseType)
106+
meterRegistry.bekreftelseHendelseCounter("fail", hendelse)
92107
emptyList()
93108
}
94109
}
95110

96111
is PeriodeAvsluttet -> {
97112
logger.debug(
98-
"Avlutter og sletter alle varsler på grunn av bekreftelse-hendelse av type {}",
99-
hendelse.hendelseType
113+
"Avlutter og sletter alle varsler for hendelse {} og periode {}",
114+
hendelse.hendelseType,
115+
hendelse.periodeId
100116
)
117+
val periodeRow = periodeRepository.findByPeriodeId(hendelse.periodeId)
118+
if (periodeRow == null) {
119+
logger.warn(
120+
"Fant ingen periode for hendelse {} og periode {}",
121+
hendelse.hendelseType,
122+
hendelse.periodeId
123+
)
124+
meterRegistry.bekreftelseHendelseCounter("fail", hendelse)
125+
} else {
126+
meterRegistry.bekreftelseHendelseCounter("delete", hendelse)
127+
periodeRepository.deleteByPeriodeId(hendelse.periodeId)
128+
}
129+
101130
val varselRows = varselRepository.findByPeriodeId(hendelse.periodeId)
102-
varselRepository.deleteByPeriodeId(hendelse.periodeId)
103-
periodeRepository.deleteByPeriodeId(hendelse.periodeId)
131+
if (varselRows.isEmpty()) {
132+
logger.warn(
133+
"Fant ingen varsler for hendelse {} og periode {}",
134+
hendelse.hendelseType,
135+
hendelse.periodeId
136+
)
137+
emptyList()
138+
} else {
139+
varselRepository.deleteByPeriodeId(hendelse.periodeId)
140+
varselRows.map { varselMeldingBygger.avsluttOppgave(it.varselId) }
141+
}
104142

105-
varselRows.map { varselMeldingBygger.avsluttOppgave(it.varselId) }
106143
}
107144

108145
else -> {
109-
logger.debug("Ignorerer bekreftelse-hendelse av type {}", hendelse.hendelseType)
146+
logger.debug("Ignorerer hendelse {}", hendelse.hendelseType)
147+
meterRegistry.bekreftelseHendelseCounter("ignore", hendelse)
110148
emptyList()
111149
}
112150
}
@@ -116,19 +154,26 @@ class VarselService(
116154
val varselRow = varselRepository.findByVarselId(UUID.fromString(hendelse.varselId))
117155
if (varselRow != null) {
118156
if (varselRow.hendelseTimestamp.isBefore(hendelse.tidspunkt)) {
119-
logger.debug("Oppdaterer varsel basert på varsel-hendelse med status {}", hendelse.status)
157+
logger.debug(
158+
"Oppdaterer varsel for hendelse {} med type {} og status {}",
159+
VarselHendelse::class.java.simpleName,
160+
hendelse.varseltype,
161+
hendelse.status
162+
)
120163
val updateVarselRow = hendelse.asUpdateVarselRow()
121164
varselRepository.update(updateVarselRow)
122165
} else {
123166
logger.warn(
124-
"Ignorerer varsel-hendelse med status {} siden lagret varsel {} er nyere enn hendelse {}",
167+
"Ignorerer hendelse {} med type {} og status {} siden lagret varsel {} er nyere enn hendelse {}",
168+
VarselHendelse::class.java.simpleName,
169+
hendelse.varseltype,
125170
hendelse.status,
126171
varselRow.hendelseTimestamp,
127172
hendelse.tidspunkt
128173
)
129174
}
130175
} else {
131-
logger.warn("Fant ikke lagret varsel for varsel-hendelse")
176+
logger.warn("Fant ikke lagret varsel for hendelse {}", VarselHendelse::class.java.simpleName)
132177
}
133178
}
134179
}

apps/min-side-varsler/src/main/kotlin/no/nav/paw/arbeidssoekerregisteret/topology/Topology.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -30,13 +30,13 @@ fun StreamsBuilder.bekreftelseKafkaTopology(
3030
): StreamsBuilder {
3131
with(kafkaTopicsConfig) {
3232
stream<Long, Periode>(periodeTopic)
33-
.peek { _, periode -> meterRegistry.periodeCounter(periode) }
33+
.peek { _, periode -> meterRegistry.periodeCounter("read", periode) }
3434
.foreach { _, periode ->
3535
varselService.mottaPeriode(periode)
3636
}
3737

3838
stream(bekreftelseHendelseTopic, Consumed.with(Serdes.Long(), BekreftelseHendelseSerde()))
39-
.peek { _, hendelse -> meterRegistry.bekreftelseHendelseCounter(hendelse) }
39+
.peek { _, hendelse -> meterRegistry.bekreftelseHendelseCounter("read", hendelse) }
4040
.flatMapValues { _, hendelse ->
4141
varselService.mottaBekreftelseHendelse(hendelse)
4242
}

apps/min-side-varsler/src/main/kotlin/no/nav/paw/arbeidssoekerregisteret/utils/Metrics.kt

+10-4
Original file line numberDiff line numberDiff line change
@@ -17,30 +17,34 @@ import no.nav.paw.config.env.namespaceOrDefaultForLocal
1717
private const val METRIC_PREFIX = "paw_min_side_varsler"
1818

1919
fun MeterRegistry.periodeCounter(
20+
action: String,
2021
periode: Periode
2122
) {
2223
counter(
2324
"${METRIC_PREFIX}_antall_operasjoner",
2425
Tags.of(
26+
Tag.of("type", "periode"),
2527
Tag.of("source", "kafka"),
2628
Tag.of("target", "database"),
27-
Tag.of("action", "read"),
29+
Tag.of("action", action),
2830
Tag.of("event.topic", "paw.arbeidssokerperioder-v1"),
29-
Tag.of("event.name", "periode"),
30-
Tag.of("event.status", if (periode.avsluttet == null) "aapen" else "lukket")
31+
Tag.of("event.name", periode::class.java.simpleName),
32+
Tag.of("event.type", if (periode.avsluttet == null) "periode.startet" else "periode.avsluttet")
3133
)
3234
).increment()
3335
}
3436

3537
fun MeterRegistry.bekreftelseHendelseCounter(
38+
action: String,
3639
hendelse: BekreftelseHendelse
3740
) {
3841
counter(
3942
"${METRIC_PREFIX}_antall_operasjoner",
4043
Tags.of(
44+
Tag.of("type", "bekreftelse"),
4145
Tag.of("source", "kafka"),
4246
Tag.of("target", "database"),
43-
Tag.of("action", "read"),
47+
Tag.of("action", action),
4448
Tag.of("event.topic", "paw.arbeidssoker-bekreftelse-hendelseslogg-v1"),
4549
Tag.of("event.name", hendelse::class.java.simpleName),
4650
Tag.of("event.type", hendelse.hendelseType)
@@ -55,6 +59,7 @@ fun MeterRegistry.varselCounter(
5559
counter(
5660
"${METRIC_PREFIX}_antall_operasjoner",
5761
Tags.of(
62+
Tag.of("type", "varsel"),
5863
Tag.of("source", "kafka"),
5964
Tag.of("target", "kafka"),
6065
Tag.of("action", "write"),
@@ -75,6 +80,7 @@ fun MeterRegistry.varselHendelseCounter(
7580
counter(
7681
"${METRIC_PREFIX}_antall_operasjoner",
7782
Tags.of(
83+
Tag.of("type", "varsel.hendelse"),
7884
Tag.of("source", "kafka"),
7985
Tag.of("target", "database"),
8086
Tag.of("action", "read"),

apps/min-side-varsler/src/test/kotlin/no/nav/paw/arbeidssoekerregisteret/context/TestContext.kt

+14-5
Original file line numberDiff line numberDiff line change
@@ -8,18 +8,18 @@ import io.confluent.kafka.serializers.KafkaAvroSerializerConfig
88
import io.confluent.kafka.streams.serdes.avro.SpecificAvroSerde
99
import io.micrometer.prometheusmetrics.PrometheusConfig
1010
import io.micrometer.prometheusmetrics.PrometheusMeterRegistry
11-
import no.nav.paw.arbeidssoekerregisteret.utils.VarselHendelseJsonSerde
12-
import no.nav.paw.arbeidssoekerregisteret.topology.bekreftelseKafkaTopology
13-
import no.nav.paw.arbeidssoekerregisteret.topology.varselHendelserKafkaTopology
14-
import no.nav.paw.arbeidssoekerregisteret.model.VarselMeldingBygger
1511
import no.nav.paw.arbeidssoekerregisteret.config.KafkaTopologyConfig
1612
import no.nav.paw.arbeidssoekerregisteret.config.MIN_SIDE_VARSEL_CONFIG
1713
import no.nav.paw.arbeidssoekerregisteret.config.MinSideVarselConfig
1814
import no.nav.paw.arbeidssoekerregisteret.model.VarselHendelse
15+
import no.nav.paw.arbeidssoekerregisteret.model.VarselMeldingBygger
1916
import no.nav.paw.arbeidssoekerregisteret.repository.PeriodeRepository
2017
import no.nav.paw.arbeidssoekerregisteret.repository.VarselRepository
2118
import no.nav.paw.arbeidssoekerregisteret.service.VarselService
2219
import no.nav.paw.arbeidssoekerregisteret.testdata.KafkaKeyContext
20+
import no.nav.paw.arbeidssoekerregisteret.topology.bekreftelseKafkaTopology
21+
import no.nav.paw.arbeidssoekerregisteret.topology.varselHendelserKafkaTopology
22+
import no.nav.paw.arbeidssoekerregisteret.utils.VarselHendelseJsonSerde
2323
import no.nav.paw.arbeidssokerregisteret.api.v1.Periode
2424
import no.nav.paw.bekreftelse.internehendelser.BekreftelseHendelse
2525
import no.nav.paw.bekreftelse.internehendelser.BekreftelseHendelseSerde
@@ -52,6 +52,8 @@ data class TestContext(
5252
val periodeRepository: PeriodeRepository,
5353
val varselRepository: VarselRepository,
5454
val varselService: VarselService,
55+
val bekreftelseTopologyTestDriver: TopologyTestDriver,
56+
val varselTopologyTestDriver: TopologyTestDriver,
5557
val periodeTopic: TestInputTopic<Long, Periode>,
5658
val bekreftelseHendelseTopic: TestInputTopic<Long, BekreftelseHendelse>,
5759
val tmsVarselTopic: TestOutputTopic<String, String>,
@@ -91,7 +93,12 @@ data class TestContext(
9193
val prometheusMeterRegistry = PrometheusMeterRegistry(PrometheusConfig.DEFAULT)
9294
val periodeRepository = PeriodeRepository()
9395
val varselRepository = VarselRepository()
94-
val varselService = VarselService(periodeRepository, varselRepository, varselMeldingBygger)
96+
val varselService = VarselService(
97+
meterRegistry = prometheusMeterRegistry,
98+
periodeRepository = periodeRepository,
99+
varselRepository = varselRepository,
100+
varselMeldingBygger = varselMeldingBygger
101+
)
95102
val bekreftelseTopology = StreamsBuilder()
96103
.bekreftelseKafkaTopology(
97104
runtimeEnvironment = runtimeEnvironment,
@@ -143,6 +150,8 @@ data class TestContext(
143150
periodeRepository = periodeRepository,
144151
varselRepository = varselRepository,
145152
varselService = varselService,
153+
bekreftelseTopologyTestDriver = bekreftelseTopologyTestDriver,
154+
varselTopologyTestDriver = varselTopologyTestDriver,
146155
periodeTopic = periodeInputTopic,
147156
bekreftelseHendelseTopic = bekreftelseHendelseTopic,
148157
tmsVarselTopic = tmsVarselTopic,

0 commit comments

Comments
 (0)