Skip to content

Commit

Permalink
Støtte punsj (#128)
Browse files Browse the repository at this point in the history
* Oppdater dependabot.yml

* Logo!!

* Enabler køer

* Enabler køer

* Rydder i yml filer
  • Loading branch information
jantb authored Oct 13, 2020
1 parent 90e104a commit e679c4d
Show file tree
Hide file tree
Showing 16 changed files with 415 additions and 34 deletions.
Binary file added Los.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,3 +10,5 @@ Start k9-verdikjede. Er avhengig av vtp, postgresql og nav-auth-mock.
Start klassen `no.nav.k9.K9LosDev` med parameter

`-Djavax.net.ssl.trustStore=/Users/.../.modig/trustStore.jks -Djavax.net.ssl.keyStore=/Users/.../.modig/keyStore.jks -Djavax.net.ssl.trustStorePassword=changeit -Djavax.net.ssl.keyStorePassword=devillokeystore1234'`

![logo](Los.png)
3 changes: 2 additions & 1 deletion nais/dev-fss.yml
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,8 @@ spec:
value: b27apvl00045.preprod.local:8443,b27apvl00046.preprod.local:8443,b27apvl00047.preprod.local:8443
- name: KAFKA_AKSJONSPUNKTHENDELSE_TOPIC
value: privat-k9-aksjonspunkthendelse
- name: KAFKA_PUNSJAKSJONSPUNKTHENDELSE_TOPIC
value: privat-k9punsj-aksjonspunkthendelse
- name: KAFKA_AKSJONSPUNKTHENDELSE_TILBAKE_TOPIC
value: privat-tilbakekreving-k9loshendelse-v1
- name: KAFKA_SAKOGBEHANDLING_TOPIC
Expand All @@ -94,7 +96,6 @@ spec:
# ABAC
- name: ABAC_PDP_ENDPOINT_URL
value: https://abac-k9.nais.preprod.local/application/authorize
# https://wasapp-q1.adeo.no/asm-pdp/authorize

- name: APPDYNAMICS_CONTROLLER_HOST_NAME
value: appdynamics.adeo.no
Expand Down
13 changes: 7 additions & 6 deletions nais/prod-fss.yml
Original file line number Diff line number Diff line change
Expand Up @@ -72,17 +72,19 @@ spec:
- name: COOKIE_NAME
value: selvbetjening-idtoken

- name: APP_K9SAK_URL
value: https://k9-sak.nais.adeo.no/k9/sak/api

- name: PDL_URL
value: https://pdl-api.nais.adeo.no/graphql

- name: APP_K9SAK_URL
value: https://k9-sak.nais.adeo.no/k9/sak/api

# Kafka
- name: BOOTSTRAP_SERVERS
value: a01apvl00145.adeo.no:8443,a01apvl00146.adeo.no:8443,a01apvl00147.adeo.no:8443,a01apvl00148.adeo.no:8443,a01apvl00149.adeo.no:8443,a01apvl00150.adeo.no:8443
- name: KAFKA_AKSJONSPUNKTHENDELSE_TOPIC
value: privat-k9-aksjonspunkthendelse
- name: KAFKA_PUNSJAKSJONSPUNKTHENDELSE_TOPIC
value: privat-k9punsj-aksjonspunkthendelse
- name: KAFKA_AKSJONSPUNKTHENDELSE_TILBAKE_TOPIC
value: privat-tilbakekreving-k9loshendelse-v1
- name: KAFKA_SAKOGBEHANDLING_TOPIC
Expand All @@ -103,10 +105,9 @@ spec:
- name: APPDYNAMICS_CONTROLLER_SSL_ENABLED
value: "true"
- name: APPDYNAMICS_AGENT_ACCOUNT_NAME
value: PROD

value: PROD

# Audit logging
# Audit logging
- name: AUDITLOGGER_ENABLED
value: "true"
- name: AUDITLOGGER_VENDOR
Expand Down
5 changes: 5 additions & 0 deletions src/main/kotlin/no/nav/k9/Configuration.kt
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,11 @@ data class Configuration(private val config: ApplicationConfig) {
?: "privat-k9-aksjonspunkthendelse"
}

internal fun getAksjonspunkthendelsePunsjTopic(): String {
return config.getOptionalString("nav.kafka.punsjAksjonshendelseTopic", secret = false)
?: "private-k9punsj-aksjonspunkthendelse-v1"
}

internal fun getAksjonspunkthendelseTilbakeTopic(): String {
return config.getOptionalString("nav.kafka.tilbakekrevingaksjonshendelseTopic", secret = false)
?: "privat-tilbakekreving-k9loshendelse-v1"
Expand Down
39 changes: 31 additions & 8 deletions src/main/kotlin/no/nav/k9/KoinProfiles.kt
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import kotlinx.coroutines.channels.Channel
import no.nav.helse.dusseldorf.ktor.health.HealthService
import no.nav.k9.KoinProfile.*
import no.nav.k9.aksjonspunktbehandling.K9TilbakeEventHandler
import no.nav.k9.aksjonspunktbehandling.K9punsjEventHandler
import no.nav.k9.aksjonspunktbehandling.K9sakEventHandler
import no.nav.k9.db.hikariConfig
import no.nav.k9.domene.lager.oppgave.Oppgave
Expand Down Expand Up @@ -90,7 +91,7 @@ fun common(app: Application, config: Configuration) = module {
pepClient = get()
)
}

single {
SaksbehandlerRepository(
dataSource = get(),
Expand All @@ -117,11 +118,15 @@ fun common(app: Application, config: Configuration) = module {
single {
BehandlingProsessEventK9Repository(get())
}

single {
PunsjEventK9Repository(get())
}

single {
BehandlingProsessEventTilbakeRepository(get())
}

single {
StatistikkRepository(get())
}
Expand All @@ -138,7 +143,7 @@ fun common(app: Application, config: Configuration) = module {
clients = config.clients()
)
}

single {
StatistikkProducer(
kafkaConfig = config.getKafkaConfig(),
Expand Down Expand Up @@ -178,13 +183,25 @@ fun common(app: Application, config: Configuration) = module {
saksbehhandlerRepository = get()
)
}


single {
K9punsjEventHandler(
oppgaveRepository = get(),
punsjEventK9Repository = get(),
oppgaverSomSkalInnPåKøer = get(named("oppgaveChannel")),
statistikkRepository = get(),
saksbehhandlerRepository = get()
)
}


single {
AsynkronProsesseringV1Service(
kafkaConfig = config.getKafkaConfig(),
configuration = config,
k9sakEventHandler = get(),
k9TilbakeEventHandler = get()
k9TilbakeEventHandler = get(),
punsjEventHandler = get()
)
}

Expand All @@ -198,7 +215,7 @@ fun common(app: Application, config: Configuration) = module {
configuration = config,
pepClient = get(),
azureGraphService = get(),
statistikkRepository = get(),
statistikkRepository = get(),
oppgaverSomSkalInnPåKøer = get(named("oppgaveChannel"))
)
}
Expand Down Expand Up @@ -263,7 +280,10 @@ fun preprodConfig(app: Application, config: Configuration) = module {
PepClient(azureGraphService = get(), auditlogger = Auditlogger(config), config = config) as IPepClient
}
single {
K9SakService(configuration = get(), accessTokenClient =get<AccessTokenClientResolver>().naisSts()) as IK9SakService
K9SakService(
configuration = get(),
accessTokenClient = get<AccessTokenClientResolver>().naisSts()
) as IK9SakService
}

single { RequestContextService() as IRequestContextService }
Expand All @@ -288,7 +308,10 @@ fun prodConfig(app: Application, config: Configuration) = module {
PepClient(azureGraphService = get(), auditlogger = Auditlogger(config), config = config) as IPepClient
}
single {
K9SakService(configuration = get(), accessTokenClient =get<AccessTokenClientResolver>().naisSts()) as IK9SakService
K9SakService(
configuration = get(),
accessTokenClient = get<AccessTokenClientResolver>().naisSts()
) as IK9SakService
}
single { RequestContextService() as IRequestContextService }

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
package no.nav.k9.aksjonspunktbehandling

import io.ktor.util.*
import no.nav.helse.kafka.ManagedKafkaStreams
import no.nav.helse.kafka.ManagedStreamHealthy
import no.nav.helse.kafka.ManagedStreamReady
import no.nav.k9.Configuration
import no.nav.k9.integrasjon.kafka.KafkaConfig
import org.apache.kafka.streams.StreamsBuilder
import org.apache.kafka.streams.Topology
import org.apache.kafka.streams.kstream.Consumed
import org.slf4j.LoggerFactory

internal class AksjonspunktPunsjStream @KtorExperimentalAPI constructor(
kafkaConfig: KafkaConfig,
configuration: Configuration,
K9punsjEventHandler: K9punsjEventHandler
) {

@KtorExperimentalAPI
private val stream = ManagedKafkaStreams(
name = NAME,
properties = kafkaConfig.stream(NAME),
topology = topology(
configuration = configuration,
K9punsjEventHandler = K9punsjEventHandler
),
unreadyAfterStreamStoppedIn = kafkaConfig.unreadyAfterStreamStoppedIn
)

@KtorExperimentalAPI
internal val ready = ManagedStreamReady(stream)
@KtorExperimentalAPI
internal val healthy = ManagedStreamHealthy(stream)

private companion object {
private const val NAME = "AksjonspunktLagetPunsjV1"
private val log = LoggerFactory.getLogger("no.nav.$NAME.topology")

@KtorExperimentalAPI
private fun topology(
configuration: Configuration,
K9punsjEventHandler: K9punsjEventHandler
): Topology {
val builder = StreamsBuilder()
val fromTopic = Topic(
name = configuration.getAksjonspunkthendelsePunsjTopic(),
serDes = AksjonspunktPunsjLaget()
)
builder
.stream(
fromTopic.name,
Consumed.with(fromTopic.keySerde, fromTopic.valueSerde)
)
.foreach { _, entry ->
if (entry != null) {
K9punsjEventHandler.prosesser(entry)
}
}
return builder.build()
}
}

@KtorExperimentalAPI
internal fun stop() = stream.stop(becauseOfError = false)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package no.nav.k9.aksjonspunktbehandling

import io.ktor.util.*
import kotlinx.coroutines.channels.Channel
import kotlinx.coroutines.channels.sendBlocking
import no.nav.k9.Configuration
import no.nav.k9.domene.lager.oppgave.Oppgave
import no.nav.k9.domene.repository.*
import no.nav.k9.integrasjon.datavarehus.StatistikkProducer
import no.nav.k9.integrasjon.kafka.dto.PunsjEventDto
import no.nav.k9.integrasjon.sakogbehandling.SakOgBehandlingProducer
import org.slf4j.LoggerFactory


class K9punsjEventHandler @KtorExperimentalAPI constructor(
val oppgaveRepository: OppgaveRepository,
val punsjEventK9Repository: PunsjEventK9Repository,
val oppgaverSomSkalInnPåKøer: Channel<Oppgave>,
val statistikkRepository: StatistikkRepository,
val saksbehhandlerRepository: SaksbehandlerRepository
) {
private val log = LoggerFactory.getLogger(K9punsjEventHandler::class.java)

@KtorExperimentalAPI
fun prosesser(
event: PunsjEventDto
) {
val modell = punsjEventK9Repository.lagre(event = event)
val oppgave = modell.oppgave()
oppgaveRepository.lagre(oppgave.eksternId){oppgave}
oppgaverSomSkalInnPåKøer.sendBlocking(oppgave)
}

}
15 changes: 15 additions & 0 deletions src/main/kotlin/no/nav/k9/aksjonspunktbehandling/Topics.kt
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import com.fasterxml.jackson.module.kotlin.readValue
import no.nav.helse.dusseldorf.ktor.jackson.dusseldorfConfigured
import no.nav.k9.integrasjon.kafka.dto.BehandlingProsessEventDto
import no.nav.k9.integrasjon.kafka.dto.BehandlingProsessEventTilbakeDto
import no.nav.k9.integrasjon.kafka.dto.PunsjEventDto
import org.apache.kafka.common.serialization.Deserializer
import org.apache.kafka.common.serialization.Serdes
import org.apache.kafka.common.serialization.Serializer
Expand Down Expand Up @@ -61,6 +62,20 @@ internal class AksjonspunktLaget : SerDes<BehandlingProsessEventDto>() {
}
}

internal class AksjonspunktPunsjLaget : SerDes<PunsjEventDto>() {
override fun deserialize(topic: String?, data: ByteArray?): PunsjEventDto? {
return data?.let {
return try {
objectMapper.readValue(it)
} catch (e: Exception) {
log.warn("", e)
log.warn(String(it))
throw e
}
}
}
}

internal class AksjonspunktLagetTilbake : SerDes<BehandlingProsessEventTilbakeDto>() {
override fun deserialize(topic: String?, data: ByteArray?): BehandlingProsessEventTilbakeDto? {
return data?.let {
Expand Down
76 changes: 76 additions & 0 deletions src/main/kotlin/no/nav/k9/domene/modell/K9punsjModell.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
package no.nav.k9.domene.modell

import no.nav.k9.domene.lager.oppgave.Oppgave
import no.nav.k9.domene.repository.ReservasjonRepository
import no.nav.k9.domene.repository.SaksbehandlerRepository
import no.nav.k9.integrasjon.kafka.dto.PunsjEventDto
import no.nav.k9.statistikk.kontrakter.Behandling
import no.nav.k9.statistikk.kontrakter.Sak

class K9punsjModell(
val eventer: List<PunsjEventDto>
) : IModell {

override fun starterSak(): Boolean {
TODO("Not yet implemented")
}

override fun erTom(): Boolean {
TODO("Not yet implemented")
}

override fun dvhSak(): Sak {
TODO("Not yet implemented")
}

override fun dvhBehandling(
saksbehandlerRepository: SaksbehandlerRepository,
reservasjonRepository: ReservasjonRepository
): Behandling {
TODO("Not yet implemented")
}

override fun sisteSaksNummer(): String {
TODO("Not yet implemented")
}

fun oppgave(): Oppgave {

val sisteEvent = eventer.last()
val førsteEvent = eventer.first()
return Oppgave(
behandlingId = null,
fagsakSaksnummer = "",
aktorId = "",
behandlendeEnhet = "",
behandlingsfrist =førsteEvent.eventTid.toLocalDate().plusDays(21).atStartOfDay(),
behandlingOpprettet =førsteEvent.eventTid,
forsteStonadsdag =førsteEvent.eventTid.toLocalDate(),
behandlingStatus =BehandlingStatus.OPPRETTET,
behandlingType =BehandlingType.PUNSJ,
fagsakYtelseType =FagsakYtelseType.PPN,
eventTid =sisteEvent.eventTid,
aktiv = false,
system = FagsakYtelseType.PUNSJ.kode,
oppgaveAvsluttet = null,
utfortFraAdmin = false,
eksternId =sisteEvent.eksternId,
oppgaveEgenskap = listOf(),
aksjonspunkter = Aksjonspunkter(liste = mapOf()),
tilBeslutter = false,
utbetalingTilBruker = false,
selvstendigFrilans = false,
kombinert = false,
søktGradering = false,
registrerPapir = false,
årskvantum = false,
avklarMedlemskap = false,
kode6 = false,
skjermet = false,
utenlands = false,
vurderopptjeningsvilkåret = false,
ansvarligSaksbehandlerForTotrinn = null,
ansvarligSaksbehandlerIdent = null
)
}
}
Loading

0 comments on commit e679c4d

Please sign in to comment.