Skip to content

Commit 290febd

Browse files
Copilotd-gubert
andcommitted
fix metrics.spec.ts: add required histogram, responseSizeHistogram, activeRequestsGauge mocks
Co-authored-by: d-gubert <1810309+d-gubert@users.noreply.github.com>
1 parent ebf2bba commit 290febd

4 files changed

Lines changed: 97 additions & 24 deletions

File tree

apps/meteor/app/api/server/api.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,17 @@ settings.watch<number>('API_Enable_Rate_Limiter_Limit_Calls_Default', (value) =>
102102
export const startRestAPI = () => {
103103
(WebApp.rawConnectHandlers as unknown as ReturnType<typeof express>).use(
104104
API.api
105-
.use(metricsMiddleware({ basePathRegex: new RegExp(/^\/api\/v1\//), api: API.v1, settings, summary: metrics.rocketchatRestApi, histogram: metrics.rocketchatRestApiSeconds, responseSizeHistogram: metrics.rocketchatRestApiResponseSizeBytes, activeRequestsGauge: metrics.rocketchatRestApiActiveRequests }))
105+
.use(
106+
metricsMiddleware({
107+
basePathRegex: new RegExp(/^\/api\/v1\//),
108+
api: API.v1,
109+
settings,
110+
summary: metrics.rocketchatRestApi,
111+
histogram: metrics.rocketchatRestApiSeconds,
112+
responseSizeHistogram: metrics.rocketchatRestApiResponseSizeBytes,
113+
activeRequestsGauge: metrics.rocketchatRestApiActiveRequests,
114+
}),
115+
)
106116
.use(tracerSpanMiddleware)
107117
.use(remoteAddressMiddleware)
108118
.use(cors(settings))

apps/meteor/app/api/server/middlewares/metrics.spec.ts

Lines changed: 64 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -25,27 +25,42 @@ describe('Metrics middleware', () => {
2525
const mockEndTimer = jest.fn();
2626
summary.startTimer.mockReturnValue(mockEndTimer);
2727

28-
api.use(metricsMiddleware({ api: { version: 1 } as any, settings, summary: summary as any })).get(
29-
'/test',
30-
{
31-
response: {
32-
200: ajv.compile({
33-
type: 'object',
34-
properties: {
35-
message: { type: 'string' },
28+
const histogram = { startTimer: jest.fn().mockReturnValue(jest.fn()) };
29+
const responseSizeHistogram = { observe: jest.fn() };
30+
const activeRequestsGauge = { inc: jest.fn(), dec: jest.fn() };
31+
32+
api
33+
.use(
34+
metricsMiddleware({
35+
api: { version: 1 } as any,
36+
settings,
37+
summary: summary as any,
38+
histogram: histogram as any,
39+
responseSizeHistogram: responseSizeHistogram as any,
40+
activeRequestsGauge: activeRequestsGauge as any,
41+
}),
42+
)
43+
.get(
44+
'/test',
45+
{
46+
response: {
47+
200: ajv.compile({
48+
type: 'object',
49+
properties: {
50+
message: { type: 'string' },
51+
},
52+
}),
53+
},
54+
},
55+
async () => {
56+
return {
57+
statusCode: 200,
58+
body: {
59+
message: 'Metrics test successful',
3660
},
37-
}),
61+
};
3862
},
39-
},
40-
async () => {
41-
return {
42-
statusCode: 200,
43-
body: {
44-
message: 'Metrics test successful',
45-
},
46-
};
47-
},
48-
);
63+
);
4964
app.use(api.router);
5065
const response = await request(app).get('/api/test').set('user-agent', 'test');
5166
expect(response.statusCode).toBe(200);
@@ -73,8 +88,22 @@ describe('Metrics middleware', () => {
7388
const mockEndTimer = jest.fn();
7489
summary.startTimer.mockReturnValue(mockEndTimer);
7590

91+
const histogram = { startTimer: jest.fn().mockReturnValue(jest.fn()) };
92+
const responseSizeHistogram = { observe: jest.fn() };
93+
const activeRequestsGauge = { inc: jest.fn(), dec: jest.fn() };
94+
7695
api
77-
.use(metricsMiddleware({ basePathRegex: new RegExp(/^\/api\//), api: { version: 1 } as any, settings, summary: summary as any }))
96+
.use(
97+
metricsMiddleware({
98+
basePathRegex: new RegExp(/^\/api\//),
99+
api: { version: 1 } as any,
100+
settings,
101+
summary: summary as any,
102+
histogram: histogram as any,
103+
responseSizeHistogram: responseSizeHistogram as any,
104+
activeRequestsGauge: activeRequestsGauge as any,
105+
}),
106+
)
78107
.get(
79108
'/test',
80109
{
@@ -120,8 +149,22 @@ describe('Metrics middleware', () => {
120149
const mockEndTimer = jest.fn();
121150
summary.startTimer.mockReturnValue(mockEndTimer);
122151

152+
const histogram = { startTimer: jest.fn().mockReturnValue(jest.fn()) };
153+
const responseSizeHistogram = { observe: jest.fn() };
154+
const activeRequestsGauge = { inc: jest.fn(), dec: jest.fn() };
155+
123156
api
124-
.use(metricsMiddleware({ basePathRegex: new RegExp(/^\/api\//), api: { version: 1 } as any, settings, summary: summary as any }))
157+
.use(
158+
metricsMiddleware({
159+
basePathRegex: new RegExp(/^\/api\//),
160+
api: { version: 1 } as any,
161+
settings,
162+
summary: summary as any,
163+
histogram: histogram as any,
164+
responseSizeHistogram: responseSizeHistogram as any,
165+
activeRequestsGauge: activeRequestsGauge as any,
166+
}),
167+
)
125168
.get(
126169
'/method.call/:id',
127170
{

apps/meteor/app/integrations/server/api/api.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -427,7 +427,17 @@ const Api = new WebHookAPI({
427427
});
428428

429429
Api.router
430-
.use(metricsMiddleware({ basePathRegex: new RegExp(/^\/hooks\//), api: Api, settings, summary: metrics.rocketchatRestApi, histogram: metrics.rocketchatRestApiSeconds, responseSizeHistogram: metrics.rocketchatRestApiResponseSizeBytes, activeRequestsGauge: metrics.rocketchatRestApiActiveRequests }))
430+
.use(
431+
metricsMiddleware({
432+
basePathRegex: new RegExp(/^\/hooks\//),
433+
api: Api,
434+
settings,
435+
summary: metrics.rocketchatRestApi,
436+
histogram: metrics.rocketchatRestApiSeconds,
437+
responseSizeHistogram: metrics.rocketchatRestApiResponseSizeBytes,
438+
activeRequestsGauge: metrics.rocketchatRestApiActiveRequests,
439+
}),
440+
)
431441
.use(tracerSpanMiddleware)
432442
.use(loggerMiddleware(integrationLogger));
433443

apps/meteor/ee/server/apps/communication/rest.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,17 @@ export class AppsRestApi {
7272
const logger = new Logger('APPS');
7373
this.api.router
7474
.use(loggerMiddleware(logger))
75-
.use(metricsMiddleware({ basePathRegex: new RegExp(/^\/api\/apps\//), api: this.api, settings, summary: metrics.rocketchatRestApi, histogram: metrics.rocketchatRestApiSeconds, responseSizeHistogram: metrics.rocketchatRestApiResponseSizeBytes, activeRequestsGauge: metrics.rocketchatRestApiActiveRequests }))
75+
.use(
76+
metricsMiddleware({
77+
basePathRegex: new RegExp(/^\/api\/apps\//),
78+
api: this.api,
79+
settings,
80+
summary: metrics.rocketchatRestApi,
81+
histogram: metrics.rocketchatRestApiSeconds,
82+
responseSizeHistogram: metrics.rocketchatRestApiResponseSizeBytes,
83+
activeRequestsGauge: metrics.rocketchatRestApiActiveRequests,
84+
}),
85+
)
7686
.use(tracerSpanMiddleware);
7787

7888
this.addManagementRoutes();

0 commit comments

Comments
 (0)