{"version":3,"sources":["jsdelivr-header.js","/npm/pm2-newrelic-plugin@2.1.0/pm2plugin.js"],"names":[],"mappings":"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","file":"/npm/pm2-newrelic-plugin@2.1.0/pm2plugin.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/pm2-newrelic-plugin@2.1.0/pm2plugin.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","const pmx = require('pmx');\r\nconst pm2 = require('pm2');\r\nconst os = require('os');\r\nconst request = require('request');\r\n\r\n// Version needs to be outside the config file\r\nconst ver = require('./package.json').version;\r\nconst guid = \"com.sealights.pm2plugin\";\r\nvar duration = 30;\r\n// Running restart \r\nvar restartList = {};\r\n\r\nfunction poll(conf)\r\n{\r\n\t// Connect or launch pm2\r\n\tpm2.connect(function(err){\r\n\t\tif(err) {\r\n\t\t\tconsole.error('Error connecting to pm2', err);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Pull down the list\r\n\t\tpm2.list(function(err, list) {\r\n\t\t\t// Start an output message\r\n\t\t\tvar msg = {};\r\n\r\n\t\t\t// Create the agent subsection\r\n\t\t\tvar agent = {};\r\n\t\t\tmsg.agent = agent;\r\n\t\t\tagent.host = os.hostname();\r\n\t\t\tagent.pid = process.pid;\r\n\t\t\tagent.version = ver;\r\n\r\n\t\t\t// Create the components array (with only 1 value)\r\n\t\t\tvar components = [];\r\n\t\t\tmsg.components = components;\r\n\t\t\tcomponents[0] = {};\r\n\t\t\tcomponents[0].name = os.hostname();\r\n\t\t\tcomponents[0].guid = guid;\r\n\t\t\tcomponents[0].duration = duration;\r\n\r\n\t\t\t// Create the metrics subsection\r\n\t\t\tvar metrics = {};\r\n\t\t\tcomponents[0].metrics = metrics;\r\n\r\n\t\t\t// Process Totals\r\n\t\t\tvar processArr = {};\r\n\r\n\t\t\t// PM2 Totals\r\n\t\t\tvar totalUptime = 0;\r\n\t\t\tvar totalRestarts = 0;\r\n\t\t\tvar totalCpu = 0;\r\n\t\t\tvar totalMemory = 0;\r\n\t\t\tvar totalIntervalRestarts = 0;\r\n\r\n\t\t\t// Pull down data for each function\r\n\t\t\tlist.forEach(function(proc) {\r\n\r\n\t\t\t\t// Get the metrics\r\n\t\t\t\tvar processPid = proc.pm_id;\r\n\t\t\t\tvar processName = proc.pm2_env.name;\r\n\t\t\t\tvar processUptime = calcUptime(proc.pm2_env.pm_uptime);\r\n\t\t\t\tvar processTotalRestarts = proc.pm2_env.restart_time;\r\n\t\t\t\tvar processCpu = proc.monit.cpu;\r\n\t\t\t\tvar processMemory = proc.monit.memory;\r\n\r\n\t\t\t\t// Calculate per interval restarts\r\n\t\t\t\tvar processPreviousRestarts = restartList[processName] || 0;\r\n\t\t\t\tvar processIntervalRestarts = processTotalRestarts - processPreviousRestarts;\r\n\t\t\t\trestartList[processName] = processTotalRestarts;\r\n\r\n\t\t\t\t// Store the metrics\r\n\t\t\t\tvar namePrefix = 'Component/id/' + processPid + '/' + processName;\r\n\t\t\t\tmetrics[namePrefix + '[uptime]'] = processUptime;\r\n\t\t\t\tmetrics[namePrefix + '[restarts]'] = processTotalRestarts;\r\n\t\t\t\tmetrics[namePrefix + '[cpu]'] = processCpu;\r\n\t\t\t\tmetrics[namePrefix + '[memory]'] = processMemory;\r\n\t\t\t\tmetrics[namePrefix + '[intervalRestarts]'] = processIntervalRestarts;\r\n\r\n\t\t\t\t// Increment the Process totals\r\n\t\t\t\tvar currentProcess = processArr[processName];\r\n\t\t\t\tif (currentProcess != null) {\r\n\t\t\t\t\tcurrentProcess.count++;\r\n\t\t\t\t\tcurrentProcess.uptime += processUptime;\r\n\t\t\t\t\tcurrentProcess.totalRestarts += processTotalRestarts;\r\n\t\t\t\t\tcurrentProcess.cpu += processCpu;\r\n\t\t\t\t\tcurrentProcess.memory += processMemory;\r\n\t\t\t\t\tcurrentProcess.intervalRestarts += processIntervalRestarts;\r\n\t\t\t\t\tprocessArr[processName] = currentProcess;\r\n\t\t\t\t} else {\r\n\t\t\t\t\t// Initialize the data for this process\r\n\t\t\t\t\tprocessArr[processName] = {\r\n\t\t\t\t\t\t'count': 1,\r\n\t\t\t\t\t\t'uptime': processUptime,\r\n\t\t\t\t\t\t'totalRestarts': processTotalRestarts,\r\n\t\t\t\t\t\t'cpu': processCpu,\r\n\t\t\t\t\t\t'memory': processMemory,\r\n\t\t\t\t\t\t'intervalRestarts': processIntervalRestarts\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Increment the PM2 totals\r\n\t\t\t\ttotalUptime += processUptime;\r\n\t\t\t\ttotalRestarts += processTotalRestarts;\r\n\t\t\t\ttotalCpu += processCpu;\r\n\t\t\t\ttotalMemory += processMemory;\r\n\t\t\t\ttotalIntervalRestarts += processIntervalRestarts;\r\n\t\t\t});\r\n\r\n\t\t\t// Create the Process rollup metrics\r\n\t\t\tfor (var processName in processArr) {\r\n\t\t\t\tvar currentProcess = processArr[processName];\r\n\t\t\t\tvar namePrefix = 'Component/process/' + processName;\r\n\t\t\t\tmetrics[namePrefix + '[count]'] = currentProcess.count;\r\n\t\t\t\tmetrics[namePrefix + '[uptime]'] = currentProcess.uptime;\r\n\t\t\t\tmetrics[namePrefix + '[restarts]'] = currentProcess.totalRestarts;\r\n\t\t\t\tmetrics[namePrefix + '[cpu]'] = currentProcess.cpu;\r\n\t\t\t\tmetrics[namePrefix + '[memory]'] = currentProcess.memory;\r\n\t\t\t\tmetrics[namePrefix + '[intervalRestarts]'] = currentProcess.intervalRestarts;\r\n\t\t\t}\r\n\r\n\t\t\t// Create the PM2 rollup metrics\r\n\t\t\tmetrics['Component/rollup/all[uptime]'] = totalUptime;\r\n\t\t\tmetrics['Component/rollup/all[restarts]'] = totalRestarts;\r\n\t\t\tmetrics['Component/rollup/all[cpu]'] = totalCpu;\r\n\t\t\tmetrics['Component/rollup/all[memory]'] = totalMemory;\r\n\t\t\tmetrics['Component/rollup/all[intervalRestarts]'] = totalIntervalRestarts;\r\n\t\r\n\t\t\t// console.log(msg.components[0]);\r\n\t\t\tvar timeStart = new Date().valueOf();\r\n\t\t\tpostToNewRelic(msg, conf, function(){\r\n\t\t\t\t// Disconnect from PM2\r\n\t\t\t\tpm2.disconnect();\r\n\t\t\t\tvar timeEnd = new Date().valueOf();\r\n\t\t\t\tvar submissionTime = (timeEnd-timeStart);\r\n\t\t\t\tvar wait = (duration*1000) - submissionTime; //Subtract submission time from the desired interval\r\n\t\t\t\tif (wait<0) wait = 0;\r\n\t\t\t\t// Re-run every duration (30s)\r\n\t\t\t\tsetTimeout(function() {\r\n\t\t\t\t\tpoll(conf);\r\n\t\t\t\t}, wait);\r\n\t\t\t});\t\t\t\r\n\t\t});\r\n\t});\r\n}\r\n\r\nfunction postToNewRelic(msg, conf, callback) {\r\n\tif (!conf.nrlicense) { console.log('no license, not sending'); return callback(null); }\r\n\tvar msgString = JSON.stringify(msg);\r\n\t// console.log(msg.components[0].metrics);\r\n\trequest({\r\n\t\turl: \"https://platform-api.newrelic.com/platform/v1/metrics\",\r\n\t\tmethod: \"POST\",\r\n\t\theaders: {\r\n\t\t\t'Content-Type': 'application/json',\r\n\t\t\t'Accept': 'application/json',\r\n\t\t\t'X-License-Key': conf.nrlicense\r\n\t\t},\r\n\t\tbody: msgString\r\n\t}, function (err, httpResponse, body) {\r\n\t\tif (!err) {\r\n\t\t\tconsole.log('New Relic Reponse: %d', httpResponse.statusCode);\r\n\t\t\tif(body) {\r\n\t\t\t\tconsole.log('Response from NR: ' + body);\r\n\t\t\t}\r\n\t\t\tcallback(null);\r\n\t\t} else {\r\n\t\t\tconsole.log('*** ERROR ***');\r\n\t\t\tconsole.log(err);\r\n\t\t\tcallback(err);\r\n\t\t}\r\n\t});\r\n\t// console.log('Just posted to New Relic: %s', msgString);\r\n}\r\n\r\nfunction calcUptime(date) {\r\n\tvar seconds = Math.floor((new Date() - date) / 1000);\r\n\treturn seconds;\r\n}\r\n\r\nconsole.log('Starting PM2 Plugin version: ' + ver);\r\npmx.initModule({}, function(err, conf) {\r\n\tconf = conf.module_conf;\r\n\tif (!conf.nrlicense) {\r\n\t\tconsole.error('nrlicense is not configured. Plugin is disabled');\t\r\n\t}\r\n\tpoll(conf);\r\n});"]}