- Progress Update

Signed-off-by: Dave Richer <dave@imexsystems.ca>
This commit is contained in:
Dave Richer
2024-01-23 12:35:58 -05:00
parent cfe0727447
commit f59bdf9030
3 changed files with 147 additions and 33 deletions

View File

@@ -518,8 +518,8 @@ exports.QUERY_PAYMENTS_FOR_EXPORT = `
}
}`;
exports.QUERY_TRANSITIONS_BY_JOBID = `query QUERY_TRANSITIONS_BY_JOBID($jobid: uuid!) {
transitions(where: {jobid: {_eq: $jobid}}, order_by: {id: asc}) {
exports.QUERY_TRANSITIONS_BY_JOBID = `query QUERY_TRANSITIONS_BY_JOBID($jobids: [uuid!]!) {
transitions(where: {jobid: {_in: $jobids}}, order_by: {created_at: asc}) {
start
end
value
@@ -529,6 +529,7 @@ exports.QUERY_TRANSITIONS_BY_JOBID = `query QUERY_TRANSITIONS_BY_JOBID($jobid: u
type
created_at
updated_at
jobid
}
}`;

View File

@@ -1,28 +1,73 @@
const _ = require("lodash");
const queries = require("../graphql-client/queries");
const jobLifecycle = (req, res) => {
const calculateStatusDuration = (transitions) => {
let statusDuration = {};
transitions.forEach((transition, index) => {
let duration = transition.duration;
// If there is no prev_value, it is the first transition
if (!transition.prev_value) {
statusDuration[transition.value] = duration;
}
// If there is no next_value, it is the last transition (the active one)
else if (!transition.next_value) {
if (statusDuration[transition.value]) {
statusDuration[transition.value] += duration;
} else {
statusDuration[transition.value] = duration;
}
}
// For all other transitions
else {
if (statusDuration[transition.value]) {
statusDuration[transition.value] += duration;
} else {
statusDuration[transition.value] = duration;
}
}
});
return statusDuration;
}
const jobLifecycle = async (req, res) => {
const {jobids} = req.body;
return _.isArray(jobids) ?
handleMultipleJobs(jobids, req, res) :
handleSingleJob(jobids, req, res);
};
const jobIDs = _.isArray(jobids) ? jobids : [jobids];
const handleMultipleJobs = (jobIDs, req, res) => {
return res.status(200).send(jobIDs);
}
const handleSingleJob = async (jobIds, req, res) => {
const client = req.userGraphQLClient;
const resp = await client.request(queries.QUERY_TRANSITIONS_BY_JOBID, {jobid: jobIds,});
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 response = {
jobIds,
data: resp
}
return res.status(200).json(response);
const transitionsByJobId = _.groupBy(resp.transitions, 'jobid');
const groupedTransitions = {};
for (let jobId in transitionsByJobId) {
groupedTransitions[jobId] = {
lifecycle: transitionsByJobId[jobId],
durations: calculateStatusDuration(transitionsByJobId[jobId])
};
}
return res.status(200).json({
jobIDs,
transition: groupedTransitions,
});
}
module.exports = jobLifecycle;