Skip to content

Commit a26a9bc

Browse files
akosyakovroboquat
authored andcommitted
[jb] add track for sent closed heartbeat
1 parent 65384db commit a26a9bc

File tree

3 files changed

+42
-24
lines changed

3 files changed

+42
-24
lines changed

components/ide/jetbrains/backend-plugin/src/main/kotlin/io/gitpod/jetbrains/remote/GitpodClientProjectSessionTracker.kt

Lines changed: 6 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ import com.intellij.idea.StartupUtil
1010
import com.intellij.notification.NotificationAction
1111
import com.intellij.notification.NotificationType
1212
import com.intellij.openapi.Disposable
13-
import com.intellij.openapi.application.ApplicationInfo
1413
import com.intellij.openapi.client.ClientProjectSession
1514
import com.intellij.openapi.components.service
1615
import com.intellij.openapi.diagnostic.thisLogger
@@ -20,7 +19,6 @@ import com.intellij.openapi.fileTypes.LanguageFileType
2019
import com.intellij.remoteDev.util.onTerminationOrNow
2120
import com.intellij.util.application
2221
import com.jetbrains.rd.util.lifetime.Lifetime
23-
import io.gitpod.gitpodprotocol.api.entities.RemoteTrackMessage
2422
import io.gitpod.gitpodprotocol.api.entities.WorkspaceInstancePort
2523
import io.gitpod.supervisor.api.Info
2624
import io.gitpod.supervisor.api.Status
@@ -42,8 +40,6 @@ class GitpodClientProjectSessionTracker(
4240
private val manager = service<GitpodManager>()
4341

4442
private lateinit var info: Info.WorkspaceInfoResponse
45-
private val versionName = ApplicationInfo.getInstance().versionName
46-
private val fullVersion = ApplicationInfo.getInstance().fullVersion
4743
private val lifetime = Lifetime.Eternal.createNested()
4844

4945
override fun dispose() {
@@ -58,7 +54,7 @@ class GitpodClientProjectSessionTracker(
5854
}
5955
}
6056

61-
private fun isExposedServedPort(port: Status.PortsStatus?) : Boolean {
57+
private fun isExposedServedPort(port: Status.PortsStatus?): Boolean {
6258
if (port === null) {
6359
return false
6460
}
@@ -186,6 +182,7 @@ class GitpodClientProjectSessionTracker(
186182
delay(1000L)
187183
}
188184
}
185+
189186
init {
190187
lifetime.onTerminationOrNow {
191188
portsObserveJob.cancel()
@@ -216,22 +213,9 @@ class GitpodClientProjectSessionTracker(
216213
})
217214
}
218215

219-
fun trackEvent(eventName: String, props: Map<String, Any?>) {
220-
val event = RemoteTrackMessage().apply {
221-
event = eventName
222-
properties = mapOf(
223-
"sessionId" to session.clientId.value,
224-
"instanceId" to info.instanceId,
225-
"workspaceId" to info.workspaceId,
226-
"appName" to versionName,
227-
"appVersion" to fullVersion,
228-
"timestamp" to System.currentTimeMillis()
229-
).plus(props)
230-
}
231-
if (manager.devMode) {
232-
thisLogger().warn("gitpod: $event")
233-
} else {
234-
manager.client.server.trackEvent(event)
235-
}
216+
private fun trackEvent(eventName: String, props: Map<String, Any?>) {
217+
manager.trackEvent(eventName, mapOf(
218+
"sessionId" to session.clientId.value
219+
).plus(props))
236220
}
237221
}

components/ide/jetbrains/backend-plugin/src/main/kotlin/io/gitpod/jetbrains/remote/GitpodManager.kt

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import com.intellij.notification.NotificationAction
99
import com.intellij.notification.NotificationGroupManager
1010
import com.intellij.notification.NotificationType
1111
import com.intellij.openapi.Disposable
12+
import com.intellij.openapi.application.ApplicationInfo
1213
import com.intellij.openapi.components.Service
1314
import com.intellij.openapi.diagnostic.thisLogger
1415
import com.intellij.openapi.extensions.PluginId
@@ -19,6 +20,7 @@ import com.jetbrains.rd.util.lifetime.Lifetime
1920
import git4idea.config.GitVcsApplicationSettings
2021
import io.gitpod.gitpodprotocol.api.GitpodClient
2122
import io.gitpod.gitpodprotocol.api.GitpodServerLauncher
23+
import io.gitpod.gitpodprotocol.api.entities.RemoteTrackMessage
2224
import io.gitpod.jetbrains.remote.services.HeartbeatService
2325
import io.gitpod.jetbrains.remote.utils.Retrier.retry
2426
import io.gitpod.supervisor.api.*
@@ -327,4 +329,31 @@ class GitpodManager : Disposable {
327329
serverJob.cancel()
328330
}
329331
}
332+
333+
private val versionName = ApplicationInfo.getInstance().versionName
334+
private val fullVersion = ApplicationInfo.getInstance().fullVersion
335+
336+
fun trackEvent(eventName: String, props: Map<String, Any?>) {
337+
val timestamp = System.currentTimeMillis()
338+
GlobalScope.launch {
339+
val info = pendingInfo.await()
340+
val event = RemoteTrackMessage().apply {
341+
event = eventName
342+
properties = mapOf(
343+
"instanceId" to info.instanceId,
344+
"workspaceId" to info.workspaceId,
345+
"appName" to versionName,
346+
"appVersion" to fullVersion,
347+
"timestamp" to timestamp,
348+
"product" to backendKind,
349+
"qualifier" to backendQualifier
350+
).plus(props)
351+
}
352+
if (devMode) {
353+
thisLogger().warn("gitpod: $event")
354+
} else {
355+
client.server.trackEvent(event)
356+
}
357+
}
358+
}
330359
}

components/ide/jetbrains/backend-plugin/src/main/kotlin/io/gitpod/jetbrains/remote/services/HeartbeatService.kt

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@ class HeartbeatService : Disposable {
2424
val info = manager.pendingInfo.await()
2525
val intervalInSeconds = 30
2626
var current = ControllerStatus(
27-
connected = false,
28-
secondsSinceLastActivity = 0
27+
connected = false,
28+
secondsSinceLastActivity = 0
2929
)
3030
while (isActive) {
3131
try {
@@ -41,6 +41,11 @@ class HeartbeatService : Disposable {
4141

4242
if (wasClosed != null) {
4343
manager.client.server.sendHeartBeat(SendHeartBeatOptions(info.instanceId, wasClosed)).await()
44+
if (wasClosed) {
45+
manager.trackEvent("ide_close_signal", mapOf(
46+
"clientKind" to "jetbrains"
47+
))
48+
}
4449
}
4550
} catch (t: Throwable) {
4651
thisLogger().error("gitpod: failed to check activity:", t)

0 commit comments

Comments
 (0)