@promster/hapi 6.1.3 → 8.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/declarations/src/index.d.ts +2 -2
- package/dist/promster-hapi.cjs.dev.js +38 -28
- package/dist/promster-hapi.cjs.prod.js +38 -28
- package/package.json +10 -8
- package/readme.md +1 -2
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { TPromsterOptions } from '@promster/types';
|
|
2
2
|
import type { Server } from '@hapi/hapi';
|
|
3
3
|
import { createPlugin, getRequestRecorder, signalIsUp, signalIsNotUp } from './plugin';
|
|
4
|
-
import { getSummary, getContentType, Prometheus, defaultRegister, defaultNormalizers } from '@promster/metrics';
|
|
4
|
+
import { getSummary, getContentType, Prometheus, defaultRegister, defaultNormalizers, timing } from '@promster/metrics';
|
|
5
5
|
declare const instrument: (server: Server, options: TPromsterOptions) => Promise<void>;
|
|
6
|
-
export { createPlugin, getRequestRecorder, signalIsUp, signalIsNotUp, getSummary, getContentType, Prometheus, defaultRegister, defaultNormalizers, instrument, };
|
|
6
|
+
export { createPlugin, getRequestRecorder, signalIsUp, signalIsNotUp, getSummary, getContentType, Prometheus, defaultRegister, defaultNormalizers, instrument, timing, };
|
|
@@ -13,13 +13,11 @@ var merge__default = /*#__PURE__*/_interopDefault(merge);
|
|
|
13
13
|
|
|
14
14
|
var pkg = {
|
|
15
15
|
name: "@promster/hapi",
|
|
16
|
-
version: "
|
|
16
|
+
version: "8.0.2",
|
|
17
17
|
description: "Hapi server integrations of promster",
|
|
18
18
|
main: "dist/promster-hapi.cjs.js",
|
|
19
19
|
typings: "dist/promster-hapi.cjs.d.ts",
|
|
20
20
|
types: "dist/promster-hapi.cjs.d.ts",
|
|
21
|
-
scripts: {
|
|
22
|
-
},
|
|
23
21
|
files: [
|
|
24
22
|
"readme.md",
|
|
25
23
|
"package.json",
|
|
@@ -31,12 +29,13 @@ var pkg = {
|
|
|
31
29
|
access: "public"
|
|
32
30
|
},
|
|
33
31
|
engines: {
|
|
34
|
-
node: ">=
|
|
35
|
-
npm: ">=6
|
|
32
|
+
node: ">=14",
|
|
33
|
+
npm: ">=6"
|
|
36
34
|
},
|
|
37
35
|
repository: {
|
|
38
36
|
type: "git",
|
|
39
|
-
url: "
|
|
37
|
+
url: "https://github.com/tdeekens/promster.git",
|
|
38
|
+
directory: "packages/hapi"
|
|
40
39
|
},
|
|
41
40
|
author: "Tobias Deekens <nerd@tdeekens.name>",
|
|
42
41
|
license: "MIT",
|
|
@@ -50,26 +49,23 @@ var pkg = {
|
|
|
50
49
|
"prometheus"
|
|
51
50
|
],
|
|
52
51
|
dependencies: {
|
|
53
|
-
"@promster/metrics": "^
|
|
52
|
+
"@promster/metrics": "^9.1.1",
|
|
54
53
|
"merge-options": "3.0.4",
|
|
55
54
|
semver: "7.3.5",
|
|
56
55
|
tslib: "2.3.1"
|
|
57
56
|
},
|
|
58
57
|
devDependencies: {
|
|
59
58
|
"@hapi/boom": "9.1.4",
|
|
60
|
-
"@
|
|
61
|
-
"@types
|
|
59
|
+
"@hapi/hapi": "20.2.1",
|
|
60
|
+
"@promster/types": "^3.2.2",
|
|
61
|
+
"@types/hapi__hapi": "20.0.9",
|
|
62
|
+
"parse-prometheus-text-format": "1.1.1"
|
|
62
63
|
}
|
|
63
64
|
};
|
|
64
65
|
|
|
65
66
|
const extractPath = request => request.route.path.replace(/\?/g, '');
|
|
66
|
-
/* eslint-disable @typescript-eslint/no-unnecessary-type-arguments */
|
|
67
|
-
|
|
68
67
|
|
|
69
|
-
// eslint-disable-next-line no-undef
|
|
70
68
|
const isBoomResponse = response => response.isBoom;
|
|
71
|
-
/* eslint-enable @typescript-eslint/no-unnecessary-type-arguments */
|
|
72
|
-
|
|
73
69
|
|
|
74
70
|
const extractStatusCode = request => {
|
|
75
71
|
const {
|
|
@@ -121,12 +117,13 @@ const createPlugin = ({
|
|
|
121
117
|
} = {
|
|
122
118
|
options: undefined
|
|
123
119
|
}) => {
|
|
124
|
-
const
|
|
125
|
-
const shouldSkipMetricsByEnvironment =
|
|
126
|
-
const
|
|
127
|
-
const
|
|
128
|
-
|
|
129
|
-
|
|
120
|
+
const allDefaultedOptions = merge__default["default"](metrics.createHttpMetrics.defaultOptions, metrics.createGcMetrics.defaultOptions, metrics.createRequestRecorder.defaultOptions, metrics.createGcObserver.defaultOptions, metrics.defaultNormalizers, pluginOptions);
|
|
121
|
+
const shouldSkipMetricsByEnvironment = metrics.skipMetricsInEnvironment(allDefaultedOptions);
|
|
122
|
+
const httpMetrics = metrics.createHttpMetrics(allDefaultedOptions);
|
|
123
|
+
const gcMetrics = metrics.createGcMetrics(allDefaultedOptions);
|
|
124
|
+
const observeGc = metrics.createGcObserver(gcMetrics, allDefaultedOptions);
|
|
125
|
+
recordRequest = metrics.createRequestRecorder(httpMetrics, allDefaultedOptions);
|
|
126
|
+
upMetric = gcMetrics === null || gcMetrics === void 0 ? void 0 : gcMetrics.up;
|
|
130
127
|
|
|
131
128
|
if (!shouldSkipMetricsByEnvironment) {
|
|
132
129
|
observeGc();
|
|
@@ -143,27 +140,36 @@ const createPlugin = ({
|
|
|
143
140
|
|
|
144
141
|
const onRequestHandler = (request, h) => {
|
|
145
142
|
request.plugins.promster = {
|
|
146
|
-
|
|
143
|
+
timing: metrics.timing.start()
|
|
147
144
|
}; // @ts-expect-error
|
|
148
145
|
|
|
149
146
|
return doesResponseNeedInvocation ? h.continue() : h.continue;
|
|
150
147
|
};
|
|
151
148
|
|
|
152
149
|
const onResponseHandler = (request, response) => {
|
|
153
|
-
var
|
|
150
|
+
var _allDefaultedOptions$, _request$headers$cont, _request$headers, _request$response$hea, _request$response, _request$response$hea2, _allDefaultedOptions$2;
|
|
154
151
|
|
|
155
152
|
const labels = Object.assign({}, {
|
|
156
|
-
path:
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
153
|
+
path: allDefaultedOptions.normalizePath(extractPath(request), {
|
|
154
|
+
req: request,
|
|
155
|
+
res: response
|
|
156
|
+
}),
|
|
157
|
+
method: allDefaultedOptions.normalizeMethod(request.method, {
|
|
158
|
+
req: request,
|
|
159
|
+
res: response
|
|
160
|
+
}),
|
|
161
|
+
status_code: allDefaultedOptions.normalizeStatusCode(extractStatusCode(request), {
|
|
162
|
+
req: request,
|
|
163
|
+
res: response
|
|
164
|
+
})
|
|
165
|
+
}, (_allDefaultedOptions$ = allDefaultedOptions.getLabelValues) === null || _allDefaultedOptions$ === void 0 ? void 0 : _allDefaultedOptions$.call(allDefaultedOptions, request, {}));
|
|
160
166
|
const requestContentLength = Number((_request$headers$cont = request === null || request === void 0 ? void 0 : (_request$headers = request.headers) === null || _request$headers === void 0 ? void 0 : _request$headers['content-length']) !== null && _request$headers$cont !== void 0 ? _request$headers$cont : 0);
|
|
161
167
|
const responseContentLength = Number( // @ts-expect-error
|
|
162
168
|
(_request$response$hea = request === null || request === void 0 ? void 0 : (_request$response = request.response) === null || _request$response === void 0 ? void 0 : (_request$response$hea2 = _request$response.headers) === null || _request$response$hea2 === void 0 ? void 0 : _request$response$hea2['content-length']) !== null && _request$response$hea !== void 0 ? _request$response$hea : 0);
|
|
163
|
-
const shouldSkipByRequest = (
|
|
169
|
+
const shouldSkipByRequest = (_allDefaultedOptions$2 = allDefaultedOptions.skip) === null || _allDefaultedOptions$2 === void 0 ? void 0 : _allDefaultedOptions$2.call(allDefaultedOptions, request, response, labels);
|
|
164
170
|
|
|
165
171
|
if (!shouldSkipByRequest && !shouldSkipMetricsByEnvironment) {
|
|
166
|
-
recordRequest(request.plugins.promster.
|
|
172
|
+
recordRequest(request.plugins.promster.timing, {
|
|
167
173
|
labels,
|
|
168
174
|
requestContentLength,
|
|
169
175
|
responseContentLength
|
|
@@ -227,6 +233,10 @@ Object.defineProperty(exports, 'getSummary', {
|
|
|
227
233
|
enumerable: true,
|
|
228
234
|
get: function () { return metrics.getSummary; }
|
|
229
235
|
});
|
|
236
|
+
Object.defineProperty(exports, 'timing', {
|
|
237
|
+
enumerable: true,
|
|
238
|
+
get: function () { return metrics.timing; }
|
|
239
|
+
});
|
|
230
240
|
exports.createPlugin = createPlugin;
|
|
231
241
|
exports.getRequestRecorder = getRequestRecorder;
|
|
232
242
|
exports.instrument = instrument;
|
|
@@ -13,13 +13,11 @@ var merge__default = /*#__PURE__*/_interopDefault(merge);
|
|
|
13
13
|
|
|
14
14
|
var pkg = {
|
|
15
15
|
name: "@promster/hapi",
|
|
16
|
-
version: "
|
|
16
|
+
version: "8.0.2",
|
|
17
17
|
description: "Hapi server integrations of promster",
|
|
18
18
|
main: "dist/promster-hapi.cjs.js",
|
|
19
19
|
typings: "dist/promster-hapi.cjs.d.ts",
|
|
20
20
|
types: "dist/promster-hapi.cjs.d.ts",
|
|
21
|
-
scripts: {
|
|
22
|
-
},
|
|
23
21
|
files: [
|
|
24
22
|
"readme.md",
|
|
25
23
|
"package.json",
|
|
@@ -31,12 +29,13 @@ var pkg = {
|
|
|
31
29
|
access: "public"
|
|
32
30
|
},
|
|
33
31
|
engines: {
|
|
34
|
-
node: ">=
|
|
35
|
-
npm: ">=6
|
|
32
|
+
node: ">=14",
|
|
33
|
+
npm: ">=6"
|
|
36
34
|
},
|
|
37
35
|
repository: {
|
|
38
36
|
type: "git",
|
|
39
|
-
url: "
|
|
37
|
+
url: "https://github.com/tdeekens/promster.git",
|
|
38
|
+
directory: "packages/hapi"
|
|
40
39
|
},
|
|
41
40
|
author: "Tobias Deekens <nerd@tdeekens.name>",
|
|
42
41
|
license: "MIT",
|
|
@@ -50,26 +49,23 @@ var pkg = {
|
|
|
50
49
|
"prometheus"
|
|
51
50
|
],
|
|
52
51
|
dependencies: {
|
|
53
|
-
"@promster/metrics": "^
|
|
52
|
+
"@promster/metrics": "^9.1.1",
|
|
54
53
|
"merge-options": "3.0.4",
|
|
55
54
|
semver: "7.3.5",
|
|
56
55
|
tslib: "2.3.1"
|
|
57
56
|
},
|
|
58
57
|
devDependencies: {
|
|
59
58
|
"@hapi/boom": "9.1.4",
|
|
60
|
-
"@
|
|
61
|
-
"@types
|
|
59
|
+
"@hapi/hapi": "20.2.1",
|
|
60
|
+
"@promster/types": "^3.2.2",
|
|
61
|
+
"@types/hapi__hapi": "20.0.9",
|
|
62
|
+
"parse-prometheus-text-format": "1.1.1"
|
|
62
63
|
}
|
|
63
64
|
};
|
|
64
65
|
|
|
65
66
|
const extractPath = request => request.route.path.replace(/\?/g, '');
|
|
66
|
-
/* eslint-disable @typescript-eslint/no-unnecessary-type-arguments */
|
|
67
|
-
|
|
68
67
|
|
|
69
|
-
// eslint-disable-next-line no-undef
|
|
70
68
|
const isBoomResponse = response => response.isBoom;
|
|
71
|
-
/* eslint-enable @typescript-eslint/no-unnecessary-type-arguments */
|
|
72
|
-
|
|
73
69
|
|
|
74
70
|
const extractStatusCode = request => {
|
|
75
71
|
const {
|
|
@@ -121,12 +117,13 @@ const createPlugin = ({
|
|
|
121
117
|
} = {
|
|
122
118
|
options: undefined
|
|
123
119
|
}) => {
|
|
124
|
-
const
|
|
125
|
-
const shouldSkipMetricsByEnvironment =
|
|
126
|
-
const
|
|
127
|
-
const
|
|
128
|
-
|
|
129
|
-
|
|
120
|
+
const allDefaultedOptions = merge__default["default"](metrics.createHttpMetrics.defaultOptions, metrics.createGcMetrics.defaultOptions, metrics.createRequestRecorder.defaultOptions, metrics.createGcObserver.defaultOptions, metrics.defaultNormalizers, pluginOptions);
|
|
121
|
+
const shouldSkipMetricsByEnvironment = metrics.skipMetricsInEnvironment(allDefaultedOptions);
|
|
122
|
+
const httpMetrics = metrics.createHttpMetrics(allDefaultedOptions);
|
|
123
|
+
const gcMetrics = metrics.createGcMetrics(allDefaultedOptions);
|
|
124
|
+
const observeGc = metrics.createGcObserver(gcMetrics, allDefaultedOptions);
|
|
125
|
+
recordRequest = metrics.createRequestRecorder(httpMetrics, allDefaultedOptions);
|
|
126
|
+
upMetric = gcMetrics === null || gcMetrics === void 0 ? void 0 : gcMetrics.up;
|
|
130
127
|
|
|
131
128
|
if (!shouldSkipMetricsByEnvironment) {
|
|
132
129
|
observeGc();
|
|
@@ -143,27 +140,36 @@ const createPlugin = ({
|
|
|
143
140
|
|
|
144
141
|
const onRequestHandler = (request, h) => {
|
|
145
142
|
request.plugins.promster = {
|
|
146
|
-
|
|
143
|
+
timing: metrics.timing.start()
|
|
147
144
|
}; // @ts-expect-error
|
|
148
145
|
|
|
149
146
|
return doesResponseNeedInvocation ? h.continue() : h.continue;
|
|
150
147
|
};
|
|
151
148
|
|
|
152
149
|
const onResponseHandler = (request, response) => {
|
|
153
|
-
var
|
|
150
|
+
var _allDefaultedOptions$, _request$headers$cont, _request$headers, _request$response$hea, _request$response, _request$response$hea2, _allDefaultedOptions$2;
|
|
154
151
|
|
|
155
152
|
const labels = Object.assign({}, {
|
|
156
|
-
path:
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
153
|
+
path: allDefaultedOptions.normalizePath(extractPath(request), {
|
|
154
|
+
req: request,
|
|
155
|
+
res: response
|
|
156
|
+
}),
|
|
157
|
+
method: allDefaultedOptions.normalizeMethod(request.method, {
|
|
158
|
+
req: request,
|
|
159
|
+
res: response
|
|
160
|
+
}),
|
|
161
|
+
status_code: allDefaultedOptions.normalizeStatusCode(extractStatusCode(request), {
|
|
162
|
+
req: request,
|
|
163
|
+
res: response
|
|
164
|
+
})
|
|
165
|
+
}, (_allDefaultedOptions$ = allDefaultedOptions.getLabelValues) === null || _allDefaultedOptions$ === void 0 ? void 0 : _allDefaultedOptions$.call(allDefaultedOptions, request, {}));
|
|
160
166
|
const requestContentLength = Number((_request$headers$cont = request === null || request === void 0 ? void 0 : (_request$headers = request.headers) === null || _request$headers === void 0 ? void 0 : _request$headers['content-length']) !== null && _request$headers$cont !== void 0 ? _request$headers$cont : 0);
|
|
161
167
|
const responseContentLength = Number( // @ts-expect-error
|
|
162
168
|
(_request$response$hea = request === null || request === void 0 ? void 0 : (_request$response = request.response) === null || _request$response === void 0 ? void 0 : (_request$response$hea2 = _request$response.headers) === null || _request$response$hea2 === void 0 ? void 0 : _request$response$hea2['content-length']) !== null && _request$response$hea !== void 0 ? _request$response$hea : 0);
|
|
163
|
-
const shouldSkipByRequest = (
|
|
169
|
+
const shouldSkipByRequest = (_allDefaultedOptions$2 = allDefaultedOptions.skip) === null || _allDefaultedOptions$2 === void 0 ? void 0 : _allDefaultedOptions$2.call(allDefaultedOptions, request, response, labels);
|
|
164
170
|
|
|
165
171
|
if (!shouldSkipByRequest && !shouldSkipMetricsByEnvironment) {
|
|
166
|
-
recordRequest(request.plugins.promster.
|
|
172
|
+
recordRequest(request.plugins.promster.timing, {
|
|
167
173
|
labels,
|
|
168
174
|
requestContentLength,
|
|
169
175
|
responseContentLength
|
|
@@ -227,6 +233,10 @@ Object.defineProperty(exports, 'getSummary', {
|
|
|
227
233
|
enumerable: true,
|
|
228
234
|
get: function () { return metrics.getSummary; }
|
|
229
235
|
});
|
|
236
|
+
Object.defineProperty(exports, 'timing', {
|
|
237
|
+
enumerable: true,
|
|
238
|
+
get: function () { return metrics.timing; }
|
|
239
|
+
});
|
|
230
240
|
exports.createPlugin = createPlugin;
|
|
231
241
|
exports.getRequestRecorder = getRequestRecorder;
|
|
232
242
|
exports.instrument = instrument;
|
package/package.json
CHANGED
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@promster/hapi",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "8.0.2",
|
|
4
4
|
"description": "Hapi server integrations of promster",
|
|
5
5
|
"main": "dist/promster-hapi.cjs.js",
|
|
6
6
|
"typings": "dist/promster-hapi.cjs.d.ts",
|
|
7
7
|
"types": "dist/promster-hapi.cjs.d.ts",
|
|
8
|
-
"scripts": {},
|
|
9
8
|
"files": [
|
|
10
9
|
"readme.md",
|
|
11
10
|
"package.json",
|
|
@@ -17,12 +16,13 @@
|
|
|
17
16
|
"access": "public"
|
|
18
17
|
},
|
|
19
18
|
"engines": {
|
|
20
|
-
"node": ">=
|
|
21
|
-
"npm": ">=6
|
|
19
|
+
"node": ">=14",
|
|
20
|
+
"npm": ">=6"
|
|
22
21
|
},
|
|
23
22
|
"repository": {
|
|
24
23
|
"type": "git",
|
|
25
|
-
"url": "
|
|
24
|
+
"url": "https://github.com/tdeekens/promster.git",
|
|
25
|
+
"directory": "packages/hapi"
|
|
26
26
|
},
|
|
27
27
|
"author": "Tobias Deekens <nerd@tdeekens.name>",
|
|
28
28
|
"license": "MIT",
|
|
@@ -36,14 +36,16 @@
|
|
|
36
36
|
"prometheus"
|
|
37
37
|
],
|
|
38
38
|
"dependencies": {
|
|
39
|
-
"@promster/metrics": "^
|
|
39
|
+
"@promster/metrics": "^9.1.1",
|
|
40
40
|
"merge-options": "3.0.4",
|
|
41
41
|
"semver": "7.3.5",
|
|
42
42
|
"tslib": "2.3.1"
|
|
43
43
|
},
|
|
44
44
|
"devDependencies": {
|
|
45
45
|
"@hapi/boom": "9.1.4",
|
|
46
|
-
"@
|
|
47
|
-
"@types
|
|
46
|
+
"@hapi/hapi": "20.2.1",
|
|
47
|
+
"@promster/types": "^3.2.2",
|
|
48
|
+
"@types/hapi__hapi": "20.0.9",
|
|
49
|
+
"parse-prometheus-text-format": "1.1.1"
|
|
48
50
|
}
|
|
49
51
|
}
|
package/readme.md
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
<p align="center">
|
|
2
|
-
<b style="font-size: 25px">⏰ Promster - Measure metrics from Hapi/Express servers with Prometheus 🚦</b
|
|
3
|
-
<i>Promster is an Prometheus Exporter for Node.js servers written with Express or Hapi.</i>
|
|
2
|
+
<b style="font-size: 25px">⏰ Promster - Measure metrics from Hapi/Express servers with Prometheus 🚦</b>
|
|
4
3
|
</p>
|
|
5
4
|
|
|
6
5
|
### `@promster/hapi`
|