@substrate/api-sidecar 19.1.0 → 19.2.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.
- package/README.md +29 -22
- package/build/package.json +12 -11
- package/build/src/App.d.ts +0 -1
- package/build/src/App.js +10 -8
- package/build/src/App.js.map +1 -1
- package/build/src/SidecarConfig.js +9 -1
- package/build/src/SidecarConfig.js.map +1 -1
- package/build/src/Specs.d.ts +1 -0
- package/build/src/Specs.js +35 -2
- package/build/src/Specs.js.map +1 -1
- package/build/src/chains-config/cache/QueryFeeDetailsCache.js.map +1 -1
- package/build/src/chains-config/index.js +1 -2
- package/build/src/chains-config/index.js.map +1 -1
- package/build/src/controllers/AbstractController.js.map +1 -1
- package/build/src/controllers/AbstractControllers.spec.js +9 -9
- package/build/src/controllers/AbstractControllers.spec.js.map +1 -1
- package/build/src/controllers/accounts/AccountsAssetsController.js.map +1 -1
- package/build/src/controllers/accounts/AccountsBalanceInfoController.js +1 -1
- package/build/src/controllers/accounts/AccountsBalanceInfoController.js.map +1 -1
- package/build/src/controllers/accounts/AccountsConvertController.js.map +1 -1
- package/build/src/controllers/accounts/AccountsPoolAssetsController.js.map +1 -1
- package/build/src/controllers/accounts/AccountsStakingPayoutsController.js.map +1 -1
- package/build/src/controllers/blocks/BlocksController.d.ts +2 -0
- package/build/src/controllers/blocks/BlocksController.js +87 -8
- package/build/src/controllers/blocks/BlocksController.js.map +1 -1
- package/build/src/controllers/blocks/BlocksExtrinsicsController.d.ts +1 -0
- package/build/src/controllers/blocks/BlocksExtrinsicsController.js +13 -2
- package/build/src/controllers/blocks/BlocksExtrinsicsController.js.map +1 -1
- package/build/src/controllers/blocks/BlocksRawExtrinsicsController.js +12 -3
- package/build/src/controllers/blocks/BlocksRawExtrinsicsController.js.map +1 -1
- package/build/src/controllers/contracts/ContractsInkController.js.map +1 -1
- package/build/src/controllers/paras/ParasController.js.map +1 -1
- package/build/src/controllers/runtime/RuntimeMetadataController.js.map +1 -1
- package/build/src/controllers/transaction/TransactionDryRunController.js.map +1 -1
- package/build/src/controllers/transaction/TransactionFeeEstimateController.js.map +1 -1
- package/build/src/controllers/transaction/TransactionMaterialController.js.map +1 -1
- package/build/src/controllers/transaction/TransactionSubmitController.js.map +1 -1
- package/build/src/logging/Log.js +11 -0
- package/build/src/logging/Log.js.map +1 -1
- package/build/src/logging/consoleOverride.js +2 -3
- package/build/src/logging/consoleOverride.js.map +1 -1
- package/build/src/logging/transformers/filterApiRpc.js.map +1 -1
- package/build/src/logging/transformers/nodeUtilFormat.js.map +1 -1
- package/build/src/logging/transformers/stripAnsi.js +1 -1
- package/build/src/logging/transformers/stripAnsi.js.map +1 -1
- package/build/src/logging/transformers/stripTimestamp.js.map +1 -1
- package/build/src/logging/transports/consoleTransport.js +1 -2
- package/build/src/logging/transports/consoleTransport.js.map +1 -1
- package/build/src/main.js +5 -5
- package/build/src/main.js.map +1 -1
- package/build/src/{util/metrics.d.ts → metrics/Metrics.d.ts} +3 -8
- package/build/src/{util/metrics.js → metrics/Metrics.js} +20 -139
- package/build/src/metrics/Metrics.js.map +1 -0
- package/build/src/metrics/config.d.ts +2 -0
- package/build/src/metrics/config.js +71 -0
- package/build/src/metrics/config.js.map +1 -0
- package/build/src/metrics/index.d.ts +2 -0
- package/build/src/metrics/index.js +33 -0
- package/build/src/metrics/index.js.map +1 -0
- package/build/src/middleware/error/errorMiddleware.js.map +1 -1
- package/build/src/middleware/error/httpErrorMiddleware.js.map +1 -1
- package/build/src/middleware/error/internalErrorMiddleware.js.map +1 -1
- package/build/src/middleware/error/legacyErrorMiddleware.js.map +1 -1
- package/build/src/middleware/error/testTools.js +23 -23
- package/build/src/middleware/error/testTools.js.map +1 -1
- package/build/src/middleware/error/txErrorMiddleware.js.map +1 -1
- package/build/src/middleware/logger/httpLogger.js.map +1 -1
- package/build/src/middleware/validate/util.js +9 -9
- package/build/src/middleware/validate/util.js.map +1 -1
- package/build/src/middleware/validate/validateAddressMiddleware.js.map +1 -1
- package/build/src/middleware/validate/validateBooleanMiddleware.js +1 -1
- package/build/src/middleware/validate/validateBooleanMiddleware.js.map +1 -1
- package/build/src/parseArgs.js +0 -13
- package/build/src/parseArgs.js.map +1 -1
- package/build/src/sanitize/sanitizeNumbers.js +1 -2
- package/build/src/sanitize/sanitizeNumbers.js.map +1 -1
- package/build/src/services/AbstractPalletsService.js.map +1 -1
- package/build/src/services/AbstractService.js.map +1 -1
- package/build/src/services/accounts/AccountsAssetsService.js +3 -4
- package/build/src/services/accounts/AccountsAssetsService.js.map +1 -1
- package/build/src/services/accounts/AccountsBalanceInfoService.js.map +1 -1
- package/build/src/services/accounts/AccountsBalanceInfoService.spec.js +7 -7
- package/build/src/services/accounts/AccountsBalanceInfoService.spec.js.map +1 -1
- package/build/src/services/accounts/AccountsConvertService.js.map +1 -1
- package/build/src/services/accounts/AccountsPoolAssetsService.js +3 -4
- package/build/src/services/accounts/AccountsPoolAssetsService.js.map +1 -1
- package/build/src/services/accounts/AccountsStakingInfoService.js.map +1 -1
- package/build/src/services/accounts/AccountsStakingPayoutsService.js +4 -2
- package/build/src/services/accounts/AccountsStakingPayoutsService.js.map +1 -1
- package/build/src/services/accounts/AccountsValidateService.js.map +1 -1
- package/build/src/services/accounts/AccountsVestingInfoService.js.map +1 -1
- package/build/src/services/blocks/BlocksService.d.ts +1 -3
- package/build/src/services/blocks/BlocksService.js +16 -26
- package/build/src/services/blocks/BlocksService.js.map +1 -1
- package/build/src/services/blocks/BlocksService.spec.js +6 -67
- package/build/src/services/blocks/BlocksService.spec.js.map +1 -1
- package/build/src/services/blocks/BlocksTraceService.js.map +1 -1
- package/build/src/services/blocks/XCMDecoder.js.map +1 -1
- package/build/src/services/blocks/trace/Trace.js +1 -1
- package/build/src/services/blocks/trace/Trace.js.map +1 -1
- package/build/src/services/node/NodeNetworkService.js.map +1 -1
- package/build/src/services/node/NodeTransactionPoolService.js +2 -2
- package/build/src/services/node/NodeTransactionPoolService.js.map +1 -1
- package/build/src/services/pallets/PalletsAssetConversionService.spec.js.map +1 -1
- package/build/src/services/pallets/PalletsConstantsService.js.map +1 -1
- package/build/src/services/pallets/PalletsDispatchablesService.js +3 -2
- package/build/src/services/pallets/PalletsDispatchablesService.js.map +1 -1
- package/build/src/services/pallets/PalletsErrorsService.js +1 -1
- package/build/src/services/pallets/PalletsErrorsService.js.map +1 -1
- package/build/src/services/pallets/PalletsEventsService.js +1 -1
- package/build/src/services/pallets/PalletsEventsService.js.map +1 -1
- package/build/src/services/pallets/PalletsEventsService.spec.js.map +1 -1
- package/build/src/services/pallets/PalletsForeignAssetsService.js.map +1 -1
- package/build/src/services/pallets/PalletsNominationPoolsService.js +1 -1
- package/build/src/services/pallets/PalletsNominationPoolsService.js.map +1 -1
- package/build/src/services/pallets/PalletsOnGoingReferendaService.js.map +1 -1
- package/build/src/services/pallets/PalletsStakingProgressService.js +4 -4
- package/build/src/services/pallets/PalletsStakingProgressService.js.map +1 -1
- package/build/src/services/pallets/PalletsStakingValidatorsService.js.map +1 -1
- package/build/src/services/pallets/PalletsStorageService.js.map +1 -1
- package/build/src/services/paras/ParasService.js.map +1 -1
- package/build/src/services/runtime/RuntimeMetadataService.js.map +1 -1
- package/build/src/services/transaction/TransactionDryRunService.js.map +1 -1
- package/build/src/services/transaction/TransactionFeeEstimateService.js +1 -1
- package/build/src/services/transaction/TransactionFeeEstimateService.js.map +1 -1
- package/build/src/services/transaction/TransactionFeeEstimateService.spec.js +27 -1
- package/build/src/services/transaction/TransactionFeeEstimateService.spec.js.map +1 -1
- package/build/src/services/transaction/TransactionMaterialService.js.map +1 -1
- package/build/src/services/transaction/TransactionSubmitService.js.map +1 -1
- package/build/src/services/transaction/extractCauseAndStack.js +1 -2
- package/build/src/services/transaction/extractCauseAndStack.js.map +1 -1
- package/build/src/types/errors/BasicLegacyError.js +1 -2
- package/build/src/types/errors/BasicLegacyError.js.map +1 -1
- package/build/src/types/errors/LegacyError.js +1 -2
- package/build/src/types/errors/LegacyError.js.map +1 -1
- package/build/src/types/errors/TxLegacyError.js +1 -2
- package/build/src/types/errors/TxLegacyError.js.map +1 -1
- package/build/src/types/metrics/index.d.ts +13 -0
- package/build/src/types/metrics/index.js +3 -0
- package/build/src/types/metrics/index.js.map +1 -0
- package/build/src/types/polkadot-js/AnyJson.js +1 -2
- package/build/src/types/polkadot-js/AnyJson.js.map +1 -1
- package/build/src/types/polkadot-js/Codec.js +1 -2
- package/build/src/types/polkadot-js/Codec.js.map +1 -1
- package/build/src/types/polkadot-js/ToJSONable.js +1 -2
- package/build/src/types/polkadot-js/ToJSONable.js.map +1 -1
- package/build/src/types/requests.d.ts +17 -0
- package/build/src/types/responses/FrameMethod.js +1 -2
- package/build/src/types/responses/FrameMethod.js.map +1 -1
- package/build/src/types/sidecar-config/CONFIG.d.ts +7 -1
- package/build/src/types/sidecar-config/CONFIG.js +6 -0
- package/build/src/types/sidecar-config/CONFIG.js.map +1 -1
- package/build/src/types/sidecar-config/MODULES.d.ts +2 -1
- package/build/src/types/sidecar-config/MODULES.js +1 -0
- package/build/src/types/sidecar-config/MODULES.js.map +1 -1
- package/build/src/types/sidecar-config/SidecarConfig.d.ts +9 -0
- package/build/src/types/util/Option.js +2 -3
- package/build/src/types/util/Option.js.map +1 -1
- package/build/src/types/util/PaysFee.js +1 -2
- package/build/src/types/util/PaysFee.js.map +1 -1
- package/build/src/types/util/ToString.js +1 -2
- package/build/src/types/util/ToString.js.map +1 -1
- package/build/src/util/PromiseQueue.js.map +1 -1
- package/package.json +12 -11
- package/build/src/util/metrics.js.map +0 -1
|
@@ -1,14 +1,9 @@
|
|
|
1
1
|
import { Request, Response } from 'express';
|
|
2
|
+
import client from 'prom-client';
|
|
2
3
|
interface IAppConfiguration {
|
|
3
4
|
port: number;
|
|
4
5
|
host: string;
|
|
5
6
|
}
|
|
6
|
-
export declare const enum MetricType {
|
|
7
|
-
Counter = "counter",
|
|
8
|
-
Gauge = "gauge",
|
|
9
|
-
Histogram = "histogram",
|
|
10
|
-
Summary = "summary"
|
|
11
|
-
}
|
|
12
7
|
interface Query extends Request {
|
|
13
8
|
route: {
|
|
14
9
|
path: string;
|
|
@@ -25,11 +20,11 @@ export default class Metrics_App {
|
|
|
25
20
|
/**
|
|
26
21
|
* @param appConfig configuration for app.
|
|
27
22
|
*/
|
|
28
|
-
constructor({ host }: IAppConfiguration);
|
|
23
|
+
constructor({ host, port }: IAppConfiguration);
|
|
29
24
|
listen(): void;
|
|
25
|
+
getRegisteredMetrics(): Record<string, client.Metric>;
|
|
30
26
|
private createMetricByType;
|
|
31
27
|
private getRoute;
|
|
32
|
-
private blocksControllerMetrics;
|
|
33
28
|
preMiddleware(): (req: Query, res: Response, next: () => void) => void;
|
|
34
29
|
private init;
|
|
35
30
|
}
|
|
@@ -6,81 +6,15 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
const express_1 = __importDefault(require("express"));
|
|
7
7
|
const prom_client_1 = __importDefault(require("prom-client"));
|
|
8
8
|
const Log_1 = require("../logging/Log");
|
|
9
|
-
const
|
|
10
|
-
const
|
|
11
|
-
{
|
|
12
|
-
name: 'request_errors_total',
|
|
13
|
-
help: 'Number of HTTP Errors',
|
|
14
|
-
type: "counter" /* MetricType.Counter */,
|
|
15
|
-
},
|
|
16
|
-
{
|
|
17
|
-
name: 'request_success_total',
|
|
18
|
-
help: 'Number of HTTP Success',
|
|
19
|
-
type: "counter" /* MetricType.Counter */,
|
|
20
|
-
},
|
|
21
|
-
{
|
|
22
|
-
name: 'requests_total',
|
|
23
|
-
help: 'Total number of HTTP Requests',
|
|
24
|
-
type: "counter" /* MetricType.Counter */,
|
|
25
|
-
},
|
|
26
|
-
{
|
|
27
|
-
name: 'request_duration_seconds',
|
|
28
|
-
help: 'Duration of HTTP requests in seconds',
|
|
29
|
-
labels: ['method', 'route', 'status_code'],
|
|
30
|
-
buckets: [0.1, 0.5, 1, 1.5, 2, 3, 4, 5],
|
|
31
|
-
type: "histogram" /* MetricType.Histogram */,
|
|
32
|
-
},
|
|
33
|
-
{
|
|
34
|
-
name: 'response_size_bytes_seconds',
|
|
35
|
-
help: 'Size of HTTP responses in bytes',
|
|
36
|
-
labels: ['method', 'route', 'status_code'],
|
|
37
|
-
buckets: [100, 500, 1000, 5000, 10000, 50000, 100000, 500000, 1000000, 5000000],
|
|
38
|
-
type: "histogram" /* MetricType.Histogram */,
|
|
39
|
-
},
|
|
40
|
-
{
|
|
41
|
-
name: 'response_size_latency_ratio_seconds',
|
|
42
|
-
help: 'Ratio of response size to latency',
|
|
43
|
-
labels: ['method', 'route', 'status_code'],
|
|
44
|
-
buckets: [64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768, 65536, 131072, 262144],
|
|
45
|
-
type: "histogram" /* MetricType.Histogram */,
|
|
46
|
-
},
|
|
47
|
-
{
|
|
48
|
-
name: 'extrinsics_in_request_count',
|
|
49
|
-
help: 'Number of extrinsics in a request',
|
|
50
|
-
type: "histogram" /* MetricType.Histogram */,
|
|
51
|
-
buckets: [5, 10, 20, 40, 80, 160, 320, 640, 1280, 2560, 5120, 10240, 20480],
|
|
52
|
-
labels: ['method', 'route', 'status_code'],
|
|
53
|
-
},
|
|
54
|
-
{
|
|
55
|
-
name: 'extrinsics_per_second_count',
|
|
56
|
-
help: 'Number of extrinsics per second',
|
|
57
|
-
type: "histogram" /* MetricType.Histogram */,
|
|
58
|
-
labels: ['method', 'route', 'status_code'],
|
|
59
|
-
buckets: [1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024],
|
|
60
|
-
},
|
|
61
|
-
{
|
|
62
|
-
name: 'extrinsics_per_block_count',
|
|
63
|
-
help: 'Average number of extrinsics per block',
|
|
64
|
-
type: "histogram" /* MetricType.Histogram */,
|
|
65
|
-
labels: ['method', 'route', 'status_code'],
|
|
66
|
-
buckets: [1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024],
|
|
67
|
-
},
|
|
68
|
-
{
|
|
69
|
-
name: 'seconds_per_block_count',
|
|
70
|
-
help: 'Average seconds per block',
|
|
71
|
-
type: "histogram" /* MetricType.Histogram */,
|
|
72
|
-
labels: ['method', 'route', 'status_code'],
|
|
73
|
-
buckets: [1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024],
|
|
74
|
-
},
|
|
75
|
-
];
|
|
9
|
+
const SidecarConfig_1 = require("../SidecarConfig");
|
|
10
|
+
const _1 = require(".");
|
|
76
11
|
class Metrics_App {
|
|
77
12
|
/**
|
|
78
13
|
* @param appConfig configuration for app.
|
|
79
14
|
*/
|
|
80
|
-
constructor({ host }) {
|
|
81
|
-
|
|
82
|
-
this.
|
|
83
|
-
this.port = Number(args.prometheus_port);
|
|
15
|
+
constructor({ host, port }) {
|
|
16
|
+
this.includeQueryParams = SidecarConfig_1.SidecarConfig.config.METRICS.INCLUDE_QUERYPARAMS;
|
|
17
|
+
this.port = port;
|
|
84
18
|
this.app = (0, express_1.default)();
|
|
85
19
|
this.host = host;
|
|
86
20
|
this.registry = new prom_client_1.default.Registry();
|
|
@@ -93,6 +27,9 @@ class Metrics_App {
|
|
|
93
27
|
logger.info(`Metrics Server started at http://${this.host}:${this.port}/metrics`);
|
|
94
28
|
});
|
|
95
29
|
}
|
|
30
|
+
getRegisteredMetrics() {
|
|
31
|
+
return this.metrics;
|
|
32
|
+
}
|
|
96
33
|
createMetricByType(prefix = 'sas', metric) {
|
|
97
34
|
const prefixedName = prefix + '_' + metric.name;
|
|
98
35
|
if (prefixedName in this.metrics) {
|
|
@@ -164,72 +101,19 @@ class Metrics_App {
|
|
|
164
101
|
}
|
|
165
102
|
return route;
|
|
166
103
|
}
|
|
167
|
-
blocksControllerMetrics(req, res, end) {
|
|
168
|
-
var _a, _b;
|
|
169
|
-
const body = res.locals.body;
|
|
170
|
-
if (((_a = req.params) === null || _a === void 0 ? void 0 : _a.number) && !Array.isArray(body)) {
|
|
171
|
-
const extrinscs = body.extrinsics ? body.extrinsics.length : 0;
|
|
172
|
-
const extrinsics_per_second = this.metrics['sas_extrinsics_per_second_count'];
|
|
173
|
-
const seconds = end();
|
|
174
|
-
extrinsics_per_second
|
|
175
|
-
.labels({ method: req.method, route: this.getRoute(req), status_code: res.statusCode })
|
|
176
|
-
.observe(extrinscs / seconds);
|
|
177
|
-
const extrinsics_per_block = this.metrics['sas_extrinsics_per_block_count'];
|
|
178
|
-
const blocks = 1;
|
|
179
|
-
extrinsics_per_block
|
|
180
|
-
.labels({ method: req.method, route: this.getRoute(req), status_code: res.statusCode })
|
|
181
|
-
.observe(extrinscs / blocks);
|
|
182
|
-
const seconds_per_block = this.metrics['sas_seconds_per_block_count'];
|
|
183
|
-
seconds_per_block
|
|
184
|
-
.labels({ method: req.method, route: this.getRoute(req), status_code: res.statusCode })
|
|
185
|
-
.observe(seconds / blocks);
|
|
186
|
-
}
|
|
187
|
-
if ((_b = req.query) === null || _b === void 0 ? void 0 : _b.range) {
|
|
188
|
-
let totExtrinsics = 0;
|
|
189
|
-
if (Array.isArray(body)) {
|
|
190
|
-
totExtrinsics = body.reduce((current, block) => {
|
|
191
|
-
const extrinsics = block['extrinsics'];
|
|
192
|
-
if (Array.isArray(extrinsics)) {
|
|
193
|
-
return current + extrinsics.length;
|
|
194
|
-
}
|
|
195
|
-
return current;
|
|
196
|
-
}, 0);
|
|
197
|
-
}
|
|
198
|
-
else {
|
|
199
|
-
const extrinsics = body['extrinsics'];
|
|
200
|
-
if (Array.isArray(extrinsics)) {
|
|
201
|
-
totExtrinsics = extrinsics.length;
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
const extrinsics_in_request = this.metrics['sas_extrinsics_in_request_count'];
|
|
205
|
-
extrinsics_in_request
|
|
206
|
-
.labels({ method: req.method, route: this.getRoute(req), status_code: res.statusCode })
|
|
207
|
-
.observe(totExtrinsics);
|
|
208
|
-
const extrinsics_per_second = this.metrics['sas_extrinsics_per_second_count'];
|
|
209
|
-
const seconds = end();
|
|
210
|
-
extrinsics_per_second
|
|
211
|
-
.labels({ method: req.method, route: this.getRoute(req), status_code: res.statusCode })
|
|
212
|
-
.observe(totExtrinsics / seconds);
|
|
213
|
-
const extrinsics_per_block = this.metrics['sas_extrinsics_per_block_count'];
|
|
214
|
-
const blocks = Array.isArray(body) ? body.length : 1;
|
|
215
|
-
extrinsics_per_block
|
|
216
|
-
.labels({ method: req.method, route: this.getRoute(req), status_code: res.statusCode })
|
|
217
|
-
.observe(totExtrinsics / blocks);
|
|
218
|
-
const seconds_per_block = this.metrics['sas_seconds_per_block_count'];
|
|
219
|
-
seconds_per_block
|
|
220
|
-
.labels({ method: req.method, route: this.getRoute(req), status_code: res.statusCode })
|
|
221
|
-
.observe(seconds / blocks);
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
104
|
preMiddleware() {
|
|
225
105
|
return (req, res, next) => {
|
|
226
|
-
const tot_requests = this.metrics['
|
|
106
|
+
const tot_requests = this.metrics['sas_http_requests'];
|
|
227
107
|
// request count metrics
|
|
228
108
|
if (req.originalUrl != '/favicon.ico') {
|
|
229
109
|
tot_requests.inc();
|
|
230
110
|
}
|
|
231
111
|
const request_duration_seconds = this.metrics['sas_request_duration_seconds'];
|
|
232
112
|
const end = request_duration_seconds.startTimer();
|
|
113
|
+
res.locals.metrics = {
|
|
114
|
+
timer: end,
|
|
115
|
+
registry: this.metrics,
|
|
116
|
+
};
|
|
233
117
|
const oldJson = res.json;
|
|
234
118
|
res.json = (body) => {
|
|
235
119
|
res.locals.body = body;
|
|
@@ -237,11 +121,11 @@ class Metrics_App {
|
|
|
237
121
|
};
|
|
238
122
|
res.once('finish', () => {
|
|
239
123
|
if (res.statusCode >= 400 && req.originalUrl != '/favicon.ico') {
|
|
240
|
-
const request_errors = this.metrics['
|
|
124
|
+
const request_errors = this.metrics['sas_http_request_error'];
|
|
241
125
|
request_errors.inc();
|
|
242
126
|
}
|
|
243
127
|
else if (res.statusCode < 400) {
|
|
244
|
-
const request_success = this.metrics['
|
|
128
|
+
const request_success = this.metrics['sas_http_request_success'];
|
|
245
129
|
request_success.inc();
|
|
246
130
|
}
|
|
247
131
|
let resContentLength = '0';
|
|
@@ -251,19 +135,16 @@ class Metrics_App {
|
|
|
251
135
|
else if (res.hasHeader('Content-Length')) {
|
|
252
136
|
resContentLength = res.getHeader('Content-Length');
|
|
253
137
|
}
|
|
254
|
-
// route
|
|
255
|
-
if (this.getRoute(req).includes('blocks')) {
|
|
256
|
-
this.blocksControllerMetrics(req, res, end);
|
|
257
|
-
}
|
|
138
|
+
// Generic Metrics per route (latency, response size, response size to latency ratio)
|
|
258
139
|
// response size metrics
|
|
259
|
-
const response_size_bytes = this.metrics['
|
|
140
|
+
const response_size_bytes = this.metrics['sas_response_size_bytes'];
|
|
260
141
|
response_size_bytes
|
|
261
142
|
.labels({ method: req.method, route: this.getRoute(req), status_code: res.statusCode })
|
|
262
143
|
.observe(parseFloat(resContentLength));
|
|
263
144
|
// latency metrics
|
|
264
145
|
const latency = end({ method: req.method, route: this.getRoute(req), status_code: res.statusCode });
|
|
265
146
|
// response size to latency ratio
|
|
266
|
-
const response_size_latency_ratio = this.metrics['
|
|
147
|
+
const response_size_latency_ratio = this.metrics['sas_response_size_bytes_seconds'];
|
|
267
148
|
response_size_latency_ratio
|
|
268
149
|
.labels({ method: req.method, route: this.getRoute(req), status_code: res.statusCode })
|
|
269
150
|
.observe(parseFloat(resContentLength) / latency);
|
|
@@ -273,7 +154,7 @@ class Metrics_App {
|
|
|
273
154
|
}
|
|
274
155
|
init() {
|
|
275
156
|
// Set up
|
|
276
|
-
|
|
157
|
+
_1.config.metric_list.forEach((metric) => this.createMetricByType('sas', metric));
|
|
277
158
|
prom_client_1.default.collectDefaultMetrics({ register: this.registry, prefix: 'sas_' });
|
|
278
159
|
// Set up the metrics endpoint
|
|
279
160
|
this.app.get('/metrics', (_req, res) => {
|
|
@@ -291,4 +172,4 @@ class Metrics_App {
|
|
|
291
172
|
}
|
|
292
173
|
}
|
|
293
174
|
exports.default = Metrics_App;
|
|
294
|
-
//# sourceMappingURL=
|
|
175
|
+
//# sourceMappingURL=Metrics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Metrics.js","sourceRoot":"","sources":["../../../src/metrics/Metrics.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// as new metrics are added in routes they need to be registered here to make them available across the apps
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.metric_list = void 0;
|
|
5
|
+
exports.metric_list = [
|
|
6
|
+
{
|
|
7
|
+
name: 'http_request_error',
|
|
8
|
+
help: 'Number of HTTP Errors',
|
|
9
|
+
type: "counter" /* MetricType.Counter */,
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
name: 'http_request_success',
|
|
13
|
+
help: 'Number of HTTP Success',
|
|
14
|
+
type: "counter" /* MetricType.Counter */,
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
name: 'http_requests',
|
|
18
|
+
help: 'Total number of HTTP Requests',
|
|
19
|
+
type: "counter" /* MetricType.Counter */,
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
name: 'request_duration_seconds',
|
|
23
|
+
help: 'Duration of HTTP requests in seconds',
|
|
24
|
+
labels: ['method', 'route', 'status_code'],
|
|
25
|
+
buckets: [0.1, 0.5, 1, 1.5, 2, 3, 4, 5],
|
|
26
|
+
type: "histogram" /* MetricType.Histogram */,
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
name: 'response_size_bytes',
|
|
30
|
+
help: 'Size of HTTP responses in bytes',
|
|
31
|
+
labels: ['method', 'route', 'status_code'],
|
|
32
|
+
buckets: [100, 500, 1000, 5000, 10000, 50000, 100000, 500000, 1000000, 5000000],
|
|
33
|
+
type: "histogram" /* MetricType.Histogram */,
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
name: 'response_size_bytes_seconds',
|
|
37
|
+
help: 'Ratio of response size to latency',
|
|
38
|
+
labels: ['method', 'route', 'status_code'],
|
|
39
|
+
buckets: [64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768, 65536, 131072, 262144],
|
|
40
|
+
type: "histogram" /* MetricType.Histogram */,
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
name: 'extrinsics_in_request',
|
|
44
|
+
help: 'Number of extrinsics in a request',
|
|
45
|
+
type: "histogram" /* MetricType.Histogram */,
|
|
46
|
+
buckets: [5, 10, 20, 40, 80, 160, 320, 640, 1280, 2560, 5120, 10240, 20480],
|
|
47
|
+
labels: ['method', 'route', 'status_code'],
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
name: 'extrinsics_per_second',
|
|
51
|
+
help: 'Number of extrinsics per second',
|
|
52
|
+
type: "histogram" /* MetricType.Histogram */,
|
|
53
|
+
labels: ['method', 'route', 'status_code'],
|
|
54
|
+
buckets: [1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024],
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
name: 'extrinsics_per_block',
|
|
58
|
+
help: 'Average number of extrinsics per block',
|
|
59
|
+
type: "histogram" /* MetricType.Histogram */,
|
|
60
|
+
labels: ['method', 'route', 'status_code'],
|
|
61
|
+
buckets: [1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024],
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
name: 'seconds_per_block',
|
|
65
|
+
help: 'Average seconds per block',
|
|
66
|
+
type: "histogram" /* MetricType.Histogram */,
|
|
67
|
+
labels: ['method', 'route', 'status_code'],
|
|
68
|
+
buckets: [1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024],
|
|
69
|
+
},
|
|
70
|
+
];
|
|
71
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/metrics/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
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.MetricsApp = exports.config = void 0;
|
|
30
|
+
exports.config = __importStar(require("./config"));
|
|
31
|
+
var Metrics_1 = require("./Metrics");
|
|
32
|
+
Object.defineProperty(exports, "MetricsApp", { enumerable: true, get: function () { return __importDefault(Metrics_1).default; } });
|
|
33
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/metrics/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,mDAAmC;AACnC,qCAAkD;AAAzC,sHAAA,OAAO,OAAc"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errorMiddleware.js","sourceRoot":"","sources":["../../../../src/middleware/error/errorMiddleware.ts"],"names":[],"mappings":";AAAA,oDAAoD;AACpD,8CAA8C;AAC9C,EAAE;AACF,gFAAgF;AAChF,uEAAuE;AACvE,oEAAoE;AACpE,sCAAsC;AACtC,EAAE;AACF,kEAAkE;AAClE,iEAAiE;AACjE,gEAAgE;AAChE,+CAA+C;AAC/C,EAAE;AACF,oEAAoE;AACpE,wEAAwE;;;AAIxE,2CAAwC;AAExC;;;;;;;GAOG;AACI,MAAM,eAAe,GAAwB,CAAC,GAAY,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAQ,EAAE;;IAC3F,IAAI,GAAG,CAAC,WAAW,IAAI,CAAC,CAAC,GAAG,YAAY,KAAK,CAAC,EAAE;
|
|
1
|
+
{"version":3,"file":"errorMiddleware.js","sourceRoot":"","sources":["../../../../src/middleware/error/errorMiddleware.ts"],"names":[],"mappings":";AAAA,oDAAoD;AACpD,8CAA8C;AAC9C,EAAE;AACF,gFAAgF;AAChF,uEAAuE;AACvE,oEAAoE;AACpE,sCAAsC;AACtC,EAAE;AACF,kEAAkE;AAClE,iEAAiE;AACjE,gEAAgE;AAChE,+CAA+C;AAC/C,EAAE;AACF,oEAAoE;AACpE,wEAAwE;;;AAIxE,2CAAwC;AAExC;;;;;;;GAOG;AACI,MAAM,eAAe,GAAwB,CAAC,GAAY,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAQ,EAAE;;IAC3F,IAAI,GAAG,CAAC,WAAW,IAAI,CAAC,CAAC,GAAG,YAAY,KAAK,CAAC,EAAE,CAAC;QAChD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,IAAI,GAAG;QACZ,IAAI,EAAE,GAAG;QACT,OAAO,EAAE,MAAA,GAAG,CAAC,OAAO,mCAAI,gBAAgB;QACxC,KAAK,EAAE,GAAG,CAAC,KAAK;KAChB,CAAC;IAEF,SAAG,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAEvB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC,CAAC;AAdW,QAAA,eAAe,mBAc1B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"httpErrorMiddleware.js","sourceRoot":"","sources":["../../../../src/middleware/error/httpErrorMiddleware.ts"],"names":[],"mappings":";AAAA,oDAAoD;AACpD,8CAA8C;AAC9C,EAAE;AACF,gFAAgF;AAChF,uEAAuE;AACvE,oEAAoE;AACpE,sCAAsC;AACtC,EAAE;AACF,kEAAkE;AAClE,iEAAiE;AACjE,gEAAgE;AAChE,+CAA+C;AAC/C,EAAE;AACF,oEAAoE;AACpE,wEAAwE;;;AAGxE,6CAAwC;AAExC,2CAAwC;AACxC;;;;;;;;;;GAUG;AACI,MAAM,mBAAmB,GAAwB,CAAC,GAAY,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAQ,EAAE;IAC/F,IAAI,GAAG,CAAC,WAAW,IAAI,CAAC,CAAC,GAAG,YAAY,uBAAS,CAAC,EAAE;
|
|
1
|
+
{"version":3,"file":"httpErrorMiddleware.js","sourceRoot":"","sources":["../../../../src/middleware/error/httpErrorMiddleware.ts"],"names":[],"mappings":";AAAA,oDAAoD;AACpD,8CAA8C;AAC9C,EAAE;AACF,gFAAgF;AAChF,uEAAuE;AACvE,oEAAoE;AACpE,sCAAsC;AACtC,EAAE;AACF,kEAAkE;AAClE,iEAAiE;AACjE,gEAAgE;AAChE,+CAA+C;AAC/C,EAAE;AACF,oEAAoE;AACpE,wEAAwE;;;AAGxE,6CAAwC;AAExC,2CAAwC;AACxC;;;;;;;;;;GAUG;AACI,MAAM,mBAAmB,GAAwB,CAAC,GAAY,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAQ,EAAE;IAC/F,IAAI,GAAG,CAAC,WAAW,IAAI,CAAC,CAAC,GAAG,YAAY,uBAAS,CAAC,EAAE,CAAC;QACpD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;IAClB,CAAC;IACD,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC;IAExB,MAAM,IAAI,GAAG;QACZ,IAAI;QACJ,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,KAAK,EAAE,GAAG,CAAC,KAAK;KAChB,CAAC;IAEF,SAAG,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAEvB,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC7B,CAAC,CAAC;AAfW,QAAA,mBAAmB,uBAe9B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"internalErrorMiddleware.js","sourceRoot":"","sources":["../../../../src/middleware/error/internalErrorMiddleware.ts"],"names":[],"mappings":";AAAA,oDAAoD;AACpD,8CAA8C;AAC9C,EAAE;AACF,gFAAgF;AAChF,uEAAuE;AACvE,oEAAoE;AACpE,sCAAsC;AACtC,EAAE;AACF,kEAAkE;AAClE,iEAAiE;AACjE,gEAAgE;AAChE,+CAA+C;AAC/C,EAAE;AACF,oEAAoE;AACpE,wEAAwE;;;AAGxE,6CAAkD;AAElD,2CAAwC;AAExC;;;;;;;;GAQG;AACI,MAAM,uBAAuB,GAAwB,CAAC,SAAkB,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAQ,EAAE;IACzG,sEAAsE;IACtE,mEAAmE;IACnE,IAAI,GAAG,CAAC,WAAW,EAAE;
|
|
1
|
+
{"version":3,"file":"internalErrorMiddleware.js","sourceRoot":"","sources":["../../../../src/middleware/error/internalErrorMiddleware.ts"],"names":[],"mappings":";AAAA,oDAAoD;AACpD,8CAA8C;AAC9C,EAAE;AACF,gFAAgF;AAChF,uEAAuE;AACvE,oEAAoE;AACpE,sCAAsC;AACtC,EAAE;AACF,kEAAkE;AAClE,iEAAiE;AACjE,gEAAgE;AAChE,+CAA+C;AAC/C,EAAE;AACF,oEAAoE;AACpE,wEAAwE;;;AAGxE,6CAAkD;AAElD,2CAAwC;AAExC;;;;;;;;GAQG;AACI,MAAM,uBAAuB,GAAwB,CAAC,SAAkB,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAQ,EAAE;IACzG,sEAAsE;IACtE,mEAAmE;IACnE,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC;QACrB,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC;IACxB,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,iCAAmB,CAAC,gBAAgB,CAAC,CAAC;IAE1D,SAAG,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC;IAEzC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC/B,CAAC,CAAC;AAZW,QAAA,uBAAuB,2BAYlC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"legacyErrorMiddleware.js","sourceRoot":"","sources":["../../../../src/middleware/error/legacyErrorMiddleware.ts"],"names":[],"mappings":";AAAA,oDAAoD;AACpD,8CAA8C;AAC9C,EAAE;AACF,gFAAgF;AAChF,uEAAuE;AACvE,oEAAoE;AACpE,sCAAsC;AACtC,EAAE;AACF,kEAAkE;AAClE,iEAAiE;AACjE,gEAAgE;AAChE,+CAA+C;AAC/C,EAAE;AACF,oEAAoE;AACpE,wEAAwE;;;;;;AAGxE,8DAA+C;AAC/C,6CAAkD;AAElD,2CAAwC;AACxC,+CAAuE;AAEvE;;;;;;;GAOG;AACI,MAAM,qBAAqB,GAAwB,CAAC,GAAY,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAQ,EAAE;IACjG,IAAI,GAAG,CAAC,WAAW,IAAI,CAAC,IAAA,2BAAkB,EAAC,GAAG,CAAC,EAAE;
|
|
1
|
+
{"version":3,"file":"legacyErrorMiddleware.js","sourceRoot":"","sources":["../../../../src/middleware/error/legacyErrorMiddleware.ts"],"names":[],"mappings":";AAAA,oDAAoD;AACpD,8CAA8C;AAC9C,EAAE;AACF,gFAAgF;AAChF,uEAAuE;AACvE,oEAAoE;AACpE,sCAAsC;AACtC,EAAE;AACF,kEAAkE;AAClE,iEAAiE;AACjE,gEAAgE;AAChE,+CAA+C;AAC/C,EAAE;AACF,oEAAoE;AACpE,wEAAwE;;;;;;AAGxE,8DAA+C;AAC/C,6CAAkD;AAElD,2CAAwC;AACxC,+CAAuE;AAEvE;;;;;;;GAOG;AACI,MAAM,qBAAqB,GAAwB,CAAC,GAAY,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAQ,EAAE;IACjG,IAAI,GAAG,CAAC,WAAW,IAAI,CAAC,IAAA,2BAAkB,EAAC,GAAG,CAAC,EAAE,CAAC;QACjD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,IAAA,sBAAa,EAAC,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,GAAG;YACZ,IAAI,EAAE,GAAG,CAAC,UAAU;YACpB,OAAO,EAAE,IAAA,qBAAoB,EAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,KAAK,CAAC;SACxD,CAAC;QAEF,SAAG,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAEvB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC9C,OAAO;IACR,CAAC;IAED,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,iCAAmB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;AAC1D,CAAC,CAAC;AAlBW,QAAA,qBAAqB,yBAkBhC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
// Copyright 2017-
|
|
2
|
+
// Copyright 2017-2024 Parity Technologies (UK) Ltd.
|
|
3
3
|
// This file is part of Substrate API Sidecar.
|
|
4
4
|
//
|
|
5
5
|
// Substrate API Sidecar is free software: you can redistribute it and/or modify
|
|
@@ -15,7 +15,8 @@
|
|
|
15
15
|
// You should have received a copy of the GNU General Public License
|
|
16
16
|
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
17
17
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
-
exports.
|
|
18
|
+
exports.catchesErrWithResponse = exports.catchesErrWithStatus = exports.callsNextWithErr = void 0;
|
|
19
|
+
exports.callsNextWithSentHeaders = callsNextWithSentHeaders;
|
|
19
20
|
/**
|
|
20
21
|
* Empty mock Express Request.
|
|
21
22
|
*/
|
|
@@ -28,7 +29,7 @@ const mockReq = {};
|
|
|
28
29
|
* @param err error
|
|
29
30
|
*/
|
|
30
31
|
const callsNextWithErr = (ware) => (name, err) => {
|
|
31
|
-
it(`calls next on error of type ${name}`, () => {
|
|
32
|
+
it(`calls next on error of type ${name}`, async () => {
|
|
32
33
|
const next = jest.fn();
|
|
33
34
|
const send = jest.fn();
|
|
34
35
|
const status = jest.fn((_code) => {
|
|
@@ -36,10 +37,10 @@ const callsNextWithErr = (ware) => (name, err) => {
|
|
|
36
37
|
send,
|
|
37
38
|
};
|
|
38
39
|
});
|
|
39
|
-
ware(err, mockReq, { headersSent: false, status }, next);
|
|
40
|
-
expect(status).not.
|
|
41
|
-
expect(send).not.
|
|
42
|
-
expect(next).
|
|
40
|
+
await ware(err, mockReq, { headersSent: false, status }, next);
|
|
41
|
+
expect(status).not.toHaveBeenCalled();
|
|
42
|
+
expect(send).not.toHaveBeenCalled();
|
|
43
|
+
expect(next).toHaveBeenCalledTimes(1);
|
|
43
44
|
});
|
|
44
45
|
};
|
|
45
46
|
exports.callsNextWithErr = callsNextWithErr;
|
|
@@ -53,7 +54,7 @@ exports.callsNextWithErr = callsNextWithErr;
|
|
|
53
54
|
* @param code expected code to be sent as status
|
|
54
55
|
*/
|
|
55
56
|
const catchesErrWithStatus = (ware) => (name, err, code) => {
|
|
56
|
-
it(`catches ${name} and sends status code ${code}`, () => {
|
|
57
|
+
it(`catches ${name} and sends status code ${code}`, async () => {
|
|
57
58
|
const next = jest.fn();
|
|
58
59
|
const send = jest.fn();
|
|
59
60
|
const status = jest.fn((_code) => {
|
|
@@ -61,11 +62,11 @@ const catchesErrWithStatus = (ware) => (name, err, code) => {
|
|
|
61
62
|
send,
|
|
62
63
|
};
|
|
63
64
|
});
|
|
64
|
-
ware(err, mockReq, { headersSent: false, status }, next);
|
|
65
|
-
expect(send).
|
|
66
|
-
expect(status).
|
|
67
|
-
expect(status).
|
|
68
|
-
expect(next).not.
|
|
65
|
+
await ware(err, mockReq, { headersSent: false, status }, next);
|
|
66
|
+
expect(send).toHaveBeenCalledTimes(1);
|
|
67
|
+
expect(status).toHaveBeenCalledWith(code);
|
|
68
|
+
expect(status).toHaveBeenCalledTimes(1);
|
|
69
|
+
expect(next).not.toHaveBeenCalled();
|
|
69
70
|
});
|
|
70
71
|
};
|
|
71
72
|
exports.catchesErrWithStatus = catchesErrWithStatus;
|
|
@@ -80,7 +81,7 @@ exports.catchesErrWithStatus = catchesErrWithStatus;
|
|
|
80
81
|
* @param response expected response body
|
|
81
82
|
*/
|
|
82
83
|
const catchesErrWithResponse = (ware) => (name, err, code, response) => {
|
|
83
|
-
it(`catches ${name} and sends status code ${code}`, () => {
|
|
84
|
+
it(`catches ${name} and sends status code ${code}`, async () => {
|
|
84
85
|
const next = jest.fn();
|
|
85
86
|
const send = jest.fn();
|
|
86
87
|
const status = jest.fn((_code) => {
|
|
@@ -88,17 +89,17 @@ const catchesErrWithResponse = (ware) => (name, err, code, response) => {
|
|
|
88
89
|
send,
|
|
89
90
|
};
|
|
90
91
|
});
|
|
91
|
-
ware(err, mockReq, { headersSent: false, status }, next);
|
|
92
|
-
expect(send).
|
|
93
|
-
expect(send).
|
|
94
|
-
expect(status).
|
|
95
|
-
expect(status).
|
|
96
|
-
expect(next).not.
|
|
92
|
+
await ware(err, mockReq, { headersSent: false, status }, next);
|
|
93
|
+
expect(send).toHaveBeenCalledTimes(1);
|
|
94
|
+
expect(send).toHaveBeenCalledWith(response);
|
|
95
|
+
expect(status).toHaveBeenCalledWith(code);
|
|
96
|
+
expect(status).toHaveBeenCalledTimes(1);
|
|
97
|
+
expect(next).not.toHaveBeenCalled();
|
|
97
98
|
});
|
|
98
99
|
};
|
|
99
100
|
exports.catchesErrWithResponse = catchesErrWithResponse;
|
|
100
101
|
function callsNextWithSentHeaders(ware, err) {
|
|
101
|
-
it('calls next if the headers have been sent', () => {
|
|
102
|
+
it('calls next if the headers have been sent', async () => {
|
|
102
103
|
const next = jest.fn();
|
|
103
104
|
const send = jest.fn();
|
|
104
105
|
const status = jest.fn((_code) => {
|
|
@@ -106,11 +107,10 @@ function callsNextWithSentHeaders(ware, err) {
|
|
|
106
107
|
send,
|
|
107
108
|
};
|
|
108
109
|
});
|
|
109
|
-
ware(err, mockReq, { headersSent: true, status }, next);
|
|
110
|
+
await ware(err, mockReq, { headersSent: true, status }, next);
|
|
110
111
|
expect(send).not.toBeCalled();
|
|
111
112
|
expect(status).not.toBeCalled();
|
|
112
113
|
expect(next).toBeCalledTimes(1);
|
|
113
114
|
});
|
|
114
115
|
}
|
|
115
|
-
exports.callsNextWithSentHeaders = callsNextWithSentHeaders;
|
|
116
116
|
//# sourceMappingURL=testTools.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testTools.js","sourceRoot":"","sources":["../../../../src/middleware/error/testTools.ts"],"names":[],"mappings":";AAAA,oDAAoD;AACpD,8CAA8C;AAC9C,EAAE;AACF,gFAAgF;AAChF,uEAAuE;AACvE,oEAAoE;AACpE,sCAAsC;AACtC,EAAE;AACF,kEAAkE;AAClE,iEAAiE;AACjE,gEAAgE;AAChE,+CAA+C;AAC/C,EAAE;AACF,oEAAoE;AACpE,wEAAwE;;;
|
|
1
|
+
{"version":3,"file":"testTools.js","sourceRoot":"","sources":["../../../../src/middleware/error/testTools.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"txErrorMiddleware.js","sourceRoot":"","sources":["../../../../src/middleware/error/txErrorMiddleware.ts"],"names":[],"mappings":";AAAA,oDAAoD;AACpD,8CAA8C;AAC9C,EAAE;AACF,gFAAgF;AAChF,uEAAuE;AACvE,oEAAoE;AACpE,sCAAsC;AACtC,EAAE;AACF,kEAAkE;AAClE,iEAAiE;AACjE,gEAAgE;AAChE,+CAA+C;AAC/C,EAAE;AACF,oEAAoE;AACpE,wEAAwE;;;AAIxE,2CAAwC;AACxC,+CAAqD;AAErD;;;;;;;GAOG;AACI,MAAM,iBAAiB,GAAwB,CAAC,GAAY,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAQ,EAAE;IAC7F,IAAI,GAAG,CAAC,WAAW,IAAI,CAAC,IAAA,wBAAe,EAAC,GAAG,CAAC,EAAE;
|
|
1
|
+
{"version":3,"file":"txErrorMiddleware.js","sourceRoot":"","sources":["../../../../src/middleware/error/txErrorMiddleware.ts"],"names":[],"mappings":";AAAA,oDAAoD;AACpD,8CAA8C;AAC9C,EAAE;AACF,gFAAgF;AAChF,uEAAuE;AACvE,oEAAoE;AACpE,sCAAsC;AACtC,EAAE;AACF,kEAAkE;AAClE,iEAAiE;AACjE,gEAAgE;AAChE,+CAA+C;AAC/C,EAAE;AACF,oEAAoE;AACpE,wEAAwE;;;AAIxE,2CAAwC;AACxC,+CAAqD;AAErD;;;;;;;GAOG;AACI,MAAM,iBAAiB,GAAwB,CAAC,GAAY,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAQ,EAAE;IAC7F,IAAI,GAAG,CAAC,WAAW,IAAI,CAAC,IAAA,wBAAe,EAAC,GAAG,CAAC,EAAE,CAAC;QAC9C,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,EAAE,GAAG,GAAG,CAAC;IAEjE,MAAM,IAAI,GAAG;QACZ,IAAI;QACJ,KAAK;QACL,IAAI;QACJ,WAAW;QACX,KAAK;QACL,KAAK;QACL,EAAE;KACF,CAAC;IAEF,SAAG,CAAC,MAAM,CAAC,KAAK,CAAC;QAChB,GAAG,IAAI;QACP,OAAO,EAAE,GAAG,KAAK,aAAa,KAAe,mBAAmB,WAAqB,EAAE;KACvF,CAAC,CAAC;IAEH,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC7B,CAAC,CAAC;AAvBW,QAAA,iBAAiB,qBAuB5B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"httpLogger.js","sourceRoot":"","sources":["../../../../src/middleware/logger/httpLogger.ts"],"names":[],"mappings":";AAAA,oDAAoD;AACpD,8CAA8C;AAC9C,EAAE;AACF,gFAAgF;AAChF,uEAAuE;AACvE,oEAAoE;AACpE,sCAAsC;AACtC,EAAE;AACF,kEAAkE;AAClE,iEAAiE;AACjE,gEAAgE;AAChE,+CAA+C;AAC/C,EAAE;AACF,oEAAoE;AACpE,wEAAwE;;;;;;;;;;;;;;;;;;;;;;;;;;AAGxE,gEAAkD;AAG3C,MAAM,gBAAgB,GAAG,CAAC,eAA+B,EAAa,EAAE,CAC9E,cAAc,CAAC,MAAM,CAAC;IACrB,cAAc;IACd,eAAe;IACf,GAAG,EAAE,0EAA0E;IAC/E,KAAK,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;QACpB,MAAM,EAAE,UAAU,EAAE,GAAG,GAAG,CAAC;QAC3B,IAAI,UAAU,GAAG,GAAG,EAAE;
|
|
1
|
+
{"version":3,"file":"httpLogger.js","sourceRoot":"","sources":["../../../../src/middleware/logger/httpLogger.ts"],"names":[],"mappings":";AAAA,oDAAoD;AACpD,8CAA8C;AAC9C,EAAE;AACF,gFAAgF;AAChF,uEAAuE;AACvE,oEAAoE;AACpE,sCAAsC;AACtC,EAAE;AACF,kEAAkE;AAClE,iEAAiE;AACjE,gEAAgE;AAChE,+CAA+C;AAC/C,EAAE;AACF,oEAAoE;AACpE,wEAAwE;;;;;;;;;;;;;;;;;;;;;;;;;;AAGxE,gEAAkD;AAG3C,MAAM,gBAAgB,GAAG,CAAC,eAA+B,EAAa,EAAE,CAC9E,cAAc,CAAC,MAAM,CAAC;IACrB,cAAc;IACd,eAAe;IACf,GAAG,EAAE,0EAA0E;IAC/E,KAAK,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;QACpB,MAAM,EAAE,UAAU,EAAE,GAAG,GAAG,CAAC;QAC3B,IAAI,UAAU,GAAG,GAAG,EAAE,CAAC;YACtB,6FAA6F;YAC7F,OAAO,MAAM,CAAC;QACf,CAAC;QACD,IAAI,UAAU,GAAG,GAAG,EAAE,CAAC;YACtB,OAAO,MAAM,CAAC;QACf,CAAC;QAED,OAAO,OAAO,CAAC;IAChB,CAAC;CACD,CAAC,CAAC;AAjBS,QAAA,gBAAgB,oBAiBzB"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
// Copyright 2017-
|
|
2
|
+
// Copyright 2017-2024 Parity Technologies (UK) Ltd.
|
|
3
3
|
// This file is part of Substrate API Sidecar.
|
|
4
4
|
//
|
|
5
5
|
// Substrate API Sidecar is free software: you can redistribute it and/or modify
|
|
@@ -23,11 +23,11 @@ exports.errorsWith = exports.doesNotErrorWith = void 0;
|
|
|
23
23
|
* @param req Express Request containing thing it errors on.
|
|
24
24
|
*/
|
|
25
25
|
const doesNotErrorWith = (name, req, middleware) => {
|
|
26
|
-
it(`does not error with ${name}`, () => {
|
|
26
|
+
it(`does not error with ${name}`, async () => {
|
|
27
27
|
const next = jest.fn();
|
|
28
|
-
middleware(req, null, next);
|
|
29
|
-
expect(next).
|
|
30
|
-
expect(next).
|
|
28
|
+
await middleware(req, null, next);
|
|
29
|
+
expect(next).toHaveBeenCalledTimes(1);
|
|
30
|
+
expect(next).toHaveBeenCalledWith();
|
|
31
31
|
});
|
|
32
32
|
};
|
|
33
33
|
exports.doesNotErrorWith = doesNotErrorWith;
|
|
@@ -40,11 +40,11 @@ exports.doesNotErrorWith = doesNotErrorWith;
|
|
|
40
40
|
* @param err Expected error that it passes to next.
|
|
41
41
|
*/
|
|
42
42
|
const errorsWith = (name, req, err, middleware) => {
|
|
43
|
-
it(`errors with ${name}`, () => {
|
|
43
|
+
it(`errors with ${name}`, async () => {
|
|
44
44
|
const next = jest.fn();
|
|
45
|
-
middleware(req, null, next);
|
|
46
|
-
expect(next).
|
|
47
|
-
expect(next).
|
|
45
|
+
await middleware(req, null, next);
|
|
46
|
+
expect(next).toHaveBeenCalledTimes(1);
|
|
47
|
+
expect(next).toHaveBeenCalledWith(err);
|
|
48
48
|
});
|
|
49
49
|
};
|
|
50
50
|
exports.errorsWith = errorsWith;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.js","sourceRoot":"","sources":["../../../../src/middleware/validate/util.ts"],"names":[],"mappings":";AAAA,oDAAoD;AACpD,8CAA8C;AAC9C,EAAE;AACF,gFAAgF;AAChF,uEAAuE;AACvE,oEAAoE;AACpE,sCAAsC;AACtC,EAAE;AACF,kEAAkE;AAClE,iEAAiE;AACjE,gEAAgE;AAChE,+CAA+C;AAC/C,EAAE;AACF,oEAAoE;AACpE,wEAAwE;;;AAKxE;;;;;GAKG;AACI,MAAM,gBAAgB,GAAG,CAAC,IAAY,EAAE,GAAY,EAAE,UAA0B,EAAQ,EAAE;IAChG,EAAE,CAAC,uBAAuB,IAAI,EAAE,EAAE,
|
|
1
|
+
{"version":3,"file":"util.js","sourceRoot":"","sources":["../../../../src/middleware/validate/util.ts"],"names":[],"mappings":";AAAA,oDAAoD;AACpD,8CAA8C;AAC9C,EAAE;AACF,gFAAgF;AAChF,uEAAuE;AACvE,oEAAoE;AACpE,sCAAsC;AACtC,EAAE;AACF,kEAAkE;AAClE,iEAAiE;AACjE,gEAAgE;AAChE,+CAA+C;AAC/C,EAAE;AACF,oEAAoE;AACpE,wEAAwE;;;AAKxE;;;;;GAKG;AACI,MAAM,gBAAgB,GAAG,CAAC,IAAY,EAAE,GAAY,EAAE,UAA0B,EAAQ,EAAE;IAChG,EAAE,CAAC,uBAAuB,IAAI,EAAE,EAAE,KAAK,IAAI,EAAE;QAC5C,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QACvB,MAAM,UAAU,CAAC,GAAG,EAAE,IAA2B,EAAE,IAAI,CAAC,CAAC;QACzD,MAAM,CAAC,IAAI,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QACtC,MAAM,CAAC,IAAI,CAAC,CAAC,oBAAoB,EAAE,CAAC;IACrC,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC;AAPW,QAAA,gBAAgB,oBAO3B;AAEF;;;;;;;GAOG;AACI,MAAM,UAAU,GAAG,CAAC,IAAY,EAAE,GAAY,EAAE,GAAY,EAAE,UAA0B,EAAQ,EAAE;IACxG,EAAE,CAAC,eAAe,IAAI,EAAE,EAAE,KAAK,IAAI,EAAE;QACpC,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QAEvB,MAAM,UAAU,CAAC,GAAG,EAAE,IAA2B,EAAE,IAAI,CAAC,CAAC;QACzD,MAAM,CAAC,IAAI,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QACtC,MAAM,CAAC,IAAI,CAAC,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC;AARW,QAAA,UAAU,cAQrB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validateAddressMiddleware.js","sourceRoot":"","sources":["../../../../src/middleware/validate/validateAddressMiddleware.ts"],"names":[],"mappings":";AAAA,oDAAoD;AACpD,8CAA8C;AAC9C,EAAE;AACF,gFAAgF;AAChF,uEAAuE;AACvE,oEAAoE;AACpE,sCAAsC;AACtC,EAAE;AACF,kEAAkE;AAClE,iEAAiE;AACjE,gEAAgE;AAChE,+CAA+C;AAC/C,EAAE;AACF,oEAAoE;AACpE,wEAAwE;;;AAExE,yCAAuC;AACvC,uDAA8F;AAC9F,qEAAkE;AAElE,6CAAyC;AAEzC;;GAEG;AACI,MAAM,yBAAyB,GAAmB,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;IAC5E,IAAI,CAAC,CAAC,SAAS,IAAI,GAAG,CAAC,MAAM,CAAC,EAAE;
|
|
1
|
+
{"version":3,"file":"validateAddressMiddleware.js","sourceRoot":"","sources":["../../../../src/middleware/validate/validateAddressMiddleware.ts"],"names":[],"mappings":";AAAA,oDAAoD;AACpD,8CAA8C;AAC9C,EAAE;AACF,gFAAgF;AAChF,uEAAuE;AACvE,oEAAoE;AACpE,sCAAsC;AACtC,EAAE;AACF,kEAAkE;AAClE,iEAAiE;AACjE,gEAAgE;AAChE,+CAA+C;AAC/C,EAAE;AACF,oEAAoE;AACpE,wEAAwE;;;AAExE,yCAAuC;AACvC,uDAA8F;AAC9F,qEAAkE;AAElE,6CAAyC;AAEzC;;GAEG;AACI,MAAM,yBAAyB,GAAmB,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;IAC5E,IAAI,CAAC,CAAC,SAAS,IAAI,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;QAChC,OAAO,IAAI,EAAE,CAAC;IACf,CAAC;IAED,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAE1D,IAAI,CAAC,OAAO,IAAI,KAAK,EAAE,CAAC;QACvB,OAAO,IAAI,CAAC,IAAI,wBAAU,CAAC,KAAK,CAAC,CAAC,CAAC;IACpC,CAAC;IAED,OAAO,IAAI,EAAE,CAAC;AACf,CAAC,CAAC;AAZW,QAAA,yBAAyB,6BAYpC;AAEF;;;;;;;GAOG;AACH,SAAS,YAAY,CAAC,OAAe;IACpC,IAAI,SAAS,CAAC;IAEd,IAAI,IAAA,YAAK,EAAC,OAAO,CAAC,EAAE,CAAC;QACpB,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;IACnE,CAAC;SAAM,CAAC;QACP,IAAI,CAAC;YACJ,SAAS,GAAG,IAAA,0BAAY,EAAC,OAAO,CAAC,CAAC;QACnC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,OAAO,CAAC,KAAK,EAAG,KAAe,CAAC,OAAO,CAAC,CAAC;QAC1C,CAAC;IACF,CAAC;IAED,IAAI,mBAAQ,CAAC,qBAAqB,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;QAC/D,MAAM,CAAC,OAAO,CAAC,GAAG,IAAA,kCAAoB,EAAC,SAAS,CAAC,CAAC;QAElD,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,kCAAkC,CAAC,CAAC;IAC5E,CAAC;IAED,IAAI,IAAA,+BAAiB,EAAC,OAAO,CAAC,EAAE,CAAC;QAChC,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAC1B,CAAC;IAED,OAAO,CAAC,KAAK,EAAE,wBAAwB,CAAC,CAAC;AAC1C,CAAC"}
|