Compare commits

...

29 Commits

Author SHA1 Message Date
Félix MARQUET
522e9ad64d bump version to 8.0.1 2025-10-29 12:55:01 +00:00
Félix MARQUET
db8710d5d0 feat: add upMetricName params to allow for up metric name customization 2025-04-25 06:47:26 +00:00
Konstantin Pogorelov
f9a0a7622a bump version to 8.0.0, update express and @types/express to 5 2024-10-12 15:42:42 +02:00
Konstantin Pogorelov
fd33d98c15 bump v7.0.2 2024-10-12 13:54:58 +02:00
Konstantin Pogorelov
5978ea7b73 Merge remote-tracking branch 'remotes/origin/dependabot/npm_and_yarn/multi-092c445592' 2024-10-12 13:51:57 +02:00
Konstantin Pogorelov
71467e6a17 Merge remote-tracking branch 'remotes/origin/dependabot/npm_and_yarn/multi-6b7e5c81f3' 2024-10-12 13:51:45 +02:00
Konstantin Pogorelov
c6b24f6eca Merge remote-tracking branch 'remotes/origin/dependabot/npm_and_yarn/multi-9f37c16f8f' 2024-10-12 13:51:31 +02:00
Konstantin Pogorelov
1ac5fba5c4 Merge remote-tracking branch 'remotes/origin/dependabot/npm_and_yarn/multi-41ee8087b2' 2024-10-12 13:51:11 +02:00
dependabot[bot]
ca8b0ba1e0 Bump body-parser and express
Bumps [body-parser](https://github.com/expressjs/body-parser) to 1.20.3 and updates ancestor dependency [express](https://github.com/expressjs/express). These dependencies need to be updated together.


Updates `body-parser` from 1.20.2 to 1.20.3
- [Release notes](https://github.com/expressjs/body-parser/releases)
- [Changelog](https://github.com/expressjs/body-parser/blob/master/HISTORY.md)
- [Commits](https://github.com/expressjs/body-parser/compare/1.20.2...1.20.3)

Updates `express` from 4.19.2 to 4.21.1
- [Release notes](https://github.com/expressjs/express/releases)
- [Changelog](https://github.com/expressjs/express/blob/4.21.1/History.md)
- [Commits](https://github.com/expressjs/express/compare/4.19.2...4.21.1)

---
updated-dependencies:
- dependency-name: body-parser
  dependency-type: indirect
- dependency-name: express
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-12 11:48:55 +00:00
dependabot[bot]
2ebc2618de Bump path-to-regexp and express
Bumps [path-to-regexp](https://github.com/pillarjs/path-to-regexp) to 0.1.10 and updates ancestor dependency [express](https://github.com/expressjs/express). These dependencies need to be updated together.


Updates `path-to-regexp` from 0.1.7 to 0.1.10
- [Release notes](https://github.com/pillarjs/path-to-regexp/releases)
- [Changelog](https://github.com/pillarjs/path-to-regexp/blob/master/History.md)
- [Commits](https://github.com/pillarjs/path-to-regexp/compare/v0.1.7...v0.1.10)

Updates `express` from 4.19.2 to 4.21.1
- [Release notes](https://github.com/expressjs/express/releases)
- [Changelog](https://github.com/expressjs/express/blob/4.21.1/History.md)
- [Commits](https://github.com/expressjs/express/compare/4.19.2...4.21.1)

---
updated-dependencies:
- dependency-name: path-to-regexp
  dependency-type: indirect
- dependency-name: express
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-12 11:48:51 +00:00
dependabot[bot]
df46ecaa9a Bump cookie and express
Bumps [cookie](https://github.com/jshttp/cookie) to 0.7.1 and updates ancestor dependency [express](https://github.com/expressjs/express). These dependencies need to be updated together.


Updates `cookie` from 0.6.0 to 0.7.1
- [Release notes](https://github.com/jshttp/cookie/releases)
- [Commits](https://github.com/jshttp/cookie/compare/v0.6.0...v0.7.1)

Updates `express` from 4.19.2 to 4.21.1
- [Release notes](https://github.com/expressjs/express/releases)
- [Changelog](https://github.com/expressjs/express/blob/4.21.1/History.md)
- [Commits](https://github.com/expressjs/express/compare/4.19.2...4.21.1)

---
updated-dependencies:
- dependency-name: cookie
  dependency-type: indirect
- dependency-name: express
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-12 11:48:01 +00:00
dependabot[bot]
abdfe2d93a Bump serve-static and express
Bumps [serve-static](https://github.com/expressjs/serve-static) to 1.16.2 and updates ancestor dependency [express](https://github.com/expressjs/express). These dependencies need to be updated together.


Updates `serve-static` from 1.15.0 to 1.16.2
- [Release notes](https://github.com/expressjs/serve-static/releases)
- [Changelog](https://github.com/expressjs/serve-static/blob/v1.16.2/HISTORY.md)
- [Commits](https://github.com/expressjs/serve-static/compare/v1.15.0...v1.16.2)

Updates `express` from 4.19.2 to 4.21.1
- [Release notes](https://github.com/expressjs/express/releases)
- [Changelog](https://github.com/expressjs/express/blob/4.21.1/History.md)
- [Commits](https://github.com/expressjs/express/compare/4.19.2...4.21.1)

---
updated-dependencies:
- dependency-name: serve-static
  dependency-type: indirect
- dependency-name: express
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-12 11:48:00 +00:00
dependabot[bot]
33ab388106 Bump send and express
Bumps [send](https://github.com/pillarjs/send) to 0.19.0 and updates ancestor dependency [express](https://github.com/expressjs/express). These dependencies need to be updated together.


Updates `send` from 0.18.0 to 0.19.0
- [Release notes](https://github.com/pillarjs/send/releases)
- [Changelog](https://github.com/pillarjs/send/blob/master/HISTORY.md)
- [Commits](https://github.com/pillarjs/send/compare/0.18.0...0.19.0)

Updates `express` from 4.19.2 to 4.21.1
- [Release notes](https://github.com/expressjs/express/releases)
- [Changelog](https://github.com/expressjs/express/blob/4.21.1/History.md)
- [Commits](https://github.com/expressjs/express/compare/4.19.2...4.21.1)

---
updated-dependencies:
- dependency-name: send
  dependency-type: indirect
- dependency-name: express
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-12 11:47:58 +00:00
Konstantin Pogorelov
02865e531d bump v7.0.1 2024-10-12 13:44:03 +02:00
Konstantin Pogorelov
1a1d8e0b54 Merge pull request #126 from jochen-schweizer/dependabot/npm_and_yarn/express-4.19.2
Bump express from 4.18.2 to 4.19.2
2024-10-12 13:38:00 +02:00
Konstantin Pogorelov
8371c551d5 Merge pull request #127 from jochen-schweizer/dependabot/npm_and_yarn/braces-3.0.3
Bump braces from 3.0.2 to 3.0.3
2024-10-12 13:37:44 +02:00
dependabot[bot]
10a58635e1 Bump braces from 3.0.2 to 3.0.3
Bumps [braces](https://github.com/micromatch/braces) from 3.0.2 to 3.0.3.
- [Changelog](https://github.com/micromatch/braces/blob/master/CHANGELOG.md)
- [Commits](https://github.com/micromatch/braces/compare/3.0.2...3.0.3)

---
updated-dependencies:
- dependency-name: braces
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-06-21 06:23:20 +00:00
dependabot[bot]
5f44228f69 Bump express from 4.18.2 to 4.19.2
Bumps [express](https://github.com/expressjs/express) from 4.18.2 to 4.19.2.
- [Release notes](https://github.com/expressjs/express/releases)
- [Changelog](https://github.com/expressjs/express/blob/master/History.md)
- [Commits](https://github.com/expressjs/express/compare/4.18.2...4.19.2)

---
updated-dependencies:
- dependency-name: express
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-03-29 15:28:24 +00:00
Timm Stelzer
fd5ff1cfe0 feat: respect pruneAgedBuckets, update README 2024-01-06 11:31:26 +01:00
Konstantin Pogorelov
edfb9992ed update README, add .env to gitignore 2024-01-06 11:17:51 +01:00
Konstantin Pogorelov
0ce44722a5 use collectDefaultMetrics.prefix for up metric 2024-01-06 10:48:57 +01:00
Konstantin Pogorelov
407ea4b0d7 fix unittest for prom-client 15 2024-01-06 10:26:33 +01:00
Steve
63b6d89caa Update prom-client to v15 2024-01-05 23:58:13 +01:00
Konstantin Pogorelov
5e2b284903 Merge pull request #102 from Cellaryllis/normalize-path-example-3
Add another example for normalizePath
2024-01-05 23:46:43 +01:00
Konstantin Pogorelov
c693affcac Merge pull request #120 from petuomin/statuscode-for-request-closed-prematurely
Use statuscode 499 for requests that are closed before response is sent
2024-01-05 23:45:10 +01:00
Konstantin Pogorelov
a0eef5d0e2 switch from dtslint to tsd, update required node to >=18, bump version to 7.0.0 2024-01-05 22:04:31 +01:00
Pasi Tuominen
efbab7dcdb Use statuscode 499 for requests that are closed before response is sent
This happens, for example, when a http proxy in front of the application is configured with a timeout and the node server is too slow to respond.

Currently such timeouts are counted as 200s by express-prom-bundle. This PR changes that to 499 "Client Closed Request". This way it's possible to tell them apart.
2023-05-05 14:49:02 +03:00
Cellaryllis
c541824657 Move details below example 2 2022-07-12 10:18:11 +01:00
Cellaryllis
7eae5d4b7f Add another example for normalizePath 2022-07-12 10:15:47 +01:00
14 changed files with 3606 additions and 1809 deletions

2
.gitignore vendored
View File

@@ -2,4 +2,4 @@
node_modules
coverage
/.vscode
.env

View File

@@ -1,8 +1,6 @@
language: node_js
node_js:
- "10"
- "12"
- "14"
- "18"
notifications:
email: false
before_install:
@@ -10,4 +8,4 @@ before_install:
script:
- npm run lint
- npm test
- npm run dtslint-next
- npm run test-types

View File

@@ -4,7 +4,9 @@
Express middleware with popular prometheus metrics in one bundle. It's also compatible with koa v1 and v2 (see below).
Since version 5 it uses **prom-client** as a peer dependency. See: https://github.com/siimon/prom-client
This library uses **prom-client v15+** as a peer dependency. See: https://github.com/siimon/prom-client
If you need a support for older versions of prom-client (v12-v14), downgrade to express-prom-bundle v6.6.0
Included metrics:
@@ -53,6 +55,7 @@ Which labels to include in `http_request_duration_seconds` metric:
* **metricsPath**: replace the `/metrics` route with a **regex** or exact **string**. Note: it is highly recommended to just stick to the default
* **metricType**: histogram/summary selection. See more details below
* **httpDurationMetricName**: Allows you change the name of HTTP duration metric, default: **`http_request_duration_seconds`**.
* **upMetricName**: Allows you change the name of up metric, default: **`up`**.
### metricType option ###
@@ -67,6 +70,7 @@ Additional options for **summary**:
* **percentiles**: percentiles used for `http_request_duration_seconds` summary
* **ageBuckets**: ageBuckets configures how many buckets we have in our sliding window for the summary
* **maxAgeSeconds**: the maxAgeSeconds will tell how old a bucket can be before it is reset
* **pruneAgedBuckets**: When enabled, timed out buckets will be removed entirely. By default, buckets are reset to 0.
### Transformation callbacks ###
@@ -159,6 +163,17 @@ For more details:
* [normalizePath.js](https://github.com/jochen-schweizer/express-prom-bundle/blob/master/src/normalizePath.js) - source code for path processing
#### Example 3 (return express route definition):
```javascript
app.use(promBundle(/* options? */));
promBundle.normalizePath = (req, opts) => {
// Return the path of the express route (i.e. /v1/user/:id or /v1/timer/automated/:userid/:timerid")
return req.route?.path ?? "NULL";
};
```
## express example
setup std. metrics but exclude `up`-metric:

View File

@@ -3,6 +3,8 @@
const express = require('express');
const app = express();
const promClient = require('prom-client');
// replace this with require('.') when running from library code
const promBundle = require('express-prom-bundle');
const bundle = promBundle({

5157
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,6 @@
{
"name": "express-prom-bundle",
"version": "6.6.0",
"version": "8.0.1",
"description": "express middleware with popular prometheus metrics in one bundle",
"main": "src/index.js",
"keywords": [
@@ -14,43 +14,42 @@
"src",
"types/index.d.ts"
],
"types": "types",
"types": "types/index.d.ts",
"scripts": {
"test": "NODE_ENV=test node_modules/jasme/run.js",
"lint": "eslint src",
"coverage": "make coverage",
"dtslint": "dtslint types",
"dtslint-next": "dtslint --onlyTestTsNext types"
"test-types": "tsd"
},
"author": "Konstantin Pogorelov <or@pluseq.com>",
"license": "MIT",
"dependencies": {
"@types/express": "^5.0.0",
"on-finished": "^2.3.0",
"url-value-parser": "^2.0.0"
},
"devDependencies": {
"@types/express": "^4.16.1",
"coveralls": "^3.0.2",
"dtslint": "^0.7.1",
"dts": "^0.1.1",
"eslint": "^5.11.0",
"express": "^4.16.4",
"express": "^5.0.1",
"istanbul": "^0.4.5",
"jasme": "^6.0.0",
"koa": "^2.6.2",
"koa-connect": "^2.0.1",
"prom-client": "^13.0.0",
"prom-client": "^15.0.0",
"supertest": "^3.3.0",
"supertest-koa-agent": "^0.3.0",
"tsd": "^0.30.3",
"typescript": "^3.4.5"
},
"peerDependencies": {
"prom-client": ">=12.0.0"
"prom-client": ">=15.0.0"
},
"repository": {
"type": "git",
"url": "https://github.com/jochen-schweizer/express-prom-bundle.git"
},
"engines": {
"node": ">=10"
"node": ">=18"
}
}

View File

@@ -10,6 +10,20 @@ const supertestKoa = require('supertest-koa-agent');
const promClient = require('prom-client');
const cluster = require('cluster');
// for some reason in prom-client 15 the hashmap has a trailing comma
function extractBucket (instance, key) {
const hashmap = instance.metrics.http_request_duration_seconds.hashMap;
if (hashmap[key]) {
return hashmap[key];
} else {
return hashmap[key + ','];
}
}
function getMetricCount (s) {
return s.replace(/^#.*$\n|^$\n/gm, '').trim().split('\n').length;
}
describe('index', () => {
beforeEach(() => {
promClient.register.clear();
@@ -158,10 +172,9 @@ describe('index', () => {
agent
.get('/test')
.end(() => {
const metricHashMap = instance.metrics.http_request_duration_seconds.hashMap;
expect(metricHashMap['status_code:200']).toBeDefined();
const labeled = metricHashMap['status_code:200'];
expect(labeled.count).toBe(1);
const bucket = extractBucket(instance, 'status_code:200');
expect(bucket).toBeDefined();
expect(bucket.count).toBe(1);
agent
.get('/metrics')
@@ -223,11 +236,11 @@ describe('index', () => {
agent
.get('/good-word')
.end(() => {
const metricHashMap = instance.metrics.http_request_duration_seconds.hashMap;
expect(metricHashMap['status_code:200']).toBeDefined();
const bucket = extractBucket(instance, 'status_code:200');
expect(bucket).toBeDefined();
// only /good-word should be counted
expect(metricHashMap['status_code:200'].count).toBe(1);
expect(bucket.count).toBe(1);
agent
.get('/metrics')
@@ -266,12 +279,10 @@ describe('index', () => {
.expect(500);
})
.then(() => {
const metricHashMap = instance.metrics.http_request_duration_seconds.hashMap;
// only /200 and /500 should be counted
expect(metricHashMap['status_code:200'].count).toBe(1);
expect(metricHashMap['status_code:404']).not.toBeDefined();
expect(metricHashMap['status_code:500'].count).toBe(1);
expect(extractBucket(instance, 'status_code:200').count).toBe(1);
expect(extractBucket(instance, 'status_code:404')).not.toBeDefined();
expect(extractBucket(instance, 'status_code:500').count).toBe(1);
return agent
.get('/metrics')
@@ -335,7 +346,7 @@ describe('index', () => {
describe('usage of normalizePath()', () => {
it('normalizePath can be replaced gloablly', done => {
it('normalizePath can be replaced globally', done => {
const app = express();
const original = bundle.normalizePath;
bundle.normalizePath = () => 'dummy';
@@ -359,6 +370,40 @@ describe('index', () => {
});
});
it('respects pruneAgedBuckets', done => {
const app = express();
const metricsApp = express();
const bundled = bundle({
metricsApp,
metricType: 'summary',
includePath: true,
maxAgeSeconds: 1,
percentiles: [0.5],
ageBuckets: 1,
pruneAgedBuckets: true,
});
app.use(bundled);
const agent = supertest(app);
const metricsAgent = supertest(metricsApp);
agent.get('/foo')
.then(() => metricsAgent.get('/metrics'))
.then(response => {
expect(response.status).toBe(200);
// up + bucket, sum, count
expect(getMetricCount(response.text)).toBe(4);
})
.then(() => new Promise(r => setTimeout(r, 1010)))
.then(() => metricsAgent.get('/metrics'))
.then(response => {
expect(response.status).toBe(200);
// only up
expect(getMetricCount(response.text)).toBe(1);
})
.finally(done);
});
it('normalizePath function can be overridden', done => {
const app = express();
const instance = bundle({
@@ -539,15 +584,37 @@ describe('index', () => {
});
});
it('calls promClient.collectDefaultMetrics', () => {
const spy = spyOn(promClient, 'collectDefaultMetrics');
bundle({
promClient: {
collectDefaultMetrics: {
describe('option collectDefaultMetrics', () => {
it('it gets called', () => {
const spy = spyOn(promClient, 'collectDefaultMetrics');
bundle({
promClient: {
collectDefaultMetrics: {
}
}
}
});
expect(spy).toHaveBeenCalledWith({});
});
it('prefix is used for up metric', (done) => {
const instance = bundle({
promClient: {
collectDefaultMetrics: {
prefix: 'hello_'
}
}
});
const app = express();
app.use(instance);
const agent = supertest(app);
agent
.get('/metrics')
.end((err, res) => {
expect(res.status).toBe(200);
expect(res.text).toMatch(/^hello_up\s1/m);
done();
});
});
expect(spy).toHaveBeenCalledWith({});
});
describe('usage of clusterMetrics()', () => {

View File

@@ -6,7 +6,11 @@ const normalizeStatusCode = require('../src/normalizeStatusCode');
describe('normalizeStatusCode', () => {
it('returns run callback if configured', () => {
expect(
normalizeStatusCode({status_code: 500})
normalizeStatusCode({status_code: 500, headersSent: true})
).toBe(500);
});
it('returns 499 if headers are not sent', () => {
expect(normalizeStatusCode({statusCode: 200, headersSent: false})).toBe(499);
});
});

View File

@@ -91,6 +91,7 @@ function main(opts) {
}
const httpMetricName = opts.httpDurationMetricName || 'http_request_duration_seconds';
const upMetricName = opts.upMetricName || 'up';
function makeHttpMetric() {
const labels = ['status_code'];
@@ -112,7 +113,8 @@ function main(opts) {
percentiles: opts.percentiles || [0.5, 0.75, 0.95, 0.98, 0.99, 0.999],
maxAgeSeconds: opts.maxAgeSeconds,
ageBuckets: opts.ageBuckets,
registers: [opts.promRegistry]
registers: [opts.promRegistry],
pruneAgedBuckets: opts.pruneAgedBuckets
});
} else if (opts.metricType === 'histogram' || !opts.metricType) {
return new promClient.Histogram({
@@ -132,8 +134,12 @@ function main(opts) {
};
if (opts.includeUp !== false) {
let prefix = '';
if (opts.promClient && opts.promClient.collectDefaultMetrics) {
prefix = opts.promClient.collectDefaultMetrics.prefix || '';
}
metrics.up = new promClient.Gauge({
name: 'up',
name: prefix + upMetricName,
help: '1 = up, 0 = not up',
registers: [opts.promRegistry]
});

View File

@@ -1,5 +1,11 @@
'use strict';
const CLIENT_CLOSED_REQUEST_CODE = 499;
module.exports = function(res) {
return res.status_code || res.statusCode;
if (res.headersSent) {
return res.status_code || res.statusCode;
} else {
return CLIENT_CLOSED_REQUEST_CODE;
}
};

34
types/index.d.ts vendored
View File

@@ -1,7 +1,7 @@
// TypeScript Version: 2.8
import { Request, RequestHandler, Response, Express } from 'express';
import { DefaultMetricsCollectorConfiguration, Registry } from 'prom-client';
import { DefaultMetricsCollectorConfiguration, Registry, RegistryContentType } from 'prom-client';
export {};
@@ -17,7 +17,7 @@ declare namespace express_prom_bundle {
type NormalizeStatusCodeFn = (res: Response) => number | string;
type TransformLabelsFn = (labels: Labels, req: Request, res: Response) => void;
interface Opts {
interface BaseOptions {
autoregister?: boolean;
customLabels?: { [key: string]: any };
@@ -36,19 +36,10 @@ declare namespace express_prom_bundle {
excludeRoutes?: Array<string | RegExp>;
metricType?: 'summary' | 'histogram';
// https://github.com/siimon/prom-client#histogram
buckets?: number[];
// https://github.com/siimon/prom-client#summary
percentiles?: number[];
maxAgeSeconds?: number;
ageBuckets?: number;
metricsPath?: string;
httpDurationMetricName?: string;
promClient?: { collectDefaultMetrics?: DefaultMetricsCollectorConfiguration };
upMetricName?: string;
promClient?: { collectDefaultMetrics?: DefaultMetricsCollectorConfiguration<RegistryContentType> };
promRegistry?: Registry;
normalizePath?: NormalizePathEntry[] | NormalizePathFn;
formatStatusCode?: NormalizeStatusCodeFn;
@@ -65,6 +56,23 @@ declare namespace express_prom_bundle {
};
}
/** @see https://github.com/siimon/prom-client#summary */
type SummaryOptions = BaseOptions & {
metricType?: 'summary';
percentiles?: number[];
maxAgeSeconds?: number;
ageBuckets?: number;
pruneAgedBuckets?: boolean;
}
/** @see https://github.com/siimon/prom-client#histogram */
type HistogramOptions = BaseOptions & {
metricType?: 'histogram';
buckets?: number[];
}
type Opts = SummaryOptions | HistogramOptions;
interface Middleware extends RequestHandler {
metricsMiddleware: RequestHandler;
}

View File

@@ -1,19 +1,17 @@
import * as express from 'express';
import express, { RequestHandler } from 'express';
import { expectType } from 'tsd'
import * as promClient from 'prom-client';
import promBundle, {
type Middleware
} from '..';
import * as promBundle from 'express-prom-bundle';
// $ExpectType Middleware
const middleware: express.RequestHandler = promBundle({ includeMethod: true });
// $ExpectType: string
middleware.name;
expectType<string>(middleware.name);
promClient.register.clear();
// $ExpectType Middleware
promBundle({
expectType<Middleware>(promBundle({
normalizePath: [
// collect paths like "/customer/johnbobson" as just one "/custom/#name"
['^/customer/.*', '/customer/#name'],
@@ -27,12 +25,11 @@ promBundle({
'ORD[0-9]{5,}' // replace strings like ORD1243423, ORD673562 as #val
]
}
});
}));
promClient.register.clear();
// $ExpectType Middleware
promBundle({
expectType<Middleware>(promBundle({
buckets: [0.1, 0.4, 0.7],
includeMethod: true,
includePath: true,
@@ -60,7 +57,7 @@ promBundle({
],
formatStatusCode: (res: express.Response) => res.statusCode + 100,
metricsApp: express()
});
}));
promClient.register.clear();
@@ -90,8 +87,5 @@ wPromBundle.normalizePath = (req: express.Request, opts: promBundle.Opts) => {
wPromBundle.normalizeStatusCode = (res: express.Response) => res.statusCode.toString();
// $ExpectType RequestHandler
promBundle.clusterMetrics();
expectType<RequestHandler>(promBundle.clusterMetrics());
// Missing test
// const stringReturn: string = promBundle.normalizePath({}, {});

View File

@@ -1,14 +0,0 @@
{
"compilerOptions": {
"module": "commonjs",
"lib": ["es6"],
"noImplicitAny": true,
"noImplicitThis": true,
"strictNullChecks": true,
"strictFunctionTypes": true,
"baseUrl": ".",
"paths": { "express-prom-bundle": ["."] },
"noEmit": true,
"forceConsistentCasingInFileNames": true
}
}

View File

@@ -1,3 +0,0 @@
{
"extends": "dtslint/dtslint.json"
}