68 lines
2.2 KiB
JavaScript
68 lines
2.2 KiB
JavaScript
const _ = require("lodash");
|
|
const queries = require("../graphql-client/queries");
|
|
const moment = require("moment");
|
|
const durationToHumanReadable = require("../utils/durationToHumanReadable");
|
|
const calculateStatusDuration = require("../utils/calculateStatusDuration");
|
|
|
|
const jobLifecycle = async (req, res) => {
|
|
// Grab the jobids and statuses from the request body
|
|
const {
|
|
jobids,
|
|
statuses
|
|
} = req.body;
|
|
|
|
if (!jobids) {
|
|
return res.status(400).json({
|
|
error: "Missing jobids"
|
|
});
|
|
}
|
|
|
|
const jobIDs = _.isArray(jobids) ? jobids : [jobids];
|
|
const client = req.userGraphQLClient;
|
|
const resp = await client.request(queries.QUERY_TRANSITIONS_BY_JOBID, {jobids: jobIDs,});
|
|
|
|
const transitions = resp.transitions;
|
|
|
|
if (!transitions) {
|
|
return res.status(200).json({
|
|
jobIDs,
|
|
transitions: []
|
|
});
|
|
|
|
}
|
|
|
|
const transitionsByJobId = _.groupBy(resp.transitions, 'jobid');
|
|
|
|
const groupedTransitions = {};
|
|
|
|
for (let jobId in transitionsByJobId) {
|
|
let lifecycle = transitionsByJobId[jobId].map(transition => {
|
|
transition.start_readable = transition.start ? moment(transition.start).fromNow() : 'N/A';
|
|
transition.end_readable = transition.end ? moment(transition.end).fromNow() : 'N/A';
|
|
|
|
if (transition.duration) {
|
|
transition.duration_seconds = Math.round(transition.duration / 1000);
|
|
transition.duration_minutes = Math.round(transition.duration_seconds / 60);
|
|
let duration = moment.duration(transition.duration);
|
|
transition.duration_readable = durationToHumanReadable(duration);
|
|
} else {
|
|
transition.duration_seconds = 0;
|
|
transition.duration_minutes = 0;
|
|
transition.duration_readable = 'N/A';
|
|
}
|
|
return transition;
|
|
});
|
|
|
|
groupedTransitions[jobId] = {
|
|
lifecycle: lifecycle,
|
|
durations: calculateStatusDuration(lifecycle, statuses),
|
|
};
|
|
}
|
|
|
|
return res.status(200).json({
|
|
jobIDs,
|
|
transition: groupedTransitions,
|
|
});
|
|
}
|
|
|
|
module.exports = jobLifecycle; |