tianji/src/server/router/monitor.ts
2024-01-06 22:08:10 +08:00

40 lines
1.2 KiB
TypeScript

import { Router } from 'express';
import { param, validate, query } from '../middleware/validate';
import { numify } from '../utils/common';
import { makeBadge } from 'badge-maker';
import { getMonitorPublicInfos, getMonitorRecentData } from '../model/monitor';
import { checkEnvTrusty } from '../utils/env';
export const monitorRouter = Router();
monitorRouter.get(
'/:workspaceId/:monitorId/badge.svg',
validate(
param('workspaceId').isString(),
param('monitorId').isString(),
query('showDetail').optional().isString()
),
async (req, res) => {
const { workspaceId, monitorId } = req.params;
const showDetail = checkEnvTrusty(String(req.query.showDetail));
const [info] = await getMonitorPublicInfos([monitorId]);
const [{ value }] = await getMonitorRecentData(workspaceId, monitorId, 1);
const svg =
value >= 0
? makeBadge({
label: info.name,
message: showDetail ? numify(value) : 'Health',
color: 'green',
})
: makeBadge({
label: info.name,
message: 'Error',
color: 'red',
});
res.header('Content-Type', 'image/svg+xml').send(svg);
}
);