@@ -17,6 +17,7 @@ import (
17
17
type VM struct {
18
18
Name string `json:"name"`
19
19
VirtualMachineLaunchTimeDuration v1alpha2.VirtualMachineLaunchTimeDuration `json:"launchTimeDuration"`
20
+ VirtualMachineStopTime time.Duration `json:"stopTime,omitempty"`
20
21
}
21
22
22
23
type VMs struct {
@@ -118,3 +119,41 @@ func Get(client kubeclient.Client, namespace string) {
118
119
119
120
vms .SaveToCSV (namespace )
120
121
}
122
+
123
+ func getStoppingAndStoppedDuration (vm v1alpha2.VirtualMachine ) time.Duration {
124
+ var (
125
+ stopping metav1.Time
126
+ stopped metav1.Time
127
+ )
128
+ for _ , transition := range vm .Status .Stats .PhasesTransitions {
129
+ if string (transition .Phase ) == "Stopping" {
130
+ stopping = transition .Timestamp
131
+ }
132
+ if string (transition .Phase ) == "Stopped" {
133
+ stopped = transition .Timestamp
134
+ }
135
+ }
136
+ return stopped .Time .Sub (stopping .Time ) // `Time` is from metav1.Time
137
+ }
138
+
139
+ func GetStatStop (client kubeclient.Client , namespace string ) {
140
+ var vms VMs
141
+
142
+ vmList , err := client .VirtualMachines (namespace ).List (context .TODO (), metav1.ListOptions {})
143
+ if err != nil {
144
+ fmt .Printf ("Failed to get vm: %v\n " , err )
145
+ os .Exit (1 )
146
+ }
147
+ fmt .Println ("Total VMs:" , len (vmList .Items ))
148
+
149
+ for _ , vm := range vmList .Items {
150
+ if string (vm .Status .Phase ) == "Stopped" {
151
+ vms .Items = append (vms .Items , VM {
152
+ Name : vm .Name ,
153
+ // VirtualMachinePhaseTransitionTimestamp
154
+ // vm.Status.Stats.PhasesTransitions[len(vm.Status.Stats.PhasesTransitions)-1]
155
+ VirtualMachineStopTime : getStoppingAndStoppedDuration (vm ),
156
+ })
157
+ }
158
+ }
159
+ }
0 commit comments