Skip to content

Commit

Permalink
egen brev river app (#5859)
Browse files Browse the repository at this point in the history
* Init

* Oppdater yamls

* kobling mellom brev kafka og brev vanlig

* Tmp commit muligens noen forbedringer rundt BrevDataRedigerbarRequest i opprettjournalfoerogdistribuer først

* Implementere ruter mot brev-api og bytte til client credentials

* Legg til ny avsender req obj

* Oppdater vedtaksbrevjournalføring route

* EY-4499 Hente grunnlag i brev-kafka

* Fjern kommer i brev model

* Ta i mot brevid rest

* EY-4499 Håndtere om brev er distribuert

* Vi forventer suksess så bruk default exceptionhandler for ktor og logg riktig feilkode

* Glemte return

* Ta inn distribusjonstype

* Map avdøde

* EY-4499 Bruk brev-api sin offsett

* Legg inn access i egen per

* Skru av rivers initielt

* For safety delete prod yaml

* Legg til deploy fil

* Rette workflow fil

* Riktig name på workflowen

* Fjern unødvendig tilgangsting i dev yaml

* Eksplisitt håndtering av nullresponse

* Døpe om brev distribusjon dto

* Legg inn tilgang mot grunnlag igjen.....

* Legg til topic for dev og fjern deploy ved main for å kunne styre dette selv

* Kommentar
  • Loading branch information
sebassonav authored Oct 4, 2024
1 parent c1cc69e commit 04a81c0
Show file tree
Hide file tree
Showing 23 changed files with 886 additions and 14 deletions.
47 changes: 47 additions & 0 deletions .github/workflows/app-etterlatte-brev-kafka.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
name: etterlatte-brev-kafka

on:
workflow_dispatch: # Allow manually triggered workflow run
inputs:
deploy-prod:
description: 'Deploy til produksjon'
required: false
default: 'false'
type: choice
options:
- true
- false
pull_request: # TODO: her mangler vi push som vanligvis deployer ved merge til main
branches:
- main
paths:
- apps/etterlatte-brev-kafka/**
- "!apps/etterlatte-brev-kafka/.nais/*"
- libs/saksbehandling-common/**
- libs/etterlatte-ktor/**
- libs/etterlatte-behandling-model/**
- libs/etterlatte-beregning-model/**
- libs/etterlatte-database/**
- libs/etterlatte-migrering-model/**
- libs/etterlatte-trygdetid-model/**
- libs/etterlatte-vedtaksvurdering-model/**
- libs/etterlatte-vilkaarsvurdering-model/**
- libs/etterlatte-brev-model/**
- libs/etterlatte-oppgave-model/**
- libs/etterlatte-tilbakekreving-model/**
- gradle/libs.versions.toml

permissions:
contents: write
id-token: write

jobs:
test:
if: github.event_name == 'pull_request'
uses: ./.github/workflows/.test.yaml
secrets: inherit

build-and-deploy:
if: github.event_name != 'pull_request'
uses: ./.github/workflows/.build-and-deploy.yaml
secrets: inherit
1 change: 1 addition & 0 deletions apps/etterlatte-brev-api/.nais/dev.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -158,6 +158,7 @@ spec:
- application: etterlatte-saksbehandling-ui
- application: etterlatte-behandling
- application: etterlatte-testdata-behandler
- application: etterlatte-brev-kafka
- application: azure-token-generator # https://docs.nais.io/auth/entra-id/how-to/generate/?h=token+azure
namespace: aura
cluster: dev-gcp
1 change: 1 addition & 0 deletions apps/etterlatte-brev-api/.nais/prod.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -165,3 +165,4 @@ spec:
rules:
- application: etterlatte-saksbehandling-ui
- application: etterlatte-behandling
- application: etterlatte-brev-kafka
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import no.nav.etterlatte.brev.behandling.opprettAvsenderRequest
import no.nav.etterlatte.brev.db.BrevRepository
import no.nav.etterlatte.brev.distribusjon.Brevdistribuerer
import no.nav.etterlatte.brev.model.Brev
import no.nav.etterlatte.brev.model.BrevErdistribuert
import no.nav.etterlatte.brev.model.BrevDistribusjonResponse
import no.nav.etterlatte.brev.model.BrevID
import no.nav.etterlatte.brev.model.BrevInnholdVedlegg
import no.nav.etterlatte.brev.model.BrevProsessType
Expand All @@ -20,7 +20,6 @@ import no.nav.etterlatte.libs.common.logging.sikkerlogger
import no.nav.etterlatte.libs.common.sak.SakId
import no.nav.etterlatte.libs.common.toJson
import no.nav.etterlatte.libs.ktor.token.BrukerTokenInfo
import no.nav.etterlatte.rapidsandrivers.sakId
import org.slf4j.LoggerFactory

class BrevService(
Expand All @@ -37,7 +36,7 @@ class BrevService(
suspend fun opprettJournalfoerOgDistribuerRiver(
bruker: BrukerTokenInfo,
req: OpprettJournalfoerOgDistribuerRequest,
): BrevErdistribuert {
): BrevDistribusjonResponse {
val (brev, enhetsnummer) =
brevoppretter.opprettBrevSomHarInnhold(
sakId = req.sakId,
Expand Down Expand Up @@ -70,11 +69,11 @@ class BrevService(
distribuerer.distribuer(brevId)

logger.info("Brevid: $brevId er distribuert")
return return BrevErdistribuert(brevId, true)
return BrevDistribusjonResponse(brevId, true)
} catch (e: Exception) {
logger.error("Feil opp sto under ferdigstill/journalfør/distribuer av brevID=${brev.id}...", e)
oppgaveService.opprettOppgaveForFeiletBrev(req.sakId, brevId, bruker)
return BrevErdistribuert(brevId, false)
return BrevDistribusjonResponse(brevId, false)
}
}

Expand Down
74 changes: 74 additions & 0 deletions apps/etterlatte-brev-kafka/.nais/dev.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
apiVersion: "nais.io/v1alpha1"
kind: "Application"
metadata:
name: etterlatte-brev-kafka
namespace: etterlatte
labels:
team: etterlatte
annotations:
reloader.stakater.com/match: "true"
spec:
image: "{{image}}"
port: 8080
liveness:
initialDelay: 5
path: /health/isalive
readiness:
initialDelay: 5
path: /health/isready
prometheus:
enabled: true
path: /metrics
observability:
autoInstrumentation:
enabled: true
runtime: java
logging:
destinations:
- id: elastic
- id: loki
secureLogs:
enabled: true
azure:
application:
enabled: true
kafka:
pool: nav-dev
resources:
limits:
memory: 640Mi
requests:
cpu: 20m
memory: 512Mi
replicas:
scalingStrategy:
cpu:
thresholdPercentage: 90
max: 1
min: 1
env:
- name: KAFKA_RAPID_TOPIC
value: etterlatte.dodsmelding
- name: BREV_API_URL
value: http://etterlatte-brev-api
- name: BREV_API_AZURE_SCOPE
value: api://dev-gcp.etterlatte.etterlatte-brev-api/.default
- name: GRUNNLAG_URL
value: http://etterlatte-grunnlag
- name: GRUNNLAG_AZURE_SCOPE
value: api://dev-gcp.etterlatte.etterlatte-grunnlag/.default
envFrom:
- secret: my-application-unleash-api-token
accessPolicy:
outbound:
rules:
- application: etterlatte-brev-api
- application: etterlatte-grunnlag
external:
- host: etterlatte-unleash-api.nav.cloud.nais.io
inbound:
rules:
- application: etterlatte-testdata-behandler
- application: azure-token-generator # https://docs.nais.io/auth/entra-id/how-to/generate/?h=token+azure
namespace: aura
cluster: dev-gcp
11 changes: 11 additions & 0 deletions apps/etterlatte-brev-kafka/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
plugins {
id("etterlatte.common")
}

dependencies {
implementation(project(":libs:saksbehandling-common"))
implementation(project(":libs:rapidsandrivers-extras"))
implementation(project(":libs:etterlatte-ktor"))
implementation(project(":libs:etterlatte-vedtaksvurdering-model"))
implementation(project(":libs:etterlatte-brev-model"))
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
package no.nav.etterlatte

import com.fasterxml.jackson.databind.SerializationFeature
import com.typesafe.config.ConfigFactory
import io.ktor.client.HttpClient
import no.nav.etterlatte.klienter.BrevapiKlient
import no.nav.etterlatte.klienter.GrunnlagKlient
import no.nav.etterlatte.libs.common.appIsInGCP
import no.nav.etterlatte.libs.ktor.httpClientClientCredentials
import no.nav.etterlatte.rapidsandrivers.configFromEnvironment
import no.nav.etterlatte.rivers.DistribuerBrevRiver
import no.nav.etterlatte.rivers.JournalfoerVedtaksbrevRiver
import no.nav.etterlatte.rivers.OpprettJournalfoerOgDistribuerRiver
import no.nav.etterlatte.rivers.SamordningsnotatRiver
import no.nav.etterlatte.rivers.VedtaksbrevUnderkjentRiver
import no.nav.helse.rapids_rivers.RapidsConnection
import rapidsandrivers.initRogR

fun main() {
ApplicationBuilder()
}

class ApplicationBuilder {
private val config = ConfigFactory.load()
private val brevhttpKlient: HttpClient by lazy {
httpClientClientCredentials(
azureAppClientId = config.getString("azure.app.client.id"),
azureAppJwk = config.getString("azure.app.jwk"),
azureAppWellKnownUrl = config.getString("azure.app.well.known.url"),
azureAppScope = config.getString("brevapi.azure.scope"),
ekstraJacksoninnstillinger = { it.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS) },
)
}

private val grunnlagHttpKlient: HttpClient by lazy {
httpClientClientCredentials(
azureAppClientId = config.getString("azure.app.client.id"),
azureAppJwk = config.getString("azure.app.jwk"),
azureAppWellKnownUrl = config.getString("azure.app.well.known.url"),
azureAppScope = config.getString("grunnlag.azure.scope"),
ekstraJacksoninnstillinger = { it.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS) },
)
}
private val brevapiKlient = BrevapiKlient(config, brevhttpKlient)
private val grunnlagKlient = GrunnlagKlient(config, grunnlagHttpKlient)
private val connection =
initRogR(
applikasjonsnavn = "brev-kafka",
kafkaConsumerGroupName = "etterlattebrevapi", // TODO; bruke samme offset som brev-api appen
configFromEnvironment = { configFromEnvironment(it) },
) { rapidsConnection, _ ->

rapidsConnection.register(
object : RapidsConnection.StatusListener {
override fun onStartup(rapidsConnection: RapidsConnection) {
}
},
)
// TODO: start med å merge inn uten å aktivere rivers
if (!appIsInGCP()) {
OpprettJournalfoerOgDistribuerRiver(
brevapiKlient,
grunnlagKlient,
rapidsConnection,
)
JournalfoerVedtaksbrevRiver(rapidsConnection, brevapiKlient)
VedtaksbrevUnderkjentRiver(rapidsConnection, brevapiKlient)
DistribuerBrevRiver(rapidsConnection, brevapiKlient)
SamordningsnotatRiver(rapidsConnection, brevapiKlient)
}
}
}
Loading

0 comments on commit 04a81c0

Please sign in to comment.