40 lines
1.2 KiB
TypeScript
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);
|
||
|
}
|
||
|
);
|