Skip to content

Commit b7c7ed1

Browse files
committed
Forsøk å catch exception fra flow og logg dem i stedet
Vi prøver å finne ut av hvorfor exceptions kastet av ApolloClient henger coroutine evig. Derfor prøver jeg å ta tak i flow selv og heller bare logge exceptions. Svaret fra flow blr da bli at data og er null og vi får en no-op i emitting på channel for nye responser. Håpet er at evt. hikke fra graf-apiet til github dermed vil gå over av seg selv.
1 parent 90a551c commit b7c7ed1

File tree

1 file changed

+14
-2
lines changed

1 file changed

+14
-2
lines changed

src/main/kotlin/no/digipost/github/monitoring/GithubGraphql.kt

+14-2
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,17 @@
11
package no.digipost.github.monitoring
22

3+
import com.apollographql.apollo3.ApolloCall
34
import com.apollographql.apollo3.ApolloClient
5+
import com.apollographql.apollo3.api.ApolloResponse
46
import com.apollographql.apollo3.api.Optional
57
import com.github.graphql.client.GetVulnerabilityAlertsForRepoQuery
68
import com.github.graphql.client.QueryRepositoriesQuery
79
import kotlinx.coroutines.channels.Channel
10+
import kotlinx.coroutines.flow.Flow
11+
import kotlinx.coroutines.flow.catch
12+
import kotlinx.coroutines.flow.filterNotNull
13+
import kotlinx.coroutines.flow.first
14+
import kotlinx.coroutines.flow.map
815
import kotlinx.coroutines.launch
916
import kotlinx.coroutines.runBlocking
1017
import okhttp3.internal.immutableListOf
@@ -101,7 +108,9 @@ private suspend fun getVulnerabilitiesForRepo(
101108

102109
while (hasNext) {
103110

104-
val response = apolloClient.query(GetVulnerabilityAlertsForRepoQuery(name, GITHUB_OWNER, after = Optional.present(cursor))).execute()
111+
val response = apolloClient.query(GetVulnerabilityAlertsForRepoQuery(name, GITHUB_OWNER, after = Optional.present(cursor))).toFlow()
112+
.catch { ex -> logger.error("Noe gikk galt i henting av sårbarheter fra Github", ex) }
113+
.first()
105114

106115
val vulnerabilityAlerts = response.data?.repository?.vulnerabilityAlerts?.nodes ?: emptyList()
107116
val vulnerabilities = vulnerabilityAlerts.mapNotNull {
@@ -137,7 +146,9 @@ private suspend fun listRepos(apolloClient: ApolloClient, repositoryChannel: Cha
137146
while (hasNext) {
138147
if (logger.isDebugEnabled) logger.debug("henter repoer fra Github ${if (cursor != null) " etter: $cursor" else " fra toppen"}")
139148

140-
val response = apolloClient.query(QueryRepositoriesQuery(Optional.Present(cursor))).execute()
149+
val response = apolloClient.query(QueryRepositoriesQuery(Optional.Present(cursor))).toFlow()
150+
.catch { ex -> logger.error("Noe gikk galt i henting av repoer fra Github", ex) }
151+
.first()
141152

142153
response.data?.viewer?.repositories?.nodes
143154
?.filter { GITHUB_OWNER == it?.owner?.login }
@@ -158,5 +169,6 @@ private suspend fun listRepos(apolloClient: ApolloClient, repositoryChannel: Cha
158169

159170
cursor = response.data?.viewer?.repositories?.pageInfo?.endCursor
160171
}
172+
161173
}
162174

0 commit comments

Comments
 (0)