diff --git a/.eslintrc.js b/.eslintrc.js index 41ad54b8..dcd4215c 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -62,9 +62,6 @@ module.exports = { exceptAfterSingleLine: true, }], "no-unneeded-ternary": "error", - "no-else-return": ["error", { - "allowElseIf": false, - }], "array-bracket-newline": ["error", "consistent"], "eol-last": ["error", "always"], //'prefer-template': 'error', diff --git a/server/model/monitor.js b/server/model/monitor.js index e452e686..c440d8c8 100644 --- a/server/model/monitor.js +++ b/server/model/monitor.js @@ -132,7 +132,9 @@ class Monitor extends BeanModel { try { await this.updateTlsInfo(checkCertificate(res)); } catch (e) { - console.error(e.message) + if (e.message !== "No TLS certificate in response") { + console.error(e.message) + } } } diff --git a/server/notification.js b/server/notification.js index f53b681a..05dae8ad 100644 --- a/server/notification.js +++ b/server/notification.js @@ -84,40 +84,78 @@ class Notification { } else if (notification.type === "discord") { try { + const discordDisplayName = notification.discordUsername || "Uptime Kuma"; + // If heartbeatJSON is null, assume we're testing. if (heartbeatJSON == null) { - let data = { - username: "Uptime-Kuma", + let discordtestdata = { + username: discordDisplayName, content: msg, } - await axios.post(notification.discordWebhookUrl, data) + await axios.post(notification.discordWebhookUrl, discordtestdata) return okMsg; } // If heartbeatJSON is not null, we go into the normal alerting loop. if (heartbeatJSON["status"] == 0) { - var alertColor = "16711680"; + let discorddowndata = { + username: discordDisplayName, + embeds: [{ + title: "❌ One of your services went down. ❌", + color: 16711680, + timestamp: heartbeatJSON["time"], + fields: [ + { + name: "Service Name", + value: monitorJSON["name"], + }, + { + name: "Service URL", + value: monitorJSON["url"], + }, + { + name: "Time (UTC)", + value: heartbeatJSON["time"], + }, + { + name: "Error", + value: heartbeatJSON["msg"], + }, + ], + }], + } + await axios.post(notification.discordWebhookUrl, discorddowndata) + return okMsg; + } else if (heartbeatJSON["status"] == 1) { - var alertColor = "65280"; + let discordupdata = { + username: discordDisplayName, + embeds: [{ + title: "✅ Your service " + monitorJSON["name"] + " is up! ✅", + color: 65280, + timestamp: heartbeatJSON["time"], + fields: [ + { + name: "Service Name", + value: monitorJSON["name"], + }, + { + name: "Service URL", + value: "[Visit Service](" + monitorJSON["url"] + ")", + }, + { + name: "Time (UTC)", + value: heartbeatJSON["time"], + }, + { + name: "Ping", + value: heartbeatJSON["ping"] + "ms", + }, + ], + }], + } + await axios.post(notification.discordWebhookUrl, discordupdata) + return okMsg; } - let data = { - username: "Uptime-Kuma", - embeds: [{ - title: "Uptime-Kuma Alert", - color: alertColor, - fields: [ - { - name: "Time (UTC)", - value: heartbeatJSON["time"], - }, - { - name: "Message", - value: msg, - }, - ], - }], - } - await axios.post(notification.discordWebhookUrl, data) - return okMsg; } catch (error) { throwGeneralAxiosError(error) } diff --git a/src/assets/app.scss b/src/assets/app.scss index cb72fb9d..0c32f2b8 100644 --- a/src/assets/app.scss +++ b/src/assets/app.scss @@ -5,6 +5,26 @@ font-family: ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,segoe ui,Roboto,helvetica neue,Arial,noto sans,sans-serif,apple color emoji,segoe ui emoji,segoe ui symbol,noto color emoji; } +.modal { + backdrop-filter: blur(3px); +} + +.modal-content { + border-radius: 1rem; + box-shadow: 0 15px 70px rgba(0, 0, 0, .1); + + .dark & { + box-shadow: 0 15px 70px rgb(0 0 0); + background-color: $dark-bg; + } +} + +.VuePagination__count { + font-size: 13px; + text-align: center; +} + + .shadow-box { overflow: hidden; box-shadow: 0 15px 70px rgba(0, 0, 0, .1); @@ -29,10 +49,87 @@ background-color: $highlight; border-color: $highlight; } + + .dark & { + color: $dark-font-color2; + } } -.modal-content { - border-radius: 1rem; - backdrop-filter: blur(3px); -} + +// Dark Theme override here +.dark { + background-color: #090C10; + color: $dark-font-color; + + .shadow-box { + background-color: $dark-bg; + } + + .form-check-input { + background-color: $dark-bg2; + } + + .form-switch .form-check-input { + background-color: #131a21; + } + + a, + .table, + .nav-link { + color: $dark-font-color; + } + + .form-control, + .form-control:focus, + .form-select, + .form-select:focus { + color: $dark-font-color; + background-color: $dark-bg2; + } + + .form-control, .form-select { + border-color: $dark-border-color; + } + + .table-hover > tbody > tr:hover { + --bs-table-accent-bg: #070A10; + color: $dark-font-color; + } + + .nav-pills .nav-link.active, .nav-pills .show > .nav-link { + color: $dark-font-color2; + } + + .bg-primary { + color: $dark-font-color2; + } + + .btn-secondary { + color: white; + } + + .btn-close { + opacity: 1; + } + + .modal-header { + border-color: $dark-bg; + } + + .modal-footer { + border-color: $dark-bg; + } + + // Pagination + .page-item.disabled .page-link { + background-color: $dark-bg; + border-color: $dark-border-color; + } + + .page-link { + background-color: $dark-bg; + border-color: $dark-border-color; + color: $dark-font-color; + } +} diff --git a/src/assets/vars.scss b/src/assets/vars.scss index ebec378a..6d331370 100644 --- a/src/assets/vars.scss +++ b/src/assets/vars.scss @@ -5,4 +5,10 @@ $link-color: #111; $border-radius: 50rem; $highlight: #7ce8a4; -$highlight-white: #e7faec; \ No newline at end of file +$highlight-white: #e7faec; + +$dark-font-color: #b1b8c0; +$dark-font-color2: #020b05; +$dark-bg: #0D1117; +$dark-bg2: #070A10; +$dark-border-color: #1d2634; diff --git a/src/components/HeartbeatBar.vue b/src/components/HeartbeatBar.vue index eed132d1..ddd1617c 100644 --- a/src/components/HeartbeatBar.vue +++ b/src/components/HeartbeatBar.vue @@ -133,7 +133,7 @@ export default { } - diff --git a/src/components/NotificationDialog.vue b/src/components/NotificationDialog.vue index 4eea85d6..b6862458 100644 --- a/src/components/NotificationDialog.vue +++ b/src/components/NotificationDialog.vue @@ -143,6 +143,11 @@
+
+ +
+ +
You can get this by going to Server Settings -> Integrations -> Create Webhook
@@ -233,17 +238,17 @@ @@ -320,7 +325,7 @@

Status: Apprise is installed - Apprise is not installed. Read more + Apprise is not installed. Read more

@@ -334,7 +339,6 @@ - +
+
+ + + + + + + + +
+
+
-
+

Notifications

@@ -201,8 +214,17 @@ export default { } - diff --git a/src/util.js b/src/util.js index 9b4c4dab..44630993 100644 --- a/src/util.js +++ b/src/util.js @@ -1,6 +1,7 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -exports.debug = exports.ucfirst = exports.sleep = exports.flipStatus = exports.PENDING = exports.UP = exports.DOWN = void 0; +exports.debug = exports.ucfirst = exports.sleep = exports.flipStatus = exports.PENDING = exports.UP = exports.DOWN = exports.appName = void 0; +exports.appName = "Uptime Kuma"; exports.DOWN = 0; exports.UP = 1; exports.PENDING = 2; @@ -28,7 +29,7 @@ function ucfirst(str) { exports.ucfirst = ucfirst; function debug(msg) { if (process.env.NODE_ENV === "development") { - console.log(msg); + console.debug(msg); } } exports.debug = debug; diff --git a/src/util.ts b/src/util.ts index 23446c83..1ed6d4c6 100644 --- a/src/util.ts +++ b/src/util.ts @@ -3,6 +3,7 @@ // Frontend uses util.ts // Need to run "tsc" to compile if there are any changes. +export const appName = "Uptime Kuma"; export const DOWN = 0; export const UP = 1; export const PENDING = 2; @@ -38,6 +39,6 @@ export function ucfirst(str) { export function debug(msg) { if (process.env.NODE_ENV === "development") { - console.log(msg) + console.debug(msg); } }