UNPKG

3.02 kBJavaScriptView Raw
1/**
2 * Copyright 2013 the PM2 project authors. All rights reserved.
3 * Use of this source code is governed by a license that
4 * can be found in the LICENSE file.
5 */
6
7var debug = require('debug')('pm2:paths');
8var p = require('path');
9
10function getDefaultPM2Home() {
11 var PM2_ROOT_PATH;
12
13 if (process.env.PM2_HOME)
14 PM2_ROOT_PATH = process.env.PM2_HOME;
15 else if (process.env.HOME && !process.env.HOMEPATH)
16 PM2_ROOT_PATH = p.resolve(process.env.HOME, '.pm2');
17 else if (process.env.HOME || process.env.HOMEPATH)
18 PM2_ROOT_PATH = p.resolve(process.env.HOMEDRIVE, process.env.HOME || process.env.HOMEPATH, '.pm2');
19 else {
20 console.error('[PM2][Initialization] Environment variable HOME (Linux) or HOMEPATH (Windows) are not set!');
21 console.error('[PM2][Initialization] Defaulting to /etc/.pm2');
22 PM2_ROOT_PATH = p.resolve('/etc', '.pm2');
23 }
24
25 debug('pm2 home resolved to %s', PM2_ROOT_PATH, process.env.HOME);
26 return PM2_ROOT_PATH;
27}
28
29module.exports = function(PM2_HOME) {
30 if (!PM2_HOME)
31 PM2_HOME = getDefaultPM2Home()
32
33 var pm2_file_stucture = {
34 PM2_HOME : PM2_HOME,
35 PM2_ROOT_PATH : PM2_HOME,
36
37 PM2_CONF_FILE : p.resolve(PM2_HOME, 'conf.js'),
38 PM2_MODULE_CONF_FILE : p.resolve(PM2_HOME, 'module_conf.json'),
39
40 PM2_LOG_FILE_PATH : p.resolve(PM2_HOME, 'pm2.log'),
41 PM2_PID_FILE_PATH : p.resolve(PM2_HOME, 'pm2.pid'),
42
43 PM2_RELOAD_LOCKFILE : p.resolve(PM2_HOME, 'reload.lock'),
44
45 DEFAULT_PID_PATH : p.resolve(PM2_HOME, 'pids'),
46 DEFAULT_LOG_PATH : p.resolve(PM2_HOME, 'logs'),
47 DEFAULT_MODULE_PATH : p.resolve(PM2_HOME, 'modules'),
48 PM2_IO_ACCESS_TOKEN : p.resolve(PM2_HOME, 'pm2-io-token'),
49 DUMP_FILE_PATH : p.resolve(PM2_HOME, 'dump.pm2'),
50 DUMP_BACKUP_FILE_PATH : p.resolve(PM2_HOME, 'dump.pm2.bak'),
51
52 DAEMON_RPC_PORT : p.resolve(PM2_HOME, 'rpc.sock'),
53 DAEMON_PUB_PORT : p.resolve(PM2_HOME, 'pub.sock'),
54 INTERACTOR_RPC_PORT : p.resolve(PM2_HOME, 'interactor.sock'),
55
56 INTERACTOR_LOG_FILE_PATH : p.resolve(PM2_HOME, 'agent.log'),
57 INTERACTOR_PID_PATH : p.resolve(PM2_HOME, 'agent.pid'),
58 INTERACTION_CONF : p.resolve(PM2_HOME, 'agent.json5')
59 };
60
61 // allow overide of file paths via environnement
62 var paths = Object.keys(pm2_file_stucture);
63 paths.forEach(function (key) {
64 var envKey = key.indexOf('PM2_') > -1 ? key : 'PM2_' + key;
65 if (process.env[envKey] && key !== 'PM2_HOME' && key !== 'PM2_ROOT_PATH') {
66 pm2_file_stucture[key] = process.env[envKey];
67 }
68 });
69
70 if (process.platform === 'win32' ||
71 process.platform === 'win64') {
72 //@todo instead of static unique rpc/pub file custom with PM2_HOME or UID
73 pm2_file_stucture.DAEMON_RPC_PORT = '\\\\.\\pipe\\rpc.sock';
74 pm2_file_stucture.DAEMON_PUB_PORT = '\\\\.\\pipe\\pub.sock';
75 pm2_file_stucture.INTERACTOR_RPC_PORT = '\\\\.\\pipe\\interactor.sock';
76 }
77
78 return pm2_file_stucture;
79};