-
Notifications
You must be signed in to change notification settings - Fork 1
/
InitialStateRunner.kt
66 lines (64 loc) · 2.84 KB
/
InitialStateRunner.kt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
package net.leanix.vsm.githubbroker.connector.runner
import net.leanix.vsm.githubbroker.connector.application.AssignmentService
import net.leanix.vsm.githubbroker.connector.application.RepositoriesService
import net.leanix.vsm.githubbroker.connector.application.WebhookService
import net.leanix.vsm.githubbroker.connector.domain.Assignment
import net.leanix.vsm.githubbroker.connector.domain.CommandEventAction
import net.leanix.vsm.githubbroker.connector.domain.CommandProvider
import net.leanix.vsm.githubbroker.logs.application.LoggingService
import net.leanix.vsm.githubbroker.logs.domain.LogStatus
import net.leanix.vsm.githubbroker.logs.domain.StatusLog
import net.leanix.vsm.githubbroker.shared.cache.AssignmentCache
import org.slf4j.Logger
import org.slf4j.LoggerFactory
import org.springframework.boot.ApplicationArguments
import org.springframework.boot.ApplicationRunner
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty
import org.springframework.stereotype.Component
@ConditionalOnProperty(
prefix = "application.runner",
value = ["enabled"],
havingValue = "true",
matchIfMissing = true
)
@Component
class InitialStateRunner(
private val assignmentService: AssignmentService,
private val repositoriesService: RepositoriesService,
private val webhookService: WebhookService,
private val loggingService: LoggingService,
private val commandProvider: CommandProvider
) : ApplicationRunner {
private val logger: Logger = LoggerFactory.getLogger(InitialStateRunner::class.java)
override fun run(args: ApplicationArguments?) {
logger.info("Started get initial state")
getAssignments()?.forEach { assignment ->
kotlin.runCatching {
repositoriesService.getAllRepositories(assignment)
commandProvider.sendCommand(assignment, CommandEventAction.FINISHED)
logger.info("Initializing webhooks registration steps")
webhookService.registerWebhook(assignment.organizationName)
}.onFailure { e ->
logger.error("Failed to get initial state", e)
loggingService.sendStatusLog(
StatusLog(
assignment.runId,
LogStatus.FAILED,
"Failed to get initial state. Error: ${e.message}"
)
)
commandProvider.sendCommand(assignment, CommandEventAction.FAILED)
}
}
}
private fun getAssignments(): List<Assignment>? {
kotlin.runCatching {
val assignments = assignmentService.getAssignments()
AssignmentCache.addAll(assignments)
return assignments
}.onFailure {
logger.error("Failed to get initial state. No assignment found for this workspace id")
}
return null
}
}