mirror of
https://github.com/Unitech/pm2.git
synced 2025-12-08 20:35:53 +00:00
164 lines
3.4 KiB
JavaScript
164 lines
3.4 KiB
JavaScript
|
|
var pmx = require('pmx');
|
|
|
|
/******************************
|
|
* ______ _______ ______
|
|
* | __ \ | |__ |
|
|
* | __/ | __|
|
|
* |___| |__|_|__|______|
|
|
*
|
|
* PM2 Module Sample
|
|
*
|
|
******************************/
|
|
|
|
/**
|
|
* Module system documentation
|
|
* http://bit.ly/1hnpcgu
|
|
*
|
|
* Start module in development mode
|
|
* $ cd to my-module
|
|
* $ pm2 install .
|
|
*
|
|
* Official modules are published here
|
|
* https://github.com/pm2-hive
|
|
*/
|
|
|
|
/**
|
|
* Module Entry Point
|
|
*
|
|
* We first initialize the module by calling
|
|
* pmx.initModule({}, cb);
|
|
*
|
|
*
|
|
* More options: http://bit.ly/1EpagZS
|
|
*
|
|
*/
|
|
pmx.initModule({
|
|
|
|
// Options related to the display style on Keymetrics
|
|
widget : {
|
|
|
|
// Logo displayed
|
|
logo : 'https://app.keymetrics.io/img/logo/keymetrics-300.png',
|
|
|
|
// Module colors
|
|
// 0 = main element
|
|
// 1 = secondary
|
|
// 2 = main border
|
|
// 3 = secondary border
|
|
theme : ['#141A1F', '#222222', '#3ff', '#3ff'],
|
|
|
|
// Section to show / hide
|
|
el : {
|
|
probes : true,
|
|
actions : true
|
|
},
|
|
|
|
// Main block to show / hide
|
|
block : {
|
|
actions : false,
|
|
issues : true,
|
|
meta : true,
|
|
|
|
// Custom metrics to put in BIG
|
|
main_probes : ['test-probe']
|
|
}
|
|
|
|
}
|
|
|
|
}, function(err, conf) {
|
|
|
|
console.log(conf);
|
|
|
|
/**
|
|
* Module specifics like connecting to a database and
|
|
* displaying some metrics
|
|
*/
|
|
|
|
/**
|
|
* Custom Metrics
|
|
*
|
|
* Let's expose some metrics that will be displayed into Keymetrics
|
|
* For more documentation about metrics: http://bit.ly/1PZrMFB
|
|
*/
|
|
var Probe = pmx.probe();
|
|
|
|
var value_to_inspect = 0;
|
|
|
|
/**
|
|
* .metric, .counter, .meter, .histogram are also available (cf doc)
|
|
*/
|
|
var val = Probe.metric({
|
|
name : 'test-probe',
|
|
value : function() {
|
|
return value_to_inspect;
|
|
},
|
|
/**
|
|
* Here we set a default value threshold, to receive a notification
|
|
* These options can be overriden via Keymetrics or via pm2
|
|
* More: http://bit.ly/1O02aap
|
|
*/
|
|
alert : {
|
|
mode : 'threshold',
|
|
value : 20,
|
|
msg : 'test-probe alert!',
|
|
action : function(val) {
|
|
// Besides the automatic alert sent via Keymetrics
|
|
// You can also configure your own logic to do something
|
|
console.log('Value has reached %d', val);
|
|
}
|
|
}
|
|
});
|
|
|
|
setInterval(function() {
|
|
// Then we can see that this value increase over the time in Keymetrics
|
|
value_to_inspect++;
|
|
}, 300);
|
|
|
|
|
|
/**
|
|
* Simple Actions
|
|
*
|
|
* Now let's expose some triggerable functions
|
|
* Once created you can trigger this from Keymetrics
|
|
*
|
|
*/
|
|
pmx.action('env', function(reply) {
|
|
return reply({
|
|
env: process.env
|
|
});
|
|
});
|
|
|
|
/**
|
|
* Scoped Actions
|
|
*
|
|
* This are for long running remote function
|
|
* This allow also to res.emit logs to see the progress
|
|
*
|
|
**/
|
|
var spawn = require('child_process').spawn;
|
|
|
|
pmx.scopedAction('lsof cmd', function(options, res) {
|
|
var child = spawn('lsof', []);
|
|
|
|
child.stdout.on('data', function(chunk) {
|
|
chunk.toString().split('\n').forEach(function(line) {
|
|
/**
|
|
* Here we send logs attached to this command
|
|
*/
|
|
res.send(line);
|
|
});
|
|
});
|
|
|
|
child.stdout.on('end', function(chunk) {
|
|
/**
|
|
* Then we emit end to finalize the function
|
|
*/
|
|
res.end('end');
|
|
});
|
|
|
|
});
|
|
|
|
|
|
});
|