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