Skip to content

Commit

Permalink
Merge pull request #1022 from navikt/events
Browse files Browse the repository at this point in the history
Events
  • Loading branch information
flexable777 authored Jan 16, 2024
2 parents a63c349 + 6969c91 commit 6128d7f
Show file tree
Hide file tree
Showing 55 changed files with 1,682 additions and 718 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/manual-deploy-kafka-aiven.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ jobs:
strategy:
matrix:
cluster: [dev, prod]
topic: [behandling-endret.v2, behandling-events.v1, kabal-statistikk.v1, internal-events.v1]
topic: [behandling-endret.v2, behandling-events.v1, kabal-statistikk.v1, internal-behandling-events.v1, internal-identity-events.v1]
steps:
- name: Checkout code
uses: actions/checkout@v3
Expand Down
1 change: 0 additions & 1 deletion build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,6 @@ java.sourceCompatibility = JavaVersion.VERSION_17
repositories {
mavenCentral()
maven("https://github-package-registry-mirror.gc.nav.no/cached/maven-release")
maven("https://packages.confluent.io/maven/")
}

dependencies {
Expand Down
6 changes: 3 additions & 3 deletions deploy/nais.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -58,10 +58,10 @@ spec:
timeout: 1
resources:
limits:
memory: 5000Mi
requests:
cpu: 1000m
memory: 3000Mi
requests:
cpu: 500m
memory: 2048Mi
ingresses:
{{#each ingresses as |ingress|}}
- {{ingress}}
Expand Down
12 changes: 12 additions & 0 deletions kafka-aiven/internal-behandling-events.v1/dev-vars.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
pool: nav-dev
config:
cleanupPolicy: delete
minimumInSyncReplicas: 1
partitions: 1
replication: 3
retentionBytes: -1
retentionHours: 8
acl:
- team: klage
application: klage-kafka-manager
access: read
12 changes: 12 additions & 0 deletions kafka-aiven/internal-behandling-events.v1/prod-vars.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
pool: nav-prod
config:
cleanupPolicy: delete
minimumInSyncReplicas: 1
partitions: 1
replication: 3
retentionBytes: -1
retentionHours: 8
acl:
- team: klage
application: klage-kafka-manager
access: read
24 changes: 24 additions & 0 deletions kafka-aiven/internal-behandling-events.v1/topic.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
apiVersion: kafka.nais.io/v1
kind: Topic
metadata:
name: internal-behandling-events.v1
annotations:
kafka.nais.io/removeDataWhenResourceIsDeleted: "true"
namespace: klage
labels:
team: klage
spec:
pool: {{pool}}
config:
{{#each config as |value key|}}
{{key}}: {{value}}
{{/each}}
acl:
- team: klage
application: kabal-api
access: readwrite
{{#each acl}}
- team: {{team}}
application: {{application}}
access: {{access}}
{{/each}}
2 changes: 2 additions & 0 deletions kafka-aiven/internal-events.v1/topic.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@ apiVersion: kafka.nais.io/v1
kind: Topic
metadata:
name: internal-events.v1
annotations:
kafka.nais.io/removeDataWhenResourceIsDeleted: "true"
namespace: klage
labels:
team: klage
Expand Down
12 changes: 12 additions & 0 deletions kafka-aiven/internal-identity-events.v1/dev-vars.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
pool: nav-dev
config:
cleanupPolicy: delete
minimumInSyncReplicas: 1
partitions: 1
replication: 3
retentionBytes: -1
retentionHours: 8
acl:
- team: klage
application: klage-kafka-manager
access: read
12 changes: 12 additions & 0 deletions kafka-aiven/internal-identity-events.v1/prod-vars.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
pool: nav-prod
config:
cleanupPolicy: delete
minimumInSyncReplicas: 1
partitions: 1
replication: 3
retentionBytes: -1
retentionHours: 24
acl:
- team: klage
application: klage-kafka-manager
access: read
24 changes: 24 additions & 0 deletions kafka-aiven/internal-identity-events.v1/topic.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
apiVersion: kafka.nais.io/v1
kind: Topic
metadata:
name: internal-identity-events.v1
annotations:
kafka.nais.io/removeDataWhenResourceIsDeleted: "true"
namespace: klage
labels:
team: klage
spec:
pool: {{pool}}
config:
{{#each config as |value key|}}
{{key}}: {{value}}
{{/each}}
acl:
- team: klage
application: kabal-api
access: readwrite
{{#each acl}}
- team: {{team}}
application: {{application}}
access: {{access}}
{{/each}}
Original file line number Diff line number Diff line change
@@ -1,27 +1,19 @@
package no.nav.klage.dokument.api.controller


import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
import io.swagger.v3.oas.annotations.tags.Tag
import jakarta.servlet.http.HttpServletRequest
import no.nav.klage.dokument.api.mapper.DokumentInputMapper
import no.nav.klage.dokument.api.mapper.DokumentMapper
import no.nav.klage.dokument.api.view.*
import no.nav.klage.dokument.service.DokumentUnderArbeidService
import no.nav.klage.kodeverk.DokumentType
import no.nav.klage.oppgave.api.view.DokumentUnderArbeidMetadata
import no.nav.klage.oppgave.clients.events.KafkaEventClient
import no.nav.klage.oppgave.config.SecurityConfiguration
import no.nav.klage.oppgave.domain.kafka.Event
import no.nav.klage.oppgave.service.InnloggetSaksbehandlerService
import no.nav.klage.oppgave.util.getLogger
import no.nav.security.token.support.core.api.ProtectedWithClaims
import org.springframework.http.MediaType
import org.springframework.http.ResponseEntity
import org.springframework.http.codec.ServerSentEvent
import org.springframework.web.bind.annotation.*
import reactor.core.publisher.Flux
import java.time.Duration
import java.util.*

@RestController
Expand All @@ -33,7 +25,6 @@ class DokumentUnderArbeidController(
private val innloggetSaksbehandlerService: InnloggetSaksbehandlerService,
private val dokumentMapper: DokumentMapper,
private val dokumentInputMapper: DokumentInputMapper,
private val kafkaEventClient: KafkaEventClient,
) {

companion object {
Expand All @@ -59,17 +50,14 @@ class DokumentUnderArbeidController(
tittel = input.file.originalFilename,
dokumentType = DokumentType.of(input.dokumentTypeId),
)
return dokumentMapper.mapToDokumentView(
dokumentUnderArbeid = dokumentUnderArbeidService.createOpplastetDokumentUnderArbeid(
behandlingId = behandlingId,
dokumentType = DokumentType.of(input.dokumentTypeId),
opplastetFil = opplastetFil,
innloggetIdent = innloggetSaksbehandlerService.getInnloggetIdent(),
tittel = opplastetFil.title,
parentId = input.parentId,
datoMottatt = input.datoMottatt,
),
journalpost = null,
return dokumentUnderArbeidService.createOpplastetDokumentUnderArbeid(
behandlingId = behandlingId,
dokumentType = DokumentType.of(input.dokumentTypeId),
opplastetFil = opplastetFil,
innloggetIdent = innloggetSaksbehandlerService.getInnloggetIdent(),
tittel = opplastetFil.title,
parentId = input.parentId,
datoMottatt = input.datoMottatt,
)
}

Expand All @@ -79,10 +67,10 @@ class DokumentUnderArbeidController(
@RequestBody input: JournalfoerteDokumenterInput
): JournalfoerteDokumenterResponse {
logger.debug("Kall mottatt på addJournalfoerteDokumenterAsVedlegg")
return dokumentUnderArbeidService.handleJournalfoerteDokumenterAsVedlegg(
return dokumentUnderArbeidService.addJournalfoerteDokumenterAsVedlegg(
behandlingId = behandlingId,
journalfoerteDokumenterInput = input,
innloggetIdent = innloggetSaksbehandlerService.getInnloggetIdent()
innloggetIdent = innloggetSaksbehandlerService.getInnloggetIdent(),
)
}

Expand All @@ -91,15 +79,14 @@ class DokumentUnderArbeidController(
@PathVariable("behandlingId") behandlingId: UUID,
@PathVariable("dokumentId") dokumentId: UUID,
@RequestBody input: DokumentTypeInput
): DokumentView {
return dokumentMapper.mapToDokumentView(
dokumentUnderArbeid = dokumentUnderArbeidService.updateDokumentType(
): DocumentModified {
return DocumentModified(
modified = dokumentUnderArbeidService.updateDokumentType(
behandlingId = behandlingId,
dokumentId = dokumentId,
dokumentType = DokumentType.of(input.dokumentTypeId),
innloggetIdent = innloggetSaksbehandlerService.getInnloggetIdent()
),
journalpost = null,
).modified
)
}

Expand All @@ -108,15 +95,14 @@ class DokumentUnderArbeidController(
@PathVariable("behandlingId") behandlingId: UUID,
@PathVariable("dokumentId") dokumentId: UUID,
@RequestBody input: DatoMottattInput
): DokumentView {
return dokumentMapper.mapToDokumentView(
dokumentUnderArbeid = dokumentUnderArbeidService.updateDatoMottatt(
): DocumentModified {
return DocumentModified(
modified = dokumentUnderArbeidService.updateDatoMottatt(
behandlingId = behandlingId,
dokumentId = dokumentId,
datoMottatt = input.datoMottatt,
innloggetIdent = innloggetSaksbehandlerService.getInnloggetIdent()
),
journalpost = null,
).modified
)
}

Expand Down Expand Up @@ -203,7 +189,7 @@ class DokumentUnderArbeidController(
return dokumentUnderArbeidService.kobleEllerFrikobleVedlegg(
behandlingId = behandlingId,
persistentDokumentId = persistentDokumentId,
input = input
optionalParentInput = input
)
} catch (e: Exception) {
logger.error("Feilet under kobling av dokument $persistentDokumentId med ${input.dokumentId}", e)
Expand All @@ -216,16 +202,15 @@ class DokumentUnderArbeidController(
@PathVariable("behandlingId") behandlingId: UUID,
@PathVariable("dokumentid") dokumentId: UUID,
@RequestBody(required = true) input: FerdigstillDokumentInput,
): DokumentView {
): DocumentModified {
val ident = innloggetSaksbehandlerService.getInnloggetIdent()
return dokumentMapper.mapToDokumentView(
dokumentUnderArbeid = dokumentUnderArbeidService.finnOgMarkerFerdigHovedDokument(
return DocumentModified(
modified = dokumentUnderArbeidService.finnOgMarkerFerdigHovedDokument(
behandlingId = behandlingId,
dokumentId = dokumentId,
ident = ident,
innloggetIdent = ident,
brevmottakerIdents = input.brevmottakerIds,
),
journalpost = null
).modified
)
}

Expand All @@ -238,68 +223,20 @@ class DokumentUnderArbeidController(
return dokumentUnderArbeidService.validateIfSmartDokument(dokumentId)
}

//Old event stuff. Clients should read from EventController instead, and this can be deleted.
@GetMapping("/events", produces = [MediaType.TEXT_EVENT_STREAM_VALUE])
fun documentEvents(
@PathVariable("behandlingId") behandlingId: String,
@RequestParam("lastEventIdInput", required = false) lastEventIdInput: UUID?,
request: HttpServletRequest,
): Flux<ServerSentEvent<String>> {
logger.debug("Kall mottatt på documentEvents for behandlingId $behandlingId")

//https://docs.spring.io/spring-framework/docs/current/reference/html/web.html#mvc-ann-async-disconnects
val heartbeatStream: Flux<ServerSentEvent<String>> = Flux.interval(Duration.ofSeconds(10))
.takeWhile { true }
.map { tick -> toHeartBeatServerSentEvent(tick) }

return kafkaEventClient.getEventPublisher()
.mapNotNull { event -> jsonToEvent(event.data()) }
.filter { Objects.nonNull(it) }
.filter { it.behandlingId == behandlingId && it.name == "finished" }
.mapNotNull { eventToServerSentEvent(it) }
.mergeWith(heartbeatStream)
}

private fun toHeartBeatServerSentEvent(tick: Long): ServerSentEvent<String> {
return eventToServerSentEvent(
Event(
behandlingId = "",
id = "",
name = "heartbeat-event-$tick",
data = ""
)
)
}

private fun eventToServerSentEvent(event: Event): ServerSentEvent<String> {
return ServerSentEvent.builder<String>()
.id(event.id)
.event(event.name)
.data(event.data)
.build()
}

private fun jsonToEvent(json: String?): Event {
val event = jacksonObjectMapper().readValue(json, Event::class.java)
logger.debug("Received event from Kafka: {}", event)
return event
}

@PutMapping("/{dokumentid}/tittel")
fun changeDocumentTitle(
@PathVariable("behandlingId") behandlingId: UUID,
@PathVariable("dokumentid") dokumentId: UUID,
@RequestBody input: DokumentTitleInput,
): DokumentView {
): DocumentModified {
val ident = innloggetSaksbehandlerService.getInnloggetIdent()
return dokumentMapper.mapToDokumentView(
dokumentUnderArbeid = dokumentUnderArbeidService.updateDokumentTitle(
return DocumentModified(
modified = dokumentUnderArbeidService.updateDokumentTitle(
behandlingId = behandlingId,
dokumentId = dokumentId,
dokumentTitle = input.title,
innloggetIdent = ident,
),
journalpost = null
).modified
)
}
}
Loading

0 comments on commit 6128d7f

Please sign in to comment.