Skip to content

Commit 5797454

Browse files
authored
Merge pull request #1181 from dm3-org/updateMetricsFormatAgain
Update metrics format again
2 parents 0b4d7d5 + 9bb0fb7 commit 5797454

File tree

4 files changed

+35
-12
lines changed

4 files changed

+35
-12
lines changed

packages/delivery-service/src/metrics.ts

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
import { DeliveryServiceProperties } from '@dm3-org/dm3-lib-delivery';
22
import express from 'express';
33
import { IDatabase } from './persistence/getDatabase';
4+
import { IntervalMetric } from './persistence/metrics/metricTypes';
5+
46
/**
57
* The metrics endpoint returns the metrics of the delivery service.
68
* These can include the number of messages received, the cumulative size of messages received, etc.,
@@ -13,9 +15,30 @@ export default (
1315
) => {
1416
const router = express.Router();
1517
router.get('', async (req, res) => {
16-
const metrics = await db.getMetrics(deliveryServiceProperties);
18+
const metrics: IntervalMetric[] = await db.getMetrics(
19+
deliveryServiceProperties,
20+
);
21+
22+
if (metrics.length === 0) {
23+
return res.status(204).send('No metrics data available');
24+
}
25+
26+
// Convert metrics to CSV format
27+
const headers = Object.keys(metrics[0]);
28+
const csvRows = metrics.map((metric) =>
29+
headers
30+
.map((header) => metric[header as keyof IntervalMetric])
31+
.join(','),
32+
);
33+
34+
const csvData = [headers.join(','), ...csvRows].join('\n');
1735

18-
return res.status(200).send(JSON.stringify(metrics));
36+
res.setHeader('Content-Type', 'text/csv');
37+
// res.setHeader(
38+
// 'Content-Disposition',
39+
// 'attachment; filename=metrics.csv',
40+
// );
41+
return res.status(200).send(csvData);
1942
});
2043

2144
return router;

packages/delivery-service/src/persistence/metrics/getMetrics.test.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,8 @@ describe('getMetrics', () => {
5151
);
5252
expect(result).toHaveLength(24);
5353
expect(result[0]).toEqual({
54-
timestamp_start: 1680307200,
55-
duration_seconds: 3600,
54+
timestampStart: 1680307200,
55+
durationSeconds: 3600,
5656
messageCount: 10,
5757
messageSizeBytes: 1000,
5858
notificationCount: 5,
@@ -86,8 +86,8 @@ describe('getMetrics', () => {
8686

8787
expect(result).toHaveLength(1);
8888
expect(result[0]).toEqual({
89-
timestamp_start: 1680307200,
90-
duration_seconds: 3600,
89+
timestampStart: 1680307200,
90+
durationSeconds: 3600,
9191
messageCount: 10,
9292
messageSizeBytes: 0,
9393
notificationCount: 5,
@@ -107,11 +107,11 @@ describe('getMetrics', () => {
107107
const result = await getMetricsFunction(mockDeliveryServiceProperties);
108108

109109
expect(result).toHaveLength(1);
110-
expect(result[0].timestamp_start).toBe(currentTimestamp - 3600); // 2023-04-01T11:00:00.000Z
110+
expect(result[0].timestampStart).toBe(currentTimestamp - 3600); // 2023-04-01T11:00:00.000Z
111111
expect(
112112
result.every(
113113
(metric) =>
114-
metric.timestamp_start !==
114+
metric.timestampStart !==
115115
Math.floor(mockDate.getTime() / 1000),
116116
),
117117
).toBe(true);

packages/delivery-service/src/persistence/metrics/getMetrics.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,8 @@ export function getMetrics(
4343
);
4444

4545
metrics.push({
46-
timestamp_start: timestamp,
47-
duration_seconds:
46+
timestampStart: timestamp,
47+
durationSeconds:
4848
deliveryServiceProperties.metricsCollectionIntervalInSeconds,
4949
messageCount: parseInt(messageCount || '0', 10),
5050
messageSizeBytes: parseInt(messageSizeBytes || '0', 10),

packages/delivery-service/src/persistence/metrics/metricTypes.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
export type IntervalMetric = {
2-
timestamp_start: number;
3-
duration_seconds: number;
2+
timestampStart: number;
3+
durationSeconds: number;
44
messageCount: number;
55
messageSizeBytes: number;
66
notificationCount: number;

0 commit comments

Comments
 (0)