snapshot-checker 0.2.2 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +103 -343
- package/dist/commands/forkall.d.ts +4 -12
- package/dist/commands/forkall.d.ts.map +1 -1
- package/dist/commands/forkall.js +46 -23
- package/dist/commands/forkall.js.map +1 -1
- package/dist/commands/report.d.ts +9 -0
- package/dist/commands/report.d.ts.map +1 -1
- package/dist/commands/report.js +153 -32
- package/dist/commands/report.js.map +1 -1
- package/dist/demos/context-demo.d.ts +10 -0
- package/dist/demos/context-demo.d.ts.map +1 -0
- package/dist/{commands/context_demo.js → demos/context-demo.js} +15 -18
- package/dist/demos/context-demo.js.map +1 -0
- package/dist/{commands → demos}/mac-example.d.ts +1 -3
- package/dist/demos/mac-example.d.ts.map +1 -0
- package/dist/{commands → demos}/mac-example.js +2 -4
- package/dist/demos/mac-example.js.map +1 -0
- package/dist/{commands/timeout_demo.d.ts → demos/timeout-demo.d.ts} +2 -2
- package/dist/demos/timeout-demo.d.ts.map +1 -0
- package/dist/demos/timeout-demo.js +35 -0
- package/dist/demos/timeout-demo.js.map +1 -0
- package/dist/src/cli.js +209 -169
- package/dist/src/cli.js.map +1 -1
- package/dist/src/executor.d.ts +1 -3
- package/dist/src/executor.d.ts.map +1 -1
- package/dist/src/executor.js +1 -3
- package/dist/src/executor.js.map +1 -1
- package/dist/src/groupSpecs.d.ts +1 -4
- package/dist/src/groupSpecs.d.ts.map +1 -1
- package/dist/src/groupSpecs.js.map +1 -1
- package/dist/src/index.d.ts +1 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +1 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/lib/{common_groups.d.ts → presets.d.ts} +24 -2
- package/dist/src/lib/presets.d.ts.map +1 -0
- package/dist/src/lib/{common_groups.js → presets.js} +73 -24
- package/dist/src/lib/presets.js.map +1 -0
- package/dist/src/lib/{programmatic.d.ts → scenario.d.ts} +9 -11
- package/dist/src/lib/scenario.d.ts.map +1 -0
- package/dist/src/lib/{programmatic.js → scenario.js} +6 -10
- package/dist/src/lib/scenario.js.map +1 -0
- package/dist/src/logger.d.ts +23 -0
- package/dist/src/logger.d.ts.map +1 -0
- package/dist/src/logger.js +92 -0
- package/dist/src/logger.js.map +1 -0
- package/dist/src/runCommand.d.ts +27 -35
- package/dist/src/runCommand.d.ts.map +1 -1
- package/dist/src/runCommand.js +81 -70
- package/dist/src/runCommand.js.map +1 -1
- package/dist/src/runGroups.d.ts +6 -12
- package/dist/src/runGroups.d.ts.map +1 -1
- package/dist/src/runGroups.js +14 -19
- package/dist/src/runGroups.js.map +1 -1
- package/dist/src/runners/builtinFunctionRunner.d.ts +1 -0
- package/dist/src/runners/builtinFunctionRunner.d.ts.map +1 -1
- package/dist/src/runners/builtinFunctionRunner.js +5 -12
- package/dist/src/runners/builtinFunctionRunner.js.map +1 -1
- package/dist/src/runners/embedRunner.d.ts +1 -0
- package/dist/src/runners/embedRunner.d.ts.map +1 -1
- package/dist/src/runners/embedRunner.js +5 -1
- package/dist/src/runners/embedRunner.js.map +1 -1
- package/dist/src/runners/shellRunner.d.ts +1 -0
- package/dist/src/runners/shellRunner.d.ts.map +1 -1
- package/dist/src/runners/shellRunner.js +40 -8
- package/dist/src/runners/shellRunner.js.map +1 -1
- package/dist/src/runners/types.d.ts +9 -0
- package/dist/src/runners/types.d.ts.map +1 -1
- package/dist/src/types.d.ts +47 -77
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/types.js +37 -10
- package/dist/src/types.js.map +1 -1
- package/package.json +10 -3
- package/dist/commands/context_demo.d.ts +0 -18
- package/dist/commands/context_demo.d.ts.map +0 -1
- package/dist/commands/context_demo.js.map +0 -1
- package/dist/commands/mac-example.d.ts.map +0 -1
- package/dist/commands/mac-example.js.map +0 -1
- package/dist/commands/timeout_demo.d.ts.map +0 -1
- package/dist/commands/timeout_demo.js +0 -48
- package/dist/commands/timeout_demo.js.map +0 -1
- package/dist/src/lib/common_groups.d.ts.map +0 -1
- package/dist/src/lib/common_groups.js.map +0 -1
- package/dist/src/lib/foo.d.ts +0 -3
- package/dist/src/lib/foo.d.ts.map +0 -1
- package/dist/src/lib/foo.js +0 -7
- package/dist/src/lib/foo.js.map +0 -1
- package/dist/src/lib/programmatic.d.ts.map +0 -1
- package/dist/src/lib/programmatic.js.map +0 -1
- package/dist/src/lib/trace_formatter.d.ts +0 -9
- package/dist/src/lib/trace_formatter.d.ts.map +0 -1
- package/dist/src/lib/trace_formatter.js +0 -148
- package/dist/src/lib/trace_formatter.js.map +0 -1
package/dist/src/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export { executeOne, executeAll, finalizeBackgroundProcesses, getCommandsToRun, getCommandsToRunWithRepeat, getGroupChunks, runGroupChunks, isSupportedOnCurrentPlatform, type GroupSpec, type RunGroupChunksOptions, type ExecuteAllOptions, } from "./executor.js";
|
|
2
2
|
export { parseGroupSpecs } from "./groupSpecs.js";
|
|
3
|
-
export { resolveScenario, runScenarioGroups, normalizeGroupCliArg, type ScenarioModuleLike, type RunScenarioGroupsInput, type RunScenarioGroupsResult, } from "./lib/
|
|
3
|
+
export { resolveScenario, runScenarioGroups, normalizeGroupCliArg, type ScenarioModuleLike, type RunScenarioGroupsInput, type RunScenarioGroupsResult, } from "./lib/scenario.js";
|
|
4
4
|
export { CommandKind, createCommandContext, getCurrentPlatformKind, } from "./types.js";
|
|
5
5
|
export type { CommandContext, CommandDef, CommandResult, RunOptions, Groups, } from "./types.js";
|
|
6
6
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/src/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,UAAU,EACV,2BAA2B,EAC3B,gBAAgB,EAChB,0BAA0B,EAC1B,cAAc,EACd,cAAc,EACd,4BAA4B,EAC5B,KAAK,SAAS,EACd,KAAK,qBAAqB,EAC1B,KAAK,iBAAiB,GACvB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,oBAAoB,EACpB,KAAK,kBAAkB,EACvB,KAAK,sBAAsB,EAC3B,KAAK,uBAAuB,GAC7B,MAAM,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,UAAU,EACV,2BAA2B,EAC3B,gBAAgB,EAChB,0BAA0B,EAC1B,cAAc,EACd,cAAc,EACd,4BAA4B,EAC5B,KAAK,SAAS,EACd,KAAK,qBAAqB,EAC1B,KAAK,iBAAiB,GACvB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,oBAAoB,EACpB,KAAK,kBAAkB,EACvB,KAAK,sBAAsB,EAC3B,KAAK,uBAAuB,GAC7B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,WAAW,EACX,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,YAAY,CAAC;AACpB,YAAY,EACV,cAAc,EACd,UAAU,EACV,aAAa,EACb,UAAU,EACV,MAAM,GACP,MAAM,YAAY,CAAC"}
|
package/dist/src/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { executeOne, executeAll, finalizeBackgroundProcesses, getCommandsToRun, getCommandsToRunWithRepeat, getGroupChunks, runGroupChunks, isSupportedOnCurrentPlatform, } from "./executor.js";
|
|
2
2
|
export { parseGroupSpecs } from "./groupSpecs.js";
|
|
3
|
-
export { resolveScenario, runScenarioGroups, normalizeGroupCliArg, } from "./lib/
|
|
3
|
+
export { resolveScenario, runScenarioGroups, normalizeGroupCliArg, } from "./lib/scenario.js";
|
|
4
4
|
export { CommandKind, createCommandContext, getCurrentPlatformKind, } from "./types.js";
|
|
5
5
|
//# sourceMappingURL=index.js.map
|
package/dist/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,UAAU,EACV,2BAA2B,EAC3B,gBAAgB,EAChB,0BAA0B,EAC1B,cAAc,EACd,cAAc,EACd,4BAA4B,GAI7B,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,oBAAoB,GAIrB,MAAM,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,UAAU,EACV,2BAA2B,EAC3B,gBAAgB,EAChB,0BAA0B,EAC1B,cAAc,EACd,cAAc,EACd,4BAA4B,GAI7B,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,oBAAoB,GAIrB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,WAAW,EACX,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,YAAY,CAAC"}
|
|
@@ -32,9 +32,20 @@ export declare function decodeRawPerfDataAndWriteOutputs(input: {
|
|
|
32
32
|
inputFilePath: string;
|
|
33
33
|
dumpStackTxt: string;
|
|
34
34
|
dumpStackJson: string;
|
|
35
|
+
dumpStackXlsx: string;
|
|
35
36
|
traceFormatProfile: string;
|
|
36
37
|
stageName: string;
|
|
37
|
-
|
|
38
|
+
skipDedupePerfData?: boolean;
|
|
39
|
+
/** 解码 trace 后是否调用 {@link backtrackFS}(在 dedupe 之前) */
|
|
40
|
+
runBacktrackFS?: boolean;
|
|
41
|
+
/**
|
|
42
|
+
* 为 `true` 时向 {@link backtrackFS} 传入 `keepNonFsRevoked: false`(过滤非 FS revoked);
|
|
43
|
+
* 默认 `false` 即保留(与 hmtrace-parser 默认一致)。
|
|
44
|
+
*/
|
|
45
|
+
skipNonBacktrack?: boolean;
|
|
46
|
+
/** 传入 {@link decodePerfRawData}:丢弃有 raw 但无对应 trace 解析器的样本 */
|
|
47
|
+
dropFailedSamples?: boolean;
|
|
48
|
+
}): Promise<boolean>;
|
|
38
49
|
type DecodeInputConfig = {
|
|
39
50
|
inputFilePath: string;
|
|
40
51
|
inputContextKey?: never;
|
|
@@ -50,9 +61,20 @@ export declare function buildCommonAnalysisGroup(input: {
|
|
|
50
61
|
decodeInput: DecodeInputConfig;
|
|
51
62
|
dumpStackTxt: string;
|
|
52
63
|
dumpStackJson: string;
|
|
64
|
+
dumpStackXlsx: string;
|
|
53
65
|
traceFormatProfile: string;
|
|
54
66
|
decodeStageName: string;
|
|
55
67
|
missingInputMessage: string;
|
|
68
|
+
skipDedupePerfData?: boolean;
|
|
69
|
+
/** 解码 trace 后是否调用 {@link backtrackFS}(在 dedupe 之前) */
|
|
70
|
+
runBacktrackFS?: boolean;
|
|
71
|
+
/**
|
|
72
|
+
* 为 `true` 时向 {@link backtrackFS} 传入 `keepNonFsRevoked: false`;
|
|
73
|
+
* 仅在开启回溯关联(`runBacktrackFS`)时生效。
|
|
74
|
+
*/
|
|
75
|
+
skipNonBacktrack?: boolean;
|
|
76
|
+
/** 传入 {@link decodePerfRawData}:丢弃有 raw 但无对应 trace 解析器的样本 */
|
|
77
|
+
dropFailedSamples?: boolean;
|
|
56
78
|
}): CommandDef[];
|
|
57
79
|
export {};
|
|
58
|
-
//# sourceMappingURL=
|
|
80
|
+
//# sourceMappingURL=presets.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"presets.d.ts","sourceRoot":"","sources":["../../../src/lib/presets.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAkB,UAAU,EAAE,MAAM,aAAa,CAAC;AAa9D,OAAO,KAAK,EAAe,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAc/D,wBAAgB,uBAAuB,CAAC,KAAK,EAAE;IAC7C,GAAG,EAAE,MAAM,CAAC;IACZ,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,kBAAkB,EAAE,MAAM,EAAE,CAAC;CAC9B,GAAG,UAAU,EAAE,CAkDf;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE;IAC7C,iBAAiB,EAAE,MAAM,CAAC;IAC1B,6BAA6B,EAAE,MAAM,CAAC;IACtC,gBAAgB,EAAE,MAAM,CAAC;CAC1B,GAAG,UAAU,EAAE,CAmBf;AAED,wBAAgB,oCAAoC,CAAC,KAAK,EAAE;IAC1D,GAAG,EAAE,MAAM,CAAC;IACZ,gBAAgB,EAAE,MAAM,CAAC;IACzB,oBAAoB,EAAE,OAAO,CAAC;CAC/B,GAAG,UAAU,EAAE,CA0Df;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB,GAAG,QAAQ,GAAG,SAAS,CAavB;AAED,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG;IACvD,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAYA;AAED,wBAAgB,yBAAyB,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG;IAC/D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CASA;AAED,wBAAsB,gCAAgC,CAAC,KAAK,EAAE;IAC5D,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,sDAAsD;IACtD,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;;OAGG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,6DAA6D;IAC7D,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B,GAAG,OAAO,CAAC,OAAO,CAAC,CA+FnB;AAED,KAAK,iBAAiB,GAClB;IAAE,aAAa,EAAE,MAAM,CAAC;IAAC,eAAe,CAAC,EAAE,KAAK,CAAA;CAAE,GAClD;IAAE,aAAa,CAAC,EAAE,KAAK,CAAC;IAAC,eAAe,EAAE,MAAM,CAAA;CAAE,CAAC;AAEvD,wBAAgB,wBAAwB,CAAC,KAAK,EAAE;IAC9C,GAAG,EAAE,MAAM,CAAC;IACZ,gBAAgB,EAAE,MAAM,CAAC;IACzB,oBAAoB,EAAE,OAAO,CAAC;IAC9B,iBAAiB,CAAC,EAAE,UAAU,EAAE,CAAC;IACjC,WAAW,EAAE,iBAAiB,CAAC;IAC/B,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,eAAe,EAAE,MAAM,CAAC;IACxB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,sDAAsD;IACtD,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;;OAGG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,6DAA6D;IAC7D,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B,GAAG,UAAU,EAAE,CAqDf"}
|
|
@@ -1,7 +1,14 @@
|
|
|
1
|
+
/** forkall / report 等场景复用的命令组拼装与 perf 解码辅助 */
|
|
2
|
+
import { logger } from "../logger.js";
|
|
1
3
|
import { CommandKind } from "../types.js";
|
|
2
4
|
import { existsSync, readFileSync, writeFileSync } from "node:fs";
|
|
3
|
-
import { buildTraceParserRegistry, decodePerfRawData, filterByTgid, formatPerfDataToJson, formatPerfDataToText, parsePerfData, toBackTraceStacks, } from "hiperf_txt_parser";
|
|
4
|
-
import { getTraceEventFormatProfiles, getTraceEventFormats, } from "
|
|
5
|
+
import { buildTraceParserRegistry, decodePerfRawData, dedupePerfData, filterByTgid, formatPerfDataToExcel, formatPerfDataToJson, formatPerfDataToText, parsePerfData, toBackTraceStacks, } from "hiperf_txt_parser";
|
|
6
|
+
import { backtrackFS, getTraceEventFormatProfiles, getTraceEventFormats, setHmtraceLogger, } from "hmtrace-parser";
|
|
7
|
+
setHmtraceLogger({
|
|
8
|
+
trace: (msg) => logger.trace(msg),
|
|
9
|
+
debug: (msg) => logger.debug(msg),
|
|
10
|
+
info: (msg) => logger.info(msg),
|
|
11
|
+
});
|
|
5
12
|
export function buildCommonInitEnvGroup(input) {
|
|
6
13
|
const { app, snapshotLogFile, checkStateCommand, permissionCommands } = input;
|
|
7
14
|
const permissionDefs = permissionCommands.map((run) => ({
|
|
@@ -37,7 +44,7 @@ export function buildCommonInitEnvGroup(input) {
|
|
|
37
44
|
{
|
|
38
45
|
kind: CommandKind.Windows,
|
|
39
46
|
description: "删除应用镜像",
|
|
40
|
-
run: `hdc shell hidumper -s 1901 -a '-p libforkall_plugin.z.so --
|
|
47
|
+
run: `hdc shell "hidumper -s 1901 -a '-p libforkall_plugin.z.so --destroy 100 ${app}'"`,
|
|
41
48
|
},
|
|
42
49
|
{
|
|
43
50
|
kind: CommandKind.Windows,
|
|
@@ -47,7 +54,7 @@ export function buildCommonInitEnvGroup(input) {
|
|
|
47
54
|
{
|
|
48
55
|
kind: CommandKind.Windows,
|
|
49
56
|
description: "配置模式开关",
|
|
50
|
-
run: 'hdc shell "echo 1:0000 > /proc/checkpoint/revoke_switch && echo
|
|
57
|
+
run: 'hdc shell "echo 0:0000 > /proc/checkpoint/revoke_switch && echo 1:0000 > /proc/checkpoint/revoke_switch && echo 2:0000 > /proc/checkpoint/revoke_switch && cat /proc/checkpoint/revoke_switch"',
|
|
51
58
|
},
|
|
52
59
|
...permissionDefs,
|
|
53
60
|
];
|
|
@@ -88,24 +95,24 @@ export function buildCommonAnalysisTargetFilterGroup(input) {
|
|
|
88
95
|
func: (ctx) => {
|
|
89
96
|
const targetTgidRaw = ctx.get("target_tgid");
|
|
90
97
|
if (!targetTgidRaw) {
|
|
91
|
-
|
|
98
|
+
logger.warn("[过滤目标数据] 未获取到 target_tgid,跳过数据过滤");
|
|
92
99
|
return false;
|
|
93
100
|
}
|
|
94
101
|
const targetTgid = parseInt(targetTgidRaw, 10);
|
|
95
102
|
if (Number.isNaN(targetTgid)) {
|
|
96
|
-
|
|
103
|
+
logger.error(`[过滤目标数据] target_tgid 非法: ${targetTgidRaw}`);
|
|
97
104
|
return false;
|
|
98
105
|
}
|
|
99
106
|
try {
|
|
100
107
|
if (!existsSync(snapshotPerfFile)) {
|
|
101
|
-
|
|
108
|
+
logger.warn(`[过滤目标数据] 输入文件不存在,跳过处理: ${snapshotPerfFile}`);
|
|
102
109
|
return false;
|
|
103
110
|
}
|
|
104
111
|
const inputText = readFileSync(snapshotPerfFile, "utf-8");
|
|
105
112
|
const recordSamples = parsePerfData(inputText);
|
|
106
113
|
const filteredRecordSamples = filterByTgid(recordSamples, targetTgid);
|
|
107
114
|
if (filteredRecordSamples.recordSamples.length === 0) {
|
|
108
|
-
|
|
115
|
+
logger.error(`[过滤目标数据] filterByTgid 后无样本数据(tgid=${targetTgid}),终止流程`);
|
|
109
116
|
return false;
|
|
110
117
|
}
|
|
111
118
|
const samplesToWrite = writeBacktraceStacks
|
|
@@ -113,10 +120,10 @@ export function buildCommonAnalysisTargetFilterGroup(input) {
|
|
|
113
120
|
: filteredRecordSamples;
|
|
114
121
|
const filteredRecordSamplesTxt = formatPerfDataToText(samplesToWrite);
|
|
115
122
|
writeFileSync(snapshotPerfFile, filteredRecordSamplesTxt, "utf-8");
|
|
116
|
-
|
|
123
|
+
logger.info(`[过滤目标数据] 处理完成并写回文件: ${snapshotPerfFile}`);
|
|
117
124
|
}
|
|
118
125
|
catch (error) {
|
|
119
|
-
|
|
126
|
+
logger.error(`[过滤目标数据] 处理失败: ${snapshotPerfFile}`, error);
|
|
120
127
|
return false;
|
|
121
128
|
}
|
|
122
129
|
},
|
|
@@ -126,7 +133,7 @@ export function buildCommonAnalysisTargetFilterGroup(input) {
|
|
|
126
133
|
export function readPerfDataOrWarn(input) {
|
|
127
134
|
const { filePath, stageName } = input;
|
|
128
135
|
if (!existsSync(filePath)) {
|
|
129
|
-
|
|
136
|
+
logger.warn(`[${stageName}] 输入文件不存在,跳过处理: ${filePath}`);
|
|
130
137
|
return undefined;
|
|
131
138
|
}
|
|
132
139
|
try {
|
|
@@ -134,7 +141,7 @@ export function readPerfDataOrWarn(input) {
|
|
|
134
141
|
return parsePerfData(inputText);
|
|
135
142
|
}
|
|
136
143
|
catch (error) {
|
|
137
|
-
|
|
144
|
+
logger.error(`[${stageName}] 读取或解析失败: ${filePath}`, error);
|
|
138
145
|
return undefined;
|
|
139
146
|
}
|
|
140
147
|
}
|
|
@@ -158,19 +165,19 @@ export function selectFirstValidPerfInput(candidates) {
|
|
|
158
165
|
if (valid) {
|
|
159
166
|
return { filePath };
|
|
160
167
|
}
|
|
161
|
-
|
|
168
|
+
logger.warn(`[选择 perf 输入] 跳过文件: ${filePath},原因: ${reason}`);
|
|
162
169
|
}
|
|
163
170
|
return { reason: "未找到可用 perf 输入文件" };
|
|
164
171
|
}
|
|
165
|
-
export function decodeRawPerfDataAndWriteOutputs(input) {
|
|
166
|
-
const { inputFilePath, dumpStackTxt, dumpStackJson, traceFormatProfile, stageName, } = input;
|
|
172
|
+
export async function decodeRawPerfDataAndWriteOutputs(input) {
|
|
173
|
+
const { inputFilePath, dumpStackTxt, dumpStackJson, dumpStackXlsx, traceFormatProfile, stageName, skipDedupePerfData = false, runBacktrackFS = false, skipNonBacktrack = false, dropFailedSamples = false, } = input;
|
|
167
174
|
try {
|
|
168
175
|
const availableProfiles = getTraceEventFormatProfiles();
|
|
169
176
|
const selectedProfile = availableProfiles.includes(traceFormatProfile)
|
|
170
177
|
? traceFormatProfile
|
|
171
178
|
: "default";
|
|
172
179
|
if (selectedProfile !== traceFormatProfile) {
|
|
173
|
-
|
|
180
|
+
logger.warn(`[${stageName}] 未识别 trace-format-profile="${traceFormatProfile}",已回退到 default`);
|
|
174
181
|
}
|
|
175
182
|
const traceParser = buildTraceParserRegistry(getTraceEventFormats(selectedProfile));
|
|
176
183
|
const recordSamples = readPerfDataOrWarn({
|
|
@@ -182,21 +189,58 @@ export function decodeRawPerfDataAndWriteOutputs(input) {
|
|
|
182
189
|
}
|
|
183
190
|
const parsedRecordSamples = decodePerfRawData(recordSamples, traceParser, {
|
|
184
191
|
tracePrintMode: "fieldDict",
|
|
192
|
+
dropFailedSamples,
|
|
185
193
|
});
|
|
186
|
-
|
|
187
|
-
|
|
194
|
+
let dataForDedupe = parsedRecordSamples;
|
|
195
|
+
if (runBacktrackFS) {
|
|
196
|
+
const [backtrackSamples] = backtrackFS(parsedRecordSamples, {
|
|
197
|
+
keepNonFsRevoked: !skipNonBacktrack,
|
|
198
|
+
});
|
|
199
|
+
if (backtrackSamples.length === 0) {
|
|
200
|
+
logger.error(`[${stageName}] 已启用回溯关联(backtrackFS),但输出样本数为 0,中止处理`);
|
|
201
|
+
return false;
|
|
202
|
+
}
|
|
203
|
+
dataForDedupe = {
|
|
204
|
+
...parsedRecordSamples,
|
|
205
|
+
recordSamples: [...backtrackSamples],
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
const dedupedPerfData = skipDedupePerfData
|
|
209
|
+
? dataForDedupe
|
|
210
|
+
: dedupePerfData(dataForDedupe, {
|
|
211
|
+
onEnd: (s) => {
|
|
212
|
+
logger.info(`[${stageName}] perf 去重: input=${s.input}, removed=${s.removed}, remaining=${s.remaining}`);
|
|
213
|
+
},
|
|
214
|
+
});
|
|
215
|
+
const recordSamplesJson = formatPerfDataToJson(dedupedPerfData);
|
|
216
|
+
const recordSamplesTxt = formatPerfDataToText(dedupedPerfData);
|
|
188
217
|
writeFileSync(dumpStackJson, JSON.stringify(recordSamplesJson, null, 2), "utf-8");
|
|
189
218
|
writeFileSync(dumpStackTxt, recordSamplesTxt, "utf-8");
|
|
190
|
-
|
|
219
|
+
const outputPaths = [dumpStackJson, dumpStackTxt];
|
|
220
|
+
if (dedupedPerfData.recordSamples.length === 0) {
|
|
221
|
+
logger.info(`[${stageName}] 无样本数据,跳过 Excel 导出`);
|
|
222
|
+
}
|
|
223
|
+
else {
|
|
224
|
+
try {
|
|
225
|
+
const xlsxBuffer = await formatPerfDataToExcel(dedupedPerfData);
|
|
226
|
+
writeFileSync(dumpStackXlsx, xlsxBuffer);
|
|
227
|
+
outputPaths.push(dumpStackXlsx);
|
|
228
|
+
}
|
|
229
|
+
catch (error) {
|
|
230
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
231
|
+
logger.warn(`[${stageName}] Excel 导出未写入(${message})`, error);
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
logger.info(`[${stageName}] 分析完成,格式版本: ${selectedProfile},输出文件: ${outputPaths.join(", ")}`);
|
|
191
235
|
return true;
|
|
192
236
|
}
|
|
193
237
|
catch (error) {
|
|
194
|
-
|
|
238
|
+
logger.error(`[${stageName}] 处理失败`, error);
|
|
195
239
|
return false;
|
|
196
240
|
}
|
|
197
241
|
}
|
|
198
242
|
export function buildCommonAnalysisGroup(input) {
|
|
199
|
-
const { app, snapshotPerfFile, writeBacktraceStacks, preDecodeCommands = [], decodeInput, dumpStackTxt, dumpStackJson, traceFormatProfile, decodeStageName, missingInputMessage, } = input;
|
|
243
|
+
const { app, snapshotPerfFile, writeBacktraceStacks, preDecodeCommands = [], decodeInput, dumpStackTxt, dumpStackJson, dumpStackXlsx, traceFormatProfile, decodeStageName, missingInputMessage, skipDedupePerfData = false, runBacktrackFS = false, skipNonBacktrack = false, dropFailedSamples = false, } = input;
|
|
200
244
|
const targetFilterGroup = buildCommonAnalysisTargetFilterGroup({
|
|
201
245
|
app,
|
|
202
246
|
snapshotPerfFile,
|
|
@@ -205,23 +249,28 @@ export function buildCommonAnalysisGroup(input) {
|
|
|
205
249
|
const decodeCommand = {
|
|
206
250
|
kind: CommandKind.BuiltinFunction,
|
|
207
251
|
description: decodeStageName,
|
|
208
|
-
func: (ctx) => {
|
|
252
|
+
func: async (ctx) => {
|
|
209
253
|
const inputFilePath = decodeInput.inputContextKey != null
|
|
210
254
|
? ctx.get(decodeInput.inputContextKey)
|
|
211
255
|
: decodeInput.inputFilePath;
|
|
212
256
|
if (!inputFilePath) {
|
|
213
|
-
|
|
257
|
+
logger.warn(missingInputMessage);
|
|
214
258
|
return false;
|
|
215
259
|
}
|
|
216
260
|
return decodeRawPerfDataAndWriteOutputs({
|
|
217
261
|
inputFilePath,
|
|
218
262
|
dumpStackTxt,
|
|
219
263
|
dumpStackJson,
|
|
264
|
+
dumpStackXlsx,
|
|
220
265
|
traceFormatProfile,
|
|
221
266
|
stageName: decodeStageName,
|
|
267
|
+
skipDedupePerfData,
|
|
268
|
+
runBacktrackFS,
|
|
269
|
+
skipNonBacktrack,
|
|
270
|
+
dropFailedSamples,
|
|
222
271
|
});
|
|
223
272
|
},
|
|
224
273
|
};
|
|
225
274
|
return [...targetFilterGroup, ...preDecodeCommands, decodeCommand];
|
|
226
275
|
}
|
|
227
|
-
//# sourceMappingURL=
|
|
276
|
+
//# sourceMappingURL=presets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"presets.js","sourceRoot":"","sources":["../../../src/lib/presets.ts"],"names":[],"mappings":"AAAA,8CAA8C;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAClE,OAAO,EACL,wBAAwB,EACxB,iBAAiB,EACjB,cAAc,EACd,YAAY,EACZ,qBAAqB,EACrB,oBAAoB,EACpB,oBAAoB,EACpB,aAAa,EACb,iBAAiB,GAClB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,WAAW,EACX,2BAA2B,EAC3B,oBAAoB,EACpB,gBAAgB,GACjB,MAAM,gBAAgB,CAAC;AAExB,gBAAgB,CAAC;IACf,KAAK,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC;IACzC,KAAK,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC;IACzC,IAAI,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;CACxC,CAAC,CAAC;AAEH,MAAM,UAAU,uBAAuB,CAAC,KAKvC;IACC,MAAM,EAAE,GAAG,EAAE,eAAe,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,GAAG,KAAK,CAAC;IAC9E,MAAM,cAAc,GAAiB,kBAAkB,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QACpE,IAAI,EAAE,WAAW,CAAC,OAAO;QACzB,WAAW,EAAE,QAAQ;QACrB,GAAG;KACJ,CAAC,CAAC,CAAC;IAEJ,OAAO;QACL;YACE,IAAI,EAAE,WAAW,CAAC,OAAO;YACzB,GAAG,EAAE,mBAAmB;SACzB;QACD;YACE,IAAI,EAAE,WAAW,CAAC,OAAO;YACzB,WAAW,EAAE,UAAU;YACvB,GAAG,EAAE,0HAA0H;SAChI;QACD;YACE,IAAI,EAAE,WAAW,CAAC,OAAO;YACzB,WAAW,EAAE,MAAM;YACnB,GAAG,EAAE,WAAW,eAAe,sBAAsB;SACtD;QACD;YACE,IAAI,EAAE,WAAW,CAAC,OAAO;YACzB,WAAW,EAAE,aAAa;YAC1B,GAAG,EAAE,gCAAgC;SACtC;QACD;YACE,IAAI,EAAE,WAAW,CAAC,OAAO;YACzB,WAAW,EAAE,MAAM;YACnB,GAAG,EAAE,4BAA4B,GAAG,GAAG;SACxC;QACD;YACE,IAAI,EAAE,WAAW,CAAC,OAAO;YACzB,WAAW,EAAE,QAAQ;YACrB,GAAG,EAAE,2EAA2E,GAAG,IAAI;SACxF;QACD;YACE,IAAI,EAAE,WAAW,CAAC,OAAO;YACzB,WAAW,EAAE,YAAY;YACzB,GAAG,EAAE,cAAc,iBAAiB,GAAG;SACxC;QACD;YACE,IAAI,EAAE,WAAW,CAAC,OAAO;YACzB,WAAW,EAAE,QAAQ;YACrB,GAAG,EAAE,gMAAgM;SACtM;QACD,GAAG,cAAc;KAClB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,KAIvC;IACC,MAAM,EAAE,iBAAiB,EAAE,6BAA6B,EAAE,gBAAgB,EAAE,GAC1E,KAAK,CAAC;IACR,OAAO;QACL;YACE,IAAI,EAAE,WAAW,CAAC,OAAO;YACzB,WAAW,EAAE,MAAM;YACnB,GAAG,EAAE,cAAc,iBAAiB,GAAG;SACxC;QACD;YACE,IAAI,EAAE,WAAW,CAAC,OAAO;YACzB,WAAW,EAAE,QAAQ;YACrB,GAAG,EAAE;gBACH,yDAAyD,6BAA6B,OAAO;gBAC7F,uDAAuD,gBAAgB,OAAO;gBAC9E,4CAA4C,gBAAgB,GAAG;aAChE,CAAC,IAAI,CAAC,EAAE,CAAC;SACX;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,oCAAoC,CAAC,KAIpD;IACC,MAAM,EAAE,GAAG,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,GAAG,KAAK,CAAC;IAC9D,OAAO;QACL;YACE,IAAI,EAAE,WAAW,CAAC,OAAO;YACzB,WAAW,EAAE,UAAU;YACvB,GAAG,EAAE,yBAAyB,GAAG,EAAE;YACnC,YAAY,EAAE;gBACZ,IAAI,EAAE,aAAa;aACpB;SACF;QACD;YACE,IAAI,EAAE,WAAW,CAAC,eAAe;YACjC,WAAW,EAAE,QAAQ;YACrB,IAAI,EAAE,CAAC,GAAmB,EAAE,EAAE;gBAC5B,MAAM,aAAa,GAAG,GAAG,CAAC,GAAG,CAAS,aAAa,CAAC,CAAC;gBACrD,IAAI,CAAC,aAAa,EAAE,CAAC;oBACnB,MAAM,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;oBAChD,OAAO,KAAK,CAAC;gBACf,CAAC;gBAED,MAAM,UAAU,GAAG,QAAQ,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;gBAC/C,IAAI,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;oBAC7B,MAAM,CAAC,KAAK,CAAC,4BAA4B,aAAa,EAAE,CAAC,CAAC;oBAC1D,OAAO,KAAK,CAAC;gBACf,CAAC;gBAED,IAAI,CAAC;oBACH,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC;wBAClC,MAAM,CAAC,IAAI,CACT,0BAA0B,gBAAgB,EAAE,CAC7C,CAAC;wBACF,OAAO,KAAK,CAAC;oBACf,CAAC;oBACD,MAAM,SAAS,GAAG,YAAY,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;oBAC1D,MAAM,aAAa,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC;oBAC/C,MAAM,qBAAqB,GAAG,YAAY,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;oBACtE,IAAI,qBAAqB,CAAC,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;wBACrD,MAAM,CAAC,KAAK,CACV,qCAAqC,UAAU,QAAQ,CACxD,CAAC;wBACF,OAAO,KAAK,CAAC;oBACf,CAAC;oBACD,MAAM,cAAc,GAAG,oBAAoB;wBACzC,CAAC,CAAC,iBAAiB,CAAC,qBAAqB,CAAC;wBAC1C,CAAC,CAAC,qBAAqB,CAAC;oBAC1B,MAAM,wBAAwB,GAAG,oBAAoB,CAAC,cAAc,CAAC,CAAC;oBACtE,aAAa,CAAC,gBAAgB,EAAE,wBAAwB,EAAE,OAAO,CAAC,CAAC;oBACnE,MAAM,CAAC,IAAI,CACT,uBAAuB,gBAAgB,EAAE,CAC1C,CAAC;gBACJ,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,MAAM,CAAC,KAAK,CAAC,kBAAkB,gBAAgB,EAAE,EAAE,KAAK,CAAC,CAAC;oBAC1D,OAAO,KAAK,CAAC;gBACf,CAAC;YACH,CAAC;SACF;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,KAGlC;IACC,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC;IACtC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,MAAM,CAAC,IAAI,CAAC,IAAI,SAAS,mBAAmB,QAAQ,EAAE,CAAC,CAAC;QACxD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAClD,OAAO,aAAa,CAAC,SAAS,CAAC,CAAC;IAClC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,IAAI,SAAS,cAAc,QAAQ,EAAE,EAAE,KAAK,CAAC,CAAC;QAC3D,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,QAAgB;IAIpD,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;IAC3C,CAAC;IACD,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAClD,aAAa,CAAC,SAAS,CAAC,CAAC;QACzB,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IACzB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,OAAO,EAAE,EAAE,CAAC;IACxD,CAAC;AACH,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,UAAoB;IAI5D,KAAK,MAAM,QAAQ,IAAI,UAAU,EAAE,CAAC;QAClC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,qBAAqB,CAAC,QAAQ,CAAC,CAAC;QAC1D,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,EAAE,QAAQ,EAAE,CAAC;QACtB,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,sBAAsB,QAAQ,QAAQ,MAAM,EAAE,CAAC,CAAC;IAC9D,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC;AACvC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gCAAgC,CAAC,KAiBtD;IACC,MAAM,EACJ,aAAa,EACb,YAAY,EACZ,aAAa,EACb,aAAa,EACb,kBAAkB,EAClB,SAAS,EACT,kBAAkB,GAAG,KAAK,EAC1B,cAAc,GAAG,KAAK,EACtB,gBAAgB,GAAG,KAAK,EACxB,iBAAiB,GAAG,KAAK,GAC1B,GAAG,KAAK,CAAC;IACV,IAAI,CAAC;QACH,MAAM,iBAAiB,GAAG,2BAA2B,EAAE,CAAC;QACxD,MAAM,eAAe,GAAG,iBAAiB,CAAC,QAAQ,CAAC,kBAAkB,CAAC;YACpE,CAAC,CAAC,kBAAkB;YACpB,CAAC,CAAC,SAAS,CAAC;QACd,IAAI,eAAe,KAAK,kBAAkB,EAAE,CAAC;YAC3C,MAAM,CAAC,IAAI,CACT,IAAI,SAAS,+BAA+B,kBAAkB,gBAAgB,CAC/E,CAAC;QACJ,CAAC;QAED,MAAM,WAAW,GAAG,wBAAwB,CAC1C,oBAAoB,CAAC,eAAe,CAAC,CACtC,CAAC;QACF,MAAM,aAAa,GAAG,kBAAkB,CAAC;YACvC,QAAQ,EAAE,aAAa;YACvB,SAAS;SACV,CAAC,CAAC;QACH,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,OAAO,KAAK,CAAC;QACf,CAAC;QACD,MAAM,mBAAmB,GAAG,iBAAiB,CAAC,aAAa,EAAE,WAAW,EAAE;YACxE,cAAc,EAAE,WAAW;YAC3B,iBAAiB;SAClB,CAAC,CAAC;QAEH,IAAI,aAAa,GAAa,mBAAmB,CAAC;QAClD,IAAI,cAAc,EAAE,CAAC;YACnB,MAAM,CAAC,gBAAgB,CAAC,GAAG,WAAW,CAAC,mBAAmB,EAAE;gBAC1D,gBAAgB,EAAE,CAAC,gBAAgB;aACpC,CAAC,CAAC;YACH,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAClC,MAAM,CAAC,KAAK,CACV,IAAI,SAAS,uCAAuC,CACrD,CAAC;gBACF,OAAO,KAAK,CAAC;YACf,CAAC;YACD,aAAa,GAAG;gBACd,GAAG,mBAAmB;gBACtB,aAAa,EAAE,CAAC,GAAG,gBAAgB,CAAC;aACrC,CAAC;QACJ,CAAC;QAED,MAAM,eAAe,GAAG,kBAAkB;YACxC,CAAC,CAAC,aAAa;YACf,CAAC,CAAC,cAAc,CAAC,aAAa,EAAE;gBAC5B,KAAK,EAAE,CAAC,CAAc,EAAE,EAAE;oBACxB,MAAM,CAAC,IAAI,CACT,IAAI,SAAS,oBAAoB,CAAC,CAAC,KAAK,aAAa,CAAC,CAAC,OAAO,eAAe,CAAC,CAAC,SAAS,EAAE,CAC3F,CAAC;gBACJ,CAAC;aACF,CAAC,CAAC;QAEP,MAAM,iBAAiB,GAAG,oBAAoB,CAAC,eAAe,CAAC,CAAC;QAChE,MAAM,gBAAgB,GAAG,oBAAoB,CAAC,eAAe,CAAC,CAAC;QAC/D,aAAa,CACX,aAAa,EACb,IAAI,CAAC,SAAS,CAAC,iBAAiB,EAAE,IAAI,EAAE,CAAC,CAAC,EAC1C,OAAO,CACR,CAAC;QACF,aAAa,CAAC,YAAY,EAAE,gBAAgB,EAAE,OAAO,CAAC,CAAC;QACvD,MAAM,WAAW,GAAG,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;QAClD,IAAI,eAAe,CAAC,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/C,MAAM,CAAC,IAAI,CAAC,IAAI,SAAS,qBAAqB,CAAC,CAAC;QAClD,CAAC;aAAM,CAAC;YACN,IAAI,CAAC;gBACH,MAAM,UAAU,GAAG,MAAM,qBAAqB,CAAC,eAAe,CAAC,CAAC;gBAChE,aAAa,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;gBACzC,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAClC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBACvE,MAAM,CAAC,IAAI,CAAC,IAAI,SAAS,iBAAiB,OAAO,GAAG,EAAE,KAAK,CAAC,CAAC;YAC/D,CAAC;QACH,CAAC;QACD,MAAM,CAAC,IAAI,CACT,IAAI,SAAS,gBAAgB,eAAe,UAAU,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC/E,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,IAAI,SAAS,QAAQ,EAAE,KAAK,CAAC,CAAC;QAC3C,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAMD,MAAM,UAAU,wBAAwB,CAAC,KAsBxC;IACC,MAAM,EACJ,GAAG,EACH,gBAAgB,EAChB,oBAAoB,EACpB,iBAAiB,GAAG,EAAE,EACtB,WAAW,EACX,YAAY,EACZ,aAAa,EACb,aAAa,EACb,kBAAkB,EAClB,eAAe,EACf,mBAAmB,EACnB,kBAAkB,GAAG,KAAK,EAC1B,cAAc,GAAG,KAAK,EACtB,gBAAgB,GAAG,KAAK,EACxB,iBAAiB,GAAG,KAAK,GAC1B,GAAG,KAAK,CAAC;IAEV,MAAM,iBAAiB,GAAG,oCAAoC,CAAC;QAC7D,GAAG;QACH,gBAAgB;QAChB,oBAAoB;KACrB,CAAC,CAAC;IAEH,MAAM,aAAa,GAAe;QAChC,IAAI,EAAE,WAAW,CAAC,eAAe;QACjC,WAAW,EAAE,eAAe;QAC5B,IAAI,EAAE,KAAK,EAAE,GAAmB,EAAE,EAAE;YAClC,MAAM,aAAa,GACjB,WAAW,CAAC,eAAe,IAAI,IAAI;gBACjC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAS,WAAW,CAAC,eAAe,CAAC;gBAC9C,CAAC,CAAC,WAAW,CAAC,aAAa,CAAC;YAChC,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnB,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;gBACjC,OAAO,KAAK,CAAC;YACf,CAAC;YACD,OAAO,gCAAgC,CAAC;gBACtC,aAAa;gBACb,YAAY;gBACZ,aAAa;gBACb,aAAa;gBACb,kBAAkB;gBAClB,SAAS,EAAE,eAAe;gBAC1B,kBAAkB;gBAClB,cAAc;gBACd,gBAAgB;gBAChB,iBAAiB;aAClB,CAAC,CAAC;QACL,CAAC;KACF,CAAC;IAEF,OAAO,CAAC,GAAG,iBAAiB,EAAE,GAAG,iBAAiB,EAAE,aAAa,CAAC,CAAC;AACrE,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { GroupSpec } from "../runGroups.js";
|
|
2
2
|
import type { CommandResult, Groups } from "../types.js";
|
|
3
|
-
/** 与 commands/*.ts
|
|
3
|
+
/** 与 `commands/*.ts` 场景模块导出面兼容的最小接口 */
|
|
4
4
|
export interface ScenarioModuleLike {
|
|
5
5
|
groups: Groups;
|
|
6
6
|
defaultGroupOrder: string[];
|
|
@@ -13,13 +13,9 @@ export interface ScenarioModuleLike {
|
|
|
13
13
|
defaultGroupOrder?: string[];
|
|
14
14
|
} | void;
|
|
15
15
|
}
|
|
16
|
-
/**
|
|
17
|
-
* 将 Commander 的 variadic --group 规范为 string[](单参时可能是单个字符串)。
|
|
18
|
-
*/
|
|
16
|
+
/** 将 Commander 的 variadic `--group` 归一化为 `string[]`(单参数时可能为单个字符串) */
|
|
19
17
|
export declare function normalizeGroupCliArg(groupRaw: string[] | string | undefined): string[] | undefined;
|
|
20
|
-
/**
|
|
21
|
-
* 若场景导出 applyOptions,则根据 scenarioOptions 得到最终 groups / defaultGroupOrder。
|
|
22
|
-
*/
|
|
18
|
+
/** 若模块导出 `applyOptions`,则按 `scenarioOptions` 生成最终的 `groups` 与 `defaultGroupOrder` */
|
|
23
19
|
export declare function resolveScenario(mod: ScenarioModuleLike, scenarioOptions?: Record<string, unknown>): {
|
|
24
20
|
groups: Groups;
|
|
25
21
|
defaultGroupOrder: string[];
|
|
@@ -27,14 +23,16 @@ export declare function resolveScenario(mod: ScenarioModuleLike, scenarioOptions
|
|
|
27
23
|
export interface RunScenarioGroupsInput {
|
|
28
24
|
groups: Groups;
|
|
29
25
|
defaultGroupOrder: string[];
|
|
30
|
-
/**
|
|
26
|
+
/** 与 CLI `-g` / `--group` 相同;缺省时按 `defaultGroupOrder` 各执行一次 */
|
|
31
27
|
group?: string[] | string;
|
|
32
|
-
/**
|
|
28
|
+
/** 显式组规格时覆盖由 `group` 与 `defaultGroupOrder` 推导的结果 */
|
|
33
29
|
groupSpecs?: GroupSpec[];
|
|
34
30
|
ignorePlatform?: boolean;
|
|
35
31
|
stopOnError?: boolean;
|
|
32
|
+
/** 见 `RunOptions.silent` */
|
|
36
33
|
silent?: boolean;
|
|
37
34
|
waitForBackground?: boolean;
|
|
35
|
+
/** 见 `RunOptions.intervalMs` */
|
|
38
36
|
intervalMs?: number;
|
|
39
37
|
}
|
|
40
38
|
export interface RunScenarioGroupsResult {
|
|
@@ -42,7 +40,7 @@ export interface RunScenarioGroupsResult {
|
|
|
42
40
|
failed: boolean;
|
|
43
41
|
}
|
|
44
42
|
/**
|
|
45
|
-
*
|
|
43
|
+
* 按组规格执行命令;语义与 CLI 在排除 `--list`、`--dry-run` 时的执行路径一致。
|
|
46
44
|
*/
|
|
47
45
|
export declare function runScenarioGroups(input: RunScenarioGroupsInput): Promise<RunScenarioGroupsResult>;
|
|
48
|
-
//# sourceMappingURL=
|
|
46
|
+
//# sourceMappingURL=scenario.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scenario.d.ts","sourceRoot":"","sources":["../../../src/lib/scenario.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAEzD,uCAAuC;AACvC,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE;QACnB,MAAM,EAAE,MAAM,CAAC;QACf,iBAAiB,EAAE,MAAM,EAAE,CAAC;QAC5B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KAClC,KAAK;QACJ,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;KAC9B,GAAG,IAAI,CAAC;CACV;AAED,qEAAqE;AACrE,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,SAAS,GACtC,MAAM,EAAE,GAAG,SAAS,CAGtB;AAED,qFAAqF;AACrF,wBAAgB,eAAe,CAC7B,GAAG,EAAE,kBAAkB,EACvB,eAAe,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAC5C;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,iBAAiB,EAAE,MAAM,EAAE,CAAA;CAAE,CAcjD;AAED,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,+DAA+D;IAC/D,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;IAC1B,oDAAoD;IACpD,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC;IACzB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,4BAA4B;IAC5B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,gCAAgC;IAChC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,aAAa,EAAE,CAAC;IACzB,MAAM,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,sBAAsB,GAC5B,OAAO,CAAC,uBAAuB,CAAC,CA2BlC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* 编程方式复用 CLI 的场景解析与按组执行逻辑。
|
|
3
3
|
*
|
|
4
|
-
*
|
|
4
|
+
* 示例:
|
|
5
5
|
* ```ts
|
|
6
6
|
* import { resolveScenario, runScenarioGroups } from 'snapshot-checker';
|
|
7
7
|
* import * as report from './commands/report.js';
|
|
@@ -16,17 +16,13 @@
|
|
|
16
16
|
*/
|
|
17
17
|
import { getGroupChunks, runGroupChunks, } from "../runGroups.js";
|
|
18
18
|
import { parseGroupSpecs } from "../groupSpecs.js";
|
|
19
|
-
/**
|
|
20
|
-
* 将 Commander 的 variadic --group 规范为 string[](单参时可能是单个字符串)。
|
|
21
|
-
*/
|
|
19
|
+
/** 将 Commander 的 variadic `--group` 归一化为 `string[]`(单参数时可能为单个字符串) */
|
|
22
20
|
export function normalizeGroupCliArg(groupRaw) {
|
|
23
21
|
if (groupRaw === undefined || groupRaw === null)
|
|
24
22
|
return undefined;
|
|
25
23
|
return Array.isArray(groupRaw) ? groupRaw : [String(groupRaw)];
|
|
26
24
|
}
|
|
27
|
-
/**
|
|
28
|
-
* 若场景导出 applyOptions,则根据 scenarioOptions 得到最终 groups / defaultGroupOrder。
|
|
29
|
-
*/
|
|
25
|
+
/** 若模块导出 `applyOptions`,则按 `scenarioOptions` 生成最终的 `groups` 与 `defaultGroupOrder` */
|
|
30
26
|
export function resolveScenario(mod, scenarioOptions = {}) {
|
|
31
27
|
let groups = mod.groups;
|
|
32
28
|
let defaultGroupOrder = mod.defaultGroupOrder;
|
|
@@ -44,7 +40,7 @@ export function resolveScenario(mod, scenarioOptions = {}) {
|
|
|
44
40
|
return { groups, defaultGroupOrder };
|
|
45
41
|
}
|
|
46
42
|
/**
|
|
47
|
-
*
|
|
43
|
+
* 按组规格执行命令;语义与 CLI 在排除 `--list`、`--dry-run` 时的执行路径一致。
|
|
48
44
|
*/
|
|
49
45
|
export async function runScenarioGroups(input) {
|
|
50
46
|
const { groups, defaultGroupOrder, group, groupSpecs: explicitSpecs, ignorePlatform = false, stopOnError = false, silent = false, waitForBackground = false, intervalMs, } = input;
|
|
@@ -60,4 +56,4 @@ export async function runScenarioGroups(input) {
|
|
|
60
56
|
};
|
|
61
57
|
return runGroupChunks(chunks, options);
|
|
62
58
|
}
|
|
63
|
-
//# sourceMappingURL=
|
|
59
|
+
//# sourceMappingURL=scenario.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scenario.js","sourceRoot":"","sources":["../../../src/lib/scenario.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,EACL,cAAc,EACd,cAAc,GAEf,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAiBnD,qEAAqE;AACrE,MAAM,UAAU,oBAAoB,CAClC,QAAuC;IAEvC,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC;IAClE,OAAO,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;AACjE,CAAC;AAED,qFAAqF;AACrF,MAAM,UAAU,eAAe,CAC7B,GAAuB,EACvB,kBAA2C,EAAE;IAE7C,IAAI,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;IACxB,IAAI,iBAAiB,GAAG,GAAG,CAAC,iBAAiB,CAAC;IAC9C,IAAI,OAAO,GAAG,CAAC,YAAY,KAAK,UAAU,EAAE,CAAC;QAC3C,MAAM,WAAW,GAAG,GAAG,CAAC,YAAY,CAAC;YACnC,MAAM;YACN,iBAAiB;YACjB,OAAO,EAAE,eAAe;SACzB,CAAC,CAAC;QACH,IAAI,WAAW,EAAE,MAAM;YAAE,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC;QACrD,IAAI,WAAW,EAAE,iBAAiB;YAChC,iBAAiB,GAAG,WAAW,CAAC,iBAAiB,CAAC;IACtD,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC;AACvC,CAAC;AAuBD;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,KAA6B;IAE7B,MAAM,EACJ,MAAM,EACN,iBAAiB,EACjB,KAAK,EACL,UAAU,EAAE,aAAa,EACzB,cAAc,GAAG,KAAK,EACtB,WAAW,GAAG,KAAK,EACnB,MAAM,GAAG,KAAK,EACd,iBAAiB,GAAG,KAAK,EACzB,UAAU,GACX,GAAG,KAAK,CAAC;IAEV,MAAM,KAAK,GACT,aAAa;QACb,eAAe,CAAC,oBAAoB,CAAC,KAAK,CAAC,EAAE,iBAAiB,CAAC,CAAC;IAElE,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,cAAc,EAAE,CAAC,CAAC;IACjE,MAAM,OAAO,GAA0B;QACrC,WAAW;QACX,MAAM;QACN,iBAAiB;QACjB,cAAc;QACd,UAAU,EACR,UAAU,KAAK,SAAS,IAAI,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS;KACtE,CAAC;IACF,OAAO,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AACzC,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 工具侧结构化日志;子进程标准流由 Shell 等 Runner 与 `streamOutput` 控制。
|
|
3
|
+
*
|
|
4
|
+
* 默认级别由 `SNAPSHOT_CHECKER_LOG_LEVEL` 或 `LOG_LEVEL` 给出(与 `hiperf_txt_parser` 同名枚举;未识别时回退为 `info`),并与 {@link setHiperfLogLevel} 对齐。
|
|
5
|
+
* CLI 全局 `--log-level` 通过 {@link setGlobalLogLevelFromCli} 覆盖该基准(直至进程退出)。
|
|
6
|
+
*/
|
|
7
|
+
import { type ConsolaInstance } from "consola";
|
|
8
|
+
import { type HiperfLogLevelName } from "hiperf_txt_parser";
|
|
9
|
+
/** 与 `hiperf_txt_parser` 一致的合法级别(供 CLI choices 与环境解析共用) */
|
|
10
|
+
export declare const SNAPSHOT_CHECKER_LOG_LEVEL_CHOICES: readonly HiperfLogLevelName[];
|
|
11
|
+
/**
|
|
12
|
+
* 由 CLI 全局 `--log-level` 在子命令 `preAction` 中调用,覆盖环境变量给出的基准。
|
|
13
|
+
*/
|
|
14
|
+
export declare function setGlobalLogLevelFromCli(level: string | undefined): void;
|
|
15
|
+
/**
|
|
16
|
+
* 按 `silent` 进入嵌套静默:将日志与 `hiperf_txt_parser` 限制为 `error`,可多次嵌套计数。
|
|
17
|
+
*
|
|
18
|
+
* @returns 结束当前作用域时须调用的恢复函数。
|
|
19
|
+
*/
|
|
20
|
+
export declare function attachQuietSilent(silent: boolean): () => void;
|
|
21
|
+
/** 全局共享的 Consola 实例;未处于 {@link attachQuietSilent} 时与 {@link baselineLevelName} 一致 */
|
|
22
|
+
export declare const logger: ConsolaInstance;
|
|
23
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/logger.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAA4B,KAAK,eAAe,EAAE,MAAM,SAAS,CAAC;AACzE,OAAO,EAEL,KAAK,kBAAkB,EACxB,MAAM,mBAAmB,CAAC;AAE3B,2DAA2D;AAC3D,eAAO,MAAM,kCAAkC,EAAE,SAAS,kBAAkB,EAOlE,CAAC;AAsCX;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAUxE;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,IAAI,CAmB7D;AAED,qFAAqF;AACrF,eAAO,MAAM,MAAM,EAAE,eAEnB,CAAC"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 工具侧结构化日志;子进程标准流由 Shell 等 Runner 与 `streamOutput` 控制。
|
|
3
|
+
*
|
|
4
|
+
* 默认级别由 `SNAPSHOT_CHECKER_LOG_LEVEL` 或 `LOG_LEVEL` 给出(与 `hiperf_txt_parser` 同名枚举;未识别时回退为 `info`),并与 {@link setHiperfLogLevel} 对齐。
|
|
5
|
+
* CLI 全局 `--log-level` 通过 {@link setGlobalLogLevelFromCli} 覆盖该基准(直至进程退出)。
|
|
6
|
+
*/
|
|
7
|
+
import { createConsola, LogLevels } from "consola";
|
|
8
|
+
import { setHiperfLogLevel, } from "hiperf_txt_parser";
|
|
9
|
+
/** 与 `hiperf_txt_parser` 一致的合法级别(供 CLI choices 与环境解析共用) */
|
|
10
|
+
export const SNAPSHOT_CHECKER_LOG_LEVEL_CHOICES = [
|
|
11
|
+
"silent",
|
|
12
|
+
"error",
|
|
13
|
+
"warn",
|
|
14
|
+
"info",
|
|
15
|
+
"debug",
|
|
16
|
+
"trace",
|
|
17
|
+
];
|
|
18
|
+
function resolveHiperfLevelNameFromEnv() {
|
|
19
|
+
const raw = (process.env.SNAPSHOT_CHECKER_LOG_LEVEL ??
|
|
20
|
+
process.env.LOG_LEVEL ??
|
|
21
|
+
"info")
|
|
22
|
+
.trim()
|
|
23
|
+
.toLowerCase();
|
|
24
|
+
return SNAPSHOT_CHECKER_LOG_LEVEL_CHOICES.includes(raw)
|
|
25
|
+
? raw
|
|
26
|
+
: "info";
|
|
27
|
+
}
|
|
28
|
+
/** 基准级别:初始为环境变量;可被 {@link setGlobalLogLevelFromCli} 覆盖(不含 {@link attachQuietSilent} 嵌套降噪) */
|
|
29
|
+
let baselineLevelName = resolveHiperfLevelNameFromEnv();
|
|
30
|
+
setHiperfLogLevel(baselineLevelName);
|
|
31
|
+
const LEVEL_TO_CONSOLA = {
|
|
32
|
+
silent: LogLevels.silent,
|
|
33
|
+
error: LogLevels.error,
|
|
34
|
+
warn: LogLevels.warn,
|
|
35
|
+
info: LogLevels.info,
|
|
36
|
+
debug: LogLevels.debug,
|
|
37
|
+
trace: LogLevels.trace,
|
|
38
|
+
};
|
|
39
|
+
/** `RunOptions.silent` / CLI `-s` 时与 consola、`hiperf_txt_parser` 对齐的静默级别标识 */
|
|
40
|
+
const QUIET_HIPEXF_NAME = "error";
|
|
41
|
+
let quietSilentDepth = 0;
|
|
42
|
+
/** 恢复 {@link baselineLevelName},并同步 `hiperf_txt_parser`。 */
|
|
43
|
+
function applySyncedLevels() {
|
|
44
|
+
logger.level = LEVEL_TO_CONSOLA[baselineLevelName];
|
|
45
|
+
setHiperfLogLevel(baselineLevelName);
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* 由 CLI 全局 `--log-level` 在子命令 `preAction` 中调用,覆盖环境变量给出的基准。
|
|
49
|
+
*/
|
|
50
|
+
export function setGlobalLogLevelFromCli(level) {
|
|
51
|
+
if (level === undefined || level === "")
|
|
52
|
+
return;
|
|
53
|
+
const raw = level.trim().toLowerCase();
|
|
54
|
+
if (!SNAPSHOT_CHECKER_LOG_LEVEL_CHOICES.includes(raw)) {
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
baselineLevelName = raw;
|
|
58
|
+
if (quietSilentDepth === 0) {
|
|
59
|
+
applySyncedLevels();
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* 按 `silent` 进入嵌套静默:将日志与 `hiperf_txt_parser` 限制为 `error`,可多次嵌套计数。
|
|
64
|
+
*
|
|
65
|
+
* @returns 结束当前作用域时须调用的恢复函数。
|
|
66
|
+
*/
|
|
67
|
+
export function attachQuietSilent(silent) {
|
|
68
|
+
if (!silent) {
|
|
69
|
+
return () => { };
|
|
70
|
+
}
|
|
71
|
+
quietSilentDepth += 1;
|
|
72
|
+
if (quietSilentDepth === 1) {
|
|
73
|
+
logger.level = LogLevels.error;
|
|
74
|
+
setHiperfLogLevel(QUIET_HIPEXF_NAME);
|
|
75
|
+
}
|
|
76
|
+
let done = false;
|
|
77
|
+
return () => {
|
|
78
|
+
if (done)
|
|
79
|
+
return;
|
|
80
|
+
done = true;
|
|
81
|
+
quietSilentDepth -= 1;
|
|
82
|
+
if (quietSilentDepth <= 0) {
|
|
83
|
+
quietSilentDepth = 0;
|
|
84
|
+
applySyncedLevels();
|
|
85
|
+
}
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
/** 全局共享的 Consola 实例;未处于 {@link attachQuietSilent} 时与 {@link baselineLevelName} 一致 */
|
|
89
|
+
export const logger = createConsola({
|
|
90
|
+
level: LEVEL_TO_CONSOLA[baselineLevelName],
|
|
91
|
+
});
|
|
92
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/logger.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,aAAa,EAAE,SAAS,EAAwB,MAAM,SAAS,CAAC;AACzE,OAAO,EACL,iBAAiB,GAElB,MAAM,mBAAmB,CAAC;AAE3B,2DAA2D;AAC3D,MAAM,CAAC,MAAM,kCAAkC,GAAkC;IAC/E,QAAQ;IACR,OAAO;IACP,MAAM;IACN,MAAM;IACN,OAAO;IACP,OAAO;CACC,CAAC;AAEX,SAAS,6BAA6B;IACpC,MAAM,GAAG,GAAG,CACV,OAAO,CAAC,GAAG,CAAC,0BAA0B;QACtC,OAAO,CAAC,GAAG,CAAC,SAAS;QACrB,MAAM,CACP;SACE,IAAI,EAAE;SACN,WAAW,EAAE,CAAC;IACjB,OAAQ,kCAAwD,CAAC,QAAQ,CAAC,GAAG,CAAC;QAC5E,CAAC,CAAE,GAA0B;QAC7B,CAAC,CAAC,MAAM,CAAC;AACb,CAAC;AAED,6FAA6F;AAC7F,IAAI,iBAAiB,GAAuB,6BAA6B,EAAE,CAAC;AAC5E,iBAAiB,CAAC,iBAAiB,CAAC,CAAC;AAErC,MAAM,gBAAgB,GAAuC;IAC3D,MAAM,EAAE,SAAS,CAAC,MAAM;IACxB,KAAK,EAAE,SAAS,CAAC,KAAK;IACtB,IAAI,EAAE,SAAS,CAAC,IAAI;IACpB,IAAI,EAAE,SAAS,CAAC,IAAI;IACpB,KAAK,EAAE,SAAS,CAAC,KAAK;IACtB,KAAK,EAAE,SAAS,CAAC,KAAK;CACvB,CAAC;AAEF,8EAA8E;AAC9E,MAAM,iBAAiB,GAAG,OAAoC,CAAC;AAC/D,IAAI,gBAAgB,GAAG,CAAC,CAAC;AAEzB,4DAA4D;AAC5D,SAAS,iBAAiB;IACxB,MAAM,CAAC,KAAK,GAAG,gBAAgB,CAAC,iBAAiB,CAAC,CAAC;IACnD,iBAAiB,CAAC,iBAAiB,CAAC,CAAC;AACvC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,wBAAwB,CAAC,KAAyB;IAChE,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE;QAAE,OAAO;IAChD,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACvC,IAAI,CAAE,kCAAwD,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC7E,OAAO;IACT,CAAC;IACD,iBAAiB,GAAG,GAAyB,CAAC;IAC9C,IAAI,gBAAgB,KAAK,CAAC,EAAE,CAAC;QAC3B,iBAAiB,EAAE,CAAC;IACtB,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAe;IAC/C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,GAAG,EAAE,GAAE,CAAC,CAAC;IAClB,CAAC;IACD,gBAAgB,IAAI,CAAC,CAAC;IACtB,IAAI,gBAAgB,KAAK,CAAC,EAAE,CAAC;QAC3B,MAAM,CAAC,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC;QAC/B,iBAAiB,CAAC,iBAAiB,CAAC,CAAC;IACvC,CAAC;IACD,IAAI,IAAI,GAAG,KAAK,CAAC;IACjB,OAAO,GAAS,EAAE;QAChB,IAAI,IAAI;YAAE,OAAO;QACjB,IAAI,GAAG,IAAI,CAAC;QACZ,gBAAgB,IAAI,CAAC,CAAC;QACtB,IAAI,gBAAgB,IAAI,CAAC,EAAE,CAAC;YAC1B,gBAAgB,GAAG,CAAC,CAAC;YACrB,iBAAiB,EAAE,CAAC;QACtB,CAAC;IACH,CAAC,CAAC;AACJ,CAAC;AAED,qFAAqF;AACrF,MAAM,CAAC,MAAM,MAAM,GAAoB,aAAa,CAAC;IACnD,KAAK,EAAE,gBAAgB,CAAC,iBAAiB,CAAC;CAC3C,CAAC,CAAC"}
|