diff --git a/server/routers/api-router.js b/server/routers/api-router.js index 0b4982db6..8b5d36f2a 100644 --- a/server/routers/api-router.js +++ b/server/routers/api-router.js @@ -10,6 +10,7 @@ const { UptimeKumaServer } = require("../uptime-kuma-server"); const { UptimeCacheList } = require("../uptime-cache-list"); const { makeBadge } = require("badge-maker"); const { badgeConstants } = require("../config"); +const { Prometheus } = require("../prometheus"); let router = express.Router(); @@ -37,7 +38,7 @@ router.get("/api/push/:pushToken", async (request, response) => { let pushToken = request.params.pushToken; let msg = request.query.msg || "OK"; - let ping = request.query.ping || null; + let ping = parseInt(request.query.ping) || null; let statusString = request.query.status || "up"; let status = (statusString === "up") ? UP : DOWN; @@ -89,6 +90,7 @@ router.get("/api/push/:pushToken", async (request, response) => { io.to(monitor.user_id).emit("heartbeat", bean.toJSON()); UptimeCacheList.clearCache(monitor.id); Monitor.sendStats(io, monitor.id, monitor.user_id); + new Prometheus(monitor).update(bean, undefined); response.json({ ok: true, diff --git a/server/socket-handlers/status-page-socket-handler.js b/server/socket-handlers/status-page-socket-handler.js index 717aba9c4..411bda556 100644 --- a/server/socket-handlers/status-page-socket-handler.js +++ b/server/socket-handlers/status-page-socket-handler.js @@ -276,7 +276,7 @@ module.exports.statusPageSocketHandler = (socket) => { let statusPage = R.dispense("status_page"); statusPage.slug = slug; statusPage.title = title; - statusPage.theme = "light"; + statusPage.theme = "auto"; statusPage.icon = ""; await R.store(statusPage); diff --git a/src/mixins/theme.js b/src/mixins/theme.js index 8d2252670..2f7867df0 100644 --- a/src/mixins/theme.js +++ b/src/mixins/theme.js @@ -39,6 +39,9 @@ export default { } if (this.path.startsWith("/status-page") || this.path.startsWith("/status")) { + if (this.statusPageTheme === "auto") { + return this.system; + } return this.statusPageTheme; } else { if (this.userTheme === "auto") { diff --git a/src/pages/EditMonitor.vue b/src/pages/EditMonitor.vue index 0b8e55073..997faf955 100644 --- a/src/pages/EditMonitor.vue +++ b/src/pages/EditMonitor.vue @@ -283,13 +283,13 @@
@@ -301,7 +301,7 @@ @@ -311,7 +311,7 @@
@@ -692,6 +692,13 @@ export default { ipOrHostnameRegexPattern: hostNameRegexPattern(), mqttIpOrHostnameRegexPattern: hostNameRegexPattern(true), gameList: null, + connectionStringTemplates: { + "sqlserver": "Server=,;Database=;User Id=;Password=;Encrypt=;TrustServerCertificate=;Connection Timeout=", + "postgres": "postgres://username:password@host:port/database", + "mysql": "mysql://username:password@host:port/database", + "redis": "redis://user:password@host:port", + "mongodb": "mongodb://username:password@host:port/database", + } }; }, @@ -853,6 +860,24 @@ message HealthCheckResponse { } }); } + + // Set default database connection string if empty or it is a template from another database monitor type + for (let monitorType in this.connectionStringTemplates) { + if (this.monitor.type === monitorType) { + let isTemplate = false; + for (let key in this.connectionStringTemplates) { + if (this.monitor.databaseConnectionString === this.connectionStringTemplates[key]) { + isTemplate = true; + break; + } + } + if (!this.monitor.databaseConnectionString || isTemplate) { + this.monitor.databaseConnectionString = this.connectionStringTemplates[monitorType]; + } + break; + } + } + }, currentGameObject(newGameObject, previousGameObject) { @@ -860,8 +885,7 @@ message HealthCheckResponse { this.monitor.port = newGameObject.options.port; } this.monitor.game = newGameObject.keys[0]; - } - + }, }, mounted() { this.init(); diff --git a/src/pages/StatusPage.vue b/src/pages/StatusPage.vue index defa458e6..fc3d3741d 100644 --- a/src/pages/StatusPage.vue +++ b/src/pages/StatusPage.vue @@ -34,9 +34,13 @@ -
- - +
+ +
@@ -276,9 +280,24 @@
- + + +
{{ $t("No monitors available.") }} {{ $t("Add one") }} @@ -346,6 +365,8 @@ import MaintenanceTime from "../components/MaintenanceTime.vue"; import DateTime from "../components/Datetime.vue"; import { getResBaseURL } from "../util-frontend"; import { STATUS_PAGE_ALL_DOWN, STATUS_PAGE_ALL_UP, STATUS_PAGE_MAINTENANCE, STATUS_PAGE_PARTIAL_DOWN, UP, MAINTENANCE } from "../util.ts"; +import Tag from "../components/Tag.vue"; +import VueMultiselect from "vue-multiselect"; const toast = useToast(); dayjs.extend(duration); @@ -368,6 +389,8 @@ export default { PrismEditor, MaintenanceTime, DateTime, + Tag, + VueMultiselect }, // Leave Page for vue route change