@@ -5,7 +5,6 @@ import io.github.resilience4j.retry.annotation.Retry
55import net.leanix.githubagent.handler.BrokerStompSessionHandler
66import net.leanix.githubagent.services.LeanIXAuthService
77import net.leanix.githubagent.shared.GitHubAgentProperties.GITHUB_AGENT_VERSION
8- import org.slf4j.LoggerFactory
98import org.springframework.context.annotation.Bean
109import org.springframework.context.annotation.Configuration
1110import org.springframework.messaging.converter.MappingJackson2MessageConverter
@@ -17,59 +16,28 @@ import org.springframework.web.socket.client.standard.StandardWebSocketClient
1716import org.springframework.web.socket.messaging.WebSocketStompClient
1817import org.springframework.web.socket.sockjs.client.SockJsClient
1918import org.springframework.web.socket.sockjs.client.WebSocketTransport
20- import java.time.Duration
21- import java.util.concurrent.ScheduledFuture
2219
2320@Configuration
2421class 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
0 commit comments