@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.
@@ -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: "6.1.3",
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: ">=12",
35
- npm: ">=6.9.0"
32
+ node: ">=14",
33
+ npm: ">=6"
36
34
  },
37
35
  repository: {
38
36
  type: "git",
39
- url: "git+https://github.com/tdeekens/promster.git"
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": "^7.0.4",
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
- "@promster/types": "^3.1.4",
61
- "@types/hapi__hapi": "20.0.9"
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 defaultedOptions = merge__default["default"](metrics.createMetricTypes.defaultOptions, metrics.createRequestRecorder.defaultOptions, metrics.defaultNormalizers, pluginOptions);
125
- const shouldSkipMetricsByEnvironment = defaultedOptions.detectKubernetes && !metrics.isRunningInKubernetes();
126
- const metricTypes = metrics.createMetricTypes(defaultedOptions);
127
- const observeGc = metrics.createGcObserver(metricTypes);
128
- recordRequest = metrics.createRequestRecorder(metricTypes, defaultedOptions);
129
- upMetric = metricTypes === null || metricTypes === void 0 ? void 0 : metricTypes.up;
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
- start: process.hrtime()
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 _defaultedOptions$get, _request$headers$cont, _request$headers, _request$response$hea, _request$response, _request$response$hea2, _defaultedOptions$ski;
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: defaultedOptions.normalizePath(extractPath(request)),
157
- method: defaultedOptions.normalizeMethod(request.method),
158
- status_code: defaultedOptions.normalizeStatusCode(extractStatusCode(request))
159
- }, (_defaultedOptions$get = defaultedOptions.getLabelValues) === null || _defaultedOptions$get === void 0 ? void 0 : _defaultedOptions$get.call(defaultedOptions, request, {}));
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 = (_defaultedOptions$ski = defaultedOptions.skip) === null || _defaultedOptions$ski === void 0 ? void 0 : _defaultedOptions$ski.call(defaultedOptions, request, response, labels);
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.start, {
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: "6.1.3",
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: ">=12",
35
- npm: ">=6.9.0"
32
+ node: ">=14",
33
+ npm: ">=6"
36
34
  },
37
35
  repository: {
38
36
  type: "git",
39
- url: "git+https://github.com/tdeekens/promster.git"
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": "^7.0.4",
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
- "@promster/types": "^3.1.4",
61
- "@types/hapi__hapi": "20.0.9"
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 defaultedOptions = merge__default["default"](metrics.createMetricTypes.defaultOptions, metrics.createRequestRecorder.defaultOptions, metrics.defaultNormalizers, pluginOptions);
125
- const shouldSkipMetricsByEnvironment = defaultedOptions.detectKubernetes && !metrics.isRunningInKubernetes();
126
- const metricTypes = metrics.createMetricTypes(defaultedOptions);
127
- const observeGc = metrics.createGcObserver(metricTypes);
128
- recordRequest = metrics.createRequestRecorder(metricTypes, defaultedOptions);
129
- upMetric = metricTypes === null || metricTypes === void 0 ? void 0 : metricTypes.up;
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
- start: process.hrtime()
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 _defaultedOptions$get, _request$headers$cont, _request$headers, _request$response$hea, _request$response, _request$response$hea2, _defaultedOptions$ski;
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: defaultedOptions.normalizePath(extractPath(request)),
157
- method: defaultedOptions.normalizeMethod(request.method),
158
- status_code: defaultedOptions.normalizeStatusCode(extractStatusCode(request))
159
- }, (_defaultedOptions$get = defaultedOptions.getLabelValues) === null || _defaultedOptions$get === void 0 ? void 0 : _defaultedOptions$get.call(defaultedOptions, request, {}));
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 = (_defaultedOptions$ski = defaultedOptions.skip) === null || _defaultedOptions$ski === void 0 ? void 0 : _defaultedOptions$ski.call(defaultedOptions, request, response, labels);
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.start, {
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": "6.1.3",
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": ">=12",
21
- "npm": ">=6.9.0"
19
+ "node": ">=14",
20
+ "npm": ">=6"
22
21
  },
23
22
  "repository": {
24
23
  "type": "git",
25
- "url": "git+https://github.com/tdeekens/promster.git"
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": "^7.0.4",
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
- "@promster/types": "^3.1.4",
47
- "@types/hapi__hapi": "20.0.9"
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><br />
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`