45
45
func TestJobStore (t * testing.T ) {
46
46
var trueValue = true
47
47
var falseValue = false
48
+ var readyValue int32 = 1
48
49
49
50
// Fixed metadata on type and help text. We prepend this to every expected
50
51
// output so we only have to modify a single place when doing adjustments.
@@ -81,6 +82,8 @@ func TestJobStore(t *testing.T) {
81
82
# TYPE kube_job_status_succeeded gauge
82
83
# HELP kube_job_status_suspended The number of pods which reached Phase Suspended.
83
84
# TYPE kube_job_status_suspended gauge
85
+ # HELP kube_job_status_ready The number of ready pods that belong to this Job.
86
+ # TYPE kube_job_status_ready gauge
84
87
`
85
88
86
89
cases := []generateMetricsTestCase {
@@ -124,6 +127,7 @@ func TestJobStore(t *testing.T) {
124
127
kube_job_spec_parallelism{job_name="RunningJob1",namespace="ns1"} 1
125
128
kube_job_status_active{job_name="RunningJob1",namespace="ns1"} 1
126
129
kube_job_status_failed{job_name="RunningJob1",namespace="ns1"} 0
130
+ kube_job_status_ready{job_name="RunningJob1",namespace="ns1"} 0
127
131
kube_job_status_start_time{job_name="RunningJob1",namespace="ns1"} 1.495800007e+09
128
132
kube_job_status_succeeded{job_name="RunningJob1",namespace="ns1"} 0
129
133
` ,
@@ -166,6 +170,7 @@ func TestJobStore(t *testing.T) {
166
170
kube_job_status_active{job_name="SuccessfulJob1",namespace="ns1"} 0
167
171
kube_job_status_completion_time{job_name="SuccessfulJob1",namespace="ns1"} 1.495803607e+09
168
172
kube_job_status_failed{job_name="SuccessfulJob1",namespace="ns1"} 0
173
+ kube_job_status_ready{job_name="SuccessfulJob1",namespace="ns1"} 0
169
174
kube_job_status_start_time{job_name="SuccessfulJob1",namespace="ns1"} 1.495800007e+09
170
175
kube_job_status_succeeded{job_name="SuccessfulJob1",namespace="ns1"} 1
171
176
` ,
@@ -210,6 +215,7 @@ func TestJobStore(t *testing.T) {
210
215
kube_job_status_failed{job_name="FailedJob1",namespace="ns1",reason="BackoffLimitExceeded"} 1
211
216
kube_job_status_failed{job_name="FailedJob1",namespace="ns1",reason="DeadlineExceeded"} 0
212
217
kube_job_status_failed{job_name="FailedJob1",namespace="ns1",reason="Evicted"} 0
218
+ kube_job_status_ready{job_name="FailedJob1",namespace="ns1"} 0
213
219
kube_job_status_start_time{job_name="FailedJob1",namespace="ns1"} 1.495807207e+09
214
220
kube_job_status_succeeded{job_name="FailedJob1",namespace="ns1"} 0
215
221
` ,
@@ -233,6 +239,7 @@ func TestJobStore(t *testing.T) {
233
239
kube_job_spec_active_deadline_seconds{job_name="FailedJobWithNoConditions",namespace="ns1"} 900
234
240
kube_job_status_active{job_name="FailedJobWithNoConditions",namespace="ns1"} 0
235
241
kube_job_status_failed{job_name="FailedJobWithNoConditions",namespace="ns1",reason=""} 1
242
+ kube_job_status_ready{job_name="FailedJobWithNoConditions",namespace="ns1"} 0
236
243
kube_job_status_succeeded{job_name="FailedJobWithNoConditions",namespace="ns1"} 0
237
244
` ,
238
245
},
@@ -274,6 +281,7 @@ func TestJobStore(t *testing.T) {
274
281
kube_job_status_active{job_name="SuccessfulJob2NoActiveDeadlineSeconds",namespace="ns1"} 0
275
282
kube_job_status_completion_time{job_name="SuccessfulJob2NoActiveDeadlineSeconds",namespace="ns1"} 1.495804207e+09
276
283
kube_job_status_failed{job_name="SuccessfulJob2NoActiveDeadlineSeconds",namespace="ns1"} 0
284
+ kube_job_status_ready{job_name="SuccessfulJob2NoActiveDeadlineSeconds",namespace="ns1"} 0
277
285
kube_job_status_start_time{job_name="SuccessfulJob2NoActiveDeadlineSeconds",namespace="ns1"} 1.495800607e+09
278
286
kube_job_status_succeeded{job_name="SuccessfulJob2NoActiveDeadlineSeconds",namespace="ns1"} 1
279
287
` ,
@@ -307,6 +315,7 @@ func TestJobStore(t *testing.T) {
307
315
kube_job_spec_parallelism{job_name="SuspendedNoActiveDeadlineSeconds",namespace="ns1"} 1
308
316
kube_job_status_active{job_name="SuspendedNoActiveDeadlineSeconds",namespace="ns1"} 0
309
317
kube_job_status_failed{job_name="SuspendedNoActiveDeadlineSeconds",namespace="ns1"} 0
318
+ kube_job_status_ready{job_name="SuspendedNoActiveDeadlineSeconds",namespace="ns1"} 0
310
319
kube_job_status_start_time{job_name="SuspendedNoActiveDeadlineSeconds",namespace="ns1"} 1.495800607e+09
311
320
kube_job_status_succeeded{job_name="SuspendedNoActiveDeadlineSeconds",namespace="ns1"} 0
312
321
kube_job_status_suspended{job_name="SuspendedNoActiveDeadlineSeconds",namespace="ns1"} 1
@@ -344,6 +353,29 @@ func TestJobStore(t *testing.T) {
344
353
kube_job_status_start_time{job_name="UnsuspendedNoActiveDeadlineSeconds",namespace="ns1"} 1.495800607e+09
345
354
kube_job_status_succeeded{job_name="UnsuspendedNoActiveDeadlineSeconds",namespace="ns1"} 0
346
355
kube_job_status_suspended{job_name="UnsuspendedNoActiveDeadlineSeconds",namespace="ns1"} 0
356
+ kube_job_status_ready{job_name="UnsuspendedNoActiveDeadlineSeconds",namespace="ns1"} 0
357
+ ` ,
358
+ },
359
+ // Test cases for ready pods metric
360
+ {
361
+ Obj : & v1batch.Job {
362
+ ObjectMeta : metav1.ObjectMeta {
363
+ Name : "job-with-ready-pods" ,
364
+ Namespace : "ns1" ,
365
+ UID : "job-123" ,
366
+ },
367
+ Status : v1batch.JobStatus {
368
+ Active : 2 ,
369
+ Ready : & readyValue ,
370
+ },
371
+ },
372
+ Want : metadata + `
373
+ kube_job_owner{job_name="job-with-ready-pods",namespace="ns1",owner_is_controller="",owner_kind="",owner_name=""} 1
374
+ kube_job_info{job_name="job-with-ready-pods",namespace="ns1"} 1
375
+ kube_job_status_active{job_name="job-with-ready-pods",namespace="ns1"} 2
376
+ kube_job_status_failed{job_name="job-with-ready-pods",namespace="ns1"} 0
377
+ kube_job_status_succeeded{job_name="job-with-ready-pods",namespace="ns1"} 0
378
+ kube_job_status_ready{job_name="job-with-ready-pods",namespace="ns1"} 1
347
379
` ,
348
380
},
349
381
}
0 commit comments