diff --git a/client/package.json b/client/package.json index 41d63408093..7943980114f 100644 --- a/client/package.json +++ b/client/package.json @@ -32,6 +32,7 @@ "bootstrap-vue": "^2.15.0", "citation-js": "^0.5.0-alpha.5", "d3": "3", + "date-fns": "^2.21.1", "decode-uri-component": "^0.2.0", "deep-diff": "^1.0.2", "deep-equal": "^2.0.5", diff --git a/client/src/components/JobInformation/JobInformation.vue b/client/src/components/JobInformation/JobInformation.vue index 38eb4b4e914..117b229a2f5 100644 --- a/client/src/components/JobInformation/JobInformation.vue +++ b/client/src/components/JobInformation/JobInformation.vue @@ -30,6 +30,12 @@ + + Time To Finish + + {{ runTime }} + + @@ -45,6 +51,7 @@ + Job API ID: {{ job.id }} @@ -67,6 +74,8 @@ import DecodedId from "../DecodedId.vue"; import CodeRow from "./CodeRow.vue"; import UtcDate from "components/UtcDate"; import CopyToClipboard from "components/CopyToClipboard"; +import JOB_STATES_MODEL from "mvc/history/job-states-model"; +import { formatDuration, intervalToDuration } from "date-fns"; export default { components: { @@ -90,8 +99,15 @@ export default { }, computed: { job: function () { - const job = this.$store.getters.job(this.job_id); - return job; + return this.$store.getters.job(this.job_id); + }, + runTime: function () { + return formatDuration( + intervalToDuration({ start: new Date(this.job.create_time), end: new Date(this.job.update_time) }) + ); + }, + jobIsTerminal() { + return !JOB_STATES_MODEL.NON_TERMINAL_STATES.includes(this.job.state); }, }, methods: { diff --git a/client/src/components/admin/JobDetails.vue b/client/src/components/admin/JobDetails.vue index 6abeb4cc934..aec7aa7cfcc 100644 --- a/client/src/components/admin/JobDetails.vue +++ b/client/src/components/admin/JobDetails.vue @@ -1,8 +1,30 @@ @@ -10,9 +32,13 @@