1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 | 'use strict'
|
8 |
|
9 | const path = require('path')
|
10 | let PM2_HOME
|
11 |
|
12 | if (process.env.PM2_HOME) {
|
13 | PM2_HOME = process.env.PM2_HOME
|
14 | } else if (process.env.HOME && !process.env.HOMEPATH) {
|
15 | PM2_HOME = path.resolve(process.env.HOME, '.pm2')
|
16 | } else if (process.env.HOME || process.env.HOMEPATH) {
|
17 | PM2_HOME = path.resolve(process.env.HOMEDRIVE, process.env.HOME || process.env.HOMEPATH, '.pm2')
|
18 | } else {
|
19 | PM2_HOME = path.resolve('/etc', '.pm2')
|
20 | }
|
21 |
|
22 | const getUniqueId = () => {
|
23 | var s = []
|
24 | var hexDigits = '0123456789abcdef'
|
25 | for (var i = 0; i < 36; i++) {
|
26 | s[i] = hexDigits.substr(Math.floor(Math.random() * 0x10), 1)
|
27 | }
|
28 | s[14] = '4'
|
29 | s[19] = hexDigits.substr((s[19] & 0x3) | 0x8, 1)
|
30 | s[8] = s[13] = s[18] = s[23] = '-'
|
31 | return s.join('')
|
32 | }
|
33 |
|
34 |
|
35 |
|
36 |
|
37 |
|
38 |
|
39 |
|
40 | const useIfDefined = (value, fallback) => {
|
41 | if (typeof value === 'undefined') {
|
42 | return fallback
|
43 | } else {
|
44 | return value === 'true'
|
45 | }
|
46 | }
|
47 |
|
48 | let cst = {
|
49 | DEBUG: process.env.PM2_DEBUG || false,
|
50 | KEYMETRICS_ROOT_URL: process.env.KEYMETRICS_NODE || 'https://root.keymetrics.io',
|
51 |
|
52 | PROTOCOL_VERSION: 1,
|
53 | COMPRESS_PROTOCOL: false,
|
54 | STATUS_INTERVAL: 1000,
|
55 | PACKET_QUEUE_SIZE: 200,
|
56 |
|
57 | LOGS_BUFFER: 8,
|
58 | CONTEXT_ON_ERROR: 4,
|
59 | TRANSACTION_FLUSH_INTERVAL: useIfDefined(process.env.PM2_DEBUG, process.env.NODE_ENV === 'local_test') ? 1000 : 30000,
|
60 | AGGREGATION_DURATION: useIfDefined(process.env.PM2_DEBUG, process.env.NODE_ENV === 'test' || process.env.NODE_ENV === 'development') ? 0 : 60 * 10,
|
61 | TRACE_FLUSH_INTERVAL: useIfDefined(process.env.PM2_DEBUG, process.env.NODE_ENV === 'local_test') ? 1000 : 60000,
|
62 |
|
63 | PM2_HOME: PM2_HOME,
|
64 | DAEMON_RPC_PORT: path.resolve(PM2_HOME, 'rpc.sock'),
|
65 | DAEMON_PUB_PORT: path.resolve(PM2_HOME, 'pub.sock'),
|
66 | INTERACTOR_RPC_PORT: path.resolve(PM2_HOME, 'interactor.sock'),
|
67 | INTERACTOR_LOG_FILE_PATH: path.resolve(PM2_HOME, 'agent.log'),
|
68 | INTERACTOR_PID_PATH: path.resolve(PM2_HOME, 'agent.pid'),
|
69 | INTERACTION_CONF: path.resolve(PM2_HOME, 'agent.json5'),
|
70 |
|
71 | DUMP_FILE_PATH: path.resolve(PM2_HOME, 'dump.pm2'),
|
72 |
|
73 | UNIQUE_SERVER_ID: getUniqueId(),
|
74 |
|
75 | ENABLE_CONTEXT_ON_ERROR: useIfDefined(process.env.PM2_AGENT_ENABLE_CONTEXT_ON_ERROR, true),
|
76 |
|
77 | SUCCESS_EXIT: 0,
|
78 | ERROR_EXIT: 1
|
79 | }
|
80 |
|
81 |
|
82 | let keys = Object.keys(cst)
|
83 | keys.forEach((key) => {
|
84 | var envKey = key.indexOf('PM2_') > -1 ? key : 'PM2_' + key
|
85 | if (process.env[envKey] && key !== 'PM2_HOME' && key !== 'PM2_ROOT_PATH') {
|
86 | cst[key] = process.env[envKey]
|
87 | }
|
88 | })
|
89 |
|
90 | if (process.platform === 'win32' || process.platform === 'win64') {
|
91 |
|
92 | cst.DAEMON_RPC_PORT = '\\\\.\\pipe\\rpc.sock'
|
93 | cst.DAEMON_PUB_PORT = '\\\\.\\pipe\\pub.sock'
|
94 | cst.INTERACTOR_RPC_PORT = '\\\\.\\pipe\\interactor.sock'
|
95 | }
|
96 |
|
97 | module.exports = cst
|