@promster/hapi 7.0.0 → 8.0.3
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 +36 -21
- package/dist/promster-hapi.cjs.prod.js +36 -21
- package/package.json +8 -6
- 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.3",
|
|
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",
|
|
@@ -36,7 +34,8 @@ var pkg = {
|
|
|
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,15 +49,17 @@ var pkg = {
|
|
|
50
49
|
"prometheus"
|
|
51
50
|
],
|
|
52
51
|
dependencies: {
|
|
53
|
-
"@promster/metrics": "^
|
|
52
|
+
"@promster/metrics": "^9.1.3",
|
|
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.3",
|
|
61
|
+
"@types/hapi__hapi": "20.0.10",
|
|
62
|
+
"parse-prometheus-text-format": "1.1.1"
|
|
62
63
|
}
|
|
63
64
|
};
|
|
64
65
|
|
|
@@ -116,12 +117,13 @@ const createPlugin = ({
|
|
|
116
117
|
} = {
|
|
117
118
|
options: undefined
|
|
118
119
|
}) => {
|
|
119
|
-
const
|
|
120
|
-
const shouldSkipMetricsByEnvironment =
|
|
121
|
-
const
|
|
122
|
-
const
|
|
123
|
-
|
|
124
|
-
|
|
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;
|
|
125
127
|
|
|
126
128
|
if (!shouldSkipMetricsByEnvironment) {
|
|
127
129
|
observeGc();
|
|
@@ -138,27 +140,36 @@ const createPlugin = ({
|
|
|
138
140
|
|
|
139
141
|
const onRequestHandler = (request, h) => {
|
|
140
142
|
request.plugins.promster = {
|
|
141
|
-
|
|
143
|
+
timing: metrics.timing.start()
|
|
142
144
|
}; // @ts-expect-error
|
|
143
145
|
|
|
144
146
|
return doesResponseNeedInvocation ? h.continue() : h.continue;
|
|
145
147
|
};
|
|
146
148
|
|
|
147
149
|
const onResponseHandler = (request, response) => {
|
|
148
|
-
var
|
|
150
|
+
var _allDefaultedOptions$, _request$headers$cont, _request$headers, _request$response$hea, _request$response, _request$response$hea2, _allDefaultedOptions$2;
|
|
149
151
|
|
|
150
152
|
const labels = Object.assign({}, {
|
|
151
|
-
path:
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
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, {}));
|
|
155
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);
|
|
156
167
|
const responseContentLength = Number( // @ts-expect-error
|
|
157
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);
|
|
158
|
-
const shouldSkipByRequest = (
|
|
169
|
+
const shouldSkipByRequest = (_allDefaultedOptions$2 = allDefaultedOptions.skip) === null || _allDefaultedOptions$2 === void 0 ? void 0 : _allDefaultedOptions$2.call(allDefaultedOptions, request, response, labels);
|
|
159
170
|
|
|
160
171
|
if (!shouldSkipByRequest && !shouldSkipMetricsByEnvironment) {
|
|
161
|
-
recordRequest(request.plugins.promster.
|
|
172
|
+
recordRequest(request.plugins.promster.timing, {
|
|
162
173
|
labels,
|
|
163
174
|
requestContentLength,
|
|
164
175
|
responseContentLength
|
|
@@ -222,6 +233,10 @@ Object.defineProperty(exports, 'getSummary', {
|
|
|
222
233
|
enumerable: true,
|
|
223
234
|
get: function () { return metrics.getSummary; }
|
|
224
235
|
});
|
|
236
|
+
Object.defineProperty(exports, 'timing', {
|
|
237
|
+
enumerable: true,
|
|
238
|
+
get: function () { return metrics.timing; }
|
|
239
|
+
});
|
|
225
240
|
exports.createPlugin = createPlugin;
|
|
226
241
|
exports.getRequestRecorder = getRequestRecorder;
|
|
227
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.3",
|
|
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",
|
|
@@ -36,7 +34,8 @@ var pkg = {
|
|
|
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,15 +49,17 @@ var pkg = {
|
|
|
50
49
|
"prometheus"
|
|
51
50
|
],
|
|
52
51
|
dependencies: {
|
|
53
|
-
"@promster/metrics": "^
|
|
52
|
+
"@promster/metrics": "^9.1.3",
|
|
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.3",
|
|
61
|
+
"@types/hapi__hapi": "20.0.10",
|
|
62
|
+
"parse-prometheus-text-format": "1.1.1"
|
|
62
63
|
}
|
|
63
64
|
};
|
|
64
65
|
|
|
@@ -116,12 +117,13 @@ const createPlugin = ({
|
|
|
116
117
|
} = {
|
|
117
118
|
options: undefined
|
|
118
119
|
}) => {
|
|
119
|
-
const
|
|
120
|
-
const shouldSkipMetricsByEnvironment =
|
|
121
|
-
const
|
|
122
|
-
const
|
|
123
|
-
|
|
124
|
-
|
|
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;
|
|
125
127
|
|
|
126
128
|
if (!shouldSkipMetricsByEnvironment) {
|
|
127
129
|
observeGc();
|
|
@@ -138,27 +140,36 @@ const createPlugin = ({
|
|
|
138
140
|
|
|
139
141
|
const onRequestHandler = (request, h) => {
|
|
140
142
|
request.plugins.promster = {
|
|
141
|
-
|
|
143
|
+
timing: metrics.timing.start()
|
|
142
144
|
}; // @ts-expect-error
|
|
143
145
|
|
|
144
146
|
return doesResponseNeedInvocation ? h.continue() : h.continue;
|
|
145
147
|
};
|
|
146
148
|
|
|
147
149
|
const onResponseHandler = (request, response) => {
|
|
148
|
-
var
|
|
150
|
+
var _allDefaultedOptions$, _request$headers$cont, _request$headers, _request$response$hea, _request$response, _request$response$hea2, _allDefaultedOptions$2;
|
|
149
151
|
|
|
150
152
|
const labels = Object.assign({}, {
|
|
151
|
-
path:
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
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, {}));
|
|
155
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);
|
|
156
167
|
const responseContentLength = Number( // @ts-expect-error
|
|
157
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);
|
|
158
|
-
const shouldSkipByRequest = (
|
|
169
|
+
const shouldSkipByRequest = (_allDefaultedOptions$2 = allDefaultedOptions.skip) === null || _allDefaultedOptions$2 === void 0 ? void 0 : _allDefaultedOptions$2.call(allDefaultedOptions, request, response, labels);
|
|
159
170
|
|
|
160
171
|
if (!shouldSkipByRequest && !shouldSkipMetricsByEnvironment) {
|
|
161
|
-
recordRequest(request.plugins.promster.
|
|
172
|
+
recordRequest(request.plugins.promster.timing, {
|
|
162
173
|
labels,
|
|
163
174
|
requestContentLength,
|
|
164
175
|
responseContentLength
|
|
@@ -222,6 +233,10 @@ Object.defineProperty(exports, 'getSummary', {
|
|
|
222
233
|
enumerable: true,
|
|
223
234
|
get: function () { return metrics.getSummary; }
|
|
224
235
|
});
|
|
236
|
+
Object.defineProperty(exports, 'timing', {
|
|
237
|
+
enumerable: true,
|
|
238
|
+
get: function () { return metrics.timing; }
|
|
239
|
+
});
|
|
225
240
|
exports.createPlugin = createPlugin;
|
|
226
241
|
exports.getRequestRecorder = getRequestRecorder;
|
|
227
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.3",
|
|
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",
|
|
@@ -22,7 +21,8 @@
|
|
|
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.3",
|
|
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.3",
|
|
48
|
+
"@types/hapi__hapi": "20.0.10",
|
|
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`
|