Skip to content

Commit 912c834

Browse files
Merge pull request #120 from leanix/feature/CID-3856/update-heartbeat-implementation
CID-3856: Update heartbeat implementation
2 parents d376ed3 + e601ea2 commit 912c834

File tree

2 files changed

+3
-51
lines changed

2 files changed

+3
-51
lines changed

src/main/kotlin/net/leanix/githubagent/config/WebSocketClientConfig.kt

Lines changed: 3 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import io.github.resilience4j.retry.annotation.Retry
55
import net.leanix.githubagent.handler.BrokerStompSessionHandler
66
import net.leanix.githubagent.services.LeanIXAuthService
77
import net.leanix.githubagent.shared.GitHubAgentProperties.GITHUB_AGENT_VERSION
8-
import org.slf4j.LoggerFactory
98
import org.springframework.context.annotation.Bean
109
import org.springframework.context.annotation.Configuration
1110
import org.springframework.messaging.converter.MappingJackson2MessageConverter
@@ -17,59 +16,28 @@ import org.springframework.web.socket.client.standard.StandardWebSocketClient
1716
import org.springframework.web.socket.messaging.WebSocketStompClient
1817
import org.springframework.web.socket.sockjs.client.SockJsClient
1918
import org.springframework.web.socket.sockjs.client.WebSocketTransport
20-
import java.time.Duration
21-
import java.util.concurrent.ScheduledFuture
2219

2320
@Configuration
2421
class WebSocketClientConfig(
2522
private val brokerStompSessionHandler: BrokerStompSessionHandler,
2623
private val objectMapper: ObjectMapper,
2724
private val leanIXAuthService: LeanIXAuthService,
2825
private val leanIXProperties: LeanIXProperties,
29-
private val gitHubEnterpriseProperties: GitHubEnterpriseProperties,
26+
private val gitHubEnterpriseProperties: GitHubEnterpriseProperties
3027
) {
31-
32-
private var heartbeatTask: ScheduledFuture<*>? = null
33-
private val logger = LoggerFactory.getLogger(WebSocketClientConfig::class.java)
34-
3528
@Retry(name = "ws_init_session")
3629
fun initSession(): StompSession {
3730
val headers = WebSocketHttpHeaders()
3831
val stompHeaders = StompHeaders()
3932
stompHeaders["Authorization"] = "Bearer ${leanIXAuthService.getBearerToken()}"
4033
stompHeaders["GitHub-Enterprise-URL"] = gitHubEnterpriseProperties.baseUrl
4134
stompHeaders["GitHub-Agent-Version"] = GITHUB_AGENT_VERSION
42-
val session = stompClient().connectAsync(
35+
return stompClient().connectAsync(
4336
leanIXProperties.wsBaseUrl,
4437
headers,
4538
stompHeaders,
4639
brokerStompSessionHandler,
4740
).get()
48-
49-
sendHeartbeat(session)
50-
return session
51-
}
52-
53-
fun sendHeartbeat(session: StompSession) {
54-
val scheduler = ThreadPoolTaskScheduler()
55-
scheduler.initialize()
56-
heartbeatTask = scheduler.scheduleAtFixedRate({
57-
kotlin.runCatching {
58-
if (session.isConnected) {
59-
session.send("/app/ghe/heartbeat", "")
60-
logger.debug("Heartbeat sent to /app/heartbeat")
61-
} else {
62-
logger.warn("Session is not connected, stopping heartbeat")
63-
stopHeartbeat()
64-
}
65-
}.onFailure {
66-
logger.error("Failed to send heartbeat: ${it.message}")
67-
}
68-
}, Duration.ofSeconds(60))
69-
}
70-
71-
fun stopHeartbeat() {
72-
heartbeatTask?.cancel(true)
7341
}
7442

7543
@Bean
@@ -82,6 +50,7 @@ class WebSocketClientConfig(
8250
val sockJsClient = SockJsClient(transports)
8351
val stompClient = WebSocketStompClient(sockJsClient)
8452
stompClient.messageConverter = jsonConverter
53+
stompClient.defaultHeartbeat = longArrayOf(30000, 0)
8554
val scheduler = ThreadPoolTaskScheduler()
8655
scheduler.initialize()
8756
stompClient.taskScheduler = scheduler

src/test/kotlin/net/leanix/githubagent/config/WebSocketClientConfigTests.kt

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,7 @@ package net.leanix.githubagent.config
22

33
import com.fasterxml.jackson.databind.ObjectMapper
44
import io.mockk.coEvery
5-
import io.mockk.every
65
import io.mockk.mockk
7-
import io.mockk.verify
86
import kotlinx.coroutines.runBlocking
97
import net.leanix.githubagent.handler.BrokerStompSessionHandler
108
import net.leanix.githubagent.services.LeanIXAuthService
@@ -16,7 +14,6 @@ import org.springframework.messaging.simp.stomp.StompHeaders
1614
import org.springframework.messaging.simp.stomp.StompSession
1715
import org.springframework.web.socket.WebSocketHttpHeaders
1816
import org.springframework.web.socket.messaging.WebSocketStompClient
19-
import java.util.concurrent.ScheduledFuture
2017

2118
class WebSocketClientConfigTests {
2219
private lateinit var webSocketClientConfig: WebSocketClientConfig
@@ -26,7 +23,6 @@ class WebSocketClientConfigTests {
2623
private lateinit var leanIXProperties: LeanIXProperties
2724
private lateinit var gitHubEnterpriseProperties: GitHubEnterpriseProperties
2825
private lateinit var leanIXAuthService: LeanIXAuthService
29-
private lateinit var scheduledFuture: ScheduledFuture<*>
3026

3127
@BeforeEach
3228
fun setUp() {
@@ -38,8 +34,6 @@ class WebSocketClientConfigTests {
3834
stompSession = mockk()
3935
authService = mockk()
4036
leanIXAuthService = mockk()
41-
scheduledFuture = mockk()
42-
4337
webSocketClientConfig = WebSocketClientConfig(
4438
brokerStompSessionHandler,
4539
objectMapper,
@@ -69,15 +63,4 @@ class WebSocketClientConfigTests {
6963

7064
assertEquals(null, session)
7165
}
72-
73-
@Test
74-
fun `should send heartbeat when session is connected`() {
75-
val receiptable = mockk<StompSession.Receiptable>()
76-
every { stompSession.isConnected } returns true
77-
every { stompSession.send(any<String>(), any()) } returns receiptable
78-
79-
webSocketClientConfig.sendHeartbeat(stompSession)
80-
81-
verify { stompSession.send("/app/ghe/heartbeat", "") }
82-
}
8366
}

0 commit comments

Comments
 (0)