openhim-core
Version:
The OpenHIM core application that provides logging and routing of http requests
114 lines (95 loc) • 3.31 kB
JavaScript
var Q, SDC, Task, Transaction, application, config, domain, logger, os, sdc, statsdServer;
Q = require("q");
Transaction = require("../model/transactions").Transaction;
Task = require("../model/tasks").Task;
logger = require("winston");
config = require('../config/config');
statsdServer = config.get('statsd');
application = config.get('application');
SDC = require('statsd-client');
os = require('os');
domain = (os.hostname()) + "." + application.name + ".appMetrics";
sdc = new SDC(statsdServer);
exports.setAttemptNumber = function(ctx, done) {
return Transaction.findOne({
_id: ctx.parentID
}, function(err, transaction) {
if (transaction.autoRetry) {
if (transaction.autoRetryAttempt != null) {
ctx.currentAttempt = transaction.autoRetryAttempt + 1;
} else {
ctx.currentAttempt = 1;
}
}
return transaction.save(function(err, tx) {
if (err) {
logger.error("Original transaction " + transaction._id + " could not be updated: " + err);
} else {
logger.debug("Original transaction #" + tx._id + " Updated successfully with attempt number");
}
return done(null);
});
});
};
exports.updateOriginalTransaction = function(ctx, done) {
return Transaction.findOne({
_id: ctx.parentID
}, function(err, transaction) {
transaction.childIDs.push(ctx.transactionId);
transaction.wasRerun = true;
return transaction.save(function(err, tx) {
if (err) {
logger.error("Original transaction " + transaction._id + " could not be updated: " + err);
} else {
logger.debug("Original transaction " + tx._id + " - Updated successfully with childID");
}
return done(null, transaction);
});
});
};
exports.updateTask = function(ctx, done) {
return Task.findOne({
_id: ctx.taskID
}, function(err, task) {
task.transactions.forEach(function(tx) {
if (tx.tid === ctx.parentID) {
tx.rerunID = ctx.transactionId;
return tx.rerunStatus = ctx.transactionStatus;
}
});
return task.save(function(err, task) {
if (err) {
logger.info("Rerun Task " + ctx.taskID + " could not be updated: " + err);
} else {
logger.info("Rerun Task " + ctx.taskID + " - Updated successfully with rerun transaction details.");
}
return done(null, task);
});
});
};
/*
* Koa middleware for updating original transaction with childID
*/
exports.koaMiddleware = function*(next) {
var setAttemptNumber, startTime, updateOriginalTransaction, updateTask;
if (statsdServer.enabled) {
startTime = new Date();
}
setAttemptNumber = Q.denodeify(exports.setAttemptNumber);
(yield setAttemptNumber(this));
if (statsdServer.enabled) {
sdc.timing(domain + ".rerunUpdateTransactionMiddleware.setAttemptNumber", startTime);
}
(yield next);
if (statsdServer.enabled) {
startTime = new Date();
}
updateOriginalTransaction = Q.denodeify(exports.updateOriginalTransaction);
(yield updateOriginalTransaction(this));
updateTask = Q.denodeify(exports.updateTask);
(yield updateTask(this));
if (statsdServer.enabled) {
return sdc.timing(domain + ".rerunUpdateTransactionMiddleware", startTime);
}
};
//# sourceMappingURL=rerunUpdateTransactionTask.js.map