1
1
package no.nav.dagpenger.inntekt
2
2
3
3
import com.auth0.jwk.JwkProvider
4
- import com.auth0.jwk.JwkProviderBuilder
5
4
import com.ryanharter.ktor.moshi.moshi
6
5
import com.squareup.moshi.JsonDataException
7
6
import com.squareup.moshi.JsonEncodingException
@@ -26,117 +25,32 @@ import io.ktor.request.path
26
25
import io.ktor.response.respond
27
26
import io.ktor.routing.route
28
27
import io.ktor.routing.routing
29
- import io.ktor.server.engine.embeddedServer
30
- import io.ktor.server.netty.Netty
31
28
import io.micrometer.core.instrument.Clock
32
29
import io.micrometer.prometheus.PrometheusConfig
33
30
import io.micrometer.prometheus.PrometheusMeterRegistry
34
31
import io.prometheus.client.CollectorRegistry
35
- import io.prometheus.client.hotspot.DefaultExports
36
32
import java.net.URI
37
- import java.net.URL
38
- import java.util.concurrent.TimeUnit
39
33
import java.util.concurrent.atomic.AtomicLong
40
- import kotlin.concurrent.fixedRateTimer
41
- import kotlinx.coroutines.launch
42
- import kotlinx.coroutines.runBlocking
43
34
import mu.KotlinLogging
44
35
import no.nav.dagpenger.inntekt.db.IllegalInntektIdException
45
36
import no.nav.dagpenger.inntekt.db.InntektNotFoundException
46
37
import no.nav.dagpenger.inntekt.db.InntektStore
47
- import no.nav.dagpenger.inntekt.db.PostgresInntektStore
48
- import no.nav.dagpenger.inntekt.db.dataSourceFrom
49
- import no.nav.dagpenger.inntekt.db.migrate
50
38
import no.nav.dagpenger.inntekt.inntektskomponenten.v1.InntektskomponentClient
51
- import no.nav.dagpenger.inntekt.inntektskomponenten.v1.InntektskomponentHttpClient
52
39
import no.nav.dagpenger.inntekt.inntektskomponenten.v1.InntektskomponentenHttpClientException
53
40
import no.nav.dagpenger.inntekt.oppslag.OppslagClient
54
- import no.nav.dagpenger.inntekt.rpc.InntektGrpcServer
55
- import no.nav.dagpenger.inntekt.subsumsjonbrukt.KafkaSubsumsjonBruktDataConsumer
56
- import no.nav.dagpenger.inntekt.subsumsjonbrukt.Vaktmester
57
41
import no.nav.dagpenger.inntekt.v1.inntekt
58
42
import no.nav.dagpenger.inntekt.v1.opptjeningsperiodeApi
59
43
import no.nav.dagpenger.inntekt.v1.uklassifisertInntekt
60
44
import no.nav.dagpenger.ktor.auth.ApiKeyCredential
61
45
import no.nav.dagpenger.ktor.auth.ApiKeyVerifier
62
46
import no.nav.dagpenger.ktor.auth.ApiPrincipal
63
47
import no.nav.dagpenger.ktor.auth.apiKeyAuth
64
- import no.nav.dagpenger.oidc.StsOidcClient
65
48
import org.slf4j.event.Level
66
49
67
50
private val LOGGER = KotlinLogging .logger {}
68
51
private val sikkerLogg = KotlinLogging .logger(" tjenestekall" )
69
52
private val config = Configuration ()
70
53
71
- fun main () = runBlocking {
72
-
73
- migrate(config)
74
- val jwkProvider = JwkProviderBuilder (URL (config.application.jwksUrl))
75
- .cached(10 , 24 , TimeUnit .HOURS )
76
- .rateLimited(10 , 1 , TimeUnit .MINUTES )
77
- .build()
78
-
79
- val authApiKeyVerifier =
80
- AuthApiKeyVerifier (ApiKeyVerifier (config.application.apiSecret), config.application.allowedApiKeys)
81
-
82
- val dataSource = dataSourceFrom(config)
83
- val postgresInntektStore = PostgresInntektStore (dataSource)
84
- val stsOidcClient =
85
- StsOidcClient (config.application.oicdStsUrl, config.application.username, config.application.password)
86
-
87
- val subsumsjonBruktDataConsumer = KafkaSubsumsjonBruktDataConsumer (config, postgresInntektStore).apply {
88
- listen()
89
- }
90
-
91
- val gRpcServer =
92
- InntektGrpcServer (port = 50051 , inntektStore = postgresInntektStore, apiKeyVerifier = authApiKeyVerifier)
93
-
94
- launch {
95
- gRpcServer.start()
96
- gRpcServer.blockUntilShutdown()
97
- }
98
-
99
- val vaktmester = Vaktmester (dataSource)
100
-
101
- fixedRateTimer(
102
- name = " vaktmester" ,
103
- initialDelay = TimeUnit .MINUTES .toMillis(10 ),
104
- period = TimeUnit .HOURS .toMillis(12 ),
105
- action = {
106
- LOGGER .info { " Vaktmesteren rydder" }
107
- vaktmester.rydd()
108
- LOGGER .info { " Vaktmesteren er ferdig... for denne gang" }
109
- })
110
-
111
- val inntektskomponentHttpClient = InntektskomponentHttpClient (
112
- config.application.hentinntektListeUrl,
113
- stsOidcClient
114
- )
115
- val oppslagClient = OppslagClient (config.application.oppslagUrl, stsOidcClient)
116
-
117
- val cachedInntektsGetter = BehandlingsInntektsGetter (inntektskomponentHttpClient, postgresInntektStore)
118
-
119
- DefaultExports .initialize()
120
- val application = embeddedServer(Netty , port = config.application.httpPort) {
121
- inntektApi(
122
- inntektskomponentHttpClient,
123
- postgresInntektStore,
124
- cachedInntektsGetter,
125
- oppslagClient,
126
- authApiKeyVerifier,
127
- jwkProvider,
128
- listOf (
129
- postgresInntektStore as HealthCheck ,
130
- subsumsjonBruktDataConsumer as HealthCheck
131
- )
132
- )
133
- }.start()
134
- Runtime .getRuntime().addShutdownHook(Thread {
135
- subsumsjonBruktDataConsumer.stop()
136
- application.stop(5000 , 60000 )
137
- })
138
- }
139
-
140
54
fun Application.inntektApi (
141
55
inntektskomponentHttpClient : InntektskomponentClient ,
142
56
inntektStore : InntektStore ,
@@ -146,11 +60,12 @@ fun Application.inntektApi(
146
60
jwkProvider : JwkProvider ,
147
61
healthChecks : List <HealthCheck >
148
62
) {
149
-
150
63
install(DefaultHeaders )
64
+
151
65
install(MicrometerMetrics ) {
152
66
registry = PrometheusMeterRegistry (PrometheusConfig .DEFAULT , CollectorRegistry .defaultRegistry, Clock .SYSTEM )
153
67
}
68
+
154
69
install(Authentication ) {
155
70
apiKeyAuth {
156
71
apiKeyName = " X-API-KEY"
0 commit comments