Skip to content

Commit a66c20d

Browse files
cid-3919: Modify retry mechanism (#125)
1 parent e15f041 commit a66c20d

File tree

4 files changed

+69
-5
lines changed

4 files changed

+69
-5
lines changed

src/main/kotlin/net/leanix/githubagent/handler/BrokerStompSessionHandler.kt

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -42,10 +42,12 @@ class BrokerStompSessionHandler(
4242

4343
override fun handleTransportError(session: StompSession, exception: Throwable) {
4444
logger.error("Connection error: ${exception.message}")
45-
isConnected = false
46-
logger.error("Session closed. This could be due to a network error or the server closing the connection.")
47-
logger.info("Reconnecting...")
48-
webSocketService.initSession()
45+
if (isConnected) {
46+
isConnected = false
47+
logger.error("Session closed. This could be due to a network error or the server closing the connection.")
48+
logger.info("Reconnecting...")
49+
webSocketService.initSession()
50+
}
4951
}
5052

5153
fun isConnected(): Boolean {
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package net.leanix.githubagent.scheduler
2+
3+
import net.leanix.githubagent.handler.BrokerStompSessionHandler
4+
import net.leanix.githubagent.services.WebSocketService
5+
import org.slf4j.LoggerFactory
6+
import org.springframework.scheduling.annotation.Scheduled
7+
import org.springframework.stereotype.Component
8+
9+
@Component
10+
class AgentConnectionScheduler(
11+
private val brokerStompSessionHandler: BrokerStompSessionHandler,
12+
private val webSocketService: WebSocketService
13+
) {
14+
15+
private val logger = LoggerFactory.getLogger(AgentConnectionScheduler::class.java)
16+
17+
@Scheduled(fixedDelay = 600000, initialDelay = 600000)
18+
fun checkConnection() {
19+
logger.info("Checking agent connection")
20+
if (!brokerStompSessionHandler.isConnected()) {
21+
logger.info("Trying to connect to ws server")
22+
webSocketService.initSession()
23+
}
24+
}
25+
}

src/main/kotlin/net/leanix/githubagent/services/GitHubWebhookService.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ class GitHubWebhookService(
2323
fun handleWebhookEvent(eventType: String, host: String, signature256: String?, payload: String) {
2424
val runId = cachingService.get("runId")
2525
if (runId != null && eventType.uppercase() != "INSTALLATION") {
26-
logger.info("Received a webhook event while a full sync is in progress, ignoring the event.")
26+
logger.debug("Received a webhook event while a full sync is in progress, ignoring the event.")
2727
return
2828
}
2929
if (SUPPORTED_EVENT_TYPES.contains(eventType.uppercase())) {
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package net.leanix.githubagent.scheduler
2+
3+
import io.mockk.Runs
4+
import io.mockk.every
5+
import io.mockk.just
6+
import io.mockk.mockk
7+
import io.mockk.verify
8+
import net.leanix.githubagent.handler.BrokerStompSessionHandler
9+
import net.leanix.githubagent.services.WebSocketService
10+
import org.junit.jupiter.api.Test
11+
12+
class AgentConnectionSchedulerTest {
13+
14+
private var brokerStompSessionHandler: BrokerStompSessionHandler = mockk()
15+
private var webSocketService: WebSocketService = mockk()
16+
private var scheduler: AgentConnectionScheduler =
17+
AgentConnectionScheduler(brokerStompSessionHandler, webSocketService)
18+
19+
@Test
20+
fun `should not connect when already connected`() {
21+
every { brokerStompSessionHandler.isConnected() } returns true
22+
23+
scheduler.checkConnection()
24+
25+
verify(exactly = 0) { webSocketService.initSession() }
26+
}
27+
28+
@Test
29+
fun `should connect when not connected`() {
30+
every { brokerStompSessionHandler.isConnected() } returns false
31+
every { webSocketService.initSession() } just Runs
32+
33+
scheduler.checkConnection()
34+
35+
verify(exactly = 1) { webSocketService.initSession() }
36+
}
37+
}

0 commit comments

Comments
 (0)