Skip to content

Commit df31833

Browse files
committed
send telemetry when scaling
Signed-off-by: Andre Dietisheim <[email protected]>
1 parent 7919bf1 commit df31833

File tree

1 file changed

+44
-12
lines changed

1 file changed

+44
-12
lines changed

src/main/kotlin/com/redhat/devtools/intellij/kubernetes/actions/ScaleReplicaAction.kt

+44-12
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,12 @@ package com.redhat.devtools.intellij.kubernetes.actions
1313
import com.intellij.openapi.actionSystem.AnActionEvent
1414
import com.redhat.devtools.intellij.common.actions.StructureTreeAction
1515
import com.redhat.devtools.intellij.kubernetes.dialogs.ScaleReplicaDialog
16+
import com.redhat.devtools.intellij.kubernetes.model.IResourceModel
1617
import com.redhat.devtools.intellij.kubernetes.model.Notification
18+
import com.redhat.devtools.intellij.kubernetes.model.resource.kubernetes.KubernetesReplicas
1719
import com.redhat.devtools.intellij.kubernetes.model.util.toMessage
20+
import com.redhat.devtools.intellij.kubernetes.telemetry.TelemetryService
21+
import com.redhat.devtools.intellij.telemetry.core.service.TelemetryMessageBuilder
1822
import io.fabric8.kubernetes.api.model.HasMetadata
1923
import io.fabric8.kubernetes.api.model.Pod
2024
import io.fabric8.kubernetes.api.model.ReplicationController
@@ -32,33 +36,46 @@ class ScaleReplicaAction: StructureTreeAction() {
3236
}
3337

3438
override fun actionPerformed(event: AnActionEvent?, path: Array<out TreePath>?, selected: Array<out Any>?) {
35-
val project = getEventProject(event) ?: return
36-
val toScale = selected?.firstOrNull()?.getElement<HasMetadata>() ?: return
37-
val model = getResourceModel() ?: return
39+
val telemetry = TelemetryService.instance.action("scale")
40+
val project = getEventProject(event) ?: return aborting("no project", telemetry)
41+
val toScale = selected?.firstOrNull()?.getElement<HasMetadata>() ?: return aborting("no resource selected", telemetry)
42+
val model = getResourceModel() ?: return aborting("resource model not found", telemetry)
3843
try {
3944
val replicator = model.getReplicas(toScale)
4045
val replicas = replicator?.replicas
4146
if (replicator == null
4247
|| replicas == null) {
43-
Notification().error(
44-
"Error Scaling",
45-
"Could not scale ${toScale.kind} '${toScale.metadata.name}: unsupported resource"
46-
)
48+
error("replicator not found/unsupported kind", toScale, telemetry)
4749
return
4850
}
4951
val resourceLabel = "${replicator.resource.kind} ${replicator.resource.metadata.name}"
5052
ScaleReplicaDialog(
5153
project,
5254
resourceLabel,
5355
replicas,
54-
{ replicas: Int -> model.setReplicas(replicas, replicator)},
56+
setReplicas(replicator, model, telemetry),
5557
(event?.inputEvent as? MouseEvent)?.locationOnScreen
5658
).show()
5759
} catch (e: RuntimeException) {
58-
Notification().error(
59-
"Error Scaling",
60-
"Could not scale ${toScale.kind} '${toScale.metadata.name}': ${toMessage(e)}"
61-
)
60+
error(toMessage(e), toScale, telemetry)
61+
}
62+
}
63+
64+
private fun setReplicas(
65+
replicator: KubernetesReplicas.Replicator,
66+
model: IResourceModel,
67+
telemetry: TelemetryMessageBuilder.ActionMessage
68+
): (Int) -> Unit {
69+
return { replicas: Int ->
70+
try {
71+
model.setReplicas(replicas, replicator)
72+
telemetry
73+
.property(TelemetryService.PROP_RESOURCE_KIND, replicator.resource.kind)
74+
.success()
75+
.send()
76+
} catch (e: RuntimeException) {
77+
error(toMessage(e), replicator.resource, telemetry)
78+
}
6279
}
6380
}
6481

@@ -76,4 +93,19 @@ class ScaleReplicaAction: StructureTreeAction() {
7693
|| element is StatefulSet
7794
|| element is Pod
7895
}
96+
97+
private fun error(cause: String, resource: HasMetadata, telemetry: TelemetryMessageBuilder.ActionMessage) {
98+
Notification().error(
99+
"Error Scaling",
100+
"Could not scale ${resource.kind} '${resource.metadata.name}: $cause"
101+
)
102+
telemetry
103+
.property(TelemetryService.PROP_RESOURCE_KIND, resource.kind)
104+
.error("Could not scale ${resource.kind}: $cause")
105+
.send()
106+
}
107+
108+
private fun aborting(cause: String, telemetry: TelemetryMessageBuilder.ActionMessage) {
109+
telemetry.error("aborting: $cause").send()
110+
}
79111
}

0 commit comments

Comments
 (0)