mirror of
https://github.com/louislam/uptime-kuma.git
synced 2024-11-23 14:54:05 +00:00
Fix uptime & ping badge duration (#4850)
This commit is contained in:
commit
1a5a1a6e5d
2 changed files with 36 additions and 18 deletions
|
@ -232,8 +232,8 @@ router.get("/api/badge/:id/uptime/:duration?", cache("5 minutes"), async (reques
|
||||||
let requestedDuration = request.params.duration !== undefined ? request.params.duration : "24h";
|
let requestedDuration = request.params.duration !== undefined ? request.params.duration : "24h";
|
||||||
const overrideValue = value && parseFloat(value);
|
const overrideValue = value && parseFloat(value);
|
||||||
|
|
||||||
if (requestedDuration === "24") {
|
if (/^[0-9]+$/.test(requestedDuration)) {
|
||||||
requestedDuration = "24h";
|
requestedDuration = `${requestedDuration}h`;
|
||||||
}
|
}
|
||||||
|
|
||||||
let publicMonitor = await R.getRow(`
|
let publicMonitor = await R.getRow(`
|
||||||
|
@ -265,7 +265,7 @@ router.get("/api/badge/:id/uptime/:duration?", cache("5 minutes"), async (reques
|
||||||
// build a label string. If a custom label is given, override the default one (requestedDuration)
|
// build a label string. If a custom label is given, override the default one (requestedDuration)
|
||||||
badgeValues.label = filterAndJoin([
|
badgeValues.label = filterAndJoin([
|
||||||
labelPrefix,
|
labelPrefix,
|
||||||
label ?? `Uptime (${requestedDuration}${labelSuffix})`,
|
label ?? `Uptime (${requestedDuration.slice(0, -1)}${labelSuffix})`,
|
||||||
]);
|
]);
|
||||||
badgeValues.message = filterAndJoin([ prefix, cleanUptime, suffix ]);
|
badgeValues.message = filterAndJoin([ prefix, cleanUptime, suffix ]);
|
||||||
}
|
}
|
||||||
|
@ -302,8 +302,8 @@ router.get("/api/badge/:id/ping/:duration?", cache("5 minutes"), async (request,
|
||||||
let requestedDuration = request.params.duration !== undefined ? request.params.duration : "24h";
|
let requestedDuration = request.params.duration !== undefined ? request.params.duration : "24h";
|
||||||
const overrideValue = value && parseFloat(value);
|
const overrideValue = value && parseFloat(value);
|
||||||
|
|
||||||
if (requestedDuration === "24") {
|
if (/^[0-9]+$/.test(requestedDuration)) {
|
||||||
requestedDuration = "24h";
|
requestedDuration = `${requestedDuration}h`;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check if monitor is public
|
// Check if monitor is public
|
||||||
|
@ -325,7 +325,7 @@ router.get("/api/badge/:id/ping/:duration?", cache("5 minutes"), async (request,
|
||||||
// use a given, custom labelColor or use the default badge label color (defined by badge-maker)
|
// use a given, custom labelColor or use the default badge label color (defined by badge-maker)
|
||||||
badgeValues.labelColor = labelColor ?? "";
|
badgeValues.labelColor = labelColor ?? "";
|
||||||
// build a lable string. If a custom label is given, override the default one (requestedDuration)
|
// build a lable string. If a custom label is given, override the default one (requestedDuration)
|
||||||
badgeValues.label = filterAndJoin([ labelPrefix, label ?? `Avg. Ping (${requestedDuration}${labelSuffix})` ]);
|
badgeValues.label = filterAndJoin([ labelPrefix, label ?? `Avg. Ping (${requestedDuration.slice(0, -1)}${labelSuffix})` ]);
|
||||||
badgeValues.message = filterAndJoin([ prefix, avgPing, suffix ]);
|
badgeValues.message = filterAndJoin([ prefix, avgPing, suffix ]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -543,7 +543,9 @@ class UptimeCalculator {
|
||||||
if (type === "minute" && num > 24 * 60) {
|
if (type === "minute" && num > 24 * 60) {
|
||||||
throw new Error("The maximum number of minutes is 1440");
|
throw new Error("The maximum number of minutes is 1440");
|
||||||
}
|
}
|
||||||
|
if (type === "day" && num > 365) {
|
||||||
|
throw new Error("The maximum number of days is 365");
|
||||||
|
}
|
||||||
// Get the current time period key based on the type
|
// Get the current time period key based on the type
|
||||||
let key = this.getKey(this.getCurrentDate(), type);
|
let key = this.getKey(this.getCurrentDate(), type);
|
||||||
|
|
||||||
|
@ -741,20 +743,36 @@ class UptimeCalculator {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the uptime data by duration
|
* Get the uptime data for given duration.
|
||||||
* @param {'24h'|'30d'|'1y'} duration Only accept 24h, 30d, 1y
|
* @param {string} duration A string with a number and a unit (m,h,d,w,M,y), such as 24h, 30d, 1y.
|
||||||
* @returns {UptimeDataResult} UptimeDataResult
|
* @returns {UptimeDataResult} UptimeDataResult
|
||||||
* @throws {Error} Invalid duration
|
* @throws {Error} Invalid duration / Unsupported unit
|
||||||
*/
|
*/
|
||||||
getDataByDuration(duration) {
|
getDataByDuration(duration) {
|
||||||
if (duration === "24h") {
|
const durationNumStr = duration.slice(0, -1);
|
||||||
return this.get24Hour();
|
|
||||||
} else if (duration === "30d") {
|
if (!/^[0-9]+$/.test(durationNumStr)) {
|
||||||
return this.get30Day();
|
throw new Error(`Invalid duration: ${duration}`);
|
||||||
} else if (duration === "1y") {
|
}
|
||||||
return this.get1Year();
|
const num = Number(durationNumStr);
|
||||||
} else {
|
const unit = duration.slice(-1);
|
||||||
throw new Error("Invalid duration");
|
|
||||||
|
switch (unit) {
|
||||||
|
case "m":
|
||||||
|
return this.getData(num, "minute");
|
||||||
|
case "h":
|
||||||
|
return this.getData(num, "hour");
|
||||||
|
case "d":
|
||||||
|
return this.getData(num, "day");
|
||||||
|
case "w":
|
||||||
|
return this.getData(7 * num, "day");
|
||||||
|
case "M":
|
||||||
|
return this.getData(30 * num, "day");
|
||||||
|
case "y":
|
||||||
|
return this.getData(365 * num, "day");
|
||||||
|
default:
|
||||||
|
throw new Error(`Unsupported unit (${unit}) for badge duration ${duration}`
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue