Skip to content

Commit a299b1d

Browse files
weyerttapico-weyertvmarchaud
authored
feat(prometheus): add getMetricsRequestHandler-method to Prometheus (#1879)
Co-authored-by: Weyert de Boer <[email protected]> Co-authored-by: Valentin Marchaud <[email protected]>
1 parent 9cfa92c commit a299b1d

File tree

3 files changed

+33
-0
lines changed

3 files changed

+33
-0
lines changed

packages/opentelemetry-exporter-prometheus/package.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,11 +41,13 @@
4141
"devDependencies": {
4242
"@types/mocha": "8.2.0",
4343
"@types/node": "14.14.20",
44+
"@types/sinon": "9.0.10",
4445
"codecov": "3.8.1",
4546
"gts": "3.1.0",
4647
"mocha": "7.2.0",
4748
"nyc": "15.1.0",
4849
"rimraf": "3.0.2",
50+
"sinon": "9.2.3",
4951
"ts-mocha": "8.0.0",
5052
"ts-node": "9.1.1",
5153
"typescript": "4.1.3"

packages/opentelemetry-exporter-prometheus/src/PrometheusExporter.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,18 @@ export class PrometheusExporter implements MetricExporter {
157157
});
158158
}
159159

160+
/**
161+
* Request handler that responds with the current state of metrics
162+
* @param request Incoming HTTP request of server instance
163+
* @param response HTTP response objet used to response to request
164+
*/
165+
public getMetricsRequestHandler(
166+
_request: IncomingMessage,
167+
response: ServerResponse
168+
) {
169+
this._exportMetrics(response);
170+
}
171+
160172
/**
161173
* Request handler used by http library to respond to incoming requests
162174
* for the current state of metrics by the Prometheus backend.

packages/opentelemetry-exporter-prometheus/test/PrometheusExporter.test.ts

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,11 @@ import {
2424
HistogramAggregator,
2525
} from '@opentelemetry/metrics';
2626
import * as assert from 'assert';
27+
import * as sinon from 'sinon';
2728
import * as http from 'http';
2829
import { PrometheusExporter } from '../src';
2930
import { mockAggregator, mockedHrTimeMs } from './util';
31+
import { SinonStubbedInstance } from 'sinon';
3032

3133
describe('PrometheusExporter', () => {
3234
mockAggregator(SumAggregator);
@@ -171,6 +173,23 @@ describe('PrometheusExporter', () => {
171173
return done();
172174
});
173175
});
176+
177+
it('should able to call getMetricsRequestHandler function to generate response with metrics', () => {
178+
const exporter = new PrometheusExporter({ preventServerStart: true });
179+
const mockRequest: SinonStubbedInstance<http.IncomingMessage> = sinon.createStubInstance(
180+
http.IncomingMessage
181+
);
182+
const mockResponse: SinonStubbedInstance<http.ServerResponse> = sinon.createStubInstance(
183+
http.ServerResponse
184+
);
185+
exporter.getMetricsRequestHandler(
186+
(mockRequest as unknown) as http.IncomingMessage,
187+
(mockResponse as unknown) as http.ServerResponse
188+
);
189+
sinon.assert.calledOnce(mockResponse.setHeader);
190+
sinon.assert.calledOnce(mockResponse.end);
191+
assert.strictEqual(mockResponse.statusCode, 200);
192+
});
174193
});
175194

176195
describe('export', () => {

0 commit comments

Comments
 (0)