diff --git a/server/model/monitor.js b/server/model/monitor.js index 1acbda0..ae43b09 100644 --- a/server/model/monitor.js +++ b/server/model/monitor.js @@ -6,7 +6,7 @@ dayjs.extend(utc); dayjs.extend(timezone); const axios = require("axios"); const { Prometheus } = require("../prometheus"); -const { debug, UP, DOWN, PENDING, flipStatus, TimeLogger, MONITOR_CHECK_SELECTOR_TYPES } = require("../../src/util"); +const { debug, UP, DOWN, PENDING, flipStatus, TimeLogger, MONITOR_CHECK_SELECTOR_TYPES, HTTP_STATUS_CODE_SHOULD_EQUAL } = require("../../src/util"); const { tcping, ping, dnsResolve, checkCertificate, getTotalClientInRoom } = require("../util-server"); const { R } = require("redbean-node"); const { BeanModel } = require("redbean-node/dist/bean-model"); @@ -537,7 +537,7 @@ class Monitor extends BeanModel { if (MONITOR_CHECK_SELECTOR_TYPES.includes(check.type) && typeof check.value === "string" && check.value.startsWith("{")) { check.value = JSON.parse(check.value); } - if (check.type === "HTTP_STATUS_CODE_SHOULD_EQUAL" && typeof check.value === "string" && check.value.startsWith("[")) { + if (check.type === HTTP_STATUS_CODE_SHOULD_EQUAL && typeof check.value === "string" && check.value.startsWith("[")) { check.value = JSON.parse(check.value); } }); diff --git a/server/server.js b/server/server.js index bffa221..5b82263 100644 --- a/server/server.js +++ b/server/server.js @@ -6,7 +6,10 @@ if (!process.env.NODE_ENV) { console.log("Node Env: " + process.env.NODE_ENV); -const { sleep, debug, getRandomInt, genSecret } = require("../src/util"); +const { sleep, debug, getRandomInt, genSecret, + HTTP_STATUS_CODE_SHOULD_EQUAL, + RESPONSE_SHOULD_CONTAIN_TEXT +} = require("../src/util"); console.log("Importing Node libraries"); const fs = require("fs"); @@ -1080,10 +1083,36 @@ exports.entryPage = "dashboard"; let notificationIDList = monitor.notificationIDList; delete monitor.notificationIDList; - monitor.checks_json = JSON.stringify(monitor.checks); + // TODO remove this if clause once we no longer expect export files to contain the old accepted_statuscodes and keyword format + if (monitor.type === "http" || monitor.type === "keyword") { + if (monitor.accepted_statuscodes) { + // old format for checking http status codes + // Convert to new format which uses separate monitor check + monitor.checks = monitor.checks || []; + monitor.checks.push({ + monitor_id: monitor.id, + type: HTTP_STATUS_CODE_SHOULD_EQUAL, + value: monitor.accepted_statuscodes, + }); + } + + if (monitor.keyword) { + // old format for checking response contains keyword + // Convert to new format which uses separate monitor check + monitor.checks = monitor.checks || []; + monitor.checks.push({ + monitor_id: monitor.id, + type: RESPONSE_SHOULD_CONTAIN_TEXT, + value: monitor.keyword, + }); + } - delete monitor.accepted_statuscodes; // TODO convert to check - delete monitor.keyword; // TODO convert to check + monitor.type = "http"; + delete monitor.accepted_statuscodes; + delete monitor.keyword; + } + + monitor.checks_json = JSON.stringify(monitor.checks); const checks = monitor.checks; delete monitor.checks; diff --git a/src/util.ts b/src/util.ts index c6fbe3c..36a2041 100644 --- a/src/util.ts +++ b/src/util.ts @@ -19,7 +19,17 @@ export const STATUS_PAGE_ALL_DOWN = 0; export const STATUS_PAGE_ALL_UP = 1; export const STATUS_PAGE_PARTIAL_DOWN = 2; -export const MONITOR_CHECK_STRING_TYPES = ["HTTP_STATUS_CODE_SHOULD_EQUAL", "RESPONSE_SHOULD_CONTAIN_TEXT", "RESPONSE_SHOULD_NOT_CONTAIN_TEXT", "RESPONSE_SHOULD_MATCH_REGEX", "RESPONSE_SHOULD_NOT_MATCH_REGEX"]; +export const HTTP_STATUS_CODE_SHOULD_EQUAL = "HTTP_STATUS_CODE_SHOULD_EQUAL"; +export const RESPONSE_SHOULD_CONTAIN_TEXT = "RESPONSE_SHOULD_CONTAIN_TEXT"; +export const RESPONSE_SHOULD_NOT_CONTAIN_TEXT = "RESPONSE_SHOULD_NOT_CONTAIN_TEXT"; +export const RESPONSE_SHOULD_MATCH_REGEX = "RESPONSE_SHOULD_MATCH_REGEX"; +export const RESPONSE_SHOULD_NOT_MATCH_REGEX = "RESPONSE_SHOULD_NOT_MATCH_REGEX"; +export const RESPONSE_SELECTOR_SHOULD_EQUAL = "RESPONSE_SELECTOR_SHOULD_EQUAL"; +export const RESPONSE_SELECTOR_SHOULD_NOT_EQUAL = "RESPONSE_SELECTOR_SHOULD_NOT_EQUAL"; +export const RESPONSE_SELECTOR_SHOULD_MATCH_REGEX = "RESPONSE_SELECTOR_SHOULD_MATCH_REGEX"; +export const RESPONSE_SELECTOR_SHOULD_NOT_MATCH_REGEX = "RESPONSE_SELECTOR_SHOULD_NOT_MATCH_REGEX"; + +export const MONITOR_CHECK_STRING_TYPES = ["RESPONSE_SHOULD_CONTAIN_TEXT", "RESPONSE_SHOULD_NOT_CONTAIN_TEXT", "RESPONSE_SHOULD_MATCH_REGEX", "RESPONSE_SHOULD_NOT_MATCH_REGEX"]; export const MONITOR_CHECK_SELECTOR_TYPES = ["RESPONSE_SELECTOR_SHOULD_EQUAL", "RESPONSE_SELECTOR_SHOULD_NOT_EQUAL", "RESPONSE_SELECTOR_SHOULD_MATCH_REGEX", "RESPONSE_SELECTOR_SHOULD_NOT_MATCH_REGEX"]; export function flipStatus(s: number) {