Skip to content

Commit

Permalink
Sletter ubrukt route, refaktorerer litt og oppdatere readmes.
Browse files Browse the repository at this point in the history
  • Loading branch information
Richard Borge committed Feb 12, 2024
1 parent b5fd70a commit 35927c0
Show file tree
Hide file tree
Showing 10 changed files with 99 additions and 162 deletions.
2 changes: 1 addition & 1 deletion .nais/app-dev.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ spec:
enabled: true
maskinporten:
enabled: true
scopes:
scopes: # Når du legger til en konsument her, husk å legge inn i Consumers-object
exposes:
- name: "afpprivat.read"
enabled: true
Expand Down
2 changes: 1 addition & 1 deletion .nais/app-prod.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ spec:
enabled: true
maskinporten:
enabled: true
scopes:
scopes: # Når du legger til en konsument her, husk å legge inn i Consumers-object
exposes:
- name: "afpprivat.read"
enabled: true
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ Når Kelvin er ferdig vil data begynne å flyte derfra, men tanken er at dette i
## URL som benyttes
Base-URL for AAP-API er:
- For test: https://aap-api.ekstern.dev.nav.no/
- For prod: Ikke i prod enda
- For prod: https://aap-api.nav.no/

## Beskrivelse av uttrekk
Beskrivelse av uttrekk kan finnes på vår [Swagger dokumentasjon](https://aap-api.ekstern.dev.nav.no/swagger).
Expand Down
2 changes: 1 addition & 1 deletion app/main/api/App.kt
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,6 @@ fun Application.api() {
actuator(prometheus)
swaggerUI(path = "swagger", swaggerFile = "openapi.yaml")

afp(config, arenaRestClient, sporingsloggKafkaClient, prometheus)
afp(config.sporingslogg.enabled, arenaRestClient, sporingsloggKafkaClient, prometheus)
}
}
64 changes: 50 additions & 14 deletions app/main/api/afp/Routes.kt
Original file line number Diff line number Diff line change
Expand Up @@ -4,44 +4,80 @@ import api.arena.ArenaoppslagRestClient
import api.auth.MASKINPORTEN_AFP_OFFENTLIG
import api.auth.MASKINPORTEN_AFP_PRIVAT
import api.sporingslogg.SporingsloggKafkaClient
import api.util.Config
import api.auth.hentConsumerId
import api.sporingslogg.Spor
import api.sporingslogg.SporingsloggException
import api.util.Consumers.getConsumerTag
import api.util.httpCallCounter
import api.util.httpFailedCallCounter
import api.util.sporingsloggFailCounter
import io.ktor.http.*
import io.ktor.server.application.*
import io.ktor.server.auth.*
import io.ktor.server.request.*
import io.ktor.server.response.*

import io.ktor.server.routing.*
import io.micrometer.prometheus.PrometheusMeterRegistry
import org.slf4j.LoggerFactory
import java.lang.Exception
import java.util.*

private val secureLog = LoggerFactory.getLogger("secureLog")
private val logger = LoggerFactory.getLogger("App")

fun Route.afp(
config: Config,
brukSporingslogg: Boolean,
arenaoppslagRestClient: ArenaoppslagRestClient,
sporingsloggClient: SporingsloggKafkaClient,
prometheus: PrometheusMeterRegistry
) {
route("/afp") {
authenticate(MASKINPORTEN_AFP_PRIVAT) {
post("/fellesordningen") {
Afp.doWorkFellesOrdningen(call, config, arenaoppslagRestClient, sporingsloggClient, prometheus)
hentPerioder(call, brukSporingslogg, arenaoppslagRestClient, sporingsloggClient, prometheus)
}
}

authenticate(MASKINPORTEN_AFP_OFFENTLIG) {
post("/offentlig") {
Afp.doWorkOffentlig(
call,
config,
arenaoppslagRestClient,
sporingsloggClient,
prometheus,
orgnr = call.hentConsumerId()
)
hentPerioder(call, brukSporingslogg, arenaoppslagRestClient, sporingsloggClient, prometheus)
}
}
}
}

private suspend fun hentPerioder(
call: ApplicationCall,
brukSporingslogg: Boolean,
arenaoppslagRestClient: ArenaoppslagRestClient,
sporingsloggClient: SporingsloggKafkaClient,
prometheus: PrometheusMeterRegistry
) {
val orgnr = call.hentConsumerId()
val consumerTag = getConsumerTag(orgnr)

authenticate(MASKINPORTEN_AFP_PRIVAT) {
post("/fellesordning-for-afp") {
Afp.doWorkFellesOrdningen(call, config, arenaoppslagRestClient, sporingsloggClient, prometheus)
prometheus.httpCallCounter(consumerTag, call.request.path()).increment()
val body = call.receive<VedtakRequest>()
val callId = requireNotNull(call.request.header("x-callid")) { "x-callid ikke satt" }
runCatching {
arenaoppslagRestClient.hentVedtakFellesordning(UUID.fromString(callId), body)
}.onFailure { ex ->
prometheus.httpFailedCallCounter(consumerTag, call.request.path()).increment()
secureLog.error("Klarte ikke hente vedtak fra Arena", ex)
throw ex
}.onSuccess { res ->
if (brukSporingslogg) {
try {
sporingsloggClient.send(Spor.opprett(body.personidentifikator, res, orgnr))
call.respond(res)
} catch (e: Exception) {
prometheus.sporingsloggFailCounter(consumerTag).increment()
throw SporingsloggException(e)
}
} else {
logger.warn("Sporingslogg er skrudd av, returnerer data uten å sende til kafka")
call.respond(res)
}
}
}
93 changes: 0 additions & 93 deletions app/main/api/afp/Worker.kt

This file was deleted.

2 changes: 2 additions & 0 deletions app/main/api/sporingslogg/SporingsloggKafkaClient.kt
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@ import org.apache.kafka.clients.producer.RecordMetadata
import java.time.LocalDateTime
import java.util.*

class SporingsloggException(cause: Throwable) : Exception(cause)

class SporingsloggKafkaClient(kafkaConf: KafkaConfig, private val sporingConf: SporingsloggConfig) {
private val producer = KafkaFactory.createProducer<Spor>("aap-api-producer-${sporingConf.topic}", kafkaConf)

Expand Down
19 changes: 19 additions & 0 deletions app/main/api/util/Consumers.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package api.util

import org.slf4j.LoggerFactory

private val secureLog = LoggerFactory.getLogger("secureLog")

object Consumers {
private const val NAV_ORGNR = "889640782"
private const val AFP_FELLERORDNINGEN_ORGNR = "987414502"

private val consumerTags = mapOf(
NAV_ORGNR to "NAV",
AFP_FELLERORDNINGEN_ORGNR to "fellesordningen"
)

fun getConsumerTag(orgnr: String) = consumerTags[orgnr] ?: orgnr.also {
secureLog.warn("Prøver å lage prometheus tag for $orgnr, men den er ikke mappet opp.")
}
}
8 changes: 8 additions & 0 deletions app/main/api/util/ErrorHandling.kt
Original file line number Diff line number Diff line change
@@ -1,13 +1,21 @@
package api.util

import api.auth.SamtykkeIkkeGittException
import api.sporingslogg.SporingsloggException
import io.ktor.http.*
import io.ktor.server.plugins.statuspages.*
import io.ktor.server.request.*
import io.ktor.server.response.*
import org.slf4j.Logger

fun StatusPagesConfig.feilhåndtering(logger: Logger) {
exception<SporingsloggException> { call, cause ->
logger.error("Klarte ikke produsere til kafka sporingslogg og kan derfor ikke returnere data", cause)
call.respondText(
text = "Feilet sporing av oppslag, kan derfor ikke returnere data. Feilen er på vår side, prøv igjen senere.",
status = HttpStatusCode.ServiceUnavailable
)
}
exception<SamtykkeIkkeGittException> { call, cause ->
logger.warn("Samtykke ikke gitt", cause)
call.respondText(text = "Samtykke ikke gitt", status = HttpStatusCode.Forbidden)
Expand Down
Loading

0 comments on commit 35927c0

Please sign in to comment.