From 9168675bbb8a5865e04ecb61e4f3d68ee3cbb080 Mon Sep 17 00:00:00 2001 From: Jack Fan Date: Mon, 8 Jun 2020 16:09:49 -0400 Subject: [PATCH] Add condition to job status return in backend (#5215) * Add condition to job status return in backend * Add job condition display in frontend, fix backend test * Address reviewer comment --- src/app/backend/resource/job/list.go | 19 ++++++++++++++++++- src/app/backend/resource/job/list_test.go | 4 ++++ .../workloads/job/detail/template.html | 3 +++ src/app/frontend/typings/backendapi.ts | 7 +++++++ 4 files changed, 32 insertions(+), 1 deletion(-) diff --git a/src/app/backend/resource/job/list.go b/src/app/backend/resource/job/list.go index 301696d93..07c2e3ef8 100644 --- a/src/app/backend/resource/job/list.go +++ b/src/app/backend/resource/job/list.go @@ -59,6 +59,8 @@ type JobStatus struct { Status JobStatusType `json:"status"` // A human-readable description of the status of related job. Message string `json:"message"` + // Conditions describe the state of a job after it finishes. + Conditions []common.Condition `json:"conditions"` } // Job is a presentation layer view of Kubernetes Job resource. This means it is Job plus additional @@ -173,7 +175,7 @@ func toJob(job *batch.Job, podInfo *common.PodInfo) Job { } func getJobStatus(job *batch.Job) JobStatus { - jobStatus := JobStatus{Status: JobStatusRunning} + jobStatus := JobStatus{Status: JobStatusRunning, Conditions: getJobConditions(job)} for _, condition := range job.Status.Conditions { if condition.Type == batch.JobComplete && condition.Status == v1.ConditionTrue { jobStatus.Status = JobStatusComplete @@ -186,3 +188,18 @@ func getJobStatus(job *batch.Job) JobStatus { } return jobStatus } + +func getJobConditions(job *batch.Job) []common.Condition { + var conditions []common.Condition + for _, condition := range job.Status.Conditions { + conditions = append(conditions, common.Condition{ + Type: string(condition.Type), + Status: condition.Status, + LastProbeTime: condition.LastProbeTime, + LastTransitionTime: condition.LastTransitionTime, + Reason: condition.Reason, + Message: condition.Message, + }) + } + return conditions +} diff --git a/src/app/backend/resource/job/list_test.go b/src/app/backend/resource/job/list_test.go index 8ebe8d434..7a373b2b6 100644 --- a/src/app/backend/resource/job/list_test.go +++ b/src/app/backend/resource/job/list_test.go @@ -208,6 +208,10 @@ func TestGetJobListFromChannels(t *testing.T) { }, JobStatus: JobStatus{ Status: JobStatusFailed, + Conditions: []common.Condition{{ + Type: string(batch.JobFailed), + Status: v1.ConditionTrue, + }}, }, }}, Errors: []error{}, diff --git a/src/app/frontend/resource/workloads/job/detail/template.html b/src/app/frontend/resource/workloads/job/detail/template.html index 263856ce6..02439c187 100644 --- a/src/app/frontend/resource/workloads/job/detail/template.html +++ b/src/app/frontend/resource/workloads/job/detail/template.html @@ -71,6 +71,9 @@ limitations under the License. + + diff --git a/src/app/frontend/typings/backendapi.ts b/src/app/frontend/typings/backendapi.ts index 7b6b1e20a..6f847799c 100644 --- a/src/app/frontend/typings/backendapi.ts +++ b/src/app/frontend/typings/backendapi.ts @@ -33,6 +33,12 @@ export interface ObjectMeta { uid?: string; } +export interface JobStatus { + status: string; + message: string; + conditions: Condition[]; +} + export interface ResourceDetail { objectMeta: ObjectMeta; typeMeta: TypeMeta; @@ -480,6 +486,7 @@ export interface JobDetail extends ResourceDetail { eventList: EventList; parallelism: number; completions: number; + jobStatus: JobStatus; } export interface CronJobDetail extends ResourceDetail { -- GitLab