PMX is a module that allows you to create advanced interactions with Keymetrics.
With it you can:
- Trigger remote actions / functions
- Analyze custom metrics / variables (with utilities like Histogram/Counter/Metric/Meters)
- Report errors (uncaught exceptions and custom errors)
- Emit events
- Analyze HTTP latency
Install PMX and add it to your package.json via:
$ npm install pmx --saveThen init the module to monitor HTTP, Errors and diverse metrics.
var pmx = require('pmx').init(); // By default everything is enabled and ignore_routes is emptyOr choose what to monitor.
var pmx = require('pmx').init({
http : true, // (Default: true)
ignore_routes : [/socket\.io/, /notFound/], // Ignore http routes with this pattern (Default: [])
errors : true,
custom_probes : true
});Emit events and get historical and statistics:
var pmx = require('pmx');
pmx.emit('user:register', {
user : 'Alex registered',
email : 'thorustor@gmail.com'
});var pmx = require('pmx');
pmx.action('db:clean', { comment : 'Description for this action' }, function(reply) {
clean.db(function() {
/**
* reply() must be called at the end of the action
*/
reply({success : true});
});
});Note: in case of exceptions in the function, your app will not be affected
Catch uncaught exceptions:
var pmx = require('pmx').init();Attach more data from errors that happens in Express:
var pmx = require('pmx');
app.get('/' ...);
app.post(...);
app.use(pmx.expressErrorHandler());Trigger custom errors:
var pmx = require('pmx');
pmx.notify({ success : false });
pmx.notify('This is an error');
pmx.notify(new Error('This is an error'));Monitor routes, latency and codes. REST compliant.
pmx.http(); // You must do this BEFORE any require('http')Ignore some routes by passing a list of regular expressions.
pmx.http({
http : true, // (Default: true)
ignore_routes : [/socket\.io/, /notFound/] // Ignore http routes with this pattern (Default: [])
});This can also be done via pmx.init()
pmx.init({
http : true, // (Default: true)
ignore_routes : [/socket\.io/, /notFound/] // Ignore http routes with this pattern (Default: [])
});This module is enabled by default if you called pmx with the init() function.
Measure critical segments of you code thanks to 4 kind of probes:
- Simple metrics: Values that can be read instantly
- Monitor variable value
- Counter: Things that increment or decrement
- Downloads being processed, user connected
- Meter: Things that are measured as events / interval
- Request per minute for a http server
- Histogram: Keeps a resevoir of statistically relevant values biased towards the last 5 minutes to explore their distribution
- Monitor the mean of execution of a query into database
name: The probe name as is will be displayed on the Keymetrics dashboardagg_type: This param is optionnal, it can besum,max,min,avg(default) ornone. It will impact the way the probe data are aggregated within the Keymetrics backend. Usenoneif this is irrelevant (eg: constant or string value).
Values that can be read instantly.
var probe = pmx.probe();
var metric = probe.metric({
name : 'Realtime user',
agg_type: 'max',
value : function() {
return Object.keys(users).length;
}
});Things that increment or decrement.
var probe = pmx.probe();
var counter = probe.counter({
name : 'Downloads',
agg_type: 'sum'
});
http.createServer(function(req, res) {
counter.inc();
req.on('end', function() {
counter.dec();
});
});Things that are measured as events / interval.
var probe = pmx.probe();
var meter = probe.meter({
name : 'req/min',
agg_type: 'avg'
seconds : 60
});
http.createServer(function(req, res) {
meter.mark();
res.end({success:true});
});seconds option is the measurement rate of the meter, default is 1 seconds
Keeps a resevoir of statistically relevant values biased towards the last 5 minutes to explore their distribution.
var probe = pmx.probe();
var histogram = probe.histogram({
name : 'latency',
measurement : 'mean'
});
var latency = 0;
setInterval(function() {
latency = Math.round(Math.random() * 100);
histogram.update(latency);
}, 100);measurement option can be:
- min: The lowest observed value.
- max: The highest observed value.
- sum: The sum of all observed values.
- variance: The variance of all observed values.
- mean: The average of all observed values.
- stddev: The stddev of all observed values.
- count: The number of observed values.
- median: 50% of all values in the resevoir are at or below this value.
- p75: See median, 75% percentile.
- p95: See median, 95% percentile.
- p99: See median, 99% percentile.
- p999: See median, 99.9% percentile.
process.env.MODULE_DEBUG = true;
var pmx = require('pmx');
var conf = pmx.initModule();
MIT

