diff --git a/src/kener.css b/src/kener.css index b4460b6..8244d87 100644 --- a/src/kener.css +++ b/src/kener.css @@ -10,6 +10,7 @@ section { --up-color: #4ead94; --down-color: #ca3038; --degraded-color: #e6ca61; + --maintenance-color: #6699cc; } /*Colors for something UP*/ @@ -82,6 +83,33 @@ section { background: linear-gradient(0deg, var(--degraded-color) 90%, var(--up-color) 1%); } +/*Colors for something in maintenance*/ +.bg-api-maintenance { + background-color: var(--maintenance-color); +} +.text-api-maintenance { + color: var(--maintenance-color); +} + +.bg-api-maintenance-10 { + background: linear-gradient(0deg, var(--maintenance-color) 10%, var(--up-color) 1%); +} +.bg-api-maintenance-20 { + background: linear-gradient(0deg, var(--maintenance-color) 20%, var(--up-color) 1%); +} +.bg-api-maintenance-40 { + background: linear-gradient(0deg, var(--maintenance-color) 40%, var(--up-color) 1%); +} +.bg-api-maintenance-60 { + background: linear-gradient(0deg, var(--maintenance-color) 60%, var(--up-color) 1%); +} +.bg-api-maintenance-80 { + background: linear-gradient(0deg, var(--maintenance-color) 80%, var(--up-color) 1%); +} +.bg-api-maintenance-90 { + background: linear-gradient(0deg, var(--maintenance-color) 90%, var(--up-color) 1%); +} + /*Needed to show markdown properly*/ .prose :where(code):not(:where([class~="not-prose"], [class~="not-prose"] *))::before { content: ""; diff --git a/src/lib/server/controllers/controller.js b/src/lib/server/controllers/controller.js index a9b03d4..363e390 100644 --- a/src/lib/server/controllers/controller.js +++ b/src/lib/server/controllers/controller.js @@ -722,6 +722,7 @@ export const GetDataGroupByDayAlternative = async (monitor_tag, start, end, time UP: 0, DOWN: 0, DEGRADED: 0, + MAINTENANCE: 0, NO_DATA: 0, }; } @@ -740,6 +741,7 @@ export const GetDataGroupByDayAlternative = async (monitor_tag, start, end, time UP: group.UP, DOWN: group.DOWN, DEGRADED: group.DEGRADED, + MAINTENANCE: group.MAINTENANCE, NO_DATA: group.NO_DATA, })); }; @@ -886,9 +888,9 @@ export const RemoveIncidentMonitor = async (incident_id, monitor_tag) => { }; export const AddIncidentMonitor = async (incident_id, monitor_tag, monitor_impact) => { - //monitor_impact must be DOWN or DEGRADED or NONE - if (!["DOWN", "DEGRADED"].includes(monitor_impact)) { - throw new Error("Monitor impact must be either DOWN, DEGRADED "); + //monitor_impact must be DOWN or DEGRADED or MAINTENANCE or NONE + if (!["DOWN", "DEGRADED", "MAINTENANCE"].includes(monitor_impact)) { + throw new Error("Monitor impact must be either DOWN, DEGRADED, MAINTENANCE"); } //check if monitor exists diff --git a/src/lib/server/cron-minute.js b/src/lib/server/cron-minute.js index 3531a91..895724a 100644 --- a/src/lib/server/cron-minute.js +++ b/src/lib/server/cron-minute.js @@ -42,6 +42,10 @@ async function manualIncident(monitor) { for (let i = 0; i < impactArr.length; i++) { const element = impactArr[i]; + if (element.monitor_impact === "MAINTENANCE") { + impact = "MAINTENANCE"; + break; + } if (element.monitor_impact === "DOWN") { impact = "DOWN"; break; diff --git a/src/lib/server/page.js b/src/lib/server/page.js index 9ecf2fe..d458669 100644 --- a/src/lib/server/page.js +++ b/src/lib/server/page.js @@ -125,6 +125,11 @@ const FetchData = async function (site, monitor, localTz, selectedLang, lang, is summaryDuration = getSummaryDuration(dayData.DOWN, selectedLang); summaryStatus = "DOWN"; } + if (dayData.MAINTENANCE > 0) { + cssClass = returnStatusClass(dayData.MAINTENANCE, dayData.total, StatusObj.MAINTENANCE, site.barStyle); + summaryDuration = getSummaryDuration(dayData.MAINTENANCE, selectedLang); + summaryStatus = "MAINTENANCE"; + } if (dayData.NO_DATA === dayData.total) { cssClass = StatusObj.NO_DATA; summaryStatus = NO_DATA; @@ -178,6 +183,11 @@ const FetchData = async function (site, monitor, localTz, selectedLang, lang, is summaryStatus = "DOWN"; summaryColorClass = "api-down"; } + if (!!lastRow && lastRow.status == "MAINTENANCE") { + summaryDuration = getSummaryDuration(getCountOfSimilarStatuesEnd(todayDataDb, "MAINTENANCE"), selectedLang); + summaryStatus = "MAINTENANCE"; + summaryColorClass = "api-maintenance"; + } if (lastRow.status === "NO_DATA") { summaryStatus = NO_DATA; summaryColorClass = "api-nodata"; diff --git a/src/lib/server/tool.js b/src/lib/server/tool.js index e410c49..0931e24 100644 --- a/src/lib/server/tool.js +++ b/src/lib/server/tool.js @@ -149,6 +149,7 @@ const StatusObj = { UP: "api-up", DEGRADED: "api-degraded", DOWN: "api-down", + MAINTENANCE: "api-maintenance", NO_DATA: "api-nodata", }; // @ts-ignore diff --git a/src/routes/(kener)/+layout.svelte b/src/routes/(kener)/+layout.svelte index f9b5883..73e09f3 100644 --- a/src/routes/(kener)/+layout.svelte +++ b/src/routes/(kener)/+layout.svelte @@ -109,7 +109,8 @@ --bg-custom: {data.bgc}; --up-color: {data.site.colors.UP}; --down-color: {data.site.colors.DOWN}; - --degraded-color: {data.site.colors.DEGRADED} + --degraded-color: {data.site.colors.DEGRADED}; + --maintenance-color: {data.site.colors.MAINTENANCE}; " class="kener-theme-{kenerTheme}" > diff --git a/src/routes/(kener)/+page.svelte b/src/routes/(kener)/+page.svelte index 9034157..d4a80a2 100644 --- a/src/routes/(kener)/+page.svelte +++ b/src/routes/(kener)/+page.svelte @@ -235,9 +235,14 @@ - + {l(data.lang, "DOWN")} + + + + {l(data.lang, "MAINTENANCE")} + diff --git a/src/routes/(manage)/manage/(app)/app/events/+page.svelte b/src/routes/(manage)/manage/(app)/app/events/+page.svelte index 0fcaa49..73f03cb 100644 --- a/src/routes/(manage)/manage/(app)/app/events/+page.svelte +++ b/src/routes/(manage)/manage/(app)/app/events/+page.svelte @@ -1214,6 +1214,11 @@ Impact + {#if currentIncident.incident_type == "MAINTENANCE"} + + MAINTENANCE + + {/if} DOWN