Skip to content

Commit 8c845de

Browse files
author
Andrea Falzetti
committed
feat(jetbrains): show workspace class in backend control center
1 parent 3363bd9 commit 8c845de

File tree

3 files changed

+70
-11
lines changed

3 files changed

+70
-11
lines changed

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -223,14 +223,16 @@ class GitpodManager : Disposable {
223223
}
224224
}
225225

226+
var infoResponse: WorkspaceInfoResponse? = null
226227
val pendingInfo = CompletableFuture<WorkspaceInfoResponse>()
228+
227229
private val infoJob = GlobalScope.launch {
228230
if (application.isHeadlessEnvironment) {
229231
return@launch
230232
}
231233
try {
232234
// TODO(ak) replace retry with proper handling of grpc errors
233-
val infoResponse = retry(3) {
235+
infoResponse = retry(3) {
234236
InfoServiceGrpc
235237
.newFutureStub(supervisorChannel)
236238
.workspaceInfo(Info.WorkspaceInfoRequest.newBuilder().build())
@@ -391,5 +393,4 @@ class GitpodManager : Disposable {
391393
metricsJob.cancel()
392394
}
393395
}
394-
395396
}

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

Lines changed: 48 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,20 +7,62 @@ package io.gitpod.jetbrains.remote
77
import com.jetbrains.ide.model.uiautomation.BeControl
88
import com.jetbrains.rd.ui.bedsl.dsl.VerticalGridBuilder
99
import com.jetbrains.rd.ui.bedsl.dsl.verticalGrid
10+
import com.jetbrains.rd.ui.bedsl.dsl.*
1011
import com.jetbrains.rd.util.lifetime.Lifetime
11-
import com.jetbrains.rd.util.reactive.Property
1212
import com.jetbrains.rdserver.diagnostics.BackendDiagnosticsService
1313
import com.jetbrains.rdserver.unattendedHost.customization.controlCenter.performance.MetricControlProvider
1414
import com.jetbrains.rdserver.unattendedHost.customization.controlCenter.performance.createProgressBar
1515
import com.jetbrains.rdserver.unattendedHost.customization.controlCenter.performance.createProgressRow
16+
import com.jetbrains.rd.util.reactive.Property
1617

1718
class GitpodMetricControlProvider : MetricControlProvider {
1819
override val id: String = "gitpodMetricsControl"
1920
override fun getControl(lifetime: Lifetime): BeControl {
21+
val backendDiagnosticsService = BackendDiagnosticsService.Companion.getInstance()
22+
2023
return verticalGrid {
21-
val backendDiagnosticsService = BackendDiagnosticsService.Companion.getInstance()
22-
createCpuControl(this, backendDiagnosticsService, lifetime)
23-
createMemoryControl(this, backendDiagnosticsService, lifetime)
24+
createWorkspaceHeaderRow(this, backendDiagnosticsService, lifetime)
25+
row {
26+
verticalGrid {
27+
createCpuControl(this, backendDiagnosticsService, lifetime)
28+
createMemoryControl(this, backendDiagnosticsService, lifetime)
29+
}.withMargin { margin(0, 0, 0, 10) }
30+
}
31+
row {
32+
horizontalGrid {
33+
column {
34+
label("Node")
35+
}
36+
}.withMargin { margin(0, 0, 0, 10) }
37+
}
38+
}
39+
}
40+
41+
private fun createWorkspaceHeaderRow(ctx: VerticalGridBuilder, backendDiagnosticsService: BackendDiagnosticsService, lifetime: Lifetime) {
42+
val labelProperty = Property("")
43+
44+
val workspaceClassMetric = backendDiagnosticsService.getMetric("gitpod_workspace_class")
45+
val workspaceClass = workspaceClassMetric.toString()
46+
47+
fun updateLabel() {
48+
if (workspaceClass == "") {
49+
labelProperty.set("Workspace")
50+
} else {
51+
labelProperty.set("Workspace ($workspaceClass)")
52+
}
53+
}
54+
updateLabel()
55+
56+
workspaceClassMetric.valueProperty.change.advise(lifetime) {
57+
updateLabel()
58+
}
59+
60+
return ctx.row {
61+
horizontalGrid {
62+
column {
63+
label("Workspace $workspaceClass")
64+
}
65+
}.withMargin { margin(0, 0, 0, 10) }
2466
}
2567
}
2668

@@ -29,7 +71,7 @@ class GitpodMetricControlProvider : MetricControlProvider {
2971
val cpuTotal = backendDiagnosticsService.getMetric("gitpod_workspace_cpu_total")
3072
val cpuPercentage = backendDiagnosticsService.getMetric("gitpod_workspace_cpu_percentage")
3173
val cpuPercentageProperty = Property("$cpuPercentage %")
32-
val label = "Workspace CPU"
74+
val label = "CPU"
3375
val progressBar = createProgressBar(lifetime, cpuPercentage.valueProperty, cpuPercentageProperty)
3476
val labelProperty = Property("")
3577

@@ -51,7 +93,7 @@ class GitpodMetricControlProvider : MetricControlProvider {
5193
val memoryTotal = backendDiagnosticsService.getMetric("gitpod_workspace_memory_total")
5294
val memoryPercentage = backendDiagnosticsService.getMetric("gitpod_workspace_memory_percentage")
5395
val memoryPercentageProperty = Property("$memoryPercentage %")
54-
val label = "Workspace Memory"
96+
val label = "Memory"
5597
val progressBar = createProgressBar(lifetime, memoryPercentage.valueProperty, memoryPercentageProperty)
5698
val labelProperty = Property("")
5799

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

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import com.jetbrains.rd.platform.codeWithMe.unattendedHost.metrics.Metric
99
import com.jetbrains.rd.platform.codeWithMe.unattendedHost.metrics.MetricType
1010
import com.jetbrains.rd.platform.codeWithMe.unattendedHost.metrics.MetricsStatus
1111
import com.jetbrains.rd.platform.codeWithMe.unattendedHost.metrics.providers.MetricProvider
12-
import io.gitpod.jetbrains.remote.GitpodManager
12+
import io.gitpod.supervisor.api.Info.WorkspaceInfoResponse.WorkspaceClass
1313
import io.gitpod.supervisor.api.Status.ResourceStatusSeverity
1414
import kotlin.math.roundToInt
1515

@@ -19,6 +19,7 @@ class GitpodMetricProvider: MetricProvider {
1919
override val id: String = "gitpodMetricsProvider"
2020
override fun getMetrics(): Map<String, Metric> {
2121
val resourceStatus = manager.resourceStatus
22+
val info = manager.infoResponse
2223

2324
val cpuUsed = resourceStatus?.cpu?.used?.toDouble() ?: 0.0
2425
val cpuTotal = resourceStatus?.cpu?.limit?.toDouble() ?: 0.0
@@ -28,17 +29,20 @@ class GitpodMetricProvider: MetricProvider {
2829

2930
val memoryUsed = convertBytesToGB(resourceStatus?.memory?.used ?: 0)
3031
val memoryTotal = convertBytesToGB(resourceStatus?.memory?.limit ?: 0)
31-
val memorySeverity = resourceStatus?.memory?.severity ?:ResourceStatusSeverity.normal
32+
val memorySeverity = resourceStatus?.memory?.severity ?: ResourceStatusSeverity.normal
3233
val memoryPercentage = (memoryUsed / memoryTotal) * 100
3334
val memoryStatus = getSeverityStatus(memorySeverity)
3435

36+
val workspaceClass = formatWorkspaceClass(info?.workspaceClass)
37+
3538
return mapOf(
3639
"gitpod_workspace_cpu_used" to Metric(MetricType.PERFORMANCE, MetricsStatus.NORMAL, roundTo(cpuUsed, 0)),
3740
"gitpod_workspace_cpu_total" to Metric(MetricType.PERFORMANCE, MetricsStatus.NORMAL, roundTo(cpuTotal, 0)),
3841
"gitpod_workspace_cpu_percentage" to Metric(MetricType.PERFORMANCE, cpuStatus, (cpuPercentage * 1000.0).roundToInt() / 1000.0),
3942
"gitpod_workspace_memory_used" to Metric(MetricType.PERFORMANCE, MetricsStatus.NORMAL, roundTo(memoryUsed, 2)),
4043
"gitpod_workspace_memory_total" to Metric(MetricType.PERFORMANCE, MetricsStatus.NORMAL, roundTo(memoryTotal, 2)),
41-
"gitpod_workspace_memory_percentage" to Metric(MetricType.PERFORMANCE, memoryStatus, (memoryPercentage * 1000.0).roundToInt() / 1000.0)
44+
"gitpod_workspace_memory_percentage" to Metric(MetricType.PERFORMANCE, memoryStatus, (memoryPercentage * 1000.0).roundToInt() / 1000.0),
45+
"gitpod_workspace_class" to Metric(MetricType.OTHER, MetricsStatus.NORMAL, workspaceClass)
4246
)
4347
}
4448

@@ -59,4 +63,16 @@ class GitpodMetricProvider: MetricProvider {
5963
MetricsStatus.NORMAL
6064
}
6165
}
66+
67+
private fun formatWorkspaceClass(workspaceClass: WorkspaceClass?): String {
68+
if (workspaceClass == null || workspaceClass.displayName == "") {
69+
return ""
70+
}
71+
72+
if (workspaceClass.description == "") {
73+
return workspaceClass.displayName
74+
}
75+
76+
return "${workspaceClass.displayName}: ${workspaceClass.description}"
77+
}
6278
}

0 commit comments

Comments
 (0)