Skip to content

Commit f5bb015

Browse files
Callid (#19)
Legger til callid på consumer-kall, interne kall og logginnslag
1 parent e76ffd2 commit f5bb015

File tree

12 files changed

+119
-124
lines changed

12 files changed

+119
-124
lines changed

src/main/kotlin/no/nav/syfo/SyfooversiktApplication.kt

+6-8
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@ import no.nav.syfo.kafka.setupKafka
3838
import no.nav.syfo.personstatus.*
3939
import no.nav.syfo.tilgangskontroll.MidlertidigTilgangsSjekk
4040
import no.nav.syfo.tilgangskontroll.TilgangskontrollConsumer
41+
import no.nav.syfo.util.NAV_CALL_ID_HEADER
42+
import no.nav.syfo.util.getCallId
4143
import no.nav.syfo.vault.Vault
4244
import org.slf4j.LoggerFactory
4345
import java.net.URL
@@ -205,26 +207,23 @@ fun Application.serverModule() {
205207
}
206208

207209
install(CallId) {
210+
retrieve { it.request.headers["X-Nav-CallId"] }
211+
retrieve { it.request.headers[HttpHeaders.XCorrelationId] }
208212
generate { UUID.randomUUID().toString() }
209213
verify { callId: String -> callId.isNotEmpty() }
210-
header(HttpHeaders.XCorrelationId)
214+
header(NAV_CALL_ID_HEADER)
211215
}
212216

213217
install(StatusPages) {
214218
exception<Throwable> { cause ->
215219
call.respond(HttpStatusCode.InternalServerError, cause.message ?: "Unknown error")
216-
217-
log.error("Caught exception", cause)
220+
log.error("Caught exception", cause, getCallId())
218221
throw cause
219222
}
220223
}
221224

222-
isDev {
223-
LOG.info("Running in development mode")
224-
}
225225

226226
isProd {
227-
LOG.info("Running in production mode")
228227
val tilgangsSjekk = MidlertidigTilgangsSjekk()
229228
intercept(ApplicationCallPipeline.Call) {
230229
if (call.request.uri.contains(Regex("is_alive|is_ready|prometheus"))) {
@@ -242,7 +241,6 @@ fun Application.serverModule() {
242241
proceed()
243242
}
244243
}
245-
246244
}
247245

248246
val config: HttpClientConfig<ApacheEngineConfig>.() -> Unit = {

src/main/kotlin/no/nav/syfo/api/NaisRest.kt

+3
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,10 @@ import io.ktor.routing.Routing
99
import io.ktor.routing.get
1010
import io.prometheus.client.CollectorRegistry
1111
import io.prometheus.client.exporter.common.TextFormat
12+
import net.logstash.logback.argument.StructuredArguments
1213
import no.nav.syfo.ApplicationState
14+
import no.nav.syfo.LOG
15+
import no.nav.syfo.util.kafkaCallId
1316

1417
fun Routing.registerNaisApi(
1518
applicationState: ApplicationState,

src/main/kotlin/no/nav/syfo/auth/TokenAuth.kt

-1
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,6 @@ data class VeilederTokenPayload(
4747

4848
fun getVeilederTokenPayload(token: String): VeilederTokenPayload {
4949
val decodedJWT = JWT.decode(token)
50-
5150
val navIdent: String = decodedJWT.claims["NAVident"]?.asString() ?: throw Error("Missing NAVident in private claims")
5251
val navn: String = decodedJWT.claims["name"]?.asString() ?: throw Error("Missing name in private claims")
5352
val email = decodedJWT.claims["unique_name"]?.asString() ?: throw Error("Missing unique_name in private claims")

src/main/kotlin/no/nav/syfo/kafka/Kafka.kt

+5-2
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ import net.logstash.logback.argument.StructuredArguments
1212
import no.nav.syfo.*
1313
import no.nav.syfo.personstatus.OversiktHendelseService
1414
import no.nav.syfo.personstatus.domain.KOversikthendelse
15+
import no.nav.syfo.util.CallIdArgument
16+
import no.nav.syfo.util.kafkaCallId
1517
import org.apache.kafka.clients.consumer.KafkaConsumer
1618
import org.apache.kafka.common.serialization.StringDeserializer
1719
import org.slf4j.Logger
@@ -63,6 +65,7 @@ suspend fun blockingApplicationLogic(
6365
}
6466

6567
kafkaConsumer.poll(Duration.ofMillis(0)).forEach {
68+
val callId = kafkaCallId()
6669
val oversiktHendelse: KOversikthendelse =
6770
objectMapper.readValue(it.value())
6871
logValues = arrayOf(
@@ -71,9 +74,9 @@ suspend fun blockingApplicationLogic(
7174
StructuredArguments.keyValue("enhetId", oversiktHendelse.enhetId),
7275
StructuredArguments.keyValue("hendelseId", oversiktHendelse.hendelseId)
7376
)
74-
LOG.info("Mottatt oversikthendelse, klar for oppdatering, $logKeys", *logValues)
77+
LOG.info("Mottatt oversikthendelse, klar for oppdatering, $logKeys, {}", *logValues, CallIdArgument(callId))
7578

76-
oversiktHendelseService.oppdaterPersonMedHendelse(oversiktHendelse)
79+
oversiktHendelseService.oppdaterPersonMedHendelse(oversiktHendelse, callId)
7780
}
7881
delay(100)
7982
}

src/main/kotlin/no/nav/syfo/personstatus/OversiktHendelseService.kt

+22-21
Original file line numberDiff line numberDiff line change
@@ -3,47 +3,48 @@ package no.nav.syfo.personstatus
33
import no.nav.syfo.db.DatabaseInterface
44
import no.nav.syfo.metric.*
55
import no.nav.syfo.personstatus.domain.*
6+
import no.nav.syfo.util.CallIdArgument
67
import org.slf4j.LoggerFactory
78

89
private val log: org.slf4j.Logger = LoggerFactory.getLogger("no.nav.syfo.personstatus")
910

1011
class OversiktHendelseService(private val database: DatabaseInterface) {
1112

12-
fun oppdaterPersonMedHendelse(oversiktHendelse: KOversikthendelse) {
13+
fun oppdaterPersonMedHendelse(oversiktHendelse: KOversikthendelse, callId: String = "") {
1314
when (oversiktHendelse.hendelseId) {
14-
OversikthendelseType.MOTEBEHOV_SVAR_MOTTATT.toString() -> oppdaterPersonMedHendelseMotebehovMottatt(oversiktHendelse)
15-
OversikthendelseType.MOTEBEHOV_SVAR_BEHANDLET.toString() -> oppdaterPersonMedHendelseMotebehovBehandlet(oversiktHendelse)
16-
OversikthendelseType.MOTEPLANLEGGER_ALLE_SVAR_MOTTATT.toString() -> oppdaterPersonMedHendelseMoteplanleggerSvarMottat(oversiktHendelse)
17-
OversikthendelseType.MOTEPLANLEGGER_ALLE_SVAR_BEHANDLET.toString() -> oppdaterPersonMedHendelseMoteplanleggerSvarBehandlet(oversiktHendelse)
15+
OversikthendelseType.MOTEBEHOV_SVAR_MOTTATT.toString() -> oppdaterPersonMedHendelseMotebehovMottatt(oversiktHendelse, callId)
16+
OversikthendelseType.MOTEBEHOV_SVAR_BEHANDLET.toString() -> oppdaterPersonMedHendelseMotebehovBehandlet(oversiktHendelse, callId)
17+
OversikthendelseType.MOTEPLANLEGGER_ALLE_SVAR_MOTTATT.toString() -> oppdaterPersonMedHendelseMoteplanleggerSvarMottat(oversiktHendelse, callId)
18+
OversikthendelseType.MOTEPLANLEGGER_ALLE_SVAR_BEHANDLET.toString() -> oppdaterPersonMedHendelseMoteplanleggerSvarBehandlet(oversiktHendelse, callId)
1819
else -> {
19-
log.error("Mottatt oversikthendelse med ukjent type, ${oversiktHendelse.hendelseId}")
20+
log.error("Mottatt oversikthendelse med ukjent type, ${oversiktHendelse.hendelseId}, {}", CallIdArgument(callId))
2021
COUNT_OVERSIKTHENDELSE_UKJENT_MOTTATT.inc()
2122
}
2223
}
2324
}
2425

25-
private fun oppdaterPersonMedHendelseMoteplanleggerSvarMottat(oversiktHendelse: KOversikthendelse) {
26+
private fun oppdaterPersonMedHendelseMoteplanleggerSvarMottat(oversiktHendelse: KOversikthendelse, callId: String) {
2627
val person = database.hentPersonResultat(oversiktHendelse.fnr)
2728
when {
2829
person.isEmpty() -> {
2930
database.opprettPersonMedMoteplanleggerAlleSvarMottatt(oversiktHendelse)
30-
log.info("Opprettet person basert pa oversikthendelse med moteplanlegger alle svar mottatt")
31+
log.info("Opprettet person basert pa oversikthendelse med moteplanlegger alle svar mottatt, {}", CallIdArgument(callId))
3132
COUNT_OVERSIKTHENDELSE_MOTEPLANLEGGER_ALLE_SVAR_MOTTATT_OPPRETT.inc()
3233
}
3334
erPersonsEnhetOppdatert(person, oversiktHendelse) -> {
3435
database.oppdaterPersonMedMoteplanleggerAlleSvarNyEnhet(oversiktHendelse)
35-
log.info("Oppdatert person basert pa oversikthendelse med moteplanlegger alle svar mottatt med ny enhet")
36+
log.info("Oppdatert person basert pa oversikthendelse med moteplanlegger alle svar mottatt med ny enhet, {}", CallIdArgument(callId))
3637
COUNT_OVERSIKTHENDELSE_MOTEPLANLEGGER_ALLE_SVAR_MOTTATT_OPPDATER_ENHET.inc()
3738
}
3839
else -> {
3940
database.oppdaterPersonMedMoteplanleggerAlleSvarMottatt(oversiktHendelse)
40-
log.info("Oppdatert person basert pa oversikthendelse med moteplanlegger alle svar mottatt")
41+
log.info("Oppdatert person basert pa oversikthendelse med moteplanlegger alle svar mottatt, {}", CallIdArgument(callId))
4142
COUNT_OVERSIKTHENDELSE_MOTEPLANLEGGER_ALLE_SVAR_MOTTATT_OPPDATER.inc()
4243
}
4344
}
4445
}
4546

46-
private fun oppdaterPersonMedHendelseMoteplanleggerSvarBehandlet(oversiktHendelse: KOversikthendelse) {
47+
private fun oppdaterPersonMedHendelseMoteplanleggerSvarBehandlet(oversiktHendelse: KOversikthendelse, callId: String) {
4748
val person = database.hentPersonResultat(oversiktHendelse.fnr)
4849
when {
4950
person.isEmpty() -> {
@@ -52,53 +53,53 @@ class OversiktHendelseService(private val database: DatabaseInterface) {
5253
}
5354
erPersonsEnhetOppdatert(person, oversiktHendelse) -> {
5455
database.oppdaterPersonMedMoteplanleggerAlleSvarBehandletNyEnhet(oversiktHendelse)
55-
log.info("Oppdatert person basert pa oversikthendelse med moteplanleggersvar behandlet med ny enhet")
56+
log.info("Oppdatert person basert pa oversikthendelse med moteplanleggersvar behandlet med ny enhet, {}", CallIdArgument(callId))
5657
COUNT_OVERSIKTHENDELSE_MOTEPLANLEGGER_ALLE_SVAR_BEHANDLET_OPPDATER_ENHET.inc()
5758
}
5859
else -> {
5960
database.oppdaterPersonMedMoteplanleggerAlleSvarBehandlet(oversiktHendelse)
60-
log.info("Oppdatert person basert pa oversikthendelse med moteplanleggersvar behandlet")
61+
log.info("Oppdatert person basert pa oversikthendelse med moteplanleggersvar behandlet, {}", CallIdArgument(callId))
6162
COUNT_OVERSIKTHENDELSE_MOTEPLANLEGGER_ALLE_SVAR_BEHANDLET_OPPDATER.inc()
6263
}
6364
}
6465
}
6566

66-
private fun oppdaterPersonMedHendelseMotebehovBehandlet(oversiktHendelse: KOversikthendelse) {
67+
private fun oppdaterPersonMedHendelseMotebehovBehandlet(oversiktHendelse: KOversikthendelse, callId: String) {
6768
val person = database.hentPersonResultat(oversiktHendelse.fnr)
6869
when {
6970
person.isEmpty() -> {
70-
log.error("Fant ikke person som skal oppdateres med hendelse {}, for enhet {}", oversiktHendelse.hendelseId, oversiktHendelse.enhetId)
71+
log.error("Fant ikke person som skal oppdateres med hendelse {}, for enhet {}, {}", oversiktHendelse.hendelseId, oversiktHendelse.enhetId, CallIdArgument(callId))
7172
COUNT_OVERSIKTHENDELSE_MOTEBEHOVSSVAR_BEHANDLET_FEILET.inc()
7273
}
7374
erPersonsEnhetOppdatert(person, oversiktHendelse) -> {
7475
database.oppdaterPersonMedMotebehovBehandletNyEnhet(oversiktHendelse)
75-
log.info("Oppdatert person basert pa oversikthendelse med motebehovsvar behandlet med ny enhet")
76+
log.info("Oppdatert person basert pa oversikthendelse med motebehovsvar behandlet med ny enhet, {}", CallIdArgument(callId))
7677
COUNT_OVERSIKTHENDELSE_MOTEBEHOVSSVAR_BEHANDLET_OPPDATER_ENHET.inc()
7778
}
7879
else -> {
7980
database.oppdaterPersonMedMotebehovBehandlet(oversiktHendelse)
80-
log.info("Oppdatert person basert pa oversikthendelse med motebehovsvar behandlet")
81+
log.info("Oppdatert person basert pa oversikthendelse med motebehovsvar behandlet, {}", CallIdArgument(callId))
8182
COUNT_OVERSIKTHENDELSE_MOTEBEHOVSSVAR_BEHANDLET.inc()
8283
}
8384
}
8485
}
8586

86-
private fun oppdaterPersonMedHendelseMotebehovMottatt(oversiktHendelse: KOversikthendelse) {
87+
private fun oppdaterPersonMedHendelseMotebehovMottatt(oversiktHendelse: KOversikthendelse, callId: String) {
8788
val person = database.hentPersonResultat(oversiktHendelse.fnr)
8889
when {
8990
person.isEmpty() -> {
9091
database.opprettPersonMedMotebehovMottatt(oversiktHendelse)
91-
log.info("Opprettet person basert pa oversikthendelse med motebehovsvar mottatt")
92+
log.info("Opprettet person basert pa oversikthendelse med motebehovsvar mottatt, {}", CallIdArgument(callId))
9293
COUNT_OVERSIKTHENDELSE_MOTEBEHOV_SVAR_MOTTATT_OPPRETT.inc()
9394
}
9495
erPersonsEnhetOppdatert(person, oversiktHendelse) -> {
9596
database.oppdaterPersonMedMotebehovMottattNyEnhet(oversiktHendelse)
96-
log.info("Oppdatert person basert pa oversikthendelse med motebehovsvar mottatt med ny enhet")
97+
log.info("Oppdatert person basert pa oversikthendelse med motebehovsvar mottatt med ny enhet, {}", CallIdArgument(callId))
9798
COUNT_OVERSIKTHENDELSE_MOTEBEHOV_SVAR_MOTTATT_OPPDATER_ENHET.inc()
9899
}
99100
else -> {
100101
database.oppdaterPersonMedMotebehovMottatt(oversiktHendelse)
101-
log.info("Oppdatert person basert pa oversikthendelse med motebehovsvar mottatt")
102+
log.info("Oppdatert person basert pa oversikthendelse med motebehovsvar mottatt, {}", CallIdArgument(callId))
102103
COUNT_OVERSIKTHENDELSE_MOTEBEHOV_SVAR_MOTTATT_OPPDATER.inc()
103104
}
104105
}
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
11
package no.nav.syfo.personstatus
22

33
import io.ktor.application.call
4-
import io.ktor.http.HttpStatusCode
4+
import io.ktor.http.*
55
import io.ktor.response.respond
66
import io.ktor.routing.*
77
import no.nav.syfo.auth.getTokenFromCookie
88
import no.nav.syfo.auth.isInvalidToken
99
import no.nav.syfo.metric.COUNT_PERSONOVERSIKTSTATUS_ENHET_HENTET
1010
import no.nav.syfo.personstatus.domain.PersonOversiktStatus
1111
import no.nav.syfo.tilgangskontroll.TilgangskontrollConsumer
12+
import no.nav.syfo.util.getCallId
1213
import no.nav.syfo.util.validateEnhet
1314
import org.slf4j.Logger
1415
import org.slf4j.LoggerFactory
@@ -20,39 +21,34 @@ fun Route.registerPersonoversiktApi(
2021
personoversiktStatusService: PersonoversiktStatusService
2122
) {
2223
route("/api/v1/personoversikt") {
23-
2424
get("/enhet/{enhet}") {
25-
if (isInvalidToken(call.request.cookies)) {
26-
call.respond(HttpStatusCode.Unauthorized)
27-
} else {
2825
try {
2926
val token = getTokenFromCookie(call.request.cookies)
3027

3128
val enhet: String = call.parameters["enhet"]?.takeIf { validateEnhet(it) }
3229
?: throw IllegalArgumentException("Enhet mangler")
3330

34-
val harTilgangTilEnhet = tilgangskontrollConsumer.harVeilederTilgangTilEnhet(enhet, token)
3531

36-
if (harTilgangTilEnhet) {
37-
val personListe: List<PersonOversiktStatus> = personoversiktStatusService
38-
.hentPersonoversiktStatusTilknyttetEnhet(enhet, token)
39-
.filter { tilgangskontrollConsumer.harVeilederTilgangTilPerson(it.fnr, token) }
32+
when (tilgangskontrollConsumer.harVeilederTilgangTilEnhet(enhet, token, getCallId())) {
33+
true -> {
34+
val personListe: List<PersonOversiktStatus> = personoversiktStatusService
35+
.hentPersonoversiktStatusTilknyttetEnhet(enhet, token)
36+
.filter { tilgangskontrollConsumer.harVeilederTilgangTilPerson(it.fnr, token, getCallId()) }
4037

41-
when {
42-
personListe.isNotEmpty() -> call.respond(personListe)
43-
else -> call.respond(HttpStatusCode.NoContent)
44-
}
38+
when {
39+
personListe.isNotEmpty() -> call.respond(personListe)
40+
else -> call.respond(HttpStatusCode.NoContent)
41+
}
4542

46-
COUNT_PERSONOVERSIKTSTATUS_ENHET_HENTET.inc()
47-
} else {
48-
call.respond(HttpStatusCode.Forbidden)
43+
COUNT_PERSONOVERSIKTSTATUS_ENHET_HENTET.inc()
44+
}
45+
else -> call.respond(HttpStatusCode.Forbidden)
4946
}
5047
} catch (e: IllegalArgumentException) {
51-
log.warn("Kan ikke hente personoversikt for enhet: {}", e.message)
48+
log.warn("Kan ikke hente personoversikt for enhet: {}", e.message, getCallId())
5249
call.respond(HttpStatusCode.BadRequest, e.message ?: "Kan ikke hente personoversikt for enhet")
5350
}
5451
}
55-
}
5652

5753
}
5854
}

0 commit comments

Comments
 (0)