@alwaysmeticulous/cli 2.70.0 → 2.71.1

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.
@@ -17,18 +17,48 @@ const handler = async ({ apiToken, replayId, }) => {
17
17
  const { fileName: replayMetadataFileName } = await (0, downloading_helpers_1.getOrFetchReplay)(client, replayId);
18
18
  logger.info(`Downloaded replay metadata to: ${replayMetadataFileName}`);
19
19
  const { fileName: replayFolderFilePath } = await (0, downloading_helpers_1.getOrFetchReplayArchive)(client, replayId);
20
- // Generate logs.concise.txt file
21
- const logsFile = (0, path_1.join)(replayFolderFilePath, "logs.json");
20
+ // Generate logs.concise.txt and logs.determinstic.txt files
21
+ const logsFile = (0, path_1.join)(replayFolderFilePath, "logs.ndjson");
22
22
  const logsFileExists = await (0, promises_1.access)(logsFile)
23
23
  .then(() => true)
24
24
  .catch(() => false);
25
25
  if (logsFileExists) {
26
26
  try {
27
- const logs = JSON.parse(await (0, promises_1.readFile)(logsFile, "utf8"));
28
- const conciseLogs = logs.console.map((log) => {
29
- return log.message.replace("[METICULOUS] ", "");
27
+ const logs = (await (0, promises_1.readFile)(logsFile, "utf8"))
28
+ .split("\n")
29
+ .filter((line) => line !== "")
30
+ .map((line) => JSON.parse(line));
31
+ let virtualTime = 0;
32
+ const conciseLogs = logs.map((log) => {
33
+ if (log.type === "virtual-time-change") {
34
+ virtualTime = log.virtualTime;
35
+ return "";
36
+ }
37
+ const commonPostfix = `${log.repetitionCount ? " [x" + log.repetitionCount + "]" : ""} ${log.message}`;
38
+ if (log.source === "application") {
39
+ return `[trace-id: ${log.stackTraceId}] [virtual: ${virtualTime}ms] [application]${commonPostfix}`;
40
+ }
41
+ else {
42
+ return `[trace-id: ${log.stackTraceId}] [virtual: ${virtualTime}ms, real: ${log.realTime}ms]${commonPostfix}`;
43
+ }
30
44
  });
31
45
  await (0, promises_1.writeFile)((0, path_1.join)(replayFolderFilePath, "logs.concise.txt"), conciseLogs.join("\n"));
46
+ // Useful for diffing one set of logs against another (excludes the real timestamps, which are non-deterministic)
47
+ virtualTime = 0;
48
+ const deterministicLogs = logs.map((log) => {
49
+ if (log.type === "virtual-time-change") {
50
+ virtualTime = log.virtualTime;
51
+ return "";
52
+ }
53
+ const commonPostfix = `${log.repetitionCount ? " [x" + log.repetitionCount + "]" : ""} ${log.message}`;
54
+ if (log.source === "application") {
55
+ return `[virtual: ${virtualTime}ms] [application]${commonPostfix}`;
56
+ }
57
+ else {
58
+ return `[virtual: ${virtualTime}ms]${commonPostfix}`;
59
+ }
60
+ });
61
+ await (0, promises_1.writeFile)((0, path_1.join)(replayFolderFilePath, "logs.deterministic.txt"), deterministicLogs.join("\n"));
32
62
  }
33
63
  catch (err) {
34
64
  logger.error("Error creating concise version of logs file", err);
@@ -1 +1 @@
1
- {"version":3,"file":"download-replay.command.js","sourceRoot":"","sources":["../../../src/commands/download-replay/download-replay.command.ts"],"names":[],"mappings":";;;;;;AAAA,0CAA0D;AAC1D,+BAA4B;AAC5B,qDAAwD;AACxD,qDAAkE;AAClE,+EAG+C;AAC/C,wDAA2B;AAC3B,yEAAmE;AAOnE,MAAM,OAAO,GAAwC,KAAK,EAAE,EAC1D,QAAQ,EACR,QAAQ,GACT,EAAE,EAAE;IACH,MAAM,MAAM,GAAG,kBAAG,CAAC,SAAS,CAAC,+BAAsB,CAAC,CAAC;IACrD,MAAM,MAAM,GAAG,IAAA,qBAAY,EAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;IAE1C,MAAM,EAAE,QAAQ,EAAE,sBAAsB,EAAE,GAAG,MAAM,IAAA,sCAAgB,EACjE,MAAM,EACN,QAAQ,CACT,CAAC;IACF,MAAM,CAAC,IAAI,CAAC,kCAAkC,sBAAsB,EAAE,CAAC,CAAC;IACxE,MAAM,EAAE,QAAQ,EAAE,oBAAoB,EAAE,GAAG,MAAM,IAAA,6CAAuB,EACtE,MAAM,EACN,QAAQ,CACT,CAAC;IAEF,iCAAiC;IACjC,MAAM,QAAQ,GAAG,IAAA,WAAI,EAAC,oBAAoB,EAAE,WAAW,CAAC,CAAC;IACzD,MAAM,cAAc,GAAG,MAAM,IAAA,iBAAM,EAAC,QAAQ,CAAC;SAC1C,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;SAChB,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;IACtB,IAAI,cAAc,EAAE;QAClB,IAAI;YACF,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CACrB,MAAM,IAAA,mBAAQ,EAAC,QAAQ,EAAE,MAAM,CAAC,CACjC,CAAC;YACF,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAClC,CAAC,GAAsC,EAAE,EAAE;gBACzC,OAAO,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;YAClD,CAAC,CACF,CAAC;YACF,MAAM,IAAA,oBAAS,EACb,IAAA,WAAI,EAAC,oBAAoB,EAAE,kBAAkB,CAAC,EAC9C,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CACvB,CAAC;SACH;QAAC,OAAO,GAAG,EAAE;YACZ,MAAM,CAAC,KAAK,CAAC,6CAA6C,EAAE,GAAG,CAAC,CAAC;SAClE;KACF;IAED,MAAM,CAAC,IAAI,CAAC,8BAA8B,oBAAoB,EAAE,CAAC,CAAC;AACpE,CAAC,CAAC;AAEW,QAAA,qBAAqB,GAAG,IAAA,8BAAY,EAAC,qBAAqB,CAAC;KACrE,OAAO,CAAC;IACP,OAAO,EAAE,CAAC,iBAAiB,CAAC;IAC5B,QAAQ,EAAE,uCAAuC;CAClD,CAAC;KACD,OAAO,CAAC;IACP,QAAQ,EAAE;QACR,MAAM,EAAE,IAAI;KACb;IACD,QAAQ,EAAE;QACR,MAAM,EAAE,IAAI;QACZ,YAAY,EAAE,IAAI;KACnB;CACF,CAAC;KACD,OAAO,CAAC,OAAO,CAAC,CAAC"}
1
+ {"version":3,"file":"download-replay.command.js","sourceRoot":"","sources":["../../../src/commands/download-replay/download-replay.command.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alwaysmeticulous/cli",
3
- "version": "2.70.0",
3
+ "version": "2.71.1",
4
4
  "description": "The Meticulous CLI",
5
5
  "license": "ISC",
6
6
  "main": "dist/index.js",
@@ -24,18 +24,19 @@
24
24
  "cli:debug": "echo '\n\nVisit chrome://inspect in Chrome and attach the debugger\n\n' && node --inspect-brk dist/main.js",
25
25
  "cli:dev": "ts-node src/main.ts",
26
26
  "cli:dev-localhost": "METICULOUS_API_URL=http://localhost:3001/api/ ts-node src/main.ts",
27
+ "cli:dev-staging": "METICULOUS_API_URL=https://staging-backend.alb.meticulous.ai/api/ ts-node src/main.ts",
27
28
  "test": "jest --passWithNoTests",
28
29
  "depcheck": "depcheck --ignore-patterns=dist"
29
30
  },
30
31
  "dependencies": {
31
- "@alwaysmeticulous/api": "^2.70.0",
32
- "@alwaysmeticulous/client": "^2.70.0",
33
- "@alwaysmeticulous/common": "^2.70.0",
34
- "@alwaysmeticulous/downloading-helpers": "^2.70.0",
35
- "@alwaysmeticulous/record": "^2.70.0",
32
+ "@alwaysmeticulous/api": "^2.71.0",
33
+ "@alwaysmeticulous/client": "^2.71.0",
34
+ "@alwaysmeticulous/common": "^2.71.0",
35
+ "@alwaysmeticulous/downloading-helpers": "^2.71.1",
36
+ "@alwaysmeticulous/record": "^2.71.0",
36
37
  "@alwaysmeticulous/replay-debugger-ui": "^2.46.0",
37
- "@alwaysmeticulous/replay-orchestrator-launcher": "^2.70.0",
38
- "@alwaysmeticulous/sdk-bundles-api": "^2.70.0",
38
+ "@alwaysmeticulous/replay-orchestrator-launcher": "^2.71.1",
39
+ "@alwaysmeticulous/sdk-bundles-api": "^2.71.0",
39
40
  "@alwaysmeticulous/sentry": "^2.40.0",
40
41
  "@sentry/node": "^7.36.0",
41
42
  "loglevel": "^1.8.0",
@@ -79,5 +80,5 @@
79
80
  "coverageDirectory": "../coverage",
80
81
  "testEnvironment": "node"
81
82
  },
82
- "gitHead": "f6b1b6f2e2f513d53c3cb427644bbb2afa928741"
83
+ "gitHead": "e221315728d7487165768671b47b8015917b770f"
83
84
  }