Skip to content

Commit

Permalink
Merge pull request #1181 from dm3-org/updateMetricsFormatAgain
Browse files Browse the repository at this point in the history
Update metrics format again
  • Loading branch information
malteish authored Sep 11, 2024
2 parents 0b4d7d5 + 9bb0fb7 commit 5797454
Show file tree
Hide file tree
Showing 4 changed files with 35 additions and 12 deletions.
27 changes: 25 additions & 2 deletions packages/delivery-service/src/metrics.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
import { DeliveryServiceProperties } from '@dm3-org/dm3-lib-delivery';
import express from 'express';
import { IDatabase } from './persistence/getDatabase';
import { IntervalMetric } from './persistence/metrics/metricTypes';

/**
* The metrics endpoint returns the metrics of the delivery service.
* These can include the number of messages received, the cumulative size of messages received, etc.,
Expand All @@ -13,9 +15,30 @@ export default (
) => {
const router = express.Router();
router.get('', async (req, res) => {
const metrics = await db.getMetrics(deliveryServiceProperties);
const metrics: IntervalMetric[] = await db.getMetrics(
deliveryServiceProperties,
);

if (metrics.length === 0) {
return res.status(204).send('No metrics data available');
}

// Convert metrics to CSV format
const headers = Object.keys(metrics[0]);
const csvRows = metrics.map((metric) =>
headers
.map((header) => metric[header as keyof IntervalMetric])
.join(','),
);

const csvData = [headers.join(','), ...csvRows].join('\n');

return res.status(200).send(JSON.stringify(metrics));
res.setHeader('Content-Type', 'text/csv');
// res.setHeader(
// 'Content-Disposition',
// 'attachment; filename=metrics.csv',
// );
return res.status(200).send(csvData);
});

return router;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,8 +51,8 @@ describe('getMetrics', () => {
);
expect(result).toHaveLength(24);
expect(result[0]).toEqual({
timestamp_start: 1680307200,
duration_seconds: 3600,
timestampStart: 1680307200,
durationSeconds: 3600,
messageCount: 10,
messageSizeBytes: 1000,
notificationCount: 5,
Expand Down Expand Up @@ -86,8 +86,8 @@ describe('getMetrics', () => {

expect(result).toHaveLength(1);
expect(result[0]).toEqual({
timestamp_start: 1680307200,
duration_seconds: 3600,
timestampStart: 1680307200,
durationSeconds: 3600,
messageCount: 10,
messageSizeBytes: 0,
notificationCount: 5,
Expand All @@ -107,11 +107,11 @@ describe('getMetrics', () => {
const result = await getMetricsFunction(mockDeliveryServiceProperties);

expect(result).toHaveLength(1);
expect(result[0].timestamp_start).toBe(currentTimestamp - 3600); // 2023-04-01T11:00:00.000Z
expect(result[0].timestampStart).toBe(currentTimestamp - 3600); // 2023-04-01T11:00:00.000Z
expect(
result.every(
(metric) =>
metric.timestamp_start !==
metric.timestampStart !==
Math.floor(mockDate.getTime() / 1000),
),
).toBe(true);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,8 +43,8 @@ export function getMetrics(
);

metrics.push({
timestamp_start: timestamp,
duration_seconds:
timestampStart: timestamp,
durationSeconds:
deliveryServiceProperties.metricsCollectionIntervalInSeconds,
messageCount: parseInt(messageCount || '0', 10),
messageSizeBytes: parseInt(messageSizeBytes || '0', 10),
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
export type IntervalMetric = {
timestamp_start: number;
duration_seconds: number;
timestampStart: number;
durationSeconds: number;
messageCount: number;
messageSizeBytes: number;
notificationCount: number;
Expand Down

0 comments on commit 5797454

Please sign in to comment.