@chainlink/external-adapter-framework 0.0.21 → 0.0.22
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/cache/factory.js +0 -27
- package/cache/index.js +1 -16
- package/cache/local.js +0 -26
- package/cache/redis.js +0 -45
- package/metrics/index.d.ts +1 -1
- package/package.json +2 -2
- package/test.js +2 -2
- package/transports/batch-warming.js +0 -36
- package/transports/rest.js +0 -32
- package/transports/util.js +0 -33
- package/transports/websocket.js +0 -31
package/cache/factory.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
|
};
|
|
@@ -30,7 +7,6 @@ exports.CacheFactory = void 0;
|
|
|
30
7
|
const ioredis_1 = __importDefault(require("ioredis"));
|
|
31
8
|
const util_1 = require("../util");
|
|
32
9
|
const local_1 = require("./local");
|
|
33
|
-
const cacheMetrics = __importStar(require("./metrics"));
|
|
34
10
|
const redis_1 = require("./redis");
|
|
35
11
|
const logger = (0, util_1.makeLogger)('CacheFactory');
|
|
36
12
|
class CacheFactory {
|
|
@@ -48,9 +24,6 @@ class CacheFactory {
|
|
|
48
24
|
path: config.CACHE_REDIS_PATH,
|
|
49
25
|
timeout: config.CACHE_REDIS_TIMEOUT,
|
|
50
26
|
});
|
|
51
|
-
redis.on('connect', () => {
|
|
52
|
-
cacheMetrics.redisConnectionsOpen.inc();
|
|
53
|
-
});
|
|
54
27
|
return new redis_1.RedisCache(redis);
|
|
55
28
|
}
|
|
56
29
|
}
|
package/cache/index.js
CHANGED
|
@@ -10,25 +10,12 @@ var __createBinding = (this && this.__createBinding) || (Object.create ? (functi
|
|
|
10
10
|
if (k2 === undefined) k2 = k;
|
|
11
11
|
o[k2] = m[k];
|
|
12
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
13
|
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
26
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
27
15
|
};
|
|
28
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
17
|
exports.buildCacheMiddleware = exports.pollResponseFromCache = exports.calculateKey = exports.calculateFeedId = exports.calculateCacheKey = void 0;
|
|
30
18
|
const util_1 = require("../util");
|
|
31
|
-
const cacheMetrics = __importStar(require("./metrics"));
|
|
32
19
|
__exportStar(require("./local"), exports);
|
|
33
20
|
__exportStar(require("./redis"), exports);
|
|
34
21
|
__exportStar(require("./factory"), exports);
|
|
@@ -157,10 +144,8 @@ const buildCacheMiddleware = (adapter) => async (req, res) => {
|
|
|
157
144
|
if (response) {
|
|
158
145
|
logger.debug('Found response from cache, sending that');
|
|
159
146
|
if (adapter.config.METRICS_ENABLED && adapter.config.EXPERIMENTAL_METRICS_ENABLED) {
|
|
160
|
-
const label = cacheMetrics.cacheMetricsLabel(req.requestContext.cacheKey, req.requestContext.meta?.metrics?.feedId || 'N/A', adapter.config.CACHE_TYPE);
|
|
161
147
|
// Record cache staleness and cache get count and value
|
|
162
|
-
|
|
163
|
-
cacheMetrics.cacheGet(label, response.result, staleness);
|
|
148
|
+
calculateStaleness(response.maxAge, adapter.config.CACHE_MAX_AGE);
|
|
164
149
|
req.requestContext.meta = {
|
|
165
150
|
...req.requestContext.meta,
|
|
166
151
|
metrics: { ...req.requestContext.meta?.metrics, cacheHit: true },
|
package/cache/local.js
CHANGED
|
@@ -1,31 +1,7 @@
|
|
|
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
3
|
exports.LocalCache = void 0;
|
|
27
4
|
const util_1 = require("../util");
|
|
28
|
-
const cacheMetrics = __importStar(require("./metrics"));
|
|
29
5
|
const logger = (0, util_1.makeLogger)('LocalCache');
|
|
30
6
|
/**
|
|
31
7
|
* Local implementation of a Cache. It uses a simple js Object, storing entries with both
|
|
@@ -69,8 +45,6 @@ class LocalCache {
|
|
|
69
45
|
const feedId = value.meta?.metrics?.feedId;
|
|
70
46
|
if (feedId) {
|
|
71
47
|
// Record cache set count, max age, and staleness (set to 0 for cache set)
|
|
72
|
-
const label = cacheMetrics.cacheMetricsLabel(key, feedId, cacheMetrics.CacheTypes.Local);
|
|
73
|
-
cacheMetrics.cacheSet(label, ttl);
|
|
74
48
|
}
|
|
75
49
|
}
|
|
76
50
|
async setMany(entries, ttl) {
|
package/cache/redis.js
CHANGED
|
@@ -1,31 +1,7 @@
|
|
|
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
3
|
exports.RedisCache = void 0;
|
|
27
4
|
const util_1 = require("../util");
|
|
28
|
-
const cacheMetrics = __importStar(require("./metrics"));
|
|
29
5
|
const logger = (0, util_1.makeLogger)('RedisCache');
|
|
30
6
|
/**
|
|
31
7
|
* Redis implementation of a Cache. It uses a simple js Object, storing entries with both
|
|
@@ -40,10 +16,6 @@ class RedisCache {
|
|
|
40
16
|
async get(key) {
|
|
41
17
|
logger.trace(`Getting key ${key}`);
|
|
42
18
|
const value = await this.client.get(key);
|
|
43
|
-
// Record get command sent to Redis
|
|
44
|
-
cacheMetrics.redisCommandsSentCount
|
|
45
|
-
.labels({ status: cacheMetrics.CMD_SENT_STATUS.SUCCESS, function_name: 'get' })
|
|
46
|
-
.inc();
|
|
47
19
|
if (!value) {
|
|
48
20
|
logger.debug(`No entry in redis cache for key "${key}", returning undefined`);
|
|
49
21
|
return undefined;
|
|
@@ -53,10 +25,6 @@ class RedisCache {
|
|
|
53
25
|
async delete(key) {
|
|
54
26
|
logger.trace(`Deleting key ${key}`);
|
|
55
27
|
await this.client.del(key);
|
|
56
|
-
// Record delete command sent to Redis
|
|
57
|
-
cacheMetrics.redisCommandsSentCount
|
|
58
|
-
.labels({ status: cacheMetrics.CMD_SENT_STATUS.SUCCESS, function_name: 'delete' })
|
|
59
|
-
.inc();
|
|
60
28
|
}
|
|
61
29
|
async set(key, value, ttl) {
|
|
62
30
|
logger.trace(`Setting key ${key}`);
|
|
@@ -65,13 +33,7 @@ class RedisCache {
|
|
|
65
33
|
const feedId = value.meta?.metrics?.feedId;
|
|
66
34
|
if (feedId) {
|
|
67
35
|
// Record cache set count, max age, and staleness (set to 0 for cache set)
|
|
68
|
-
const label = cacheMetrics.cacheMetricsLabel(key, feedId, cacheMetrics.CacheTypes.Redis);
|
|
69
|
-
cacheMetrics.cacheSet(label, ttl);
|
|
70
36
|
}
|
|
71
|
-
// Record set command sent to Redis
|
|
72
|
-
cacheMetrics.redisCommandsSentCount
|
|
73
|
-
.labels({ status: cacheMetrics.CMD_SENT_STATUS.SUCCESS, function_name: 'set' })
|
|
74
|
-
.inc();
|
|
75
37
|
}
|
|
76
38
|
async setMany(entries, ttl) {
|
|
77
39
|
logger.trace(`Setting a bunch of keys`);
|
|
@@ -86,15 +48,8 @@ class RedisCache {
|
|
|
86
48
|
// Only record metrics if feed Id is present, otherwise assuming value is not adapter response to record
|
|
87
49
|
const feedId = entry.value.meta?.metrics?.feedId;
|
|
88
50
|
if (feedId) {
|
|
89
|
-
// Record cache set count, max age, and staleness (set to 0 for cache set)
|
|
90
|
-
const label = cacheMetrics.cacheMetricsLabel(entry.key, feedId, cacheMetrics.CacheTypes.Redis);
|
|
91
|
-
cacheMetrics.cacheSet(label, ttl);
|
|
92
51
|
}
|
|
93
52
|
}
|
|
94
|
-
// Record setMany command sent to Redis
|
|
95
|
-
cacheMetrics.redisCommandsSentCount
|
|
96
|
-
.labels({ status: cacheMetrics.CMD_SENT_STATUS.SUCCESS, function_name: 'exec' })
|
|
97
|
-
.inc();
|
|
98
53
|
}
|
|
99
54
|
}
|
|
100
55
|
exports.RedisCache = RedisCache;
|
package/metrics/index.d.ts
CHANGED
|
@@ -11,5 +11,5 @@ export declare const setupMetrics: (name: string, config: AdapterConfig) => void
|
|
|
11
11
|
* @returns the cache middleware function
|
|
12
12
|
*/
|
|
13
13
|
export declare const buildMetricsMiddleware: (req: AdapterRequest, res: FastifyReply, done: HookHandlerDoneFunction) => void;
|
|
14
|
-
export declare const httpRequestsTotal: client.Counter<"type" | "method" | "
|
|
14
|
+
export declare const httpRequestsTotal: client.Counter<"type" | "method" | "status_code" | "retry" | "is_cache_warming" | "feed_id" | "provider_status_code">;
|
|
15
15
|
export declare const httpRequestDurationSeconds: client.Histogram<string>;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@chainlink/external-adapter-framework",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.22",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"dependencies": {
|
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
"nock": "^13.2.4",
|
|
45
45
|
"pino-pretty": "^7.6.0",
|
|
46
46
|
"prettier": "^2.6.1",
|
|
47
|
-
"ts-node-dev": "2.0.0",
|
|
47
|
+
"ts-node-dev": "^2.0.0",
|
|
48
48
|
"typedoc": "^0.22.15"
|
|
49
49
|
},
|
|
50
50
|
"prettier": {
|
package/test.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const _1 = require(".");
|
|
4
|
-
const
|
|
4
|
+
const src_1 = require("./examples/coingecko/src");
|
|
5
5
|
// Start sample adapter
|
|
6
|
-
(0, _1.expose)(
|
|
6
|
+
(0, _1.expose)(src_1.adapter);
|
|
@@ -1,35 +1,9 @@
|
|
|
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
3
|
exports.BatchWarmingTransport = void 0;
|
|
27
4
|
const util_1 = require("../util");
|
|
28
5
|
const _1 = require("./");
|
|
29
6
|
const util_2 = require("./util");
|
|
30
|
-
const rateLimitMetrics = __importStar(require("../rate-limiting/metrics"));
|
|
31
|
-
const cacheMetrics = __importStar(require("../cache/metrics"));
|
|
32
|
-
const WARMUP_BATCH_REQUEST_ID = '9002';
|
|
33
7
|
const logger = (0, util_1.makeLogger)('BatchWarmingTransport');
|
|
34
8
|
/**
|
|
35
9
|
* Transport implementation that takes incoming batches requests and keeps a warm cache of values.
|
|
@@ -69,14 +43,12 @@ class BatchWarmingTransport {
|
|
|
69
43
|
logger.debug('No entries in batch warming set, skipping');
|
|
70
44
|
if (this.WARMER_ACTIVE) {
|
|
71
45
|
// Decrement count when warmer changed from having entries to having none
|
|
72
|
-
cacheMetrics.cacheWarmerCount.labels({ isBatched: 'true' }).dec();
|
|
73
46
|
this.WARMER_ACTIVE = false;
|
|
74
47
|
}
|
|
75
48
|
return this.rateLimiter.msUntilNextExecution(context.adapterEndpoint.name);
|
|
76
49
|
}
|
|
77
50
|
else if (this.WARMER_ACTIVE === false) {
|
|
78
51
|
// Increment count when warmer changed from having no entries to having some
|
|
79
|
-
cacheMetrics.cacheWarmerCount.labels({ isBatched: 'true' }).inc();
|
|
80
52
|
this.WARMER_ACTIVE = true;
|
|
81
53
|
}
|
|
82
54
|
const request = this.config.prepareRequest(entries, context);
|
|
@@ -87,14 +59,6 @@ class BatchWarmingTransport {
|
|
|
87
59
|
const adapterResponses = (0, _1.buildCacheEntriesFromResults)(results, context);
|
|
88
60
|
logger.debug('Setting adapter responses in cache');
|
|
89
61
|
await this.cache.setMany(adapterResponses, context.adapterConfig.CACHE_MAX_AGE);
|
|
90
|
-
// Record cost of data provider call
|
|
91
|
-
const cost = rateLimitMetrics.retrieveCost(providerResponse.data);
|
|
92
|
-
rateLimitMetrics.rateLimitCreditsSpentTotal
|
|
93
|
-
.labels({
|
|
94
|
-
feed_id: 'N/A',
|
|
95
|
-
participant_id: WARMUP_BATCH_REQUEST_ID,
|
|
96
|
-
})
|
|
97
|
-
.inc(cost);
|
|
98
62
|
return this.rateLimiter.msUntilNextExecution(context.adapterEndpoint.name);
|
|
99
63
|
}
|
|
100
64
|
}
|
package/transports/rest.js
CHANGED
|
@@ -1,33 +1,9 @@
|
|
|
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
3
|
exports.RestTransport = void 0;
|
|
27
4
|
const util_1 = require("../util");
|
|
28
5
|
const error_1 = require("../validation/error");
|
|
29
6
|
const util_2 = require("./util");
|
|
30
|
-
const rateLimitMetrics = __importStar(require("../rate-limiting/metrics"));
|
|
31
7
|
const IN_FLIGHT_PREFIX = 'InFlight';
|
|
32
8
|
const logger = (0, util_1.makeLogger)('RestTransport');
|
|
33
9
|
/**
|
|
@@ -114,14 +90,6 @@ class RestTransport {
|
|
|
114
90
|
}
|
|
115
91
|
logger.debug('Setting provider response in cache');
|
|
116
92
|
await this.cache.set(req.requestContext.cacheKey, parsedResponse, config.CACHE_MAX_AGE);
|
|
117
|
-
// Record cost of data provider call
|
|
118
|
-
const cost = rateLimitMetrics.retrieveCost(providerResponse.data);
|
|
119
|
-
rateLimitMetrics.rateLimitCreditsSpentTotal
|
|
120
|
-
.labels({
|
|
121
|
-
feed_id: req.requestContext.meta?.metrics?.feedId || 'N/A',
|
|
122
|
-
participant_id: req.requestContext.cacheKey,
|
|
123
|
-
})
|
|
124
|
-
.inc(cost);
|
|
125
93
|
// Update cacheHit flag in request meta for metrics use
|
|
126
94
|
req.requestContext.meta = {
|
|
127
95
|
...req.requestContext.meta,
|
package/transports/util.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,7 +6,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
29
6
|
exports.axiosRequest = void 0;
|
|
30
7
|
const axios_1 = __importDefault(require("axios"));
|
|
31
8
|
const error_1 = require("../validation/error");
|
|
32
|
-
const transportMetrics = __importStar(require("./metrics"));
|
|
33
9
|
/**
|
|
34
10
|
* Performs axios request along with metrics recording and error handling
|
|
35
11
|
*
|
|
@@ -37,7 +13,6 @@ const transportMetrics = __importStar(require("./metrics"));
|
|
|
37
13
|
* @returns axios response for the request
|
|
38
14
|
*/
|
|
39
15
|
async function axiosRequest(request, config) {
|
|
40
|
-
const responseTimer = transportMetrics.dataProviderRequestDurationSeconds.startTimer();
|
|
41
16
|
let providerResponse;
|
|
42
17
|
try {
|
|
43
18
|
request.timeout = config.API_TIMEOUT;
|
|
@@ -62,9 +37,6 @@ async function axiosRequest(request, config) {
|
|
|
62
37
|
providerStatusCode = 0; // 0 -> connection error
|
|
63
38
|
}
|
|
64
39
|
// Record count of failed data provider request
|
|
65
|
-
transportMetrics.dataProviderRequests
|
|
66
|
-
.labels(transportMetrics.dataProviderMetricsLabel(providerStatusCode, request.method))
|
|
67
|
-
.inc();
|
|
68
40
|
adapterError.statusCode = 200;
|
|
69
41
|
adapterError.providerStatusCode = providerStatusCode;
|
|
70
42
|
adapterError.message = error?.message;
|
|
@@ -75,12 +47,7 @@ async function axiosRequest(request, config) {
|
|
|
75
47
|
}
|
|
76
48
|
finally {
|
|
77
49
|
// Record time taken for data provider request for success or failure
|
|
78
|
-
responseTimer();
|
|
79
50
|
}
|
|
80
|
-
// Record count of successful data provider requests
|
|
81
|
-
transportMetrics.dataProviderRequests
|
|
82
|
-
.labels(transportMetrics.dataProviderMetricsLabel(providerResponse.status, request.method))
|
|
83
|
-
.inc();
|
|
84
51
|
return providerResponse;
|
|
85
52
|
}
|
|
86
53
|
exports.axiosRequest = axiosRequest;
|
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
|
};
|
|
@@ -30,7 +7,6 @@ exports.WebSocketTransport = exports.WebSocketClassProvider = void 0;
|
|
|
30
7
|
const ws_1 = __importDefault(require("ws"));
|
|
31
8
|
const util_1 = require("../util");
|
|
32
9
|
const _1 = require("./");
|
|
33
|
-
const transportMetrics = __importStar(require("./metrics"));
|
|
34
10
|
const logger = (0, util_1.makeLogger)('WebSocketTransport');
|
|
35
11
|
class WebSocketClassProvider {
|
|
36
12
|
static set(ctor) {
|
|
@@ -87,7 +63,6 @@ class WebSocketTransport {
|
|
|
87
63
|
logger.debug('Successfully executed connection opened handler');
|
|
88
64
|
// Record active ws connections by incrementing count on open
|
|
89
65
|
// Using URL in label since connection_key is removed from v3
|
|
90
|
-
transportMetrics.wsConnectionActive.inc();
|
|
91
66
|
resolve(true);
|
|
92
67
|
});
|
|
93
68
|
this.wsConnection.addEventListener('message', async (event) => {
|
|
@@ -103,15 +78,11 @@ class WebSocketTransport {
|
|
|
103
78
|
});
|
|
104
79
|
this.wsConnection.addEventListener('error', async (event) => {
|
|
105
80
|
// Record connection error count
|
|
106
|
-
transportMetrics.wsConnectionErrors
|
|
107
|
-
.labels(transportMetrics.connectionErrorLabels(event.message))
|
|
108
|
-
.inc();
|
|
109
81
|
});
|
|
110
82
|
this.wsConnection.addEventListener('close', (event) => {
|
|
111
83
|
logger.debug(`Closed websocket connection. Code: ${event.code} ; reason: ${event.reason?.toString()}`);
|
|
112
84
|
// Record active ws connections by decrementing count on close
|
|
113
85
|
// Using URL in label since connection_key is removed from v3
|
|
114
|
-
transportMetrics.wsConnectionActive.dec();
|
|
115
86
|
});
|
|
116
87
|
});
|
|
117
88
|
}
|
|
@@ -155,8 +126,6 @@ class WebSocketTransport {
|
|
|
155
126
|
logger.trace(`Sending message: ${JSON.stringify(message)}`);
|
|
156
127
|
this.wsConnection.send(message);
|
|
157
128
|
}
|
|
158
|
-
// Record WS message and subscription metrics
|
|
159
|
-
transportMetrics.recordWsMessageMetrics(context, subscribeParams, unsubscribeParams);
|
|
160
129
|
logger.debug('Setting local state to cache value');
|
|
161
130
|
this.localSubscriptions = desiredSubs;
|
|
162
131
|
logger.debug('Background execute complete');
|