@@ -13,8 +13,12 @@ package com.redhat.devtools.intellij.kubernetes.actions
13
13
import com.intellij.openapi.actionSystem.AnActionEvent
14
14
import com.redhat.devtools.intellij.common.actions.StructureTreeAction
15
15
import com.redhat.devtools.intellij.kubernetes.dialogs.ScaleReplicaDialog
16
+ import com.redhat.devtools.intellij.kubernetes.model.IResourceModel
16
17
import com.redhat.devtools.intellij.kubernetes.model.Notification
18
+ import com.redhat.devtools.intellij.kubernetes.model.resource.kubernetes.KubernetesReplicas
17
19
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
18
22
import io.fabric8.kubernetes.api.model.HasMetadata
19
23
import io.fabric8.kubernetes.api.model.Pod
20
24
import io.fabric8.kubernetes.api.model.ReplicationController
@@ -32,33 +36,46 @@ class ScaleReplicaAction: StructureTreeAction() {
32
36
}
33
37
34
38
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)
38
43
try {
39
44
val replicator = model.getReplicas(toScale)
40
45
val replicas = replicator?.replicas
41
46
if (replicator == null
42
47
|| 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)
47
49
return
48
50
}
49
51
val resourceLabel = " ${replicator.resource.kind} ${replicator.resource.metadata.name} "
50
52
ScaleReplicaDialog (
51
53
project,
52
54
resourceLabel,
53
55
replicas,
54
- { replicas : Int -> model. setReplicas(replicas, replicator)} ,
56
+ setReplicas(replicator, model, telemetry) ,
55
57
(event?.inputEvent as ? MouseEvent )?.locationOnScreen
56
58
).show()
57
59
} 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
+ }
62
79
}
63
80
}
64
81
@@ -76,4 +93,19 @@ class ScaleReplicaAction: StructureTreeAction() {
76
93
|| element is StatefulSet
77
94
|| element is Pod
78
95
}
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
+ }
79
111
}
0 commit comments