@@ -20,7 +20,6 @@ import (
20
20
"bytes"
21
21
"context"
22
22
"regexp"
23
- "strings"
24
23
"time"
25
24
26
25
"github.com/cortexlabs/cortex/pkg/lib/errors"
@@ -38,7 +37,12 @@ var _podTypeMeta = kmeta.TypeMeta{
38
37
Kind : "Pod" ,
39
38
}
40
39
41
- const ReasonEvicted = "Evicted"
40
+ // pod termination reasons
41
+ // https://github.com/kubernetes/kube-state-metrics/blob/master/docs/pod-metrics.md
42
+ const (
43
+ ReasonEvicted = "Evicted"
44
+ ReasonOOMKilled = "OOMKilled"
45
+ )
42
46
43
47
type PodStatus string
44
48
@@ -148,22 +152,14 @@ func WasPodOOMKilled(pod *kcore.Pod) bool {
148
152
return true
149
153
}
150
154
for _ , containerStatus := range pod .Status .ContainerStatuses {
155
+ var reason string
151
156
if containerStatus .LastTerminationState .Terminated != nil {
152
- exitCode := containerStatus .LastTerminationState .Terminated .ExitCode
153
- reason := strings .ToLower (containerStatus .LastTerminationState .Terminated .Reason )
154
- if _killStatuses [exitCode ] {
155
- if strings .Contains (reason , "oom" ) {
156
- return true
157
- }
158
- }
157
+ reason = containerStatus .LastTerminationState .Terminated .Reason
159
158
} else if containerStatus .State .Terminated != nil {
160
- exitCode := containerStatus .State .Terminated .ExitCode
161
- reason := strings .ToLower (containerStatus .State .Terminated .Reason )
162
- if _killStatuses [exitCode ] {
163
- if strings .Contains (reason , "oom" ) {
164
- return true
165
- }
166
- }
159
+ reason = containerStatus .State .Terminated .Reason
160
+ }
161
+ if reason == ReasonOOMKilled {
162
+ return true
167
163
}
168
164
}
169
165
@@ -194,25 +190,21 @@ func GetPodStatus(pod *kcore.Pod) PodStatus {
194
190
}
195
191
196
192
for _ , containerStatus := range pod .Status .ContainerStatuses {
193
+ var reason string
194
+ var exitCode int32
197
195
if containerStatus .LastTerminationState .Terminated != nil {
198
- exitCode := containerStatus .LastTerminationState .Terminated .ExitCode
199
- reason := strings .ToLower (containerStatus .LastTerminationState .Terminated .Reason )
200
- if _killStatuses [exitCode ] {
201
- if strings .Contains (reason , "oom" ) {
202
- return PodStatusKilledOOM
203
- }
204
- return PodStatusKilled
205
- }
196
+ reason = containerStatus .LastTerminationState .Terminated .Reason
197
+ exitCode = containerStatus .LastTerminationState .Terminated .ExitCode
206
198
} else if containerStatus .State .Terminated != nil {
207
- exitCode := containerStatus .State .Terminated .ExitCode
208
- reason := strings .ToLower (containerStatus .State .Terminated .Reason )
209
- if _killStatuses [exitCode ] {
210
- if strings .Contains (reason , "oom" ) {
211
- return PodStatusKilledOOM
212
- }
213
- return PodStatusKilled
214
- }
199
+ reason = containerStatus .State .Terminated .Reason
200
+ exitCode = containerStatus .State .Terminated .ExitCode
215
201
}
202
+ if reason == ReasonOOMKilled {
203
+ return PodStatusKilledOOM
204
+ } else if _killStatuses [exitCode ] {
205
+ return PodStatusKilled
206
+ }
207
+
216
208
}
217
209
return PodStatusFailed
218
210
case kcore .PodRunning :
@@ -245,29 +237,25 @@ func PodStatusFromContainerStatuses(containerStatuses []kcore.ContainerStatus) P
245
237
numRunning ++
246
238
} else if containerStatus .State .Terminated != nil {
247
239
exitCode := containerStatus .State .Terminated .ExitCode
248
- reason := strings .ToLower (containerStatus .State .Terminated .Reason )
249
- if exitCode == 0 {
240
+ reason := containerStatus .State .Terminated .Reason
241
+ if reason == ReasonOOMKilled {
242
+ numKilledOOM ++
243
+ } else if exitCode == 0 {
250
244
numSucceeded ++
251
245
} else if _killStatuses [exitCode ] {
252
- if strings .Contains (reason , "oom" ) {
253
- numKilledOOM ++
254
- } else {
255
- numKilled ++
256
- }
246
+ numKilled ++
257
247
} else {
258
248
numFailed ++
259
249
}
260
250
} else if containerStatus .LastTerminationState .Terminated != nil {
261
251
exitCode := containerStatus .LastTerminationState .Terminated .ExitCode
262
- reason := strings .ToLower (containerStatus .LastTerminationState .Terminated .Reason )
263
- if exitCode == 0 {
252
+ reason := containerStatus .LastTerminationState .Terminated .Reason
253
+ if reason == ReasonOOMKilled {
254
+ numKilledOOM ++
255
+ } else if exitCode == 0 {
264
256
numSucceeded ++
265
257
} else if _killStatuses [exitCode ] {
266
- if strings .Contains (reason , "oom" ) {
267
- numKilledOOM ++
268
- } else {
269
- numKilled ++
270
- }
258
+ numKilled ++
271
259
} else {
272
260
numFailed ++
273
261
}
0 commit comments