mirror of
https://github.com/rajnandan1/kener.git
synced 2026-01-06 01:20:15 -06:00
feat(kener): supports custom threshold for calculations of day uptime
CHANGE: monitors now get three new optional parameter dayDegradedMinimumCount, dayDownMinimumCount and includeDegradedInDowntime Requestd on issue #54
This commit is contained in:
@@ -13,7 +13,13 @@ function getDayMessage(type, numOfMinute){
|
||||
}
|
||||
const NO_DATA = "No Data";
|
||||
|
||||
function getDayData(day0, startTime, endTime) {
|
||||
function getDayData(
|
||||
day0,
|
||||
startTime,
|
||||
endTime,
|
||||
dayDownMinimumCount,
|
||||
dayDegradedMinimumCount
|
||||
) {
|
||||
let dayData = {
|
||||
UP: 0,
|
||||
DEGRADED: 0,
|
||||
@@ -41,15 +47,15 @@ function getDayData(day0, startTime, endTime) {
|
||||
let cssClass = StatusObj.UP;
|
||||
let message = "Status OK";
|
||||
|
||||
if (dayData.DEGRADED > 0) {
|
||||
cssClass = StatusObj.DEGRADED;
|
||||
if (dayData.DEGRADED >= dayDegradedMinimumCount) {
|
||||
cssClass = StatusObj.DEGRADED;
|
||||
message = getDayMessage("DEGRADED", dayData.DEGRADED);
|
||||
}
|
||||
if (dayData.DOWN > 0) {
|
||||
if (dayData.DOWN >= dayDownMinimumCount) {
|
||||
cssClass = StatusObj.DOWN;
|
||||
message = getDayMessage("DOWN", dayData.DOWN);
|
||||
}
|
||||
if (dayData.DEGRADED + dayData.DOWN + dayData.UP > 0) {
|
||||
if (dayData.DEGRADED + dayData.DOWN + dayData.UP >= Math.min(dayDownMinimumCount, dayDegradedMinimumCount)) {
|
||||
dayData.message = message;
|
||||
dayData.cssClass = cssClass;
|
||||
}
|
||||
@@ -68,6 +74,7 @@ const Ninety = async (monitor) => {
|
||||
let completeDown = 0;
|
||||
let completeDegraded = 0;
|
||||
|
||||
|
||||
const secondsInDay = 24 * 60 * 60;
|
||||
const now = GetMinuteStartNowTimestampUTC();
|
||||
const midnight = BeginningOfDay({ timeZone: "GMT" });
|
||||
@@ -107,7 +114,13 @@ const Ninety = async (monitor) => {
|
||||
}
|
||||
|
||||
for (let i = midnight90DaysAgo; i < midnightTomorrow; i += secondsInDay) {
|
||||
_90Day[i] = getDayData(day0, i, i + secondsInDay - 1);
|
||||
_90Day[i] = getDayData(
|
||||
day0,
|
||||
i,
|
||||
i + secondsInDay - 1,
|
||||
monitor.dayDownMinimumCount,
|
||||
monitor.dayDegradedMinimumCount
|
||||
);
|
||||
}
|
||||
|
||||
for (const key in _90Day) {
|
||||
@@ -117,12 +130,22 @@ const Ninety = async (monitor) => {
|
||||
delete _90Day[key].DOWN;
|
||||
if (element.message == NO_DATA) continue;
|
||||
}
|
||||
uptime0Day = ParseUptime(dailyUps + dailyDegraded, dailyUps + dailyDown + dailyDegraded);
|
||||
|
||||
let uptime0DayNumerator = dailyUps + dailyDegraded;
|
||||
let uptime0DayDenominator = dailyUps + dailyDown + dailyDegraded;
|
||||
let uptime90DayNumerator = completeUps + completeDegraded;
|
||||
let uptime90DayDenominator = completeUps + completeDown + completeDegraded;
|
||||
|
||||
if(monitor.includeDegradedInDowntime === true) {
|
||||
uptime0DayNumerator = dailyUps;
|
||||
uptime90DayNumerator = completeUps;
|
||||
}
|
||||
uptime0Day = ParseUptime(uptime0DayNumerator, uptime0DayDenominator);
|
||||
|
||||
const dataToWrite = {
|
||||
_90Day: _90Day,
|
||||
uptime0Day,
|
||||
uptime90Day: ParseUptime(completeUps + completeDegraded, completeUps + completeDegraded + completeDown),
|
||||
uptime90Day: ParseUptime(uptime90DayNumerator, uptime90DayDenominator),
|
||||
dailyUps,
|
||||
dailyDown,
|
||||
dailyDegraded,
|
||||
|
||||
@@ -72,6 +72,24 @@ const Startup = async () => {
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
if(monitor.dayDegradedMinimumCount && (isNaN(monitor.dayDegradedMinimumCount) || monitor.dayDegradedMinimumCount < 1)){
|
||||
console.log("dayDegradedMinimumCount is not a number or it is less than 1");
|
||||
process.exit(1);
|
||||
} else if(monitor.dayDegradedMinimumCount === undefined) {
|
||||
monitors[i].dayDegradedMinimumCount = 1;
|
||||
}
|
||||
|
||||
if(monitor.dayDownMinimumCount && (isNaN(monitor.dayDownMinimumCount) || monitor.dayDownMinimumCount < 1)){
|
||||
console.log("dayDownMinimumCount is not a number or it is less than 1");
|
||||
process.exit(1);
|
||||
} else if(monitor.dayDownMinimumCount === undefined) {
|
||||
monitors[i].dayDownMinimumCount = 1;
|
||||
}
|
||||
|
||||
if (monitor.includeDegradedInDowntime === undefined || monitor.includeDegradedInDowntime !== true) {
|
||||
monitors[i].includeDegradedInDowntime = false;
|
||||
}
|
||||
|
||||
if(hasAPI) {
|
||||
let url = monitor.api.url;
|
||||
let method = monitor.api.method;
|
||||
@@ -184,6 +202,8 @@ const Startup = async () => {
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
if (site.github === undefined || site.github.owner === undefined || site.github.repo === undefined) {
|
||||
console.log("github owner and repo are required");
|
||||
|
||||
Reference in New Issue
Block a user