8000 Merge fd232605250c6baed3a30201fb632b4db449e196 into 5674b0edf820f58b1… · hyj1991/xprofiler@dd0d1e4 · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

Commit dd0d1e4

Browse files
authored
Merge fd23260 into 5674b0e
2 parents 5674b0e + fd23260 commit dd0d1e4

File tree

11 files changed

+46
-9
lines changed

11 files changed

+46
-9
lines changed

bin/xprofctl

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,15 +36,20 @@ const args = yargs
3636
.command('get_config', '获取 xprofiler 配置', normalYargs)
3737
.command('set_config', '设置 xprofiler 配置',
3838
yargs => yargs
39-
.group(['enable_log_uv_handles', 'disable_log_uv_handles', 'log_level', 'log_type'], '配置项:')
39+
.group(['enable_log_uv_handles', 'disable_log_uv_handles', 'log_level',
40+
'log_type', 'enable_fatal_error_hook', 'disable_fatal_error_hook'], '配置项:')
4041
.describe('enable_log_uv_handles', '开启 libuv 句柄详情采集')
4142
.describe('disable_log_uv_handles', '关闭 libuv 句柄详情采集')
4243
.describe('log_level', '日志级别: info, error, debug')
4344
.describe('log_type', '日志输出未知: 文件, 控制台')
45+
.describe('enable_fatal_error_hook', '开启 Fatal Error 钩子')
46+
.describe('disable_fatal_error_hook', '关闭 Fatal Error 钩子')
4447
.boolean('enable_log_uv_handles')
4548
.boolean('disable_log_uv_handles')
4649
.choices('log_level', [0, 1, 2])
4750
.choices('log_type', [0, 1])
51+
.boolean('enable_fatal_error_hook')
52+
.boolean('disable_fatal_error_hook')
4853
.hide('v')
4954
.hide('h'))
5055
// pid

bin/xprofctl.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,9 @@
1919
"disable_log_uv_handles": "boolean",
2020
"enable_log_uv_handles": "boolean",
2121
"log_level": "number",
22-
"log_type": "number"
22+
"log_type": "number",
23+
"enable_fatal_error_hook": "boolean",
24+
"disable_fatal_error_hook": "boolean"
2325
}
2426
}
2527
]

lib/utils.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ function setLogDirToFile(logdir) {
4343
.readFileSync(dataFile, 'utf8')
4444
.split('\n')
4545
.filter(p => p && processAlive(p.split(SPLITTER)[0]))
46-
.join('\n');
46+
.join('\n') + '\n';
4747
fs.writeFileSync(dataFile, processes);
4848
}, parseInt(checkTime * 1000));
4949
timer.unref();

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "xprofiler",
33
"version": "1.0.0-prepare",
4-
"description": "",
4+
"description": "node.js addon to output runtime logs",
55
"bin": {
66
"xprofctl": "bin/xprofctl"
77
},

src/commands/simple/config.cc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ COMMAND_CALLBACK(GetXprofilerConfig) {
1414
data["log_format_alinode"] = GetFormatAsAlinode();
1515
data["log_level"] = GetLogLevel();
1616
data["log_type"] = GetLogType();
17+
data["enable_fatal_error_hook"] = GetEnableFatalErrorHook();
1718
success(data);
1819
}
1920

@@ -37,6 +38,7 @@ COMMAND_CALLBACK(SetXprofilerConfig) {
3738
V(bool, enable_log_uv_handles, EnableLogUvHandles)
3839
V(LOG_LEVEL, log_level, LogLevel)
3940
V(LOG_TYPE, log_type, LogType)
41+
V(bool, enable_fatal_error_hook, EnableFatalErrorHook)
4042
#undef V
4143
if (!setted)
4244
error(format("not support setting config %s", options.dump().c_str()));

src/configure.cc

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ static bool enable_log_uv_handles = true;
2323
static bool log_format_alinode = false;
2424
static LOG_LEVEL log_level = LOG_ERROR;
2525
static LOG_TYPE log_type = LOG_TO_FILE;
26+
static bool enable_fatal_error_hook = true;
2627

2728
#define COVERT_STRING(key) \
2829
if (key##_value->IsString()) { \
@@ -69,6 +70,9 @@ void Configure(const FunctionCallbackInfo<Value> &info) {
6970

7071
// log type: 0 file, 1 ttl
7172
W(log_type, CONVERT_UINT32_V2, LOG_TYPE)
73+
74+
// enable fatal error hook
75+
V(enable_fatal_error_hook, CONVERT_BOOL)
7276
#undef S
7377
#undef V
7478
#undef W
@@ -88,6 +92,7 @@ void GetConfig(const FunctionCallbackInfo<Value> &info) {
8892
W(log_format_alinode, Boolean)
8993
W(log_level, Number)
9094
W(log_type, Number)
95+
W(enable_fatal_error_hook, Boolean)
9196
#undef V
9297
#undef W
9398
info.GetReturnValue().Set(config);
@@ -102,5 +107,6 @@ V(bool, FormatAsAlinode, log_format_alinode)
102107
V(bool, EnableLogUvHandles, enable_log_uv_handles)
103108
V(LOG_LEVEL, LogLevel, log_level)
104109
V(LOG_TYPE, LogType, log_type)
110+
V(bool, EnableFatalErrorHook, enable_fatal_error_hook)
105111
#undef V
106112
} // namespace xprofiler

src/configure.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ V(bool, FormatAsAlinode)
2020
V(bool, EnableLogUvHandles)
2121
V(LOG_LEVEL, LogLevel)
2222
V(LOG_TYPE, LogType)
23+
V(bool, EnableFatalErrorHook)
2324
#undef V
2425

2526
// javascript accessible

test/fixtures/command.test.js

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -122,10 +122,12 @@ module.exports = function (logdir) {
122122
{ key: 'data.enable_log_uv_handles', rule: { label: 'true', test: value => value === true } },
123123
{ key: 'data.log_format_alinode', rule: { label: 'false', test: value => value === false } },
124124
{ key: 'data.log_level', rule: /^2$/ },
125-
{ key: 'data.log_type', rule: /^1$/ }
125+
{ key: 'data.log_type', rule: /^1$/ },
126+
{ key: 'data.enable_fatal_error_hook', rule: { label: 'true', test: value => value === true } },
126127
],
127128
xprofctlRules(data) {
128129
return [new RegExp(`^X-Profiler 当前配置\\(pid ${data.pid}\\):\n`
130+
+ ' - enable_fatal_error_hook: true\n'
129131
+ ' - enable_log_uv_handles: true\n'
130132
+ ` - log_dir: ${escape(logdir)}\n`
131133
+ ' - log_format_alinode: false\n'
@@ -137,14 +139,16 @@ module.exports = function (logdir) {
137139
},
138140
{
139141
cmd: 'set_config',
140-
options: { enable_log_uv_handles: false, log_level: 2, log_type: 1 },
142+
options: { enable_log_uv_handles: false, log_level: 2, log_type: 1, enable_fatal_error_hook: false },
141143
xctlRules: [
142144
{ key: 'data.enable_log_uv_handles', rule: { label: 'false', test: value => value === false } },
143145
{ key: 'data.log_level', rule: /^2$/ },
144-
{ key: 'data.log_type', rule: /^1$/ }
146+
{ key: 'data.log_type', rule: /^1$/ },
147+
{ key: 'data.enable_fatal_error_hook', rule: { label: 'false', test: value => value === false } },
145148
],
146149
xprofctlRules(data) {
147150
return [new RegExp(`^X-Profiler 配置\\(pid ${data.pid}\\)成功:\n`
151+
+ ' - enable_fatal_error_hook: false\n'
148152
+ ' - enable_log_uv_handles: false\n'
149153
+ ' - log_level: 2\n'
150154
+ ' - log_type: 1')

test/fixtures/config.test.js

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,10 @@ function getTestKey(configKey, defaultValue, envKey, envValue, userValue, envExt
3838
key: envKey, value: envValue,
3939
expected: booleanEnvValue.includes(envValue) ? envValue === 'YES' : envValue
4040
}].concat(envExtra),
41-
user: [{ key: configKey, value: userValue, expected: userValue }].concat(userExtra),
41+
user: [
42+
{ key: configKey, value: userValue, expected: userValue },
43+
{ key: configKey, value: defaultValue, expected: defaultValue }
44+
].concat(userExtra),
4245
};
4346
}
4447

@@ -90,6 +93,12 @@ const configure = {
9093
envKey: 'XPROFILER_LOG_TYPE',
9194
envValue: 1,
9295
userValue: 1
96+
},
97+
enable_fatal_error_hook: {
98+
defaultValue: true,
99+
envKey: 'XPROFILER_ENABLE_FATAL_ERROR_HOOK',
100+
envValue: 'NO',
101+
userValue: false
93102
}
94103
};
95104

test/start.test.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ describe(`xprofiler starting`, function () {
3333
});
3434

3535
it(`invalid process ${invaidPid} not exists in ~/.xprofier`, function () {
36-
const content = fs.readFileSync(xprofilerPath, 'utf8');
36+
const content = fs.readFileSync(xprofilerPath, 'utf8').trim();
3737
const aliveProcessInfo = content.split('\n').map(line => line.split(SPLITTER));
3838
expect(aliveProcessInfo.length).to.be(1);
3939
const aliveProcess = aliveProcessInfo[0];

xprofiler.json

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,5 +47,13 @@
4747
"number"
4848
],
4949
"format": "number"
50+
},
51+
{
52+
"name": "enable_fatal_error_hook",
53+
"env": "XPROFILER_ENABLE_FATAL_ERROR_HOOK",
54+
"rules": [
55+
"boolean"
56+
],
57+
"format": "boolean"
5058
}
5159
]

0 commit comments

Comments
 (0)
0