@chainlink/external-adapter-framework 0.18.0 → 0.19.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/adapter/basic.js +10 -31
- package/adapter/basic.js.map +1 -1
- package/background-executor.js +4 -26
- package/background-executor.js.map +1 -1
- package/cache/metrics.d.ts +1 -7
- package/cache/metrics.js +10 -102
- package/cache/metrics.js.map +1 -1
- package/cache/redis.d.ts +3 -4
- package/cache/redis.js +13 -37
- package/cache/redis.js.map +1 -1
- package/index.d.ts +0 -5
- package/index.js +2 -33
- package/index.js.map +1 -1
- package/metrics/index.d.ts +43 -5
- package/metrics/index.js +194 -31
- package/metrics/index.js.map +1 -1
- package/package.json +3 -3
- package/rate-limiting/metrics.d.ts +0 -2
- package/rate-limiting/metrics.js +1 -30
- package/rate-limiting/metrics.js.map +1 -1
- package/transports/abstract/subscription.js +3 -25
- package/transports/abstract/subscription.js.map +1 -1
- package/transports/http.js +7 -33
- package/transports/http.js.map +1 -1
- package/transports/metrics.d.ts +0 -9
- package/transports/metrics.js +8 -74
- package/transports/metrics.js.map +1 -1
- package/transports/websocket.js +7 -35
- package/transports/websocket.js.map +1 -1
- package/util/metrics.d.ts +7 -8
- package/util/metrics.js +22 -25
- package/util/metrics.js.map +1 -1
- package/util/requester.js +11 -32
- package/util/requester.js.map +1 -1
package/transports/metrics.js
CHANGED
|
@@ -1,31 +1,8 @@
|
|
|
1
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
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
-
exports.
|
|
27
|
-
const client = __importStar(require("prom-client"));
|
|
3
|
+
exports.recordWsMessageMetrics = exports.messageSubsLabels = exports.connectionErrorLabels = void 0;
|
|
28
4
|
const cache_1 = require("../cache");
|
|
5
|
+
const metrics_1 = require("../metrics");
|
|
29
6
|
// Websocket Metrics
|
|
30
7
|
const connectionErrorLabels = (message) => ({
|
|
31
8
|
// Key,
|
|
@@ -48,19 +25,17 @@ const recordWsMessageMetrics = (context, subscribes, unsubscribes) => {
|
|
|
48
25
|
const recordMetrics = (params, type) => {
|
|
49
26
|
const baseLabels = (0, exports.messageSubsLabels)(context, params);
|
|
50
27
|
// Record total number of ws messages sent
|
|
51
|
-
|
|
52
|
-
.
|
|
53
|
-
...baseLabels,
|
|
54
|
-
direction: 'sent',
|
|
55
|
-
})
|
|
28
|
+
metrics_1.metrics
|
|
29
|
+
.get('wsMessageTotal')
|
|
30
|
+
.labels({ ...baseLabels, direction: 'sent' })
|
|
56
31
|
.inc();
|
|
57
32
|
// Record total number of subscriptions made
|
|
58
33
|
if (type === 'sub') {
|
|
59
|
-
|
|
60
|
-
|
|
34
|
+
metrics_1.metrics.get('wsSubscriptionTotal').labels(baseLabels).inc();
|
|
35
|
+
metrics_1.metrics.get('wsSubscriptionActive').labels(baseLabels).inc();
|
|
61
36
|
}
|
|
62
37
|
else {
|
|
63
|
-
|
|
38
|
+
metrics_1.metrics.get('wsSubscriptionActive').labels(baseLabels).dec();
|
|
64
39
|
}
|
|
65
40
|
};
|
|
66
41
|
subscribes.forEach((params) => {
|
|
@@ -71,45 +46,4 @@ const recordWsMessageMetrics = (context, subscribes, unsubscribes) => {
|
|
|
71
46
|
});
|
|
72
47
|
};
|
|
73
48
|
exports.recordWsMessageMetrics = recordWsMessageMetrics;
|
|
74
|
-
exports.wsConnectionActive = new client.Gauge({
|
|
75
|
-
name: 'ws_connection_active',
|
|
76
|
-
help: 'The number of active connections',
|
|
77
|
-
labelNames: ['url'],
|
|
78
|
-
});
|
|
79
|
-
exports.wsConnectionErrors = new client.Counter({
|
|
80
|
-
name: 'ws_connection_errors',
|
|
81
|
-
help: 'The number of connection errors',
|
|
82
|
-
labelNames: ['url', 'message'],
|
|
83
|
-
});
|
|
84
|
-
exports.wsSubscriptionActive = new client.Gauge({
|
|
85
|
-
name: 'ws_subscription_active',
|
|
86
|
-
help: 'The number of currently active subscriptions',
|
|
87
|
-
labelNames: ['connection_url', 'feed_id', 'subscription_key'],
|
|
88
|
-
});
|
|
89
|
-
exports.wsSubscriptionTotal = new client.Counter({
|
|
90
|
-
name: 'ws_subscription_total',
|
|
91
|
-
help: 'The number of subscriptions opened in total',
|
|
92
|
-
labelNames: ['connection_url', 'feed_id', 'subscription_key'],
|
|
93
|
-
});
|
|
94
|
-
exports.wsMessageTotal = new client.Counter({
|
|
95
|
-
name: 'ws_message_total',
|
|
96
|
-
help: 'The number of messages sent in total',
|
|
97
|
-
labelNames: ['feed_id', 'subscription_key', 'direction'],
|
|
98
|
-
});
|
|
99
|
-
// V3 specific metrics
|
|
100
|
-
exports.bgExecuteSubscriptionSetCount = new client.Gauge({
|
|
101
|
-
name: 'bg_execute_subscription_set_count',
|
|
102
|
-
help: 'The number of active subscriptions in background execute',
|
|
103
|
-
labelNames: ['endpoint', 'transport_type'],
|
|
104
|
-
});
|
|
105
|
-
exports.transportPollingFailureCount = new client.Counter({
|
|
106
|
-
name: 'transport_polling_failure_count',
|
|
107
|
-
help: 'The number of times the polling mechanism ran out of attempts and failed to return a response',
|
|
108
|
-
labelNames: ['endpoint'],
|
|
109
|
-
});
|
|
110
|
-
exports.transportPollingDurationSeconds = new client.Gauge({
|
|
111
|
-
name: 'transport_polling_duration_seconds',
|
|
112
|
-
help: 'A histogram bucket of the distribution of transport polling idle time durations',
|
|
113
|
-
labelNames: ['endpoint', 'succeeded'],
|
|
114
|
-
});
|
|
115
49
|
//# sourceMappingURL=metrics.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../../src/transports/metrics.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../../src/transports/metrics.ts"],"names":[],"mappings":";;;AAEA,oCAA6D;AAE7D,wCAAoC;AAGpC,oBAAoB;AACb,MAAM,qBAAqB,GAAG,CAAC,OAAe,EAAE,EAAE,CAAC,CAAC;IACzD,OAAO;IACP,OAAO;CACR,CAAC,CAAA;AAHW,QAAA,qBAAqB,yBAGhC;AAIK,MAAM,iBAAiB,GAAG,CAC/B,OAIC,EACD,MAA8B,EAC9B,EAAE;IACF,MAAM,MAAM,GAAG,IAAA,uBAAe,EAAC,OAAO,EAAE,MAAM,CAAC,CAAA;IAC/C,MAAM,QAAQ,GAAG,IAAA,yBAAiB,EAAC,OAAO,EAAE,MAAM,CAAC,CAAA;IAEnD,OAAO;QACL,OAAO,EAAE,MAAM;QACf,gBAAgB,EAAE,QAAQ;KAC3B,CAAA;AACH,CAAC,CAAA;AAfY,QAAA,iBAAiB,qBAe7B;AAED,6CAA6C;AAC7C,8CAA8C;AAC9C,2DAA2D;AACpD,MAAM,sBAAsB,GAAG,CACpC,OAA2B,EAC3B,UAAoC,EACpC,YAAsC,EAChC,EAAE;IACR,MAAM,aAAa,GAAG,CAAC,MAA8B,EAAE,IAAqB,EAAE,EAAE;QAC9E,MAAM,UAAU,GAAG,IAAA,yBAAiB,EAAC,OAAO,EAAE,MAAM,CAAC,CAAA;QAErD,0CAA0C;QAC1C,iBAAO;aACJ,GAAG,CAAC,gBAAgB,CAAC;aACrB,MAAM,CAAC,EAAE,GAAG,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC;aAC5C,GAAG,EAAE,CAAA;QAER,4CAA4C;QAC5C,IAAI,IAAI,KAAK,KAAK,EAAE;YAClB,iBAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,GAAG,EAAE,CAAA;YAC3D,iBAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,GAAG,EAAE,CAAA;SAC7D;aAAM;YACL,iBAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,GAAG,EAAE,CAAA;SAC7D;IACH,CAAC,CAAA;IAED,UAAU,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;QAC5B,aAAa,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;IAC9B,CAAC,CAAC,CAAA;IACF,YAAY,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;QAC9B,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAChC,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA;AA7BY,QAAA,sBAAsB,0BA6BlC"}
|
package/transports/websocket.js
CHANGED
|
@@ -1,27 +1,4 @@
|
|
|
1
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
2
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
4
|
};
|
|
@@ -29,9 +6,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
29
6
|
exports.WebSocketTransport = exports.WebSocketClassProvider = exports.WebSocket = void 0;
|
|
30
7
|
const ws_1 = __importDefault(require("ws"));
|
|
31
8
|
exports.WebSocket = ws_1.default;
|
|
9
|
+
const metrics_1 = require("../metrics");
|
|
32
10
|
const util_1 = require("../util");
|
|
33
|
-
const transportMetrics = __importStar(require("./metrics"));
|
|
34
11
|
const streaming_1 = require("./abstract/streaming");
|
|
12
|
+
const metrics_2 = require("./metrics");
|
|
35
13
|
const logger = (0, util_1.makeLogger)('WebSocketTransport');
|
|
36
14
|
class WebSocketClassProvider {
|
|
37
15
|
static set(ctor) {
|
|
@@ -79,7 +57,7 @@ class WebSocketTransport extends streaming_1.StreamingTransport {
|
|
|
79
57
|
logger.debug('Successfully executed connection opened handler');
|
|
80
58
|
}
|
|
81
59
|
// Record active ws connections by incrementing count on open
|
|
82
|
-
|
|
60
|
+
metrics_1.metrics.get('wsConnectionActive').inc();
|
|
83
61
|
connectionReadyResolve(true);
|
|
84
62
|
},
|
|
85
63
|
// Called when any message is received by the open connection
|
|
@@ -106,26 +84,20 @@ class WebSocketTransport extends streaming_1.StreamingTransport {
|
|
|
106
84
|
// Do this after writing so we get the values to the cache ASAP
|
|
107
85
|
// We're not calculating feedId or subscription because this is only a single message,
|
|
108
86
|
// and it could in theory contain more than one value to set to the cache
|
|
109
|
-
|
|
110
|
-
.labels({
|
|
111
|
-
direction: 'received',
|
|
112
|
-
})
|
|
113
|
-
.inc();
|
|
87
|
+
metrics_1.metrics.get('wsMessageTotal').labels({ direction: 'received' }).inc();
|
|
114
88
|
},
|
|
115
89
|
// Called when an error is thrown by the connection
|
|
116
90
|
error: async (event) => {
|
|
117
91
|
logger.debug(`Error occurred in web socket connection. Error: ${event.error} ; Message: ${event.message}`);
|
|
118
92
|
// Record connection error count
|
|
119
|
-
|
|
120
|
-
.labels(transportMetrics.connectionErrorLabels(event.message))
|
|
121
|
-
.inc();
|
|
93
|
+
metrics_1.metrics.get('wsConnectionErrors').labels((0, metrics_2.connectionErrorLabels)(event.message)).inc();
|
|
122
94
|
},
|
|
123
95
|
// Called when the WS connection closes for any reason
|
|
124
96
|
close: (event) => {
|
|
125
97
|
logger.debug(`Closed websocket connection. Code: ${event.code} ; reason: ${event.reason?.toString()}`);
|
|
126
98
|
// Record active ws connections by decrementing count on close
|
|
127
99
|
// Using URL in label since connection_key is removed from v3
|
|
128
|
-
|
|
100
|
+
metrics_1.metrics.get('wsConnectionActive').dec();
|
|
129
101
|
},
|
|
130
102
|
};
|
|
131
103
|
}
|
|
@@ -200,7 +172,7 @@ class WebSocketTransport extends streaming_1.StreamingTransport {
|
|
|
200
172
|
await this.sendMessages(context, subscribeMessage ? subscriptions.new.map(subscribeMessage) : subscriptions.new, unsubscribeMessage ? subscriptions.stale.map(unsubscribeMessage) : subscriptions.stale);
|
|
201
173
|
}
|
|
202
174
|
// Record WS message and subscription metrics
|
|
203
|
-
|
|
175
|
+
(0, metrics_2.recordWsMessageMetrics)(context, subscriptions.new, subscriptions.stale);
|
|
204
176
|
// The background execute loop no longer sleeps between executions, so we have to do it here
|
|
205
177
|
logger.trace(`Websocket handler complete, sleeping for ${context.adapterConfig.BACKGROUND_EXECUTE_MS_WS}ms...`);
|
|
206
178
|
await (0, util_1.sleep)(context.adapterConfig.BACKGROUND_EXECUTE_MS_WS);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"websocket.js","sourceRoot":"","sources":["../../../src/transports/websocket.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"websocket.js","sourceRoot":"","sources":["../../../src/transports/websocket.ts"],"names":[],"mappings":"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"}
|
package/util/metrics.d.ts
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import * as client from 'prom-client';
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
export declare const requesterQueueOverflow: client.Counter<string>;
|
|
2
|
+
import { Metrics } from '../metrics';
|
|
3
|
+
export declare const requestMetrics: Metrics<{
|
|
4
|
+
dataProviderRequests: client.Counter<"method" | "provider_status_code">;
|
|
5
|
+
dataProviderRequestDurationSeconds: client.Histogram<string>;
|
|
6
|
+
requesterQueueSize: client.Gauge<string>;
|
|
7
|
+
requesterQueueOverflow: client.Counter<string>;
|
|
8
|
+
}>;
|
package/util/metrics.js
CHANGED
|
@@ -23,31 +23,28 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
23
23
|
return result;
|
|
24
24
|
};
|
|
25
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
-
exports.
|
|
26
|
+
exports.requestMetrics = void 0;
|
|
27
27
|
const client = __importStar(require("prom-client"));
|
|
28
|
+
const metrics_1 = require("../metrics");
|
|
28
29
|
const constants_1 = require("../metrics/constants");
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
})
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
});
|
|
49
|
-
exports.requesterQueueOverflow = new client.Counter({
|
|
50
|
-
name: 'requester_queue_overflow',
|
|
51
|
-
help: 'Total times the requester queue replaced the oldest item to avoid an overflow',
|
|
52
|
-
});
|
|
30
|
+
exports.requestMetrics = new metrics_1.Metrics(() => ({
|
|
31
|
+
dataProviderRequests: new client.Counter({
|
|
32
|
+
name: 'data_provider_requests',
|
|
33
|
+
help: 'The number of http requests that are made to a data provider',
|
|
34
|
+
labelNames: ['method', 'provider_status_code'],
|
|
35
|
+
}),
|
|
36
|
+
dataProviderRequestDurationSeconds: new client.Histogram({
|
|
37
|
+
name: 'data_provider_request_duration_seconds',
|
|
38
|
+
help: 'A histogram bucket of the distribution of data provider request durations',
|
|
39
|
+
buckets: constants_1.requestDurationBuckets,
|
|
40
|
+
}),
|
|
41
|
+
requesterQueueSize: new client.Gauge({
|
|
42
|
+
name: 'requester_queue_size',
|
|
43
|
+
help: 'The number of provider http requests currently queued to be executed',
|
|
44
|
+
}),
|
|
45
|
+
requesterQueueOverflow: new client.Counter({
|
|
46
|
+
name: 'requester_queue_overflow',
|
|
47
|
+
help: 'Total times the requester queue replaced the oldest item to avoid an overflow',
|
|
48
|
+
}),
|
|
49
|
+
}));
|
|
53
50
|
//# sourceMappingURL=metrics.js.map
|
package/util/metrics.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../../src/util/metrics.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,oDAAqC;AACrC,
|
|
1
|
+
{"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../../src/util/metrics.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,oDAAqC;AACrC,wCAAoC;AACpC,oDAA6D;AAEhD,QAAA,cAAc,GAAG,IAAI,iBAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAC/C,oBAAoB,EAAE,IAAI,MAAM,CAAC,OAAO,CAAC;QACvC,IAAI,EAAE,wBAAwB;QAC9B,IAAI,EAAE,8DAA8D;QACpE,UAAU,EAAE,CAAC,QAAQ,EAAE,sBAAsB,CAAU;KACxD,CAAC;IACF,kCAAkC,EAAE,IAAI,MAAM,CAAC,SAAS,CAAC;QACvD,IAAI,EAAE,wCAAwC;QAC9C,IAAI,EAAE,2EAA2E;QACjF,OAAO,EAAE,kCAAsB;KAChC,CAAC;IACF,kBAAkB,EAAE,IAAI,MAAM,CAAC,KAAK,CAAC;QACnC,IAAI,EAAE,sBAAsB;QAC5B,IAAI,EAAE,sEAAsE;KAC7E,CAAC;IACF,sBAAsB,EAAE,IAAI,MAAM,CAAC,OAAO,CAAC;QACzC,IAAI,EAAE,0BAA0B;QAChC,IAAI,EAAE,+EAA+E;KACtF,CAAC;CACH,CAAC,CAAC,CAAA"}
|
package/util/requester.js
CHANGED
|
@@ -1,27 +1,4 @@
|
|
|
1
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
2
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
4
|
};
|
|
@@ -29,8 +6,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
29
6
|
exports.Requester = void 0;
|
|
30
7
|
const axios_1 = __importDefault(require("axios"));
|
|
31
8
|
const _1 = require(".");
|
|
9
|
+
const metrics_1 = require("../metrics");
|
|
32
10
|
const error_1 = require("../validation/error");
|
|
33
|
-
const metrics = __importStar(require("./metrics"));
|
|
34
11
|
const logger = (0, _1.makeLogger)('Requester');
|
|
35
12
|
class UniqueLinkedList {
|
|
36
13
|
constructor(maxLength) {
|
|
@@ -55,7 +32,7 @@ class UniqueLinkedList {
|
|
|
55
32
|
}
|
|
56
33
|
this.last = node;
|
|
57
34
|
this.length++;
|
|
58
|
-
metrics.requesterQueueSize.inc();
|
|
35
|
+
metrics_1.metrics.get('requesterQueueSize').inc();
|
|
59
36
|
return overflow;
|
|
60
37
|
}
|
|
61
38
|
remove() {
|
|
@@ -65,7 +42,7 @@ class UniqueLinkedList {
|
|
|
65
42
|
}
|
|
66
43
|
this.first = node.next;
|
|
67
44
|
this.length--;
|
|
68
|
-
metrics.requesterQueueSize.dec();
|
|
45
|
+
metrics_1.metrics.get('requesterQueueSize').dec();
|
|
69
46
|
return node.value;
|
|
70
47
|
}
|
|
71
48
|
}
|
|
@@ -127,7 +104,7 @@ class Requester {
|
|
|
127
104
|
if (overflowedRequest) {
|
|
128
105
|
// If we have overflow, it means the oldest request needs to be rejected because the queue is at its limits
|
|
129
106
|
logger.debug(`Request (Key: ${key}, Retry #: ${0}) was removed from the queue to make room for a newer one (Size: ${this.queue.length})`);
|
|
130
|
-
metrics.requesterQueueOverflow.inc();
|
|
107
|
+
metrics_1.metrics.get('requesterQueueOverflow').inc();
|
|
131
108
|
overflowedRequest.reject(new error_1.AdapterRateLimitError({
|
|
132
109
|
message: 'The EA was unable to execute the request to fetch the requested data from the DP because the request queue overflowed. This likely indicates that a higher API tier is needed.',
|
|
133
110
|
statusCode: 429,
|
|
@@ -170,7 +147,7 @@ class Requester {
|
|
|
170
147
|
async executeRequest(req) {
|
|
171
148
|
const { key, config, resolve, reject, retries } = req;
|
|
172
149
|
const providerDataRequested = Date.now();
|
|
173
|
-
const responseTimer = metrics.dataProviderRequestDurationSeconds.startTimer();
|
|
150
|
+
const responseTimer = metrics_1.metrics.get('dataProviderRequestDurationSeconds').startTimer();
|
|
174
151
|
// Set configured timeout for all requests unless manually specified
|
|
175
152
|
config.timeout = config.timeout || this.timeout;
|
|
176
153
|
try {
|
|
@@ -187,8 +164,9 @@ class Requester {
|
|
|
187
164
|
// Remove the request from our map
|
|
188
165
|
delete this.map[key];
|
|
189
166
|
// Record count of successful data provider requests
|
|
190
|
-
metrics
|
|
191
|
-
.
|
|
167
|
+
metrics_1.metrics
|
|
168
|
+
.get('dataProviderRequests')
|
|
169
|
+
.labels((0, metrics_1.dataProviderMetricsLabel)(response.status, config.method))
|
|
192
170
|
.inc();
|
|
193
171
|
}
|
|
194
172
|
catch (e) {
|
|
@@ -197,8 +175,9 @@ class Requester {
|
|
|
197
175
|
const err = e;
|
|
198
176
|
const ErrorClass = err.response?.status ? error_1.AdapterDataProviderError : error_1.AdapterConnectionError;
|
|
199
177
|
// Record count of failed data provider request
|
|
200
|
-
metrics
|
|
201
|
-
.
|
|
178
|
+
metrics_1.metrics
|
|
179
|
+
.get('dataProviderRequests')
|
|
180
|
+
.labels((0, metrics_1.dataProviderMetricsLabel)(err.response?.status || 0, config.method))
|
|
202
181
|
.inc();
|
|
203
182
|
reject(new ErrorClass({
|
|
204
183
|
statusCode: 502,
|
package/util/requester.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"requester.js","sourceRoot":"","sources":["../../../src/util/requester.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"requester.js","sourceRoot":"","sources":["../../../src/util/requester.ts"],"names":[],"mappings":"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"}
|