UNPKG

6.64 kBJavaScriptView Raw
1const Table = require('cli-tableau')
2const chalk = require('chalk')
3const UxHelpers = require('./helpers.js')
4const Common = require('../../Common.js')
5
6var postModuleInfos = function(module_name, human_info) {
7 var table = new Table({
8 style : {'padding-left' : 1, head : ['cyan', 'bold'], compact : true}
9 })
10
11 var disp = {}
12
13 human_info.unshift(['Module name', module_name])
14 human_info.forEach(function(info) {
15 var obj = {}
16 obj[chalk.bold.cyan(info[0])] = info[1]
17 table.push(obj)
18 })
19
20 console.log()
21 console.log(chalk.bold.inverse(' Module %s infos '), module_name)
22 console.log(table.toString())
23}
24
25/**
26 * Description
27 * @method describeTable
28 * @param {Object} proc process list
29 */
30module.exports = function(proc) {
31 var table = new Table({
32 style : {'padding-left' : 1, head : ['cyan', 'bold'], compact : true}
33 })
34
35 var pm2_env = proc.pm2_env
36
37 var created_at = 'N/A'
38
39 if (pm2_env.axm_options && pm2_env.axm_options.human_info) {
40 postModuleInfos(pm2_env.name, pm2_env.axm_options.human_info)
41 }
42
43 try {
44 if (pm2_env.created_at != null)
45 created_at = new Date(pm2_env.created_at).toISOString()
46 } catch (e) {
47 }
48
49 console.log(chalk.bold.inverse(' Describing process with id %d - name %s '), pm2_env.pm_id, pm2_env.name)
50 UxHelpers.safe_push(table,
51 { 'status' : UxHelpers.colorStatus(pm2_env.status) },
52 { 'name': pm2_env.name },
53 { 'namespace': pm2_env.namespace },
54 { 'version': pm2_env.version },
55 { 'restarts' : pm2_env.restart_time },
56 { 'uptime' : (pm2_env.pm_uptime && pm2_env.status == 'online') ? UxHelpers.timeSince(pm2_env.pm_uptime) : 0 },
57 { 'script path' : pm2_env.pm_exec_path },
58 { 'script args' : pm2_env.args ? (typeof pm2_env.args == 'string' ? JSON.parse(pm2_env.args.replace(/'/g, '"')):pm2_env.args).join(' ') : null },
59 { 'error log path' : pm2_env.pm_err_log_path },
60 { 'out log path' : pm2_env.pm_out_log_path },
61 { 'pid path' : pm2_env.pm_pid_path },
62
63 { 'interpreter' : pm2_env.exec_interpreter },
64 { 'interpreter args' : pm2_env.node_args.length != 0 ? pm2_env.node_args : null },
65
66 { 'script id' : pm2_env.pm_id },
67 { 'exec cwd' : pm2_env.pm_cwd },
68
69 { 'exec mode' : pm2_env.exec_mode },
70 { 'node.js version' : pm2_env.node_version },
71 { 'node env': pm2_env.env.NODE_ENV },
72 { 'watch & reload' : pm2_env.watch ? chalk.green.bold('✔') : '✘' },
73 { 'unstable restarts' : pm2_env.unstable_restarts },
74 { 'created at' : created_at }
75 )
76
77 if ('pm_log_path' in pm2_env){
78 table.splice(6, 0, {'entire log path': pm2_env.pm_log_path})
79 }
80
81 if ('cron_restart' in pm2_env){
82 table.splice(5, 0, {'cron restart': pm2_env.cron_restart})
83 }
84
85 console.log(table.toString())
86
87 /**
88 * Module conf display
89 */
90 if (pm2_env.axm_options &&
91 pm2_env.axm_options.module_conf &&
92 Object.keys(pm2_env.axm_options.module_conf).length > 0) {
93 var table_conf = new Table({
94 style : {'padding-left' : 1, head : ['cyan', 'bold'], compact : true}
95 })
96 console.log('Process configuration')
97
98 Object.keys(pm2_env.axm_options.module_conf).forEach(function(key) {
99 var tmp = {}
100 tmp[key] = pm2_env.axm_options.module_conf[key]
101 UxHelpers.safe_push(table_conf, tmp)
102 })
103
104 console.log(table_conf.toString())
105 }
106
107 /**
108 * Versioning metadata
109 */
110 if (pm2_env.versioning) {
111
112 var table2 = new Table({
113 style : {'padding-left' : 1, head : ['cyan', 'bold'], compact : true}
114 })
115
116 console.log(chalk.inverse.bold(' Revision control metadata '))
117 UxHelpers.safe_push(table2,
118 { 'revision control' : pm2_env.versioning.type },
119 { 'remote url' : pm2_env.versioning.url },
120 { 'repository root' : pm2_env.versioning.repo_path },
121 { 'last update' : pm2_env.versioning.update_time },
122 { 'revision' : pm2_env.versioning.revision },
123 { 'comment' : pm2_env.versioning.comment ? pm2_env.versioning.comment.trim().slice(0, 60) : '' },
124 { 'branch' : pm2_env.versioning.branch }
125 )
126 console.log(table2.toString())
127 }
128
129 if (pm2_env.axm_actions && Object.keys(pm2_env.axm_actions).length > 0) {
130 var table_actions = new Table({
131 style : {'padding-left' : 1, head : ['cyan', 'bold'], compact : true}
132 })
133
134 console.log(chalk.inverse.bold(' Actions available '))
135 pm2_env.axm_actions.forEach(function(action_set) {
136 UxHelpers.safe_push(table_actions, [action_set.action_name])
137 })
138
139 console.log(table_actions.toString())
140 Common.printOut(chalk.white.italic(' Trigger via: pm2 trigger %s <action_name>\n'), pm2_env.name)
141 }
142
143 if (pm2_env.axm_monitor && Object.keys(pm2_env.axm_monitor).length > 0) {
144 var table_probes = new Table({
145 style : {'padding-left' : 1, head : ['cyan', 'bold'], compact : true}
146 })
147
148 console.log(chalk.inverse.bold(' Code metrics value '))
149 Object.keys(pm2_env.axm_monitor).forEach(function(key) {
150 var obj = {}
151 var metric_name = pm2_env.axm_monitor[key].hasOwnProperty("value") ? pm2_env.axm_monitor[key].value : pm2_env.axm_monitor[key]
152 var metric_unit = pm2_env.axm_monitor[key].hasOwnProperty("unit") ? pm2_env.axm_monitor[key].unit : ''
153 var value = `${metric_name} ${metric_unit}`
154 obj[key] = value
155 UxHelpers.safe_push(table_probes, obj)
156 })
157
158 console.log(table_probes.toString())
159 }
160
161 var table_env = new Table({
162 style : {'padding-left' : 1, head : ['cyan', 'bold'], compact : true}
163 })
164
165 console.log(chalk.inverse.bold(' Divergent env variables from local env '))
166
167 var _env = Common.safeExtend({}, pm2_env)
168 var diff_env = {}
169
170 Object.keys(process.env).forEach(k => {
171 if (!_env[k] || _env[k] != process.env[k]) {
172 diff_env[k] = process.env[k]
173 }
174 })
175
176 Object.keys(diff_env).forEach(function(key) {
177 var obj = {}
178 if (_env[key]) {
179 obj[key] = _env[key].slice(0, process.stdout.columns - 60)
180 UxHelpers.safe_push(table_env, obj)
181 }
182 })
183
184 console.log(table_env.toString())
185 console.log()
186 Common.printOut(chalk.white.italic(' Add your own code metrics: http://bit.ly/code-metrics'))
187 Common.printOut(chalk.white.italic(' Use `pm2 logs %s [--lines 1000]` to display logs'), pm2_env.name)
188 Common.printOut(chalk.white.italic(' Use `pm2 env %s` to display environment variables'), pm2_env.pm_id)
189 Common.printOut(chalk.white.italic(' Use `pm2 monit` to monitor CPU and Memory usage'), pm2_env.name)
190}