Skip to content

Commit d16ab4a

Browse files
authored
Trunker sporingslogg ved store meldinger (#484)
1 parent b19d560 commit d16ab4a

File tree

2 files changed

+46
-27
lines changed

2 files changed

+46
-27
lines changed

app/main/api/sporingslogg/SporingsloggKafkaClient.kt

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import no.nav.aap.komponenter.json.DefaultJsonMapper
88
import org.apache.kafka.clients.producer.Producer
99
import org.apache.kafka.clients.producer.ProducerRecord
1010
import org.apache.kafka.clients.producer.RecordMetadata
11+
import org.slf4j.LoggerFactory
1112
import java.time.LocalDateTime
1213
import java.util.*
1314

@@ -22,6 +23,8 @@ class SporingsloggKafkaClient(
2223
private fun <V> record(value: V) = ProducerRecord<String, V>(sporingsloggTopic, value)
2324
}
2425

26+
private val log = LoggerFactory.getLogger("SporingsloggKafkaClient")
27+
2528
/**
2629
* Definert her https://confluence.adeo.no/display/KES/Sporingslogg
2730
*
@@ -44,16 +47,25 @@ data class Spor(
4447
utlevertData: Any,
4548
requestObjekt: Any,
4649
konsumentOrgNr: String
47-
) = Spor(
48-
person = personIdent,
49-
mottaker = konsumentOrgNr,
50-
tema = "AAP",
51-
behandlingsGrunnlag = Consumers.getBehandlingsgrunnlag(konsumentOrgNr),
52-
uthentingsTidspunkt = LocalDateTime.now(),
53-
dataForespoersel = DefaultJsonMapper.toJson(requestObjekt),
54-
leverteData = Base64.getEncoder()
55-
.encodeToString(objectMapper.writeValueAsString(utlevertData).encodeToByteArray()),
56-
)
50+
): Spor {
51+
val jsonStringified = objectMapper.writeValueAsString(utlevertData)
52+
val maksEnMillTegn = jsonStringified.take(minOf(jsonStringified.length, 1_000_000))
53+
54+
if (jsonStringified.length > 1_000_000) {
55+
log.warn("Leverte data er større enn 1MB, data er trunkert. Konsument: $konsumentOrgNr.")
56+
}
57+
58+
return Spor(
59+
person = personIdent,
60+
mottaker = konsumentOrgNr,
61+
tema = "AAP",
62+
behandlingsGrunnlag = Consumers.getBehandlingsgrunnlag(konsumentOrgNr),
63+
uthentingsTidspunkt = LocalDateTime.now(),
64+
dataForespoersel = DefaultJsonMapper.toJson(requestObjekt),
65+
leverteData = Base64.getEncoder()
66+
.encodeToString(maksEnMillTegn.encodeToByteArray()),
67+
)
68+
}
5769

5870
private val objectMapper = jacksonObjectMapper()
5971
.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES)

app/test/AfpOffentligServerTest.kt

Lines changed: 24 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import api.afp.VedtakRequest
22
import api.afp.VedtakRequestMedSaksRef
3+
import api.afp.VedtakResponse
34
import api.api
45
import api.api_intern.IApiInternClient
56
import api.sporingslogg.JacksonSerializer
@@ -17,20 +18,20 @@ import io.ktor.client.statement.*
1718
import io.ktor.http.*
1819
import io.ktor.serialization.jackson.*
1920
import io.ktor.server.testing.*
20-
import io.ktor.websocket.Serializer
2121
import no.nav.aap.api.intern.Medium
2222
import no.nav.aap.arenaoppslag.kontrakt.ekstern.EksternVedtakRequest
2323
import no.nav.security.mock.oauth2.MockOAuth2Server
2424
import org.apache.kafka.clients.producer.MockProducer
2525
import org.apache.kafka.common.serialization.StringSerializer
26+
import org.assertj.core.api.Assertions.assertThat
2627
import org.junit.jupiter.api.AfterAll
2728
import org.junit.jupiter.api.Assertions.assertEquals
2829
import org.junit.jupiter.api.BeforeAll
2930
import org.junit.jupiter.api.Test
30-
import java.time.LocalDate
31-
import java.util.*
3231
import org.junit.jupiter.params.ParameterizedTest
3332
import org.junit.jupiter.params.provider.CsvSource
33+
import java.time.LocalDate
34+
import java.util.*
3435

3536
internal class AfpOffentligServerTest {
3637
companion object {
@@ -78,7 +79,7 @@ internal class AfpOffentligServerTest {
7879

7980
@Test
8081
fun testAfpOffentlig() = testApplication {
81-
val apiInternClient = ApiInternKlient()
82+
val apiInternClient = apiInternKlient()
8283

8384
application {
8485
api(
@@ -100,18 +101,19 @@ internal class AfpOffentligServerTest {
100101
)
101102
assertEquals(HttpStatusCode.OK, response.status)
102103
assertEquals(
103-
api.afp.VedtakResponse(perioder = listOf()),
104-
response.body() as api.afp.VedtakResponse
104+
VedtakResponse(perioder = listOf()),
105+
response.body() as VedtakResponse
105106
)
106107
}
107108

108109
@Test
109110
fun `hent ut dummy-vedtak fra tp-ordningen`() = testApplication {
110-
val apiInternClient = ApiInternKlient()
111+
val apiInternClient = apiInternKlient()
111112

113+
val kafkaProducer = mockProducer()
112114
application {
113115
api(
114-
Config(), mockProducer(),
116+
Config(), kafkaProducer,
115117
apiInternClient,
116118
tpRegisterKlient(),
117119
)
@@ -123,19 +125,23 @@ internal class AfpOffentligServerTest {
123125
client, jwt, VedtakRequest(
124126
personidentifikator = "123",
125127
fraOgMedDato = LocalDate.now(),
126-
tilOgMedDato = LocalDate.now(),
128+
tilOgMedDato = LocalDate.now().plusWeeks(1),
127129
), "/tp-samhandling"
128130
)
129131
assertEquals(HttpStatusCode.OK, response.status)
130132
assertEquals(
131-
api.Maksimum(vedtak = listOf()),
132-
response.body() as api.Maksimum
133+
api.Medium(vedtak = listOf()),
134+
response.body() as api.Medium
133135
)
136+
137+
val sporingslogg = kafkaProducer.history()
138+
// Det blir logget i sporingslogg
139+
assertThat(sporingslogg).hasSize(1)
134140
}
135141

136142
@Test
137143
fun `får 404 ved negativt svar fra tp-ordningen`() = testApplication {
138-
val apiInternClient = ApiInternKlient()
144+
val apiInternClient = apiInternKlient()
139145

140146
application {
141147
api(
@@ -168,7 +174,7 @@ internal class AfpOffentligServerTest {
168174
api(
169175
Config(),
170176
mockProducer(),
171-
ApiInternKlient(),
177+
apiInternKlient(),
172178
tpRegisterKlient(),
173179
)
174180
}
@@ -191,7 +197,7 @@ internal class AfpOffentligServerTest {
191197
api(
192198
Config(),
193199
mockProducer(),
194-
ApiInternKlient(),
200+
apiInternKlient(),
195201
tpRegisterKlient(),
196202
)
197203
}
@@ -219,7 +225,7 @@ internal class AfpOffentligServerTest {
219225
api(
220226
Config(),
221227
mockProducer(),
222-
ApiInternKlient(),
228+
apiInternKlient(),
223229
tpRegisterKlient(),
224230
)
225231
}
@@ -247,7 +253,7 @@ internal class AfpOffentligServerTest {
247253

248254
}
249255

250-
private fun ApiInternKlient() = object : IApiInternClient {
256+
private fun apiInternKlient() = object : IApiInternClient {
251257
override fun hentMaksimum(
252258
callId: String,
253259
vedtakRequest: EksternVedtakRequest
@@ -276,7 +282,8 @@ internal class AfpOffentligServerTest {
276282
}
277283
}
278284

279-
private fun mockProducer() = MockProducer(true, null, StringSerializer(), JacksonSerializer<Spor>())
285+
private fun mockProducer() =
286+
MockProducer(true, null, StringSerializer(), JacksonSerializer<Spor>())
280287

281288
private suspend fun sendPostRequest(
282289
client: HttpClient,

0 commit comments

Comments
 (0)