blob: 070f7c9a4b73888d2c46f9b57be5d262b36a7b0e [file] [log] [blame]
// Licensed to the Apache Software Foundation (ASF) under one or more contributor
// license agreements; and to You under the Apache License, Version 2.0.
module.exports = function(logger, utils) {
// Active Endpoint
this.endPoint = '/active';
var hostMachine = process.env.HOST_MACHINE;
this.active = function(req, res) {
var method = 'active';
var response = {
worker: utils.worker,
host: utils.host,
hostMachine: hostMachine,
active: utils.host === utils.activeHost
};
if (req.query && req.query.active) {
var query = req.query.active.toLowerCase();
if (query !== 'true' && query !== 'false') {
response.error = "Invalid query string";
res.send(response);
return;
}
var redundantHost = utils.host === `${utils.hostPrefix}0` ? `${utils.hostPrefix}1` : `${utils.hostPrefix}0`;
var activeHost = query === 'true' ? utils.host : redundantHost;
if (utils.activeHost !== activeHost) {
if (utils.redisClient) {
utils.redisClient.hsetAsync(utils.redisKey, utils.redisField, activeHost)
.then(() => {
response.active = 'swapping';
utils.redisClient.publish(utils.redisKey, activeHost);
logger.info(method, 'Active host swap in progress');
res.send(response);
})
.catch(err => {
response.error = err;
res.send(response);
});
}
else {
response.active = utils.host === activeHost;
utils.activeHost = activeHost;
var message = 'The active state has changed';
logger.info(method, message, 'to', activeHost);
response.message = message;
res.send(response);
}
}
else {
res.send(response);
}
}
else {
res.send(response);
}
};
};