consul
Version:
Consul client
116 lines (88 loc) • 2.3 kB
JavaScript
/**
* Events
*/
;
/**
* Module dependencies.
*/
var errors = require('./errors');
var utils = require('./utils');
/**
* Initialize a new `Event` client.
*/
function Event(consul) {
this.consul = consul;
}
/**
* Fires a new user event
*/
Event.prototype.fire = function(opts, callback) {
if (arguments.length === 3) {
opts = {
name: arguments[0],
payload: arguments[1],
};
callback = arguments[2];
} else if (typeof opts === 'string') {
opts = { name: opts };
}
opts = utils.normalizeKeys(opts);
opts = utils.defaults(opts, this.consul._defaults);
var req = {
name: 'event.fire',
path: '/event/fire/{name}',
params: { name: opts.name },
query: {},
};
if (!opts.name) {
return callback(this.consul._err(errors.Validation('name required'), req));
}
var buffer;
if (opts.hasOwnProperty('payload')) {
buffer = Buffer.isBuffer(opts.payload);
req.body = buffer ? opts.payload : new Buffer(opts.payload);
}
if (opts.node) req.query.node = opts.node;
if (opts.service) req.query.service = opts.service;
if (opts.tag) req.query.tag = opts.tag;
utils.options(req, opts);
this.consul._put(req, utils.body, function(err, data, res) {
if (err) return callback(err, undefined, res);
if (data.hasOwnProperty('Payload')) {
data.Payload = utils.decode(data.Payload, { buffer: buffer });
}
callback(null, data, res);
});
};
/**
* Lists the most recent events an agent has seen
*/
Event.prototype.list = function(opts, callback) {
if (typeof opts === 'string') {
opts = { name: opts };
} else if (!callback) {
callback = opts;
opts = {};
}
opts = utils.normalizeKeys(opts);
opts = utils.defaults(opts, this.consul._defaults);
var req = {
name: 'event.list',
path: '/event/list',
query: {},
};
if (opts.name) req.query.name = opts.name;
utils.options(req, opts);
this.consul._get(req, utils.body, function(err, data, res) {
if (err) return callback(err, undefined, res);
data.forEach(function(item) {
if (!item.hasOwnProperty('Payload')) return;
item.Payload = utils.decode(item.Payload, opts);
});
callback(null, data, res);
});
};
/**
* Module exports.
*/
exports.Event = Event;