@alwaysmeticulous/remote-replay-launcher 2.200.0 → 2.201.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/dist/index.js CHANGED
@@ -8,6 +8,7 @@ const client_1 = require("@alwaysmeticulous/client");
8
8
  const common_1 = require("@alwaysmeticulous/common");
9
9
  const tunnels_client_1 = require("@alwaysmeticulous/tunnels-client");
10
10
  const loglevel_1 = __importDefault(require("loglevel"));
11
+ const resource_tracker_1 = require("./resource-tracker");
11
12
  const url_utils_1 = require("./url.utils");
12
13
  const POLL_LOCK_INTERVAL_MS = 5000; // 5 seconds
13
14
  const PROGRESS_UPDATE_INTERVAL_MS = 5000; // 5 seconds
@@ -87,6 +88,7 @@ const executeRemoteTestRun = async ({ apiToken: apiToken_, appUrl, commitSha, se
87
88
  testRunCompleted.resolve(completedTestRun);
88
89
  };
89
90
  // Poll every few seconds for progress updates and exit when the test run is completed
91
+ const resourceTracker = new resource_tracker_1.ResourceTracker(logger, testRun);
90
92
  progressUpdateInterval = setInterval(async () => {
91
93
  const updatedTestRun = await (0, client_1.getTestRun)({ client, testRunId: testRun.id });
92
94
  onProgressUpdate === null || onProgressUpdate === void 0 ? void 0 : onProgressUpdate(updatedTestRun);
@@ -98,6 +100,7 @@ const executeRemoteTestRun = async ({ apiToken: apiToken_, appUrl, commitSha, se
98
100
  logger.info(`Retrying test run... (status is now ${updatedTestRun.status})`);
99
101
  startedWaitingForRetryAt = undefined;
100
102
  }
103
+ resourceTracker.checkUsage();
101
104
  }, PROGRESS_UPDATE_INTERVAL_MS);
102
105
  const completedTestRun = await testRunCompleted.promise;
103
106
  const tunnelUnlocked = (0, common_1.defer)();
@@ -106,6 +109,7 @@ const executeRemoteTestRun = async ({ apiToken: apiToken_, appUrl, commitSha, se
106
109
  const isLocked = await (0, client_1.getIsLocked)({ client, deploymentId });
107
110
  if (isLocked) {
108
111
  onTunnelStillLocked === null || onTunnelStillLocked === void 0 ? void 0 : onTunnelStillLocked();
112
+ resourceTracker.checkUsage();
109
113
  return false;
110
114
  }
111
115
  tunnelUnlocked.resolve();
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;AAAA,qDAQkC;AAClC,qDAAyE;AACzE,qEAA+D;AAC/D,wDAA2B;AAK3B,2CAAsC;AAItC,MAAM,qBAAqB,GAAG,IAAK,CAAC,CAAC,YAAY;AACjD,MAAM,2BAA2B,GAAG,IAAK,CAAC,CAAC,YAAY;AACvD,MAAM,oBAAoB,GAAG,CAAC,GAAG,EAAE,GAAG,IAAK,CAAC,CAAC,YAAY;AAElD,MAAM,oBAAoB,GAAG,KAAK,EAAE,EACzC,QAAQ,EAAE,SAAS,EACnB,MAAM,EACN,SAAS,EACT,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,gBAAgB,EAChB,mBAAmB,EACnB,qBAAqB,EACrB,WAAW,EACX,UAAU,EACV,4BAA4B,GACA,EAAuC,EAAE;IACrE,MAAM,MAAM,GAAG,kBAAG,CAAC,SAAS,CAAC,+BAAsB,CAAC,CAAC;IAErD,MAAM,QAAQ,GAAG,IAAA,oBAAW,EAAC,SAAS,CAAC,CAAC;IACxC,IAAI,CAAC,QAAQ,EAAE;QACb,MAAM,CAAC,KAAK,CACV,iEAAiE,CAClE,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KACjB;IAED,MAAM,MAAM,GAAG,IAAA,qBAAY,EAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;IAE1C,IAAI,GAAQ,CAAC;IACb,IAAI;QACF,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;QACtB,6DAA6D;KAC9D;IAAC,OAAO,MAAM,EAAE;QACf,MAAM,IAAI,KAAK,CAAC,oBAAoB,MAAM,EAAE,CAAC,CAAC;KAC/C;IAED,MAAM,IAAI,GAAG,IAAA,mBAAO,EAAC,GAAG,CAAC,CAAC;IAC1B,IAAI,IAAI,KAAK,CAAC,CAAC,EAAE;QACf,MAAM,IAAI,KAAK,CAAC,yBAAyB,MAAM,EAAE,CAAC,CAAC;KACpD;IAED,MAAM,MAAM,GAAG,MAAM,IAAA,4BAAW,EAAC;QAC/B,MAAM;QACN,QAAQ;QACR,SAAS,EAAE,GAAG,CAAC,QAAQ;QACvB,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvD,IAAI;QACJ,UAAU,EAAE,KAAK;QACjB,gBAAgB,EAAE,KAAK;KACxB,CAAC,CAAC;IAEH,MAAM,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;IAElC,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE;QACrE,MAAM,IAAI,KAAK,CACb,wEAAwE,CACzE,CAAC;KACH;IAED,eAAe,aAAf,eAAe,uBAAf,eAAe,CAAG;QAChB,GAAG,EAAE,MAAM,CAAC,GAAG;QACf,aAAa,EAAE,MAAM,CAAC,aAAa;QACnC,iBAAiB,EAAE,MAAM,CAAC,iBAAiB;KAC5C,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,MAAM,IAAA,mCAA0B,EAAC;QAChD,MAAM;QACN,OAAO,EAAE,SAAS;QAClB,SAAS,EAAE,MAAM,CAAC,GAAG;QACrB,aAAa,EAAE,MAAM,CAAC,aAAa;QACnC,iBAAiB,EAAE,MAAM,CAAC,iBAAiB;QAC3C,WAAW;QACX,UAAU;QACV,GAAG,CAAC,4BAA4B,CAAC,CAAC,CAAC,EAAE,4BAA4B,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC1E,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE;QACrB,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;KAC7C;IAED,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,QAAQ,CAAC;IAC3C,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAG,OAAO,CAAC,CAAC;IAE5B,MAAM,gBAAgB,GAAG,IAAA,cAAK,GAAW,CAAC;IAE1C,IAAI,sBAAsB,GAA+B,SAAS,CAAC;IACnE,IAAI,wBAAwB,GAAuB,SAAS,CAAC;IAE7D,MAAM,kBAAkB,GAAG,CAAC,gBAAyB,EAAE,EAAE;QACvD,IACE,gBAAgB,CAAC,MAAM,KAAK,gBAAgB;YAC5C,CAAC,wBAAwB,KAAK,SAAS;gBACrC,IAAI,CAAC,GAAG,EAAE,GAAG,wBAAwB,GAAG,oBAAoB,CAAC,EAC/D;YACA,wFAAwF;YACxF,6FAA6F;YAC7F,oEAAoE;YACpE,IAAI,wBAAwB,KAAK,SAAS,EAAE;gBAC1C,wBAAwB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBACtC,MAAM,CAAC,IAAI,CACT,qDACE,oBAAoB,GAAG,IACzB,qDAAqD,CACtD,CAAC;aACH;YACD,OAAO;SACR;QAED,IAAI,sBAAsB,EAAE;YAC1B,aAAa,CAAC,sBAAsB,CAAC,CAAC;SACvC;QAED,gBAAgB,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC7C,CAAC,CAAC;IAEF,sFAAsF;IACtF,sBAAsB,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QAC9C,MAAM,cAAc,GAAG,MAAM,IAAA,mBAAU,EAAC,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;QAC3E,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAG,cAAc,CAAC,CAAC;QAEnC,IAAI,CAAC,oCAA2B,CAAC,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE;YAChE,kBAAkB,CAAC,cAAc,CAAC,CAAC;YAEnC,OAAO;SACR;aAAM,IAAI,wBAAwB,KAAK,SAAS,EAAE;YACjD,MAAM,CAAC,IAAI,CACT,uCAAuC,cAAc,CAAC,MAAM,GAAG,CAChE,CAAC;YACF,wBAAwB,GAAG,SAAS,CAAC;SACtC;IACH,CAAC,EAAE,2BAA2B,CAAC,CAAC;IAEhC,MAAM,gBAAgB,GAAG,MAAM,gBAAgB,CAAC,OAAO,CAAC;IAExD,MAAM,cAAc,GAAG,IAAA,cAAK,GAAQ,CAAC;IACrC,IAAI,mBAAmB,GAA+B,SAAS,CAAC;IAChE,MAAM,aAAa,GAAG,KAAK,IAAI,EAAE;QAC/B,MAAM,QAAQ,GAAG,MAAM,IAAA,oBAAW,EAAC,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC;QAC7D,IAAI,QAAQ,EAAE;YACZ,mBAAmB,aAAnB,mBAAmB,uBAAnB,mBAAmB,EAAI,CAAC;YACxB,OAAO,KAAK,CAAC;SACd;QACD,cAAc,CAAC,OAAO,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;IACF,MAAM,eAAe,GAAG,MAAM,aAAa,EAAE,CAAC;IAC9C,IAAI,CAAC,eAAe,EAAE;QACpB,mBAAmB,GAAG,WAAW,CAAC,aAAa,EAAE,qBAAqB,CAAC,CAAC;QACxE,MAAM,cAAc,CAAC,OAAO,CAAC;KAC9B;IACD,IAAI,mBAAmB,EAAE;QACvB,aAAa,CAAC,mBAAmB,CAAC,CAAC;KACpC;IAED,IAAI,qBAAqB,EAAE;QACzB,MAAM,qBAAqB,CAAC;KAC7B;IACD,MAAM,CAAC,KAAK,EAAE,CAAC;IAEf,OAAO;QACL,OAAO,EAAE,gBAAgB;KAC1B,CAAC;AACJ,CAAC,CAAC;AAhKW,QAAA,oBAAoB,wBAgK/B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { TestRun } from "@alwaysmeticulous/client";
2
+ import { Logger } from "loglevel";
3
+ export declare class ResourceTracker {
4
+ private previousCpuUsage;
5
+ private haveLoggedWarning;
6
+ private readonly logger;
7
+ private readonly testRun;
8
+ constructor(logger: Logger, testRun: TestRun);
9
+ checkUsage(): void;
10
+ private computeCpuUsage;
11
+ }
@@ -0,0 +1,76 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.ResourceTracker = void 0;
30
+ const os_1 = __importDefault(require("os"));
31
+ const Sentry = __importStar(require("@sentry/node"));
32
+ class ResourceTracker {
33
+ constructor(logger, testRun) {
34
+ this.haveLoggedWarning = false;
35
+ this.previousCpuUsage = this.computeCpuUsage();
36
+ this.logger = logger;
37
+ this.testRun = testRun;
38
+ }
39
+ checkUsage() {
40
+ if (this.haveLoggedWarning) {
41
+ // We only want to log a warning once, so we can stop tracking usage once we've warned.
42
+ return;
43
+ }
44
+ const currentCpuUsage = this.computeCpuUsage();
45
+ const activeSinceLastCall = currentCpuUsage.active - this.previousCpuUsage.active;
46
+ const idleSinceLastCall = currentCpuUsage.idle - this.previousCpuUsage.idle;
47
+ const cpuUsagePercentage = (activeSinceLastCall / (activeSinceLastCall + idleSinceLastCall)) * 100;
48
+ const memoryUsagePercentage = ((os_1.default.totalmem() - os_1.default.freemem()) / os_1.default.totalmem()) * 100;
49
+ if (cpuUsagePercentage > 80 || memoryUsagePercentage > 80) {
50
+ this.logger.warn(`
51
+ Detected that there may be resource contention on the machine (${cpuUsagePercentage.toFixed()}% CPU usage, ${memoryUsagePercentage.toFixed()}% memory usage).
52
+ Heavy load may result in network requests not being processed and lead to flaky tests.
53
+ We recommend running tests on a machine with more resources.
54
+ `);
55
+ Sentry.captureMessage("Detected resource contention on tunnel machine", {
56
+ level: "warning",
57
+ extra: {
58
+ cpuUsagePercentage,
59
+ memoryUsagePercentage,
60
+ testRunId: this.testRun.id,
61
+ projectId: this.testRun.project.id,
62
+ },
63
+ });
64
+ this.haveLoggedWarning = true;
65
+ }
66
+ this.previousCpuUsage = currentCpuUsage;
67
+ }
68
+ computeCpuUsage() {
69
+ return os_1.default.cpus().reduce((acc, cpu) => ({
70
+ active: acc.active + cpu.times.user + cpu.times.nice + cpu.times.sys,
71
+ idle: acc.idle + cpu.times.idle,
72
+ }), { active: 0, idle: 0 });
73
+ }
74
+ }
75
+ exports.ResourceTracker = ResourceTracker;
76
+ //# sourceMappingURL=resource-tracker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resource-tracker.js","sourceRoot":"","sources":["../src/resource-tracker.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,4CAAoB;AAEpB,qDAAuC;AAGvC,MAAa,eAAe;IAM1B,YAAY,MAAc,EAAE,OAAgB;QAJpC,sBAAiB,GAAY,KAAK,CAAC;QAKzC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QAC/C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAEM,UAAU;QACf,IAAI,IAAI,CAAC,iBAAiB,EAAE;YAC1B,uFAAuF;YACvF,OAAO;SACR;QAED,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QAC/C,MAAM,mBAAmB,GACvB,eAAe,CAAC,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC;QACxD,MAAM,iBAAiB,GAAG,eAAe,CAAC,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;QAC5E,MAAM,kBAAkB,GACtB,CAAC,mBAAmB,GAAG,CAAC,mBAAmB,GAAG,iBAAiB,CAAC,CAAC,GAAG,GAAG,CAAC;QAC1E,MAAM,qBAAqB,GACzB,CAAC,CAAC,YAAE,CAAC,QAAQ,EAAE,GAAG,YAAE,CAAC,OAAO,EAAE,CAAC,GAAG,YAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,GAAG,CAAC;QAEzD,IAAI,kBAAkB,GAAG,EAAE,IAAI,qBAAqB,GAAG,EAAE,EAAE;YACzD,IAAI,CAAC,MAAM,CAAC,IAAI,CACd;2EACmE,kBAAkB,CAAC,OAAO,EAAE,gBAAgB,qBAAqB,CAAC,OAAO,EAAE;;;WAG3I,CACJ,CAAC;YACF,MAAM,CAAC,cAAc,CAAC,gDAAgD,EAAE;gBACtE,KAAK,EAAE,SAAS;gBAChB,KAAK,EAAE;oBACL,kBAAkB;oBAClB,qBAAqB;oBACrB,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE;oBAC1B,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;iBACnC;aACF,CAAC,CAAC;YACH,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;SAC/B;QAED,IAAI,CAAC,gBAAgB,GAAG,eAAe,CAAC;IAC1C,CAAC;IAEO,eAAe;QACrB,OAAO,YAAE,CAAC,IAAI,EAAE,CAAC,MAAM,CACrB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;YACb,MAAM,EAAE,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG;YACpE,IAAI,EAAE,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI;SAChC,CAAC,EACF,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CACvB,CAAC;IACJ,CAAC;CACF;AA3DD,0CA2DC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alwaysmeticulous/remote-replay-launcher",
3
- "version": "2.200.0",
3
+ "version": "2.201.0",
4
4
  "description": "Executes a remote replay on Meticulous' infrastructure",
5
5
  "license": "ISC",
6
6
  "main": "dist/index.js",
@@ -20,9 +20,10 @@
20
20
  "test": "jest --passWithNoTests"
21
21
  },
22
22
  "dependencies": {
23
- "@alwaysmeticulous/client": "^2.200.0",
24
- "@alwaysmeticulous/common": "^2.199.1",
25
- "@alwaysmeticulous/tunnels-client": "^2.200.0",
23
+ "@alwaysmeticulous/client": "^2.201.0",
24
+ "@alwaysmeticulous/common": "^2.201.0",
25
+ "@alwaysmeticulous/tunnels-client": "^2.201.0",
26
+ "@sentry/node": "^8.33.1",
26
27
  "loglevel": "^1.8.0"
27
28
  },
28
29
  "author": {
@@ -45,5 +46,5 @@
45
46
  "jest": {
46
47
  "preset": "../../jest.config.js"
47
48
  },
48
- "gitHead": "9ed1fc38f45080e1dbe44e222d86d164574c3f1f"
49
+ "gitHead": "febc97c342ee826171aff37a12df09e2a70a12bd"
49
50
  }