@vtex/api 7.4.1-beta.1 → 7.4.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.
@@ -23,10 +23,9 @@ const onMessage = (worker, message) => {
23
23
  else if ((0, clusterMetricsAggregator_1.isAggMetricsRequest)(message)) {
24
24
  (0, clusterMetricsAggregator_1.handleWorkerMetricsRequest)(worker, message);
25
25
  }
26
- else if ((0, clusterMetricsAggregator_1.isPromClientMessage)(message)) {
27
- // Handled by prom-client's own cluster listener; ignore here.
28
- }
29
- else {
26
+ else if (!(0, clusterMetricsAggregator_1.isPromClientMessage)(message)) {
27
+ // prom-client's own cluster messages are handled by its cluster listener;
28
+ // anything else that reaches here is genuinely unexpected.
30
29
  listeners_1.logger.warn({
31
30
  content: message,
32
31
  message: 'Worker sent message',
@@ -64,14 +64,30 @@ exports.initMasterAggregatorRegistry = initMasterAggregatorRegistry;
64
64
  * merged sources and is never double-counted.
65
65
  */
66
66
  const handleWorkerMetricsRequest = async (worker, message) => {
67
- var _a;
67
+ var _a, _b;
68
68
  const aggregator = (0, exports.initMasterAggregatorRegistry)();
69
+ let response;
69
70
  try {
70
71
  const body = await aggregator.clusterMetrics();
71
- worker.send({ type: exports.AGG_METRICS_RES, id: message.id, body });
72
+ response = { type: exports.AGG_METRICS_RES, id: message.id, body };
72
73
  }
73
74
  catch (err) {
74
- worker.send({ type: exports.AGG_METRICS_RES, id: message.id, error: (_a = err === null || err === void 0 ? void 0 : err.message) !== null && _a !== void 0 ? _a : String(err) });
75
+ response = { type: exports.AGG_METRICS_RES, id: message.id, error: (_a = err === null || err === void 0 ? void 0 : err.message) !== null && _a !== void 0 ? _a : String(err) };
76
+ }
77
+ // `worker.send` can throw (e.g. the worker disconnected between the request
78
+ // and the reply). This handler is invoked without `await` from the master's
79
+ // message listener, so a thrown send would surface as an unhandled rejection
80
+ // in the master process. Swallow and log it instead.
81
+ try {
82
+ worker.send(response);
83
+ }
84
+ catch (err) {
85
+ listeners_1.logger.warn({
86
+ content: (_b = err === null || err === void 0 ? void 0 : err.message) !== null && _b !== void 0 ? _b : String(err),
87
+ message: 'Failed to send aggregated cluster metrics to worker',
88
+ pid: process.pid,
89
+ workerId: worker.id,
90
+ });
75
91
  }
76
92
  };
77
93
  exports.handleWorkerMetricsRequest = handleWorkerMetricsRequest;
@@ -59,10 +59,9 @@ const onMessage = (service) => (message) => {
59
59
  else if ((0, clusterMetricsAggregator_1.isAggMetricsResponse)(message)) {
60
60
  (0, clusterMetricsAggregator_1.handleMasterMetricsResponse)(message);
61
61
  }
62
- else if ((0, clusterMetricsAggregator_1.isPromClientMessage)(message)) {
63
- // Handled by prom-client's own worker listener; ignore here.
64
- }
65
- else {
62
+ else if (!(0, clusterMetricsAggregator_1.isPromClientMessage)(message)) {
63
+ // prom-client's own cluster messages are handled by its worker listener;
64
+ // anything else that reaches here is genuinely unexpected.
66
65
  listeners_1.logger.warn({
67
66
  content: message,
68
67
  message: 'Master sent message',
@@ -195,8 +194,7 @@ const startWorker = (serviceJSON) => {
195
194
  appGraphQLHandlers,
196
195
  runtimeHttpHandlers,
197
196
  ]
198
- .filter(x => x != null)
199
- // TODO: Fix ramda typings. Apparently there was an update that broke things
197
+ .filter((x) => x != null)
200
198
  .reduce((acc, handler) => (0, ramda_1.mergeDeepRight)(acc, handler), {});
201
199
  if (httpHandlers === null || httpHandlers === void 0 ? void 0 : httpHandlers.pub) {
202
200
  const publicHandlersRouter = (0, router_2.routerFromPublicHttpHandlers)(httpHandlers.pub);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vtex/api",
3
- "version": "7.4.1-beta.1",
3
+ "version": "7.4.1",
4
4
  "description": "VTEX I/O API client",
5
5
  "main": "lib/index.js",
6
6
  "typings": "lib/index.d.ts",