Skip to content

Commit

Permalink
output csv instead of json on metrics endpoint
Browse files Browse the repository at this point in the history
  • Loading branch information
malteish committed Sep 11, 2024
1 parent 5fa5ada commit e608cca
Showing 1 changed file with 25 additions and 2 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

0 comments on commit e608cca

Please sign in to comment.