Repository: louislam/uptime-kuma
File: server/routers/api-router.js (JavaScript)

Code before:
        label,
        labelPrefix,
        labelSuffix = "h",
        prefix,
        suffix,
    } = request.query;

    try {
        await checkPublished();

        const requestedMonitorId = parseInt(request.params.id, 10);
        const requestedType = parseInt(request.params.type, 10) ?? 24;

        let publicMonitor = await R.getRow(`
                SELECT monitor_group.monitor_id FROM monitor_group, \`group\`
                WHERE monitor_group.group_id = \`group\`.id
                AND monitor_group.monitor_id = ?
                AND public = 1
            `,
        [requestedMonitorId]
        );

        const badgeValues = {};

        if (!publicMonitor) {
            // return a "n/a" badge in grey, if monitor is not public / not available / non exsitant

            badgeValues.message = "N/A";
            badgeValues.color = "#999";
        } else {
            const uptime = await Monitor.calcUptime(
                requestedType,
                requestedMonitorId
            );

            badgeValues.color = percentageToColor(uptime);

            badgeValues.label = [labelPrefix, label ?? requestedType, labelSuffix]
                .filter((part) => part ?? part !== "")
                .join("");

            badgeValues.message = [prefix, `${uptime * 100} %`, suffix]
                .filter((part) => part ?? part !== "")
                .join("");
        }

        // build the svg based on given values
        const svg = makeBadge(badgeValues);

        response.type("image/svg+xml");
        response.send(svg);

Review comment (suggestion):
```suggestion
            // return a "N/A" badge in grey, if monitor is not public / not available / non exsitant
```

Code after:
                WHERE monitor_group.group_id = \`group\`.id
                AND monitor_group.monitor_id = ?
                AND public = 1
            `,
        [ requestedMonitorId ]
        );

        const badgeValues = { style };

        if (!publicMonitor) {
            // return a "N/A" badge in naColor (grey), if monitor is not public / not available / non exsitant

            badgeValues.message = "N/A";
            badgeValues.color = badgeConstants.naColor;
        } else {
            const heartbeat = await Monitor.getPreviousHeartbeat(requestedMonitorId);
            const state = overrideValue !== undefined ? overrideValue : heartbeat.status === 1;

            badgeValues.color = state ? upColor : downColor;
            badgeValues.message = label ?? state ? upLabel : downLabel;
        }

        // build the svg based on given values
        const svg = makeBadge(badgeValues);

        response.type("image/svg+xml");
        response.send(svg);
    } catch (error) {
        send403(response, error.message);
    }
});

router.get("/api/badge/:id/uptime/:duration?", cache("5 minutes"), async (request, response) => {
    allowAllOrigin(response);

    const {
        label,
        labelPrefix,
        labelSuffix = badgeConstants.defaultUptimeLabelSuffix,
        prefix,
        suffix = badgeConstants.defaultUptimeValueSuffix,
        color,
        labelColor,
        style = badgeConstants.defaultStyle,
        value, // for demo purpose only
    } = request.query;

    try {
        const requestedMonitorId = parseInt(request.params.id, 10);
        // if no duration is given, set value to 24 (h)
        const requestedDuration = request.params.duration !== undefined ? parseInt(request.params.duration, 10) : 24;