Skip to content

Commit

Permalink
Merge pull request #77 from navikt/dev/kafka-key-generator-id-merge
Browse files Browse the repository at this point in the history
Dev/kafka key generator id merge
  • Loading branch information
naviktthomas authored Dec 3, 2024
2 parents 68a3c97 + ac686e7 commit 8f36e1d
Show file tree
Hide file tree
Showing 100 changed files with 2,117 additions and 841 deletions.
21 changes: 21 additions & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
[*]
charset = utf-8
end_of_line = lf
indent_size = 4
indent_style = space
max_line_length = 120
tab_width = 4
ij_continuation_indent_size = 8
ij_smart_tabs = false

[*.java]
ij_java_imports_layout = *,|,javax.**,java.**,|,$*
ij_java_class_count_to_use_import_on_demand = 9999
ij_java_names_count_to_use_import_on_demand = 9999
ij_java_packages_to_use_import_on_demand = java.awt.*,javax.swing.*

[{*.kt,*.kts}]
ij_kotlin_imports_layout = *,java.**,javax.**,kotlin.**,^
ij_kotlin_name_count_to_use_star_import = 9999
ij_kotlin_name_count_to_use_star_import_for_members = 9999
ij_kotlin_packages_to_use_import_on_demand = java.util.*,kotlinx.android.synthetic.*,io.ktor.*
106 changes: 45 additions & 61 deletions apps/kafka-key-generator/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,88 +10,76 @@ https://paw-kafka-key-generator.intern.dev.nav.no/docs

Øvrige teknologier, rammeverk og biblioteker som er blitt tatt i bruk:

- [**Kotlin**](https://kotlinlang.org/)
- [**Ktor**](https://ktor.io/)
- [**PostgreSQL**](https://www.postgresql.org/)
- [**Flyway**](https://flywaydb.org/)
- [**Gradle**](https://gradle.org/)
- [**Kotlin**](https://kotlinlang.org)
- [**Ktor**](https://ktor.io)
- [**PostgreSQL**](https://www.postgresql.org)
- [**Flyway**](https://flywaydb.org)
- [**Kafka**](https://kafka.apache.org)
- [**Gradle**](https://gradle.org)

## Dev oppsett

Eksempel:
### JDK 21

```sh
$ curl -XPOST https://paw-kafka-key-generator.intern.dev.nav.no/api/v1/hentEllerOpprett -H 'Authorization: Bearer <access_token>' -d '{"ident": "2072234860133"}'
```

## Lokalt oppsett
Authentisering fungerer ikke lokalt, så det er ikke mulig å teste lokalt på nåværende tidspunkt.
Lokalt kjører løsning mot statisk PDL data som innehlder 2 personer. Data ligger under src/test i no.nav.paw.kafkakeygenerator.testdata.kt.

Under er det satt opp et par ting som må på plass for at applikasjonen og databasen skal fungere.


### JDK 17

JDK 17 må være installert. Enkleste måten å installere riktig versjon av Java er ved å
JDK 21 må være installert. Enkleste måten å installere riktig versjon av Java er ved å
bruke [sdkman](https://sdkman.io/install).

### Docker

`docker` og `docker-compose` må være installert. For å
installere disse kan du følge oppskriften på [Dockers](https://www.docker.com/) offisielle side. For installering på Mac
trykk [her](https://docs.docker.com/desktop/mac/install/) eller
trykk [her](https://docs.docker.com/engine/install/ubuntu/) for Ubuntu.

Man må også installere `docker-compose` som en separat greie
for [Ubuntu](https://docs.docker.com/compose/install/#install-compose-on-linux-systems). For Mac følger dette med når
man installerer Docker Desktop.

Kjør opp docker containerne med
[Docker](https://docs.docker.com) og [Docker Compose](https://docs.docker.com/compose) må være installert.

```sh
docker-compose up -d
#### Start PostgreSQL database
```shell
docker compose -f ../../docker/postgres/docker-compose.yaml up -d
```

Se at alle kjører med

```sh
docker ps
#### Start Kafka broker
```shell
docker compose -f ../../docker/kafka/docker-compose.yaml up -d
```

To containere skal kjøre: postgres og mock-oauth2-server.
#### Start mocks
Benytter mock [OAuth2 server](https://github.com/navikt/mock-oauth2-server) fra NAV Security og mock PDL vha [Wiremock](https://wiremock.org).
```shell
docker compose -f ../../docker/mocks/docker-compose.yaml up -d
```

### App

Start app med `./gradlew runTestApp` eller kjør main metoden i 'src/test/kotlin/no/nav/paw/kafkakeygenerator/run_test_app.kt' via Intellij.

### Autentisering
#### Gradle
Start appen vha Gradle sin [application plugin](https://docs.gradle.org/current/userguide/application_plugin.html).
```shell
../../gradlew :apps:kafka-key-generator:run
```

For å kalle APIet lokalt må man være autentisert med et Bearer token.
Alternativt test-oppsett.
```shell
../../gradlew :apps:kafka-key-generator:runTestApp
```

Vi benytter mock-ouath2-server til å utstede tokens på lokal maskin. Følgende steg kan benyttes til å generere opp et token:
#### IntelliJ
Start appen ved å kjøre `main` funksjonen i `./src/main/kotlin/no/nav/paw/kafkakeygenerator/AppStarter.kt`.

1. Sørg for at containeren for mock-oauth2-server kjører lokalt (docker-compose up -d)
2. Naviger til [mock-oauth2-server sin side for debugging av tokens](http://localhost:8081/default/debugger)
3. Generer et token
4. Trykk på knappen Get a token
5. Skriv inn noe random i "Enter any user/subject" og pid i optional claims, f.eks.
Alternativt test-oppsett i `./src/test/kotlin/no/nav/paw/kafkakeygenerator/TestAppStarter.kt`.

```json
{ "acr": "Level4", "pid": "18908396568" }
### Autentisering
Applikasjonen er sikret som en OAuth2 Resource Server. For å kalle APIet må man sende med et OAuth2 Bearer Token.

For å hente token fra `mock-oauth2-server` gjør følgende request med `curl`:
```shell
ACCESS_TOKEN="$(curl -X POST http://localhost:8081/azure/token \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "grant_type=client_credentials&client_id=paw-kafka-key-generator&client_secret=abcd1234&scope=openid%20pid" \
| jq .access_token)"
```

6. Trykk Sign in
7. Kopier verdien for access_token og benytt denne som Bearer i Authorization-header

8. Eksempel:
### Gjøre kall

```sh
$ curl -XPOST http://localhost:8080/api/v1/hentEllerOpprett -H 'Authorization: Bearer access_token' -d '{"ident": "2072234860133"}'
$ curl -X POST http://localhost:8080/api/v1/hentEllerOpprett -H "Authorization: Bearer ${ACCESS_TOKEN}" -d '{"ident": "01017012345"}'
```

eller benytt en REST-klient (f.eks. [insomnia](https://insomnia.rest/) eller [Postman](https://www.postman.com/product/rest-client/))

Kan også benytte en grafisk REST-klient (f.eks. [insomnia](https://insomnia.rest/) eller [Postman](https://www.postman.com/product/rest-client/))

## Deploye kun til dev

Expand All @@ -110,12 +98,8 @@ git branch -m dev/<opprinnlig-branch>

# Henvendelser

Spørsmål knyttet til koden eller prosjektet kan stilles via issues her på github.
Spørsmål knyttet til koden eller prosjektet kan stilles via issues her på GitHub.

## For NAV-ansatte

Interne henvendelser kan sendes via Slack i kanalen [#team-paw-dev](https://nav-it.slack.com/archives/CLTFAEW75)

# Lisens

[MIT](LICENSE)
9 changes: 6 additions & 3 deletions apps/kafka-key-generator/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,11 @@ val jvmMajorVersion: String by project
dependencies {
// PAW
implementation(project(":lib:hoplite-config"))
implementation(project(":lib:error-handling"))
implementation(project(":lib:http-client-utils"))
implementation(project(":lib:pdl-client"))
implementation(project(":lib:kafka"))
implementation(project(":domain:interne-hendelser"))

// NAV
implementation(libs.nav.common.log)
Expand All @@ -39,7 +43,6 @@ dependencies {
implementation(libs.ktor.client.contentNegotiation)
implementation(libs.ktor.client.core)
implementation(libs.ktor.client.cio)
implementation(libs.ktor.client.okhttp)
implementation(libs.ktor.client.logging)

// Micrometer & OTEL
Expand Down Expand Up @@ -81,7 +84,7 @@ java {
}

application {
mainClass.set("no.nav.paw.kafkakeygenerator.AppStarterKt")
mainClass.set("no.nav.paw.kafkakeygenerator.ApplicationKt")
}

tasks.withType(Jar::class) {
Expand Down Expand Up @@ -113,6 +116,6 @@ tasks.named<Test>("test") {
tasks.create("runTestApp", JavaExec::class) {
classpath = sourceSets["test"].runtimeClasspath +
sourceSets["main"].runtimeClasspath
mainClass = "no.nav.paw.kafkakeygenerator.Run_test_appKt"
mainClass = "no.nav.paw.kafkakeygenerator.TestApplicationKt"
args = listOf()
}
46 changes: 0 additions & 46 deletions apps/kafka-key-generator/docker-compose.yaml

This file was deleted.

13 changes: 13 additions & 0 deletions apps/kafka-key-generator/nais/nais-dev.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,17 @@ metadata:
spec:
image: {{ image }}
port: 8080
env:
- name: PDL_URL
value: "https://pdl-api.dev-fss-pub.nais.io/graphql"
- name: PDL_SCOPE
value: "api://dev-fss.pdl.pdl-api/.default"
- name: PDL_TEMA
value: "OPP"
- name: KAFKA_CONSUMER_GROUP_ID
value: "paw-kafka-key-generator-v1"
- name: KAFKA_TOPIC_PAW_ARBEIDSSOKER_HENDELSESLOGG
value: "paw.arbeidssoker-hendelseslogg-v1"
ingresses:
- https://record-key-arbeidssoekerregisteret.intern.dev.nav.no/api/v1/record-key
- https://record-key-arbeidssoekerregisteret.intern.dev.nav.no/docs/record-key
Expand All @@ -33,6 +44,8 @@ spec:
autoInstrumentation:
enabled: true
runtime: java
kafka:
pool: nav-dev
gcp:
sqlInstances:
- type: POSTGRES_14
Expand Down
13 changes: 13 additions & 0 deletions apps/kafka-key-generator/nais/nais-prod.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,17 @@ metadata:
spec:
image: {{ image }}
port: 8080
env:
- name: PDL_URL
value: "https://pdl-api.prod-fss-pub.nais.io/graphql"
- name: PDL_SCOPE
value: "api://prod-fss.pdl.pdl-api/.default"
- name: PDL_TEMA
value: "OPP"
- name: KAFKA_CONSUMER_GROUP_ID
value: "paw-kafka-key-generator-v1"
- name: KAFKA_TOPIC_PAW_ARBEIDSSOKER_HENDELSESLOGG
value: "paw.arbeidssoker-hendelseslogg-v1"
replicas:
min: 2
max: 2
Expand All @@ -30,6 +41,8 @@ spec:
autoInstrumentation:
enabled: true
runtime: java
kafka:
pool: nav-prod
gcp:
sqlInstances:
- type: POSTGRES_14
Expand Down

This file was deleted.

Loading

0 comments on commit 8f36e1d

Please sign in to comment.