Skip to content

Commit e15f041

Browse files
Merge pull request #123 from leanix/feature/CID-3916/check-connection-before-sending-messages
CID-3916: check connection before sending messages
2 parents f2b4b82 + fa1ead9 commit e15f041

File tree

4 files changed

+17
-21
lines changed

4 files changed

+17
-21
lines changed

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

Lines changed: 4 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import org.springframework.messaging.simp.stomp.StompHeaders
99
import org.springframework.messaging.simp.stomp.StompSession
1010
import org.springframework.messaging.simp.stomp.StompSessionHandlerAdapter
1111
import org.springframework.stereotype.Component
12-
import java.util.concurrent.CountDownLatch
1312

1413
@Component
1514
class BrokerStompSessionHandler(
@@ -24,12 +23,9 @@ class BrokerStompSessionHandler(
2423

2524
private var isConnected = false
2625

27-
private val latch = CountDownLatch(1)
28-
2926
override fun afterConnected(session: StompSession, connectedHeaders: StompHeaders) {
3027
logger.info("connected to the server: ${session.sessionId}")
3128
isConnected = true
32-
latch.countDown()
3329
session.subscribe("/user/queue/message/artifact", artifactDownloadHandler)
3430
session.subscribe("/user/queue/message/repository", repositoryGetHandler)
3531
}
@@ -42,27 +38,17 @@ class BrokerStompSessionHandler(
4238
exception: Throwable,
4339
) {
4440
logger.error("handleException", exception)
45-
logger.error(exception.message)
4641
}
4742

4843
override fun handleTransportError(session: StompSession, exception: Throwable) {
4944
logger.error("Connection error: ${exception.message}")
50-
if (isConnected) {
51-
logger.error("Session closed. This could be due to a network error or the server closing the connection.")
52-
isConnected = false
53-
logger.info("Reconnecting...")
54-
webSocketService.initSession()
55-
} else {
56-
if (latch.count != 0L) latch.countDown()
57-
}
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()
5849
}
5950

6051
fun isConnected(): Boolean {
61-
awaitConnection()
6252
return isConnected
6353
}
64-
65-
private fun awaitConnection() {
66-
latch.await()
67-
}
6854
}

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

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,16 @@
11
package net.leanix.githubagent.services
22

33
import net.leanix.githubagent.config.WebSocketClientConfig
4+
import net.leanix.githubagent.handler.BrokerStompSessionHandler
45
import net.leanix.githubagent.shared.TOPIC_PREFIX
56
import org.slf4j.LoggerFactory
67
import org.springframework.messaging.simp.stomp.StompSession
78
import org.springframework.stereotype.Service
89

910
@Service
1011
class WebSocketService(
11-
private val webSocketClientConfig: WebSocketClientConfig
12+
private val webSocketClientConfig: WebSocketClientConfig,
13+
private val brokerStompSessionHandler: BrokerStompSessionHandler,
1214
) {
1315

1416
private val logger = LoggerFactory.getLogger(WebSocketService::class.java)
@@ -18,12 +20,17 @@ class WebSocketService(
1820
logger.info("Initializing websocket session")
1921
kotlin.runCatching {
2022
stompSession = webSocketClientConfig.initSession()
23+
24+
logger.info("Websocket session initialized with success")
2125
}.onFailure {
2226
logger.error("Failed to initialize WebSocket session")
2327
}
2428
}
2529

2630
fun sendMessage(topic: String, data: Any) {
31+
if (!brokerStompSessionHandler.isConnected()) {
32+
return
33+
}
2734
stompSession!!.send("$TOPIC_PREFIX$topic", data)
2835
}
2936
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ class WebhookEventService(
3939
"PUSH" -> handlePushEvent(payload)
4040
"INSTALLATION" -> handleInstallationEvent(payload)
4141
else -> {
42-
logger.info("Sending event of type: $eventType")
42+
logger.debug("Sending event of type: $eventType")
4343
webSocketService.sendMessage("/events/other/$eventType", payload)
4444
}
4545
}

src/test/kotlin/net/leanix/githubagent/services/WebSocketServiceTests.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package net.leanix.githubagent.services
33
import io.mockk.every
44
import io.mockk.mockk
55
import net.leanix.githubagent.config.WebSocketClientConfig
6+
import net.leanix.githubagent.handler.BrokerStompSessionHandler
67
import org.junit.jupiter.api.Assertions.assertNotNull
78
import org.junit.jupiter.api.BeforeEach
89
import org.junit.jupiter.api.Test
@@ -13,15 +14,17 @@ class WebSocketServiceTests {
1314
private lateinit var webSocketService: WebSocketService
1415
private val webSocketClientConfig: WebSocketClientConfig = mockk()
1516
private val stompSession: StompSession = mockk()
17+
private val brokerStompSessionHandler: BrokerStompSessionHandler = mockk()
1618

1719
@BeforeEach
1820
fun setUp() {
19-
webSocketService = WebSocketService(webSocketClientConfig)
21+
webSocketService = WebSocketService(webSocketClientConfig, brokerStompSessionHandler)
2022
}
2123

2224
@Test
2325
fun `initSession should initialize stompSession successfully`() {
2426
every { webSocketClientConfig.initSession() } returns stompSession
27+
every { brokerStompSessionHandler.isConnected() } returns true
2528

2629
webSocketService.initSession()
2730

0 commit comments

Comments
 (0)