Skip to content

Commit

Permalink
Lagt til audit og metrics for konflikter og ingen endringer
Browse files Browse the repository at this point in the history
  • Loading branch information
naviktthomas committed Nov 27, 2024
1 parent 39bbf1b commit a7d9e00
Show file tree
Hide file tree
Showing 7 changed files with 94 additions and 12 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package no.nav.paw.kafkakeygenerator.repository
import no.nav.paw.kafkakeygenerator.database.KafkaKeysAuditTable
import no.nav.paw.kafkakeygenerator.vo.ArbeidssoekerId
import no.nav.paw.kafkakeygenerator.vo.Audit
import no.nav.paw.kafkakeygenerator.vo.IdentitetStatus
import no.nav.paw.kafkakeygenerator.vo.Identitetsnummer
import org.jetbrains.exposed.sql.Database
import org.jetbrains.exposed.sql.SqlExpressionBuilder.eq
Expand All @@ -14,7 +15,7 @@ class KafkaKeysAuditRepository(
private val database: Database
) {

fun find(identitetsnummer: Identitetsnummer): List<Audit> = transaction(database) {
fun findByIdentitetsnummer(identitetsnummer: Identitetsnummer): List<Audit> = transaction(database) {
KafkaKeysAuditTable.selectAll()
.where(KafkaKeysAuditTable.identitetsnummer eq identitetsnummer.value)
.map {
Expand All @@ -28,6 +29,20 @@ class KafkaKeysAuditRepository(
}
}

fun findByStatus(status: IdentitetStatus): List<Audit> = transaction(database) {
KafkaKeysAuditTable.selectAll()
.where(KafkaKeysAuditTable.status eq status)
.map {
Audit(
identitetsnummer = Identitetsnummer(it[KafkaKeysAuditTable.identitetsnummer]),
tidligereArbeidssoekerId = ArbeidssoekerId(it[KafkaKeysAuditTable.tidligereKafkaKey]),
identitetStatus = it[KafkaKeysAuditTable.status],
detaljer = it[KafkaKeysAuditTable.detaljer],
tidspunkt = it[KafkaKeysAuditTable.tidspunkt]
)
}
}

fun insert(audit: Audit): Int = transaction(database) {
KafkaKeysAuditTable.insert {
it[identitetsnummer] = audit.identitetsnummer.value
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ import no.nav.paw.kafkakeygenerator.utils.countKafkaProcessed
import no.nav.paw.kafkakeygenerator.utils.countKafkaReceived
import no.nav.paw.kafkakeygenerator.utils.countKafkaUpdated
import no.nav.paw.kafkakeygenerator.utils.countKafkaVerified
import no.nav.paw.kafkakeygenerator.utils.kafkaConflictGauge
import no.nav.paw.kafkakeygenerator.vo.ArbeidssoekerId
import no.nav.paw.kafkakeygenerator.vo.Audit
import no.nav.paw.kafkakeygenerator.vo.IdentitetStatus
Expand Down Expand Up @@ -128,13 +129,11 @@ class KafkaConsumerService(
detaljer = "Ingen endringer"
)
kafkaKeysAuditRepository.insert(audit)
} else {
// TODO: Skal vi kjøre noe om fraArbeidssoekerId != eksisterendeArbeidssoekerId

} else if (eksisterendeArbeidssoekerId == fraArbeidssoekerId) {
logger.info("Identitetsnummer oppdateres med annen ArbeidsøkerId")
meterRegistry.countKafkaUpdated()
val count = identitetRepository.update(identitetsnummer, tilArbeidssoekerId)
if (count != 0) {
meterRegistry.countKafkaUpdated()
val audit = Audit(
identitetsnummer = identitetsnummer,
tidligereArbeidssoekerId = eksisterendeArbeidssoekerId,
Expand All @@ -144,7 +143,27 @@ class KafkaConsumerService(
kafkaKeysAuditRepository.insert(audit)
} else {
logger.warn("Oppdatering førte ikke til noen endringer i databasen")
meterRegistry.countKafkaFailed()
val audit = Audit(
identitetsnummer = identitetsnummer,
tidligereArbeidssoekerId = eksisterendeArbeidssoekerId,
identitetStatus = IdentitetStatus.IKKE_OPPDATERT,
detaljer = "Kunne ikke bytte arbeidsøkerId fra ${eksisterendeArbeidssoekerId.value} til ${tilArbeidssoekerId.value}"
)
kafkaKeysAuditRepository.insert(audit)
}
} else {
logger.error("Eksisterende ArbeidssøkerId stemmer ikke med hendelse")
meterRegistry.countKafkaFailed()
val audit = Audit(
identitetsnummer = identitetsnummer,
tidligereArbeidssoekerId = fraArbeidssoekerId,
identitetStatus = IdentitetStatus.KONFLIKT,
detaljer = "Eksisterende arbeidsøkerId ${eksisterendeArbeidssoekerId.value} stemmer ikke med arbeidsøkerId fra hendelse ${fraArbeidssoekerId.value}"
)
kafkaKeysAuditRepository.insert(audit)
val conflicts = kafkaKeysAuditRepository.findByStatus(IdentitetStatus.KONFLIKT)
meterRegistry.kafkaConflictGauge(conflicts.size)
}
}

Expand All @@ -154,9 +173,9 @@ class KafkaConsumerService(
tilArbeidssoekerId: ArbeidssoekerId
) {
logger.info("Identitetsnummer opprettes med eksisterende ArbeidsøkerId")
meterRegistry.countKafkaInserted()
val count = identitetRepository.insert(identitetsnummer, tilArbeidssoekerId)
if (count != 0) {
meterRegistry.countKafkaInserted()
val audit = Audit(
identitetsnummer = identitetsnummer,
tidligereArbeidssoekerId = tilArbeidssoekerId,
Expand All @@ -166,6 +185,14 @@ class KafkaConsumerService(
kafkaKeysAuditRepository.insert(audit)
} else {
logger.warn("Opprettelse førte ikke til noen endringer i databasen")
meterRegistry.countKafkaFailed()
val audit = Audit(
identitetsnummer = identitetsnummer,
tidligereArbeidssoekerId = tilArbeidssoekerId,
identitetStatus = IdentitetStatus.IKKE_OPPRETTET,
detaljer = "Kunne ikke opprette ident for arbeidsøkerId ${tilArbeidssoekerId.value}"
)
kafkaKeysAuditRepository.insert(audit)
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,3 +64,26 @@ fun MeterRegistry.countKafkaVerified() {
fun MeterRegistry.countKafkaFailed() {
genericCounter("kafka", "database", "failed")
}

fun <T : Number> MeterRegistry.genericGauge(
number: T,
source: String,
target: String,
action: String
) {
gauge(
"${METRIC_PREFIX}_antall_hendelser",
Tags.of(
Tag.of("source", source),
Tag.of("target", target),
Tag.of("action", action)
),
number
)
}

fun <T : Number> MeterRegistry.kafkaConflictGauge(
number: T
) {
genericGauge(number, "kafka", "database", "conflict")
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,8 @@ package no.nav.paw.kafkakeygenerator.vo
enum class IdentitetStatus {
OPPRETTET,
OPPDATERT,
VERIFISERT
VERIFISERT,
KONFLIKT,
IKKE_OPPRETTET,
IKKE_OPPDATERT
}
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ class KafkaConsumerServiceTest : FreeSpec({
kafkaConsumerService.handleRecords(hendelser.asConsumerRecords())

val keyResult = kafkaKeysRepository.hent(identitetsnummer)
val auditResult = kafkaKeysAuditRepository.find(identitetsnummer)
val auditResult = kafkaKeysAuditRepository.findByIdentitetsnummer(identitetsnummer)

keyResult.onLeft { it shouldBe Failure("database", FailureCode.DB_NOT_FOUND) }
keyResult.onRight { it shouldBe null }
Expand All @@ -84,7 +84,7 @@ class KafkaConsumerServiceTest : FreeSpec({
}

val keyResult = kafkaKeysRepository.hent(identitetsnummer)
val auditResult = kafkaKeysAuditRepository.find(identitetsnummer)
val auditResult = kafkaKeysAuditRepository.findByIdentitetsnummer(identitetsnummer)

keyResult.onLeft { it shouldBe Failure("database", FailureCode.DB_NOT_FOUND) }
keyResult.onRight { it shouldBe null }
Expand Down Expand Up @@ -115,9 +115,9 @@ class KafkaConsumerServiceTest : FreeSpec({
val keyResult1 = kafkaKeysRepository.hent(identitetsnummer1)
val keyResult2 = kafkaKeysRepository.hent(identitetsnummer2)
val keyResult3 = kafkaKeysRepository.hent(identitetsnummer3)
val auditResult1 = kafkaKeysAuditRepository.find(identitetsnummer1)
val auditResult2 = kafkaKeysAuditRepository.find(identitetsnummer2)
val auditResult3 = kafkaKeysAuditRepository.find(identitetsnummer3)
val auditResult1 = kafkaKeysAuditRepository.findByIdentitetsnummer(identitetsnummer1)
val auditResult2 = kafkaKeysAuditRepository.findByIdentitetsnummer(identitetsnummer2)
val auditResult3 = kafkaKeysAuditRepository.findByIdentitetsnummer(identitetsnummer3)

keyResult1.onLeft { it shouldBe null }
keyResult2.onLeft { it shouldBe null }
Expand Down
12 changes: 12 additions & 0 deletions docker/mocks/config/wiremock/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# Wiremock

## hentIdenter
```json
{
"variables": {
"ident": "01017012345",
"historisk": true
},
"query": "query($ident: ID!, $historisk: Boolean) {\n hentIdenter(ident: $ident, historikk: $historisk) {\n identer {\n ident\n gruppe\n historisk\n }\n }\n}"
}
```
2 changes: 2 additions & 0 deletions docker/mocks/docker-compose.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ services:
container_name: wiremock
ports:
- "8090:8080"
environment:
WIREMOCK_OPTIONS: "--verbose"
volumes:
- ./config/wiremock:/home/wiremock/mappings/
networks:
Expand Down

0 comments on commit a7d9e00

Please sign in to comment.