From c0332fe0351f50f2eed5d6a66377566b486db939 Mon Sep 17 00:00:00 2001 From: Raj Nandan Sharma Date: Fri, 8 Nov 2024 22:56:35 +0530 Subject: [PATCH 01/18] revamp kener 2.0 --- $lib/server/data/site.json | 0 config/static/.kener | 1 - locales/en.json | 6 +- package-lock.json | 261 ++- package.json | 2 + scripts/testts.js | 12 - src/app.html | 2 + src/hooks.server.js | 8 + src/kener.css | 56 +- src/lib/components/monitor.svelte | 305 ++- src/lib/components/nav.svelte | 98 +- {scripts => src/lib/server}/check.js | 31 +- .../lib/server/config/monitors.yaml | 9 + .../lib/server/config/site.yaml | 11 +- {scripts => src/lib/server}/constants.js | 6 +- {scripts => src/lib/server}/cron-minute.js | 19 +- src/lib/server/data/earth.0day.utc.json | 1097 +++++++++ src/lib/server/data/earth.90day.utc.json | 1 + src/lib/server/data/frogment.0day.utc.json | 2067 ++++++++++++++++ src/lib/server/data/frogment.90day.utc.json | 1 + .../server/data/google-search.0day.utc.json | 2067 ++++++++++++++++ .../server/data/google-search.90day.utc.json | 1 + src/lib/server/data/monitors.json | 94 + src/lib/server/data/okbookmarks.0day.utc.json | 1667 +++++++++++++ .../server/data/okbookmarks.90day.utc.json | 1 + src/lib/server/data/site.json | 63 + .../server/data/svelte-website.0day.utc.json | 2072 +++++++++++++++++ .../server/data/svelte-website.90day.utc.json | 1 + {scripts => src/lib/server}/github.js | 2 +- {scripts => src/lib/server}/ninety.js | 5 +- {scripts => src/lib/server}/startup.js | 44 +- {scripts => src/lib/server}/tool.js | 2 +- src/lib/server/webhook.js | 19 +- src/routes/+layout.server.js | 5 +- src/routes/+layout.svelte | 128 +- src/routes/+page.server.js | 11 +- src/routes/+page.svelte | 12 +- src/routes/api/incident/+server.js | 8 +- .../api/incident/[incidentNumber]/+server.js | 8 +- .../[incidentNumber]/comment/+server.js | 8 +- .../[incidentNumber]/status/+server.js | 6 +- src/routes/api/today/+server.js | 2 +- src/routes/badge/[tag]/dot/+server.js | 49 + src/routes/badge/[tag]/status/+server.js | 4 +- src/routes/badge/[tag]/uptime/+server.js | 4 +- .../category-[category]/+page.server.js | 10 +- src/routes/embed-[tag]/+page.server.js | 4 +- src/routes/embed-[tag]/js/+server.js | 4 +- src/routes/incident/[id]/+page.server.js | 6 +- src/routes/incident/[id]/+page.svelte | 4 +- src/routes/incident/[id]/comments/+server.js | 6 +- src/routes/monitor-[tag]/+page.server.js | 10 +- src/routes/monitor-[tag]/+page.svelte | 17 +- static/buymeacoffee.svg | 5 + static/github.svg | 5 + vite.config.js | 14 +- 56 files changed, 9904 insertions(+), 457 deletions(-) create mode 100644 $lib/server/data/site.json delete mode 100644 config/static/.kener delete mode 100644 scripts/testts.js create mode 100644 src/hooks.server.js rename {scripts => src/lib/server}/check.js (67%) rename config/monitors.example.yaml => src/lib/server/config/monitors.yaml (75%) rename config/site.example.yaml => src/lib/server/config/site.yaml (87%) rename {scripts => src/lib/server}/constants.js (56%) rename {scripts => src/lib/server}/cron-minute.js (96%) create mode 100644 src/lib/server/data/earth.0day.utc.json create mode 100644 src/lib/server/data/earth.90day.utc.json create mode 100644 src/lib/server/data/frogment.0day.utc.json create mode 100644 src/lib/server/data/frogment.90day.utc.json create mode 100644 src/lib/server/data/google-search.0day.utc.json create mode 100644 src/lib/server/data/google-search.90day.utc.json create mode 100644 src/lib/server/data/monitors.json create mode 100644 src/lib/server/data/okbookmarks.0day.utc.json create mode 100644 src/lib/server/data/okbookmarks.90day.utc.json create mode 100644 src/lib/server/data/site.json create mode 100644 src/lib/server/data/svelte-website.0day.utc.json create mode 100644 src/lib/server/data/svelte-website.90day.utc.json rename {scripts => src/lib/server}/github.js (99%) rename {scripts => src/lib/server}/ninety.js (96%) rename {scripts => src/lib/server}/startup.js (90%) rename {scripts => src/lib/server}/tool.js (98%) create mode 100644 src/routes/badge/[tag]/dot/+server.js create mode 100644 static/buymeacoffee.svg create mode 100644 static/github.svg diff --git a/$lib/server/data/site.json b/$lib/server/data/site.json new file mode 100644 index 000000000..e69de29bb diff --git a/config/static/.kener b/config/static/.kener deleted file mode 100644 index 53d195994..000000000 --- a/config/static/.kener +++ /dev/null @@ -1 +0,0 @@ -I am Empty File \ No newline at end of file diff --git a/locales/en.json b/locales/en.json index 1da36e9f7..181d7062a 100644 --- a/locales/en.json +++ b/locales/en.json @@ -51,7 +51,11 @@ "status_no_data": "No Data", "status_ok": "Status OK", "am": "am", - "pm": "pm" + "pm": "pm", + "standard": "Standard", + "pinging": "Pinging", + "status_svg": "Status SVG", + "status_svg_desc": "Get a SVG dot for this monitor" }, "numbers": ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"] } diff --git a/package-lock.json b/package-lock.json index 9820b50e2..b6ae8dfe2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "kener", - "version": "0.0.14", + "version": "0.0.15", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "kener", - "version": "0.0.14", + "version": "0.0.15", "license": "MIT", "dependencies": { "axios": "^1.6.2", @@ -20,6 +20,7 @@ "js-yaml": "^4.1.0", "lucide-svelte": "^0.292.0", "marked": "^11.1.1", + "mode-watcher": "^0.4.1", "moment": "^2.29.4", "moment-timezone": "^0.5.43", "node-cache": "^5.1.2", @@ -975,21 +976,23 @@ } }, "node_modules/axios": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.2.tgz", - "integrity": "sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A==", + "version": "1.7.7", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.7.tgz", + "integrity": "sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==", + "license": "MIT", "dependencies": { - "follow-redirects": "^1.15.0", + "follow-redirects": "^1.15.6", "form-data": "^4.0.0", "proxy-from-env": "^1.1.0" } }, "node_modules/axobject-query": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz", - "integrity": "sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==", - "dependencies": { - "dequal": "^2.0.3" + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", + "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" } }, "node_modules/badge-maker": { @@ -1039,9 +1042,10 @@ } }, "node_modules/body-parser": { - "version": "1.20.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", - "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", + "license": "MIT", "dependencies": { "bytes": "3.1.2", "content-type": "~1.0.5", @@ -1051,7 +1055,7 @@ "http-errors": "2.0.0", "iconv-lite": "0.4.24", "on-finished": "2.4.1", - "qs": "6.11.0", + "qs": "6.13.0", "raw-body": "2.5.2", "type-is": "~1.6.18", "unpipe": "1.0.0" @@ -1065,6 +1069,7 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", "dependencies": { "ms": "2.0.0" } @@ -1072,7 +1077,8 @@ "node_modules/body-parser/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" }, "node_modules/brace-expansion": { "version": "2.0.1", @@ -1084,11 +1090,12 @@ } }, "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "license": "MIT", "dependencies": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" }, "engines": { "node": ">=8" @@ -1151,6 +1158,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -1159,6 +1167,7 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "license": "MIT", "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", @@ -1412,6 +1421,7 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -1559,6 +1569,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "license": "MIT", "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", @@ -1583,6 +1594,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -1599,6 +1611,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "license": "MIT", "engines": { "node": ">= 0.8", "npm": "1.2.8000 || >= 1.4.16" @@ -1644,7 +1657,8 @@ "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "license": "MIT" }, "node_modules/electron-to-chromium": { "version": "1.4.601", @@ -1659,9 +1673,10 @@ "dev": true }, "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -1670,6 +1685,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "license": "MIT", "dependencies": { "get-intrinsic": "^1.2.4" }, @@ -1681,6 +1697,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", "engines": { "node": ">= 0.4" } @@ -1740,7 +1757,8 @@ "node_modules/escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "license": "MIT" }, "node_modules/esm-env": { "version": "1.0.0", @@ -1758,41 +1776,43 @@ "version": "1.8.1", "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/express": { - "version": "4.19.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", - "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", + "version": "4.21.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.1.tgz", + "integrity": "sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==", + "license": "MIT", "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.20.2", + "body-parser": "1.20.3", "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.6.0", + "cookie": "0.7.1", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "2.0.0", - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "etag": "~1.8.1", - "finalhandler": "1.2.0", + "finalhandler": "1.3.1", "fresh": "0.5.2", "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", + "merge-descriptors": "1.0.3", "methods": "~1.1.2", "on-finished": "2.4.1", "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", + "path-to-regexp": "0.1.10", "proxy-addr": "~2.0.7", - "qs": "6.11.0", + "qs": "6.13.0", "range-parser": "~1.2.1", "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", + "send": "0.19.0", + "serve-static": "1.16.2", "setprototypeof": "1.2.0", "statuses": "2.0.1", "type-is": "~1.6.18", @@ -1804,9 +1824,10 @@ } }, "node_modules/express/node_modules/cookie": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", - "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -1848,9 +1869,10 @@ } }, "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" }, @@ -1859,12 +1881,13 @@ } }, "node_modules/finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", + "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", + "license": "MIT", "dependencies": { "debug": "2.6.9", - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "on-finished": "2.4.1", "parseurl": "~1.3.3", @@ -1879,6 +1902,7 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", "dependencies": { "ms": "2.0.0" } @@ -1886,7 +1910,8 @@ "node_modules/finalhandler/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" }, "node_modules/focus-trap": { "version": "7.5.4", @@ -1953,6 +1978,7 @@ "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -2009,6 +2035,7 @@ "version": "1.2.4", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "license": "MIT", "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2", @@ -2069,6 +2096,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "license": "MIT", "dependencies": { "get-intrinsic": "^1.1.3" }, @@ -2094,6 +2122,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "license": "MIT", "dependencies": { "es-define-property": "^1.0.0" }, @@ -2105,6 +2134,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -2116,6 +2146,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -2138,6 +2169,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "license": "MIT", "dependencies": { "depd": "2.0.0", "inherits": "2.0.4", @@ -2153,6 +2185,7 @@ "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3" }, @@ -2283,6 +2316,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "license": "MIT", "engines": { "node": ">=0.12.0" } @@ -2422,14 +2456,19 @@ "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, "node_modules/merge2": { "version": "1.4.1", @@ -2448,11 +2487,12 @@ } }, "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "license": "MIT", "dependencies": { - "braces": "^3.0.2", + "braces": "^3.0.3", "picomatch": "^2.3.1" }, "engines": { @@ -2463,6 +2503,7 @@ "version": "1.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "license": "MIT", "bin": { "mime": "cli.js" }, @@ -2531,6 +2572,15 @@ "mkdirp": "bin/cmd.js" } }, + "node_modules/mode-watcher": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/mode-watcher/-/mode-watcher-0.4.1.tgz", + "integrity": "sha512-bNC+1NXmwEFZtziCdZSgP7HFQTpqJPcQn9GwwJQGSf6SBF3neEPYV1uRwkYuAQwbsvsXIYtzaqgedDzJ7D1mhg==", + "license": "MIT", + "peerDependencies": { + "svelte": "^4.0.0 || ^5.0.0-next.1" + } + }, "node_modules/moment": { "version": "2.29.4", "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", @@ -2660,9 +2710,13 @@ } }, "node_modules/object-inspect": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", - "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", + "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -2671,6 +2725,7 @@ "version": "2.4.1", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", "dependencies": { "ee-first": "1.1.1" }, @@ -2702,6 +2757,7 @@ "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -2729,9 +2785,10 @@ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, "node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz", + "integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==", + "license": "MIT" }, "node_modules/periscopic": { "version": "3.1.0", @@ -3063,11 +3120,12 @@ "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" }, "node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "license": "BSD-3-Clause", "dependencies": { - "side-channel": "^1.0.4" + "side-channel": "^1.0.6" }, "engines": { "node": ">=0.6" @@ -3123,6 +3181,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -3131,6 +3190,7 @@ "version": "2.5.2", "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "license": "MIT", "dependencies": { "bytes": "3.1.2", "http-errors": "2.0.0", @@ -3263,10 +3323,11 @@ } }, "node_modules/rollup": { - "version": "3.29.4", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.4.tgz", - "integrity": "sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==", + "version": "3.29.5", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.5.tgz", + "integrity": "sha512-GVsDdsbJzzy4S/v3dqWPJ7EfvZJfCHiDqe80IyrF59LYuP+e6U1LJoUqeuqRbwAWoMNoXivMNeNAOf5E22VA1w==", "dev": true, + "license": "MIT", "bin": { "rollup": "dist/bin/rollup" }, @@ -3343,7 +3404,8 @@ "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" }, "node_modules/sander": { "version": "0.5.1", @@ -3358,9 +3420,10 @@ } }, "node_modules/send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", + "license": "MIT", "dependencies": { "debug": "2.6.9", "depd": "2.0.0", @@ -3384,6 +3447,7 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", "dependencies": { "ms": "2.0.0" } @@ -3391,22 +3455,34 @@ "node_modules/send/node_modules/debug/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/send/node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } }, "node_modules/send/node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" }, "node_modules/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", + "license": "MIT", "dependencies": { - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "parseurl": "~1.3.3", - "send": "0.18.0" + "send": "0.19.0" }, "engines": { "node": ">= 0.8.0" @@ -3422,6 +3498,7 @@ "version": "1.2.2", "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "license": "MIT", "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", @@ -3437,7 +3514,8 @@ "node_modules/setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "license": "ISC" }, "node_modules/shebang-command": { "version": "2.0.0", @@ -3473,6 +3551,7 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "es-errors": "^1.3.0", @@ -3533,6 +3612,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -3662,16 +3742,18 @@ } }, "node_modules/svelte": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/svelte/-/svelte-4.2.8.tgz", - "integrity": "sha512-hU6dh1MPl8gh6klQZwK/n73GiAHiR95IkFsesLPbMeEZi36ydaXL/ZAb4g9sayT0MXzpxyZjR28yderJHxcmYA==", + "version": "4.2.19", + "resolved": "https://registry.npmjs.org/svelte/-/svelte-4.2.19.tgz", + "integrity": "sha512-IY1rnGr6izd10B0A8LqsBfmlT5OILVuZ7XsI0vdGPEvuonFV7NYEUK4dAkm9Zg2q0Um92kYjTpS1CAP3Nh/KWw==", + "license": "MIT", "dependencies": { "@ampproject/remapping": "^2.2.1", "@jridgewell/sourcemap-codec": "^1.4.15", "@jridgewell/trace-mapping": "^0.3.18", + "@types/estree": "^1.0.1", "acorn": "^8.9.0", "aria-query": "^5.3.0", - "axobject-query": "^3.2.1", + "axobject-query": "^4.0.0", "code-red": "^1.0.3", "css-tree": "^2.3.1", "estree-walker": "^3.0.3", @@ -3937,6 +4019,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "license": "MIT", "dependencies": { "is-number": "^7.0.0" }, @@ -3948,6 +4031,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "license": "MIT", "engines": { "node": ">=0.6" } @@ -3984,6 +4068,7 @@ "version": "1.6.18", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "license": "MIT", "dependencies": { "media-typer": "0.3.0", "mime-types": "~2.1.24" @@ -4029,6 +4114,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -4085,10 +4171,11 @@ } }, "node_modules/vite": { - "version": "4.5.3", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.3.tgz", - "integrity": "sha512-kQL23kMeX92v3ph7IauVkXkikdDRsYMGTVl5KY2E9OY4ONLvkHf04MDTbnfo6NKxZiDLWzVpP5oTa8hQD8U3dg==", + "version": "4.5.5", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.5.tgz", + "integrity": "sha512-ifW3Lb2sMdX+WU91s3R0FyQlAyLxOzCSCP37ujw0+r5POeHPwe6udWVIElKQq8gk3t7b8rkmvqC6IHBpCff4GQ==", "dev": true, + "license": "MIT", "dependencies": { "esbuild": "^0.18.10", "postcss": "^8.4.27", diff --git a/package.json b/package.json index 85d553cfa..960a971b4 100644 --- a/package.json +++ b/package.json @@ -29,6 +29,7 @@ "scripts": { "build": "node scripts/check.js && vite build", "serve": "node prod.js", + "dev": "vite dev", "kener:dev": "cross-env NODE_ENV=development PUBLIC_KENER_FOLDER=./static/kener node scripts/check.js && concurrently \"cross-env NODE_ENV=development PUBLIC_KENER_FOLDER=./static/kener node dev.js\" \"cross-env NODE_ENV=development PUBLIC_KENER_FOLDER=./static/kener vite dev\"", "kener:dev-monitor": "cross-env NODE_ENV=development PUBLIC_KENER_FOLDER=./static/kener node dev.js", "kener:build": "cross-env NODE_ENV=production node scripts/check.js && cross-env NODE_ENV=production vite build", @@ -67,6 +68,7 @@ "js-yaml": "^4.1.0", "lucide-svelte": "^0.292.0", "marked": "^11.1.1", + "mode-watcher": "^0.4.1", "moment": "^2.29.4", "moment-timezone": "^0.5.43", "node-cache": "^5.1.2", diff --git a/scripts/testts.js b/scripts/testts.js deleted file mode 100644 index 8746c7143..000000000 --- a/scripts/testts.js +++ /dev/null @@ -1,12 +0,0 @@ -import { GetMinuteStartNowTimestampUTC, GetDayStartWithOffset, BeginningOfDay } from "./tool.js"; -let tzOffset = -330; -let ts = GetMinuteStartNowTimestampUTC(); -console.log("GetMinuteStartNowTimestampUTC India 12AM: " + ts); -let tm = GetDayStartWithOffset(GetMinuteStartNowTimestampUTC(), tzOffset); -console.log("GetMinuteStartTimestampUTC India 12AM: should be 18:30PM " + tm); -console.log( - `getUTCTimestampAtStartOfDayForOffset(${GetMinuteStartNowTimestampUTC()}, ${tzOffset})` -); - -console.log(BeginningOfDay({ timeZone: "GMT" })); -console.log(BeginningOfDay({ timeZone: "Asia/Kolkata", date: new Date(1703223388000) })); diff --git a/src/app.html b/src/app.html index 5e9022a65..f234da686 100644 --- a/src/app.html +++ b/src/app.html @@ -3,6 +3,8 @@ + + %sveltekit.head% diff --git a/src/hooks.server.js b/src/hooks.server.js new file mode 100644 index 000000000..c3e43e334 --- /dev/null +++ b/src/hooks.server.js @@ -0,0 +1,8 @@ +// src/routes/+server.js +import { Startup } from "$lib/server/startup.js"; +import { STATUS_OK } from "$lib/server/check.js"; +(async () => { + console.log("Starting server..."); + console.log("Server started with status: " + STATUS_OK); + await Startup(); +})(); diff --git a/src/kener.css b/src/kener.css index 984e3ebda..5502a8891 100644 --- a/src/kener.css +++ b/src/kener.css @@ -1,5 +1,6 @@ /*one is the class for dotted background*/ -.one { + +.dots-pattern { position: absolute; top: 0px; left: 0; @@ -12,7 +13,7 @@ clip-path: polygon(0 0, 100% 0, 100% 54%, 0% 100%); } -.one::after { +.dots-pattern::after { content: ""; position: absolute; background-image: radial-gradient(rgba(0, 0, 0, 0) 1.5px, var(--background-kener) 1px); @@ -24,6 +25,55 @@ left: 0; } +.squares-pattern { + position: absolute; + top: 0; + left: 0; + width: 100%; + z-index: 0; + background-repeat: no-repeat; + background-size: 100%; + height: 100svh; + + clip-path: polygon(0 0, 100% 0, 100% 54%, 0% 100%); + transform: blur(3px); +} + +.squares-pattern::after { + content: ""; + position: absolute; + background-image: linear-gradient(#444cf7 1px, transparent 1px), + linear-gradient(to right, #444cf7 1px, var(--background-kener) 1px); + -webkit-mask-image: linear-gradient( + to bottom, + rgba(0, 0, 0, 1) 0%, + rgba(0, 0, 0, 0.8) 20%, + rgba(0, 0, 0, 0.6) 40%, + rgba(0, 0, 0, 0.4) 60%, + rgba(0, 0, 0, 0.2) 80%, + rgba(0, 0, 0, 0) 100% + ); + mask-image: linear-gradient( + 180deg, + rgba(0, 0, 0, 0.2) 0%, + rgba(0, 0, 0, 0.1) 20%, + rgba(0, 0, 0, 0.05) 40%, + rgba(0, 0, 0, 0.025) 60%, + rgba(0, 0, 0, 0.0125) 80%, + rgba(0, 0, 0, 0) 100% + ); + background-size: 32px 32px; + width: 100%; + height: 100vh; + top: 0; + + left: 0; +} +.dark .squares-pattern::after { + background-image: linear-gradient(#677489 1px, transparent 1px), + linear-gradient(to right, #677489 1px, var(--background-kener) 1px); +} + /*Needed to overlay content on top of dotted bg*/ section { position: relative; @@ -78,7 +128,7 @@ section { /*Needed to show monitor stacked properly*/ .monitors-card .monitor { - padding: 1.3em 1em; + padding: 1.2em 3.4em 0.875em 3.4em; border-bottom: 1px solid; border-color: hsl(var(--border) / var(--tw-border-opacity)); } diff --git a/src/lib/components/monitor.svelte b/src/lib/components/monitor.svelte index 54dc7a799..9cf886934 100644 --- a/src/lib/components/monitor.svelte +++ b/src/lib/components/monitor.svelte @@ -46,45 +46,60 @@ let copiedEmbed = false; let copiedBadgeStatus = false; let copiedBadgeUptime = false; + let copiedBadgeDotStandard = false; + let copiedBadgeDotPing = false; + let protocol; + let domain; + + let pathMonitorLink; function copyLinkToClipboard() { - //get domain with port number - let domain = window.location.host; - //get protocol - let protocol = window.location.protocol; - let path = `${base}/monitor-${monitor.tag}`; - navigator.clipboard.writeText(protocol + "//" + domain + path); + navigator.clipboard.writeText(pathMonitorLink); copiedLink = true; setTimeout(function () { copiedLink = false; }, 1500); } + + let pathMonitorBadgeUptime; function copyUptimeBadge() { - let domain = window.location.host; - let protocol = window.location.protocol; - let path = `${base}/badge/${monitor.tag}/uptime`; - navigator.clipboard.writeText(protocol + "//" + domain + path); + navigator.clipboard.writeText(pathMonitorBadgeUptime); copiedBadgeUptime = true; setTimeout(function () { copiedBadgeUptime = false; }, 1500); } + + let pathMonitorBadgeStatus; function copyStatusBadge() { - let domain = window.location.host; - let protocol = window.location.protocol; - let path = `${base}/badge/${monitor.tag}/status`; - navigator.clipboard.writeText(protocol + "//" + domain + path); + navigator.clipboard.writeText(pathMonitorBadgeStatus); copiedBadgeStatus = true; setTimeout(function () { copiedBadgeStatus = false; }, 1500); } + let pathMonitorBadgeDot; + function copyDotStandard() { + navigator.clipboard.writeText(pathMonitorBadgeDot); + copiedBadgeDotStandard = true; + setTimeout(function () { + copiedBadgeDotStandard = false; + }, 1500); + } + + let pathMonitorBadgeDotPing; + function copyDotPing() { + navigator.clipboard.writeText(pathMonitorBadgeDotPing); + copiedBadgeDotPing = true; + setTimeout(function () { + copiedBadgeDotPing = false; + }, 1500); + } + function copyScriptTagToClipboard() { //get domain with port number - let domain = window.location.host; - //get protocol - let protocol = window.location.protocol; + let path = `${base}/embed-${monitor.tag}`; let scriptTag = ` -
- {#if monitor.embed === undefined} -
-
-
- {#if monitor.image} - {monitor.name} - {/if} - {monitor.name} -
- {#if monitor.description} - - - - - - - -

- {monitor.name} -

- - {@html monitor.description} - -
-
+
+
+
+
+ {#if monitor.image} + {monitor.name} + {/if} +

+ {monitor.name} +

+ +

+ {#if !!monitor.description} + {@html monitor.description} {/if} - - - - - - - -

+

+ + + + + + +
+

{l(lang, "monitor.share")}

-

+

{l(lang, "monitor.share_desc")}

- -

+

+
+
+

{l(lang, "monitor.embed")}

-

+

{l(lang, "monitor.embed_desc")}

-
-
-

+
+
+

{l(lang, "monitor.theme")}

- +
-
-
@@ -241,107 +252,144 @@
-

+

{l(lang, "monitor.mode")}

- +
- +
- +
-

+

+ +
+
+

{l(lang, "monitor.badge")}

-

+

{l(lang, "monitor.badge_desc")}

- - -
-
- + +
+ +
+

+ {l(lang, "monitor.status_svg")} +

+

+ {l(lang, "monitor.status_svg_desc")} +

+ + +
+ +

- {/if} +
+
@@ -349,36 +397,37 @@
{#if _90Day[todayDD]}
-
+
● {n(lang, new Date(bar.timestamp * 1000).toLocaleDateString())} {summaryTime(lang, bar.message)}
@@ -445,6 +494,14 @@
{/if} +

+ + {l(lang, "root.recent_incidents")} + +

diff --git a/src/lib/components/nav.svelte b/src/lib/components/nav.svelte index b58270762..0f8eb2845 100644 --- a/src/lib/components/nav.svelte +++ b/src/lib/components/nav.svelte @@ -4,91 +4,55 @@ import { Languages, Menu } from "lucide-svelte"; import { base } from "$app/paths"; export let data; - let defaultLocaleKey = data.selectedLang; - const allLocales = data.site.i18n?.locales; - - /** - * @type {string} - */ - let defaultLocaleValue; - if (!allLocales) { - defaultLocaleValue = "English"; - } else { - defaultLocaleValue = allLocales[defaultLocaleKey]; - } - /** - * @param {string} locale - */ - function setLanguage(locale) { - document.cookie = `localLang=${locale};max-age=${60 * 60 * 24 * 365 * 30}`; - if (locale === defaultLocaleKey) return; - defaultLocaleValue = allLocales[locale]; - location.reload(); - } + let defaultPattern = data.site?.pattern || "squares"; -
+
-
+
- - {#if data.site.logo} - {data.site.title} - {/if} - {#if data.site.title} - - {/if} - -
- + + {#if data.site.logo} + {data.site.title} + {/if} + {#if data.site.siteName} + + {/if} + +
{#if data.site.nav} -
-
+

@@ -57,7 +57,7 @@ -
+

diff --git a/src/routes/incident/[id]/comments/+server.js b/src/routes/incident/[id]/comments/+server.js index 45fdef145..499d4edf6 100644 --- a/src/routes/incident/[id]/comments/+server.js +++ b/src/routes/incident/[id]/comments/+server.js @@ -1,14 +1,14 @@ // @ts-nocheck // @ts-ignore import { json } from "@sveltejs/kit"; -import { PUBLIC_KENER_FOLDER } from "$env/static/public"; import fs from "fs-extra"; -import { GetCommentsForIssue } from "../../../../../scripts/github.js"; +import { GetCommentsForIssue } from "$lib/server/github.js"; import { marked } from "marked"; +import siteJSON from "$lib/server/data/site.json?raw"; export async function GET({ params }) { const incidentNumber = params.id; - let siteData = JSON.parse(fs.readFileSync(PUBLIC_KENER_FOLDER + "/site.json", "utf8")); + let siteData = JSON.parse(siteJSON); let comments = await GetCommentsForIssue(incidentNumber, siteData.github); comments = comments.map( ( diff --git a/src/routes/monitor-[tag]/+page.server.js b/src/routes/monitor-[tag]/+page.server.js index 3f7d88bfd..0802077a3 100644 --- a/src/routes/monitor-[tag]/+page.server.js +++ b/src/routes/monitor-[tag]/+page.server.js @@ -1,15 +1,11 @@ // @ts-nocheck -import { - Mapper, - GetOpenIncidents, - FilterAndInsertMonitorInIncident -} from "../../../scripts/github.js"; +import { Mapper, GetOpenIncidents, FilterAndInsertMonitorInIncident } from "$lib/server/github.js"; import { FetchData } from "$lib/server/page"; -import { PUBLIC_KENER_FOLDER } from "$env/static/public"; +import monitorJSON from "$lib/server/data/monitors.json?raw"; import fs from "fs-extra"; export async function load({ params, route, url, parent }) { - let monitors = JSON.parse(fs.readFileSync(PUBLIC_KENER_FOLDER + "/monitors.json", "utf8")); + let monitors = JSON.parse(monitorJSON); const parentData = await parent(); const siteData = parentData.site; const github = siteData.github; diff --git a/src/routes/monitor-[tag]/+page.svelte b/src/routes/monitor-[tag]/+page.svelte index 01554fe28..08f370702 100644 --- a/src/routes/monitor-[tag]/+page.svelte +++ b/src/routes/monitor-[tag]/+page.svelte @@ -20,7 +20,7 @@
{#if hasActiveIncidents}
@@ -32,7 +32,7 @@
{#each data.openIncidents as incident, i} @@ -48,16 +48,11 @@ {/if} {#if data.monitors.length > 0}
-
-
- - {l(data.lang, "root.availability_per_component")} - -
-
+
+
@@ -83,7 +78,7 @@
diff --git a/static/buymeacoffee.svg b/static/buymeacoffee.svg new file mode 100644 index 000000000..2f4d60857 --- /dev/null +++ b/static/buymeacoffee.svg @@ -0,0 +1,5 @@ + + Buy Me A Coffee + + \ No newline at end of file diff --git a/static/github.svg b/static/github.svg new file mode 100644 index 000000000..66b2a8dc7 --- /dev/null +++ b/static/github.svg @@ -0,0 +1,5 @@ + + GitHub + + \ No newline at end of file diff --git a/vite.config.js b/vite.config.js index 328b1f5f9..02adfbb12 100644 --- a/vite.config.js +++ b/vite.config.js @@ -1,6 +1,16 @@ +// @ts-nocheck import { sveltekit } from "@sveltejs/kit/vite"; import { defineConfig } from "vite"; - +import dotenv from "dotenv"; +dotenv.config(); +const PORT = Number(process.env.PORT) || 3000; export default defineConfig({ - plugins: [sveltekit()] + plugins: [sveltekit()], + server: { + port: PORT, + watch: { + ignored: ["**/src/lib/server/data/**"] // Adjust the path to the file you want to ignore + } + }, + assetsInclude: ["**/*.yaml"] }); From bd87aded6784dda6b5bc48d889a9bbb88a2320c1 Mon Sep 17 00:00:00 2001 From: Raj Nandan Sharma Date: Fri, 8 Nov 2024 23:10:25 +0530 Subject: [PATCH 02/18] changes gitignore --- .gitignore | 6 +- src/lib/server/config/monitors.yaml | 35 - src/lib/server/config/site.yaml | 53 - src/lib/server/data/.kener | 1 + src/lib/server/data/earth.0day.utc.json | 1097 --------- src/lib/server/data/earth.90day.utc.json | 1 - src/lib/server/data/frogment.0day.utc.json | 2067 ---------------- src/lib/server/data/frogment.90day.utc.json | 1 - .../server/data/google-search.0day.utc.json | 2067 ---------------- .../server/data/google-search.90day.utc.json | 1 - src/lib/server/data/monitors.json | 94 - src/lib/server/data/okbookmarks.0day.utc.json | 1667 ------------- .../server/data/okbookmarks.90day.utc.json | 1 - src/lib/server/data/site.json | 63 - .../server/data/svelte-website.0day.utc.json | 2072 ----------------- .../server/data/svelte-website.90day.utc.json | 1 - 16 files changed, 6 insertions(+), 9221 deletions(-) delete mode 100644 src/lib/server/config/monitors.yaml delete mode 100644 src/lib/server/config/site.yaml create mode 100644 src/lib/server/data/.kener delete mode 100644 src/lib/server/data/earth.0day.utc.json delete mode 100644 src/lib/server/data/earth.90day.utc.json delete mode 100644 src/lib/server/data/frogment.0day.utc.json delete mode 100644 src/lib/server/data/frogment.90day.utc.json delete mode 100644 src/lib/server/data/google-search.0day.utc.json delete mode 100644 src/lib/server/data/google-search.90day.utc.json delete mode 100644 src/lib/server/data/monitors.json delete mode 100644 src/lib/server/data/okbookmarks.0day.utc.json delete mode 100644 src/lib/server/data/okbookmarks.90day.utc.json delete mode 100644 src/lib/server/data/site.json delete mode 100644 src/lib/server/data/svelte-website.0day.utc.json delete mode 100644 src/lib/server/data/svelte-website.90day.utc.json diff --git a/.gitignore b/.gitignore index 0f0f68ff4..488afb3c1 100644 --- a/.gitignore +++ b/.gitignore @@ -15,4 +15,8 @@ vite.config.ts.timestamp-* nodemon.json .okgit/ config/static/* -!config/static/.kener \ No newline at end of file +!config/static/.kener +src/lib/server/data/* +!src/lib/server/data/.kener +src/lib/server/config/monitors.yaml +src/lib/server/config/site.yaml \ No newline at end of file diff --git a/src/lib/server/config/monitors.yaml b/src/lib/server/config/monitors.yaml deleted file mode 100644 index 1220879fe..000000000 --- a/src/lib/server/config/monitors.yaml +++ /dev/null @@ -1,35 +0,0 @@ -- name: Google Search - description: Search the world's information, including webpages, images, videos and more. - tag: "google-search" - image: "/google.png" - api: - method: GET - url: https://www.google.com/webhp - hideURLForGet: true -- name: Svelte Website - description: Cybernetically enhanced web apps - tag: "svelte-website" - api: - method: GET - url: https://svelte.dev/ - image: "/svelte.svg" -- name: Earth - description: Our blue planet - tag: "earth" - defaultStatus: "UP" - image: "/earth.png" - cron: "*/2 * * * *" -- name: Frogment - description: A free openAPI spec editor and linter that breaks down your spec into fragments to make editing easier and more intuitive. Visit https://www.frogment.com - tag: "frogment" - image: "/frogment.png" - api: - method: GET - url: https://www.frogment.com -- name: OkBookmarks - description: Stop forgetting about your bookmarks - tag: "okbookmarks" - image: "https://okbookmarks.com/app/mybookmark.png" - api: - method: GET - url: https://okbookmarks.com/ diff --git a/src/lib/server/config/site.yaml b/src/lib/server/config/site.yaml deleted file mode 100644 index c61a0106d..000000000 --- a/src/lib/server/config/site.yaml +++ /dev/null @@ -1,53 +0,0 @@ -title: "Kener - Open-Source and Modern looking Node.js Status Page for Effortless Incident Management" -siteName: "Kener.ing" -home: "/" -logo: "/logo.png" -github: - owner: "rajnandan1" - repo: "kener" - incidentSince: 48 -metaTags: - description: "Kener: Open-source modern looking Node.js status page tool, designed to make service monitoring and incident handling a breeze. It offers a sleek and user-friendly interface that simplifies tracking service outages and improves how we communicate during incidents. And the best part? Kener integrates seamlessly with GitHub, making incident management a team effort—making it easier for us to track and fix issues together in a collaborative and friendly environment." - keywords: "Node.js status page, Incident management tool, Service monitoring, Service outage tracking, Real-time status updates, GitHub integration for incidents, Open-source status page, Node.js monitoring application, Service reliability, User-friendly incident management, Collaborative incident resolution, Seamless outage communication, Service disruption tracker, Real-time incident alerts, Node.js status reporting" - og:description: "Kener: Open-source Node.js status page tool, designed to make service monitoring and incident handling a breeze. It offers a sleek and user-friendly interface that simplifies tracking service outages and improves how we communicate during incidents. And the best part? Kener integrates seamlessly with GitHub, making incident management a team effort—making it easier for us to track and fix issues together in a collaborative and friendly environment." - og:image: "https://kener.ing/ss.png" - og:title: "Kener - Open-Source and Modern looking Node.js Status Page for Effortless Incident Management" - og:type: "website" - og:site_name: "Kener" - twitter:card: "summary_large_image" - twitter:site: "@_rajnandan_" - twitter:creator: "@_rajnandan_" - twitter:image: "https://kener.ing/ss.png" - twitter:title: "Kener: Open-Source and Modern looking Node.js Status Page for Effortless Incident Management" - twitter:description: "Kener: Open-source Node.js status page tool, designed to make service monitoring and incident handling a breeze. It offers a sleek and user-friendly interface that simplifies tracking service outages and improves how we communicate during incidents. And the best part? Kener integrates seamlessly with GitHub, making incident management a team effort—making it easier for us to track and fix issues together in a collaborative and friendly environment." -nav: - - name: "Documentation" - url: "/docs" - - name: "Github" - iconURL: "/github.svg" - url: "https://github.com/rajnandan1/kener" - - name: "Buy me a coffee" - iconURL: "/buymeacoffee.svg" - url: "https://buymeacoffee.com/rajnandan1" -hero: - title: Kener is a Open-Source Status Page System - subtitle: Let your users know what's going on. -footerHTML: | - Made using - - Kener - - an open source status page system built with Svelte and TailwindCSS. -i18n: - defaultLocale: "en" - locales: - en: "English" - hi: "हिन्दी" - zh-CN: "中文" - ja: "日本語" - vi: "Tiếng Việt" -theme: dark -pattern: "squares" -font: - cssSrc: "https://fonts.googleapis.com/css2?family=Lato:ital,wght@0,100;0,300;0,400;0,700;0,900;1,100;1,300;1,400;1,700;1,900&display=swap" - family: "\"Lato\", sans-serif" diff --git a/src/lib/server/data/.kener b/src/lib/server/data/.kener new file mode 100644 index 000000000..4af18322e --- /dev/null +++ b/src/lib/server/data/.kener @@ -0,0 +1 @@ +None \ No newline at end of file diff --git a/src/lib/server/data/earth.0day.utc.json b/src/lib/server/data/earth.0day.utc.json deleted file mode 100644 index 0211fb466..000000000 --- a/src/lib/server/data/earth.0day.utc.json +++ /dev/null @@ -1,1097 +0,0 @@ -{ - "1731003360": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731003480": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731003600": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731004380": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731004440": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731004500": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731031740": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731033300": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731033660": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731033720": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731033840": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731033960": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731034080": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731034200": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731034320": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731034440": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731034560": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731034680": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731034800": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731034920": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731035040": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731035160": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731035280": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731035400": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731035520": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731035640": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731035760": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731035880": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731036000": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731036120": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731036240": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731036360": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731036480": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731036600": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731036720": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731036840": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731036960": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731037080": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731037200": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731037320": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731037440": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731037560": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731037680": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731037740": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731037800": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731037860": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731037920": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731038040": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731038160": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731038280": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731038400": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731038520": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731038640": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731038760": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731038880": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731039000": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731039120": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731039240": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731039360": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731039480": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731039600": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731039720": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731039840": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731040200": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731041160": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731041280": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731041400": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731041520": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731041640": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731041760": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731041880": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731042000": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731042120": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731042240": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731042360": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731042480": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731042600": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731042720": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731042840": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731042960": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731043080": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731043200": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731043320": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731043440": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731043560": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731043680": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731043800": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731043920": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731044040": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731044160": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731044280": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731044400": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731044520": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731044640": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731044760": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731044880": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731045000": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731045120": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731045240": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731045360": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731045480": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731045600": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731045720": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731045840": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731045960": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731046080": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731046200": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731046320": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731046440": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731046560": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731046680": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731046800": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731047040": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731047160": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731047280": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731047400": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731075120": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731075240": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731075360": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731075480": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731075600": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731075720": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731075840": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731075960": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731076080": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731076200": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731076320": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731076440": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731076560": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731076680": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731076800": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731076860": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731076920": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731076980": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731077040": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731077160": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731077220": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731077280": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731077400": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731077520": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731077640": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731077760": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731077880": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731078000": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731078120": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731078240": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731078360": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731078480": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731078600": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731078720": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731078840": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731078900": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731078960": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731079080": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731079200": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731079320": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731079440": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731079560": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731079680": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731079800": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731079920": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731080040": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731080160": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731080280": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731080400": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731080520": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731080640": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731080760": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731080880": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731081000": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731081120": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731081240": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731081360": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731081480": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731081600": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731081720": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731081840": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731081960": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731082080": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731082200": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731082320": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731082440": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731082560": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731082680": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731082800": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731082920": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731083040": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731083160": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731083280": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731083400": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731083520": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731083640": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731083760": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731083820": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731083880": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731084000": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731084120": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731084240": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731084360": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731084480": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731084600": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731084720": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731084840": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731084960": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731085080": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731085200": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731085320": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731085440": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731085560": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731085680": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731085800": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731085920": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731086040": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731086160": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731086280": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731086400": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731086520": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731086640": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - }, - "1731086760": { - "status": "UP", - "latency": 0, - "type": "defaultStatus" - } -} \ No newline at end of file diff --git a/src/lib/server/data/earth.90day.utc.json b/src/lib/server/data/earth.90day.utc.json deleted file mode 100644 index 7bb9eca60..000000000 --- a/src/lib/server/data/earth.90day.utc.json +++ /dev/null @@ -1 +0,0 @@ -{"_90Day":{"1723248000":{"timestamp":1723248000,"cssClass":"api-nodata","message":"No Data"},"1723334400":{"timestamp":1723334400,"cssClass":"api-nodata","message":"No Data"},"1723420800":{"timestamp":1723420800,"cssClass":"api-nodata","message":"No Data"},"1723507200":{"timestamp":1723507200,"cssClass":"api-nodata","message":"No Data"},"1723593600":{"timestamp":1723593600,"cssClass":"api-nodata","message":"No Data"},"1723680000":{"timestamp":1723680000,"cssClass":"api-nodata","message":"No Data"},"1723766400":{"timestamp":1723766400,"cssClass":"api-nodata","message":"No Data"},"1723852800":{"timestamp":1723852800,"cssClass":"api-nodata","message":"No Data"},"1723939200":{"timestamp":1723939200,"cssClass":"api-nodata","message":"No Data"},"1724025600":{"timestamp":1724025600,"cssClass":"api-nodata","message":"No Data"},"1724112000":{"timestamp":1724112000,"cssClass":"api-nodata","message":"No Data"},"1724198400":{"timestamp":1724198400,"cssClass":"api-nodata","message":"No Data"},"1724284800":{"timestamp":1724284800,"cssClass":"api-nodata","message":"No Data"},"1724371200":{"timestamp":1724371200,"cssClass":"api-nodata","message":"No Data"},"1724457600":{"timestamp":1724457600,"cssClass":"api-nodata","message":"No Data"},"1724544000":{"timestamp":1724544000,"cssClass":"api-nodata","message":"No Data"},"1724630400":{"timestamp":1724630400,"cssClass":"api-nodata","message":"No Data"},"1724716800":{"timestamp":1724716800,"cssClass":"api-nodata","message":"No Data"},"1724803200":{"timestamp":1724803200,"cssClass":"api-nodata","message":"No Data"},"1724889600":{"timestamp":1724889600,"cssClass":"api-nodata","message":"No Data"},"1724976000":{"timestamp":1724976000,"cssClass":"api-nodata","message":"No Data"},"1725062400":{"timestamp":1725062400,"cssClass":"api-nodata","message":"No Data"},"1725148800":{"timestamp":1725148800,"cssClass":"api-nodata","message":"No Data"},"1725235200":{"timestamp":1725235200,"cssClass":"api-nodata","message":"No Data"},"1725321600":{"timestamp":1725321600,"cssClass":"api-nodata","message":"No Data"},"1725408000":{"timestamp":1725408000,"cssClass":"api-nodata","message":"No Data"},"1725494400":{"timestamp":1725494400,"cssClass":"api-nodata","message":"No Data"},"1725580800":{"timestamp":1725580800,"cssClass":"api-nodata","message":"No Data"},"1725667200":{"timestamp":1725667200,"cssClass":"api-nodata","message":"No Data"},"1725753600":{"timestamp":1725753600,"cssClass":"api-nodata","message":"No Data"},"1725840000":{"timestamp":1725840000,"cssClass":"api-nodata","message":"No Data"},"1725926400":{"timestamp":1725926400,"cssClass":"api-nodata","message":"No Data"},"1726012800":{"timestamp":1726012800,"cssClass":"api-nodata","message":"No Data"},"1726099200":{"timestamp":1726099200,"cssClass":"api-nodata","message":"No Data"},"1726185600":{"timestamp":1726185600,"cssClass":"api-nodata","message":"No Data"},"1726272000":{"timestamp":1726272000,"cssClass":"api-nodata","message":"No Data"},"1726358400":{"timestamp":1726358400,"cssClass":"api-nodata","message":"No Data"},"1726444800":{"timestamp":1726444800,"cssClass":"api-nodata","message":"No Data"},"1726531200":{"timestamp":1726531200,"cssClass":"api-nodata","message":"No Data"},"1726617600":{"timestamp":1726617600,"cssClass":"api-nodata","message":"No Data"},"1726704000":{"timestamp":1726704000,"cssClass":"api-nodata","message":"No Data"},"1726790400":{"timestamp":1726790400,"cssClass":"api-nodata","message":"No Data"},"1726876800":{"timestamp":1726876800,"cssClass":"api-nodata","message":"No Data"},"1726963200":{"timestamp":1726963200,"cssClass":"api-nodata","message":"No Data"},"1727049600":{"timestamp":1727049600,"cssClass":"api-nodata","message":"No Data"},"1727136000":{"timestamp":1727136000,"cssClass":"api-nodata","message":"No Data"},"1727222400":{"timestamp":1727222400,"cssClass":"api-nodata","message":"No Data"},"1727308800":{"timestamp":1727308800,"cssClass":"api-nodata","message":"No Data"},"1727395200":{"timestamp":1727395200,"cssClass":"api-nodata","message":"No Data"},"1727481600":{"timestamp":1727481600,"cssClass":"api-nodata","message":"No Data"},"1727568000":{"timestamp":1727568000,"cssClass":"api-nodata","message":"No Data"},"1727654400":{"timestamp":1727654400,"cssClass":"api-nodata","message":"No Data"},"1727740800":{"timestamp":1727740800,"cssClass":"api-nodata","message":"No Data"},"1727827200":{"timestamp":1727827200,"cssClass":"api-nodata","message":"No Data"},"1727913600":{"timestamp":1727913600,"cssClass":"api-nodata","message":"No Data"},"1728000000":{"timestamp":1728000000,"cssClass":"api-nodata","message":"No Data"},"1728086400":{"timestamp":1728086400,"cssClass":"api-nodata","message":"No Data"},"1728172800":{"timestamp":1728172800,"cssClass":"api-nodata","message":"No Data"},"1728259200":{"timestamp":1728259200,"cssClass":"api-nodata","message":"No Data"},"1728345600":{"timestamp":1728345600,"cssClass":"api-nodata","message":"No Data"},"1728432000":{"timestamp":1728432000,"cssClass":"api-nodata","message":"No Data"},"1728518400":{"timestamp":1728518400,"cssClass":"api-nodata","message":"No Data"},"1728604800":{"timestamp":1728604800,"cssClass":"api-nodata","message":"No Data"},"1728691200":{"timestamp":1728691200,"cssClass":"api-nodata","message":"No Data"},"1728777600":{"timestamp":1728777600,"cssClass":"api-nodata","message":"No Data"},"1728864000":{"timestamp":1728864000,"cssClass":"api-nodata","message":"No Data"},"1728950400":{"timestamp":1728950400,"cssClass":"api-nodata","message":"No Data"},"1729036800":{"timestamp":1729036800,"cssClass":"api-nodata","message":"No Data"},"1729123200":{"timestamp":1729123200,"cssClass":"api-nodata","message":"No Data"},"1729209600":{"timestamp":1729209600,"cssClass":"api-nodata","message":"No Data"},"1729296000":{"timestamp":1729296000,"cssClass":"api-nodata","message":"No Data"},"1729382400":{"timestamp":1729382400,"cssClass":"api-nodata","message":"No Data"},"1729468800":{"timestamp":1729468800,"cssClass":"api-nodata","message":"No Data"},"1729555200":{"timestamp":1729555200,"cssClass":"api-nodata","message":"No Data"},"1729641600":{"timestamp":1729641600,"cssClass":"api-nodata","message":"No Data"},"1729728000":{"timestamp":1729728000,"cssClass":"api-nodata","message":"No Data"},"1729814400":{"timestamp":1729814400,"cssClass":"api-nodata","message":"No Data"},"1729900800":{"timestamp":1729900800,"cssClass":"api-nodata","message":"No Data"},"1729987200":{"timestamp":1729987200,"cssClass":"api-nodata","message":"No Data"},"1730073600":{"timestamp":1730073600,"cssClass":"api-nodata","message":"No Data"},"1730160000":{"timestamp":1730160000,"cssClass":"api-nodata","message":"No Data"},"1730246400":{"timestamp":1730246400,"cssClass":"api-nodata","message":"No Data"},"1730332800":{"timestamp":1730332800,"cssClass":"api-nodata","message":"No Data"},"1730419200":{"timestamp":1730419200,"cssClass":"api-nodata","message":"No Data"},"1730505600":{"timestamp":1730505600,"cssClass":"api-nodata","message":"No Data"},"1730592000":{"timestamp":1730592000,"cssClass":"api-nodata","message":"No Data"},"1730678400":{"timestamp":1730678400,"cssClass":"api-nodata","message":"No Data"},"1730764800":{"timestamp":1730764800,"cssClass":"api-nodata","message":"No Data"},"1730851200":{"timestamp":1730851200,"cssClass":"api-nodata","message":"No Data"},"1730937600":{"timestamp":1730937600,"cssClass":"api-up","message":"Status OK"},"1731024000":{"timestamp":1731024000,"cssClass":"api-up","message":"Status OK"}},"uptime0Day":"100","uptime90Day":"100","dailyUps":212,"dailyDown":0,"dailyDegraded":0} diff --git a/src/lib/server/data/frogment.0day.utc.json b/src/lib/server/data/frogment.0day.utc.json deleted file mode 100644 index 673399aa1..000000000 --- a/src/lib/server/data/frogment.0day.utc.json +++ /dev/null @@ -1,2067 +0,0 @@ -{ - "1731003360": { - "status": "UP", - "latency": 39, - "type": "realtime" - }, - "1731003420": { - "status": "UP", - "latency": 137, - "type": "realtime" - }, - "1731003480": { - "status": "UP", - "latency": 164, - "type": "realtime" - }, - "1731003540": { - "status": "UP", - "latency": 137, - "type": "realtime" - }, - "1731003600": { - "status": "UP", - "latency": 110, - "type": "realtime" - }, - "1731003660": { - "status": "UP", - "latency": 116, - "type": "realtime" - }, - "1731004380": { - "status": "UP", - "latency": 43, - "type": "realtime" - }, - "1731004440": { - "status": "UP", - "latency": 208, - "type": "realtime" - }, - "1731004500": { - "status": "UP", - "latency": 48, - "type": "realtime" - }, - "1731033300": { - "status": "UP", - "latency": 51, - "type": "realtime" - }, - "1731033660": { - "status": "UP", - "latency": 40, - "type": "realtime" - }, - "1731033720": { - "status": "UP", - "latency": 39, - "type": "realtime" - }, - "1731033780": { - "status": "UP", - "latency": 139, - "type": "realtime" - }, - "1731033840": { - "status": "UP", - "latency": 143, - "type": "realtime" - }, - "1731033900": { - "status": "UP", - "latency": 336, - "type": "realtime" - }, - "1731033960": { - "status": "UP", - "latency": 185, - "type": "realtime" - }, - "1731034020": { - "status": "UP", - "latency": 133, - "type": "realtime" - }, - "1731034080": { - "status": "UP", - "latency": 118, - "type": "realtime" - }, - "1731034140": { - "status": "UP", - "latency": 129, - "type": "realtime" - }, - "1731034200": { - "status": "UP", - "latency": 150, - "type": "realtime" - }, - "1731034260": { - "status": "UP", - "latency": 156, - "type": "realtime" - }, - "1731034320": { - "status": "UP", - "latency": 372, - "type": "realtime" - }, - "1731034380": { - "status": "UP", - "latency": 128, - "type": "realtime" - }, - "1731034440": { - "status": "UP", - "latency": 144, - "type": "realtime" - }, - "1731034500": { - "status": "UP", - "latency": 151, - "type": "realtime" - }, - "1731034560": { - "status": "UP", - "latency": 114, - "type": "realtime" - }, - "1731034620": { - "status": "UP", - "latency": 139, - "type": "realtime" - }, - "1731034680": { - "status": "UP", - "latency": 115, - "type": "realtime" - }, - "1731034740": { - "status": "UP", - "latency": 297, - "type": "realtime" - }, - "1731034800": { - "status": "UP", - "latency": 123, - "type": "realtime" - }, - "1731034860": { - "status": "UP", - "latency": 120, - "type": "realtime" - }, - "1731034920": { - "status": "UP", - "latency": 138, - "type": "realtime" - }, - "1731034980": { - "status": "UP", - "latency": 109, - "type": "realtime" - }, - "1731035040": { - "status": "UP", - "latency": 149, - "type": "realtime" - }, - "1731035100": { - "status": "UP", - "latency": 122, - "type": "realtime" - }, - "1731035160": { - "status": "UP", - "latency": 109, - "type": "realtime" - }, - "1731035220": { - "status": "UP", - "latency": 112, - "type": "realtime" - }, - "1731035280": { - "status": "UP", - "latency": 133, - "type": "realtime" - }, - "1731035340": { - "status": "UP", - "latency": 140, - "type": "realtime" - }, - "1731035400": { - "status": "UP", - "latency": 216, - "type": "realtime" - }, - "1731035460": { - "status": "UP", - "latency": 171, - "type": "realtime" - }, - "1731035520": { - "status": "UP", - "latency": 145, - "type": "realtime" - }, - "1731035580": { - "status": "UP", - "latency": 101, - "type": "realtime" - }, - "1731035640": { - "status": "UP", - "latency": 130, - "type": "realtime" - }, - "1731035700": { - "status": "UP", - "latency": 120, - "type": "realtime" - }, - "1731035760": { - "status": "UP", - "latency": 115, - "type": "realtime" - }, - "1731035820": { - "status": "UP", - "latency": 260, - "type": "realtime" - }, - "1731035880": { - "status": "UP", - "latency": 119, - "type": "realtime" - }, - "1731035940": { - "status": "UP", - "latency": 112, - "type": "realtime" - }, - "1731036000": { - "status": "UP", - "latency": 397, - "type": "realtime" - }, - "1731036060": { - "status": "UP", - "latency": 113, - "type": "realtime" - }, - "1731036120": { - "status": "UP", - "latency": 109, - "type": "realtime" - }, - "1731036180": { - "status": "UP", - "latency": 123, - "type": "realtime" - }, - "1731036240": { - "status": "UP", - "latency": 115, - "type": "realtime" - }, - "1731036300": { - "status": "UP", - "latency": 108, - "type": "realtime" - }, - "1731036360": { - "status": "UP", - "latency": 255, - "type": "realtime" - }, - "1731036420": { - "status": "UP", - "latency": 293, - "type": "realtime" - }, - "1731036480": { - "status": "UP", - "latency": 112, - "type": "realtime" - }, - "1731036540": { - "status": "UP", - "latency": 112, - "type": "realtime" - }, - "1731036600": { - "status": "UP", - "latency": 164, - "type": "realtime" - }, - "1731036660": { - "status": "UP", - "latency": 110, - "type": "realtime" - }, - "1731036720": { - "status": "UP", - "latency": 124, - "type": "realtime" - }, - "1731036780": { - "status": "UP", - "latency": 177, - "type": "realtime" - }, - "1731036840": { - "status": "UP", - "latency": 1327, - "type": "realtime" - }, - "1731036900": { - "status": "UP", - "latency": 307, - "type": "realtime" - }, - "1731036960": { - "status": "UP", - "latency": 152, - "type": "realtime" - }, - "1731037020": { - "status": "UP", - "latency": 143, - "type": "realtime" - }, - "1731037080": { - "status": "UP", - "latency": 332, - "type": "realtime" - }, - "1731037140": { - "status": "UP", - "latency": 129, - "type": "realtime" - }, - "1731037200": { - "status": "UP", - "latency": 327, - "type": "realtime" - }, - "1731037260": { - "status": "UP", - "latency": 2725, - "type": "realtime" - }, - "1731037320": { - "status": "UP", - "latency": 181, - "type": "realtime" - }, - "1731037380": { - "status": "UP", - "latency": 155, - "type": "realtime" - }, - "1731037440": { - "status": "UP", - "latency": 115, - "type": "realtime" - }, - "1731037500": { - "status": "UP", - "latency": 114, - "type": "realtime" - }, - "1731037560": { - "status": "UP", - "latency": 125, - "type": "realtime" - }, - "1731037620": { - "status": "UP", - "latency": 104, - "type": "realtime" - }, - "1731037680": { - "status": "UP", - "latency": 328, - "type": "realtime" - }, - "1731037740": { - "status": "UP", - "latency": 36, - "type": "realtime" - }, - "1731037800": { - "status": "UP", - "latency": 148, - "type": "realtime" - }, - "1731037860": { - "status": "UP", - "latency": 42, - "type": "realtime" - }, - "1731037920": { - "status": "UP", - "latency": 151, - "type": "realtime" - }, - "1731037980": { - "status": "UP", - "latency": 177, - "type": "realtime" - }, - "1731038040": { - "status": "UP", - "latency": 156, - "type": "realtime" - }, - "1731038100": { - "status": "UP", - "latency": 2248, - "type": "realtime" - }, - "1731038160": { - "status": "UP", - "latency": 142, - "type": "realtime" - }, - "1731038220": { - "status": "UP", - "latency": 177, - "type": "realtime" - }, - "1731038280": { - "status": "UP", - "latency": 159, - "type": "realtime" - }, - "1731038340": { - "status": "UP", - "latency": 264, - "type": "realtime" - }, - "1731038400": { - "status": "UP", - "latency": 143, - "type": "realtime" - }, - "1731038460": { - "status": "UP", - "latency": 133, - "type": "realtime" - }, - "1731038520": { - "status": "UP", - "latency": 329, - "type": "realtime" - }, - "1731038580": { - "status": "UP", - "latency": 145, - "type": "realtime" - }, - "1731038640": { - "status": "UP", - "latency": 151, - "type": "realtime" - }, - "1731038700": { - "status": "UP", - "latency": 156, - "type": "realtime" - }, - "1731038760": { - "status": "UP", - "latency": 250, - "type": "realtime" - }, - "1731038820": { - "status": "UP", - "latency": 229, - "type": "realtime" - }, - "1731038880": { - "status": "UP", - "latency": 179, - "type": "realtime" - }, - "1731038940": { - "status": "UP", - "latency": 281, - "type": "realtime" - }, - "1731039000": { - "status": "UP", - "latency": 164, - "type": "realtime" - }, - "1731039060": { - "status": "UP", - "latency": 143, - "type": "realtime" - }, - "1731039120": { - "status": "UP", - "latency": 153, - "type": "realtime" - }, - "1731039180": { - "status": "UP", - "latency": 178, - "type": "realtime" - }, - "1731039240": { - "status": "UP", - "latency": 130, - "type": "realtime" - }, - "1731039300": { - "status": "UP", - "latency": 145, - "type": "realtime" - }, - "1731039360": { - "status": "UP", - "latency": 2216, - "type": "realtime" - }, - "1731039420": { - "status": "UP", - "latency": 181, - "type": "realtime" - }, - "1731039480": { - "status": "UP", - "latency": 137, - "type": "realtime" - }, - "1731039540": { - "status": "UP", - "latency": 118, - "type": "realtime" - }, - "1731039600": { - "status": "UP", - "latency": 122, - "type": "realtime" - }, - "1731039660": { - "status": "UP", - "latency": 115, - "type": "realtime" - }, - "1731039720": { - "status": "UP", - "latency": 113, - "type": "realtime" - }, - "1731039780": { - "status": "UP", - "latency": 285, - "type": "realtime" - }, - "1731039840": { - "status": "UP", - "latency": 121, - "type": "realtime" - }, - "1731039900": { - "status": "UP", - "latency": 234, - "type": "realtime" - }, - "1731040200": { - "status": "UP", - "latency": 688, - "type": "realtime" - }, - "1731041160": { - "status": "UP", - "latency": 3600, - "type": "realtime" - }, - "1731041220": { - "status": "UP", - "latency": 193, - "type": "realtime" - }, - "1731041280": { - "status": "UP", - "latency": 137, - "type": "realtime" - }, - "1731041340": { - "status": "UP", - "latency": 117, - "type": "realtime" - }, - "1731041400": { - "status": "UP", - "latency": 227, - "type": "realtime" - }, - "1731041460": { - "status": "UP", - "latency": 167, - "type": "realtime" - }, - "1731041520": { - "status": "UP", - "latency": 172, - "type": "realtime" - }, - "1731041580": { - "status": "UP", - "latency": 223, - "type": "realtime" - }, - "1731041640": { - "status": "UP", - "latency": 119, - "type": "realtime" - }, - "1731041700": { - "status": "UP", - "latency": 115, - "type": "realtime" - }, - "1731041760": { - "status": "UP", - "latency": 117, - "type": "realtime" - }, - "1731041820": { - "status": "UP", - "latency": 158, - "type": "realtime" - }, - "1731041880": { - "status": "UP", - "latency": 127, - "type": "realtime" - }, - "1731041940": { - "status": "UP", - "latency": 123, - "type": "realtime" - }, - "1731042000": { - "status": "UP", - "latency": 115, - "type": "realtime" - }, - "1731042060": { - "status": "UP", - "latency": 114, - "type": "realtime" - }, - "1731042120": { - "status": "UP", - "latency": 265, - "type": "realtime" - }, - "1731042180": { - "status": "UP", - "latency": 148, - "type": "realtime" - }, - "1731042240": { - "status": "UP", - "latency": 154, - "type": "realtime" - }, - "1731042300": { - "status": "UP", - "latency": 312, - "type": "realtime" - }, - "1731042360": { - "status": "UP", - "latency": 338, - "type": "realtime" - }, - "1731042420": { - "status": "UP", - "latency": 119, - "type": "realtime" - }, - "1731042480": { - "status": "UP", - "latency": 124, - "type": "realtime" - }, - "1731042540": { - "status": "UP", - "latency": 209, - "type": "realtime" - }, - "1731042600": { - "status": "UP", - "latency": 120, - "type": "realtime" - }, - "1731042660": { - "status": "UP", - "latency": 129, - "type": "realtime" - }, - "1731042720": { - "status": "UP", - "latency": 111, - "type": "realtime" - }, - "1731042780": { - "status": "UP", - "latency": 171, - "type": "realtime" - }, - "1731042840": { - "status": "UP", - "latency": 133, - "type": "realtime" - }, - "1731042900": { - "status": "UP", - "latency": 270, - "type": "realtime" - }, - "1731042960": { - "status": "UP", - "latency": 145, - "type": "realtime" - }, - "1731043020": { - "status": "UP", - "latency": 131, - "type": "realtime" - }, - "1731043080": { - "status": "UP", - "latency": 174, - "type": "realtime" - }, - "1731043140": { - "status": "UP", - "latency": 281, - "type": "realtime" - }, - "1731043200": { - "status": "UP", - "latency": 118, - "type": "realtime" - }, - "1731043260": { - "status": "UP", - "latency": 123, - "type": "realtime" - }, - "1731043320": { - "status": "UP", - "latency": 2256, - "type": "realtime" - }, - "1731043380": { - "status": "UP", - "latency": 166, - "type": "realtime" - }, - "1731043440": { - "status": "UP", - "latency": 161, - "type": "realtime" - }, - "1731043500": { - "status": "UP", - "latency": 167, - "type": "realtime" - }, - "1731043560": { - "status": "UP", - "latency": 260, - "type": "realtime" - }, - "1731043620": { - "status": "UP", - "latency": 198, - "type": "realtime" - }, - "1731043680": { - "status": "UP", - "latency": 193, - "type": "realtime" - }, - "1731043740": { - "status": "UP", - "latency": 2732, - "type": "realtime" - }, - "1731043800": { - "status": "UP", - "latency": 161, - "type": "realtime" - }, - "1731043860": { - "status": "UP", - "latency": 113, - "type": "realtime" - }, - "1731043920": { - "status": "UP", - "latency": 137, - "type": "realtime" - }, - "1731043980": { - "status": "UP", - "latency": 290, - "type": "realtime" - }, - "1731044040": { - "status": "UP", - "latency": 444, - "type": "realtime" - }, - "1731044100": { - "status": "UP", - "latency": 119, - "type": "realtime" - }, - "1731044160": { - "status": "UP", - "latency": 338, - "type": "realtime" - }, - "1731044220": { - "status": "UP", - "latency": 181, - "type": "realtime" - }, - "1731044280": { - "status": "UP", - "latency": 186, - "type": "realtime" - }, - "1731044340": { - "status": "UP", - "latency": 184, - "type": "realtime" - }, - "1731044400": { - "status": "UP", - "latency": 157, - "type": "realtime" - }, - "1731044460": { - "status": "UP", - "latency": 118, - "type": "realtime" - }, - "1731044520": { - "status": "UP", - "latency": 107, - "type": "realtime" - }, - "1731044580": { - "status": "UP", - "latency": 2399, - "type": "realtime" - }, - "1731044640": { - "status": "UP", - "latency": 121, - "type": "realtime" - }, - "1731044700": { - "status": "UP", - "latency": 162, - "type": "realtime" - }, - "1731044760": { - "status": "UP", - "latency": 188, - "type": "realtime" - }, - "1731044820": { - "status": "UP", - "latency": 163, - "type": "realtime" - }, - "1731044880": { - "status": "UP", - "latency": 189, - "type": "realtime" - }, - "1731044940": { - "status": "UP", - "latency": 144, - "type": "realtime" - }, - "1731045000": { - "status": "UP", - "latency": 2598, - "type": "realtime" - }, - "1731045060": { - "status": "UP", - "latency": 152, - "type": "realtime" - }, - "1731045120": { - "status": "UP", - "latency": 147, - "type": "realtime" - }, - "1731045180": { - "status": "UP", - "latency": 324, - "type": "realtime" - }, - "1731045240": { - "status": "UP", - "latency": 452, - "type": "realtime" - }, - "1731045300": { - "status": "UP", - "latency": 166, - "type": "realtime" - }, - "1731045360": { - "status": "UP", - "latency": 317, - "type": "realtime" - }, - "1731045420": { - "status": "UP", - "latency": 2504, - "type": "realtime" - }, - "1731045480": { - "status": "UP", - "latency": 311, - "type": "realtime" - }, - "1731045540": { - "status": "UP", - "latency": 1420, - "type": "realtime" - }, - "1731045600": { - "status": "UP", - "latency": 311, - "type": "realtime" - }, - "1731045660": { - "status": "UP", - "latency": 171, - "type": "realtime" - }, - "1731045720": { - "status": "UP", - "latency": 175, - "type": "realtime" - }, - "1731045780": { - "status": "UP", - "latency": 177, - "type": "realtime" - }, - "1731045840": { - "status": "UP", - "latency": 630, - "type": "realtime" - }, - "1731045900": { - "status": "UP", - "latency": 147, - "type": "realtime" - }, - "1731045960": { - "status": "UP", - "latency": 135, - "type": "realtime" - }, - "1731046020": { - "status": "UP", - "latency": 322, - "type": "realtime" - }, - "1731046080": { - "status": "UP", - "latency": 141, - "type": "realtime" - }, - "1731046140": { - "status": "UP", - "latency": 166, - "type": "realtime" - }, - "1731046200": { - "status": "UP", - "latency": 120, - "type": "realtime" - }, - "1731046260": { - "status": "UP", - "latency": 2232, - "type": "realtime" - }, - "1731046320": { - "status": "UP", - "latency": 165, - "type": "realtime" - }, - "1731046380": { - "status": "UP", - "latency": 166, - "type": "realtime" - }, - "1731046440": { - "status": "UP", - "latency": 517, - "type": "realtime" - }, - "1731046500": { - "status": "UP", - "latency": 174, - "type": "realtime" - }, - "1731046560": { - "status": "UP", - "latency": 182, - "type": "realtime" - }, - "1731046620": { - "status": "UP", - "latency": 161, - "type": "realtime" - }, - "1731046680": { - "status": "UP", - "latency": 349, - "type": "realtime" - }, - "1731046740": { - "status": "UP", - "latency": 164, - "type": "realtime" - }, - "1731046800": { - "status": "UP", - "latency": 145, - "type": "realtime" - }, - "1731047040": { - "status": "UP", - "latency": 45, - "type": "realtime" - }, - "1731047100": { - "status": "UP", - "latency": 147, - "type": "realtime" - }, - "1731047160": { - "status": "UP", - "latency": 171, - "type": "realtime" - }, - "1731047220": { - "status": "UP", - "latency": 176, - "type": "realtime" - }, - "1731047280": { - "status": "UP", - "latency": 255, - "type": "realtime" - }, - "1731047340": { - "status": "UP", - "latency": 161, - "type": "realtime" - }, - "1731047400": { - "status": "UP", - "latency": 171, - "type": "realtime" - }, - "1731075120": { - "status": "UP", - "latency": 48, - "type": "realtime" - }, - "1731075180": { - "status": "UP", - "latency": 50, - "type": "realtime" - }, - "1731075240": { - "status": "UP", - "latency": 162, - "type": "realtime" - }, - "1731075300": { - "status": "UP", - "latency": 127, - "type": "realtime" - }, - "1731075360": { - "status": "UP", - "latency": 173, - "type": "realtime" - }, - "1731075420": { - "status": "UP", - "latency": 161, - "type": "realtime" - }, - "1731075480": { - "status": "UP", - "latency": 178, - "type": "realtime" - }, - "1731075540": { - "status": "UP", - "latency": 176, - "type": "realtime" - }, - "1731075600": { - "status": "UP", - "latency": 36, - "type": "realtime" - }, - "1731075660": { - "status": "UP", - "latency": 111, - "type": "realtime" - }, - "1731075720": { - "status": "UP", - "latency": 209, - "type": "realtime" - }, - "1731075780": { - "status": "UP", - "latency": 199, - "type": "realtime" - }, - "1731075840": { - "status": "UP", - "latency": 229, - "type": "realtime" - }, - "1731075900": { - "status": "UP", - "latency": 1224, - "type": "realtime" - }, - "1731075960": { - "status": "UP", - "latency": 303, - "type": "realtime" - }, - "1731076020": { - "status": "UP", - "latency": 200, - "type": "realtime" - }, - "1731076080": { - "status": "UP", - "latency": 1232, - "type": "realtime" - }, - "1731076140": { - "status": "UP", - "latency": 193, - "type": "realtime" - }, - "1731076200": { - "status": "UP", - "latency": 221, - "type": "realtime" - }, - "1731076260": { - "status": "UP", - "latency": 235, - "type": "realtime" - }, - "1731076320": { - "status": "UP", - "latency": 241, - "type": "realtime" - }, - "1731076380": { - "status": "UP", - "latency": 287, - "type": "realtime" - }, - "1731076440": { - "status": "UP", - "latency": 139, - "type": "realtime" - }, - "1731076500": { - "status": "UP", - "latency": 3410, - "type": "realtime" - }, - "1731076560": { - "status": "UP", - "latency": 150, - "type": "realtime" - }, - "1731076620": { - "status": "UP", - "latency": 303, - "type": "realtime" - }, - "1731076680": { - "status": "UP", - "latency": 158, - "type": "realtime" - }, - "1731076740": { - "status": "UP", - "latency": 131, - "type": "realtime" - }, - "1731076800": { - "status": "UP", - "latency": 41, - "type": "realtime" - }, - "1731076860": { - "status": "UP", - "latency": 50, - "type": "realtime" - }, - "1731076920": { - "status": "UP", - "latency": 33, - "type": "realtime" - }, - "1731076980": { - "status": "UP", - "latency": 45, - "type": "realtime" - }, - "1731077040": { - "status": "UP", - "latency": 52, - "type": "realtime" - }, - "1731077100": { - "status": "UP", - "latency": 403, - "type": "realtime" - }, - "1731077160": { - "status": "UP", - "latency": 186, - "type": "realtime" - }, - "1731077220": { - "status": "UP", - "latency": 45, - "type": "realtime" - }, - "1731077280": { - "status": "UP", - "latency": 166, - "type": "realtime" - }, - "1731077340": { - "status": "UP", - "latency": 2241, - "type": "realtime" - }, - "1731077400": { - "status": "UP", - "latency": 120, - "type": "realtime" - }, - "1731077460": { - "status": "UP", - "latency": 130, - "type": "realtime" - }, - "1731077520": { - "status": "UP", - "latency": 136, - "type": "realtime" - }, - "1731077580": { - "status": "UP", - "latency": 109, - "type": "realtime" - }, - "1731077640": { - "status": "UP", - "latency": 254, - "type": "realtime" - }, - "1731077700": { - "status": "UP", - "latency": 116, - "type": "realtime" - }, - "1731077760": { - "status": "UP", - "latency": 2942, - "type": "realtime" - }, - "1731077820": { - "status": "UP", - "latency": 144, - "type": "realtime" - }, - "1731077880": { - "status": "UP", - "latency": 180, - "type": "realtime" - }, - "1731077940": { - "status": "UP", - "latency": 127, - "type": "realtime" - }, - "1731078000": { - "status": "UP", - "latency": 314, - "type": "realtime" - }, - "1731078060": { - "status": "UP", - "latency": 298, - "type": "realtime" - }, - "1731078120": { - "status": "UP", - "latency": 191, - "type": "realtime" - }, - "1731078180": { - "status": "UP", - "latency": 516, - "type": "realtime" - }, - "1731078240": { - "status": "UP", - "latency": 167, - "type": "realtime" - }, - "1731078300": { - "status": "UP", - "latency": 154, - "type": "realtime" - }, - "1731078360": { - "status": "UP", - "latency": 234, - "type": "realtime" - }, - "1731078420": { - "status": "UP", - "latency": 167, - "type": "realtime" - }, - "1731078480": { - "status": "UP", - "latency": 313, - "type": "realtime" - }, - "1731078540": { - "status": "UP", - "latency": 170, - "type": "realtime" - }, - "1731078600": { - "status": "UP", - "latency": 282, - "type": "realtime" - }, - "1731078660": { - "status": "UP", - "latency": 153, - "type": "realtime" - }, - "1731078720": { - "status": "UP", - "latency": 183, - "type": "realtime" - }, - "1731078780": { - "status": "UP", - "latency": 107, - "type": "realtime" - }, - "1731078840": { - "status": "UP", - "latency": 102, - "type": "realtime" - }, - "1731078900": { - "status": "UP", - "latency": 51, - "type": "realtime" - }, - "1731078960": { - "status": "UP", - "latency": 192, - "type": "realtime" - }, - "1731079020": { - "status": "UP", - "latency": 223, - "type": "realtime" - }, - "1731079080": { - "status": "UP", - "latency": 139, - "type": "realtime" - }, - "1731079140": { - "status": "UP", - "latency": 159, - "type": "realtime" - }, - "1731079200": { - "status": "UP", - "latency": 328, - "type": "realtime" - }, - "1731079260": { - "status": "UP", - "latency": 148, - "type": "realtime" - }, - "1731079320": { - "status": "UP", - "latency": 221, - "type": "realtime" - }, - "1731079380": { - "status": "UP", - "latency": 112, - "type": "realtime" - }, - "1731079440": { - "status": "UP", - "latency": 289, - "type": "realtime" - }, - "1731079500": { - "status": "UP", - "latency": 169, - "type": "realtime" - }, - "1731079560": { - "status": "UP", - "latency": 183, - "type": "realtime" - }, - "1731079620": { - "status": "UP", - "latency": 198, - "type": "realtime" - }, - "1731079680": { - "status": "UP", - "latency": 149, - "type": "realtime" - }, - "1731079740": { - "status": "UP", - "latency": 223, - "type": "realtime" - }, - "1731079800": { - "status": "UP", - "latency": 194, - "type": "realtime" - }, - "1731079860": { - "status": "UP", - "latency": 2195, - "type": "realtime" - }, - "1731079920": { - "status": "UP", - "latency": 169, - "type": "realtime" - }, - "1731079980": { - "status": "UP", - "latency": 148, - "type": "realtime" - }, - "1731080040": { - "status": "UP", - "latency": 149, - "type": "realtime" - }, - "1731080100": { - "status": "UP", - "latency": 149, - "type": "realtime" - }, - "1731080160": { - "status": "UP", - "latency": 187, - "type": "realtime" - }, - "1731080220": { - "status": "UP", - "latency": 108, - "type": "realtime" - }, - "1731080280": { - "status": "UP", - "latency": 245, - "type": "realtime" - }, - "1731080340": { - "status": "UP", - "latency": 139, - "type": "realtime" - }, - "1731080400": { - "status": "UP", - "latency": 191, - "type": "realtime" - }, - "1731080460": { - "status": "UP", - "latency": 151, - "type": "realtime" - }, - "1731080520": { - "status": "UP", - "latency": 169, - "type": "realtime" - }, - "1731080580": { - "status": "UP", - "latency": 244, - "type": "realtime" - }, - "1731080640": { - "status": "UP", - "latency": 117, - "type": "realtime" - }, - "1731080700": { - "status": "UP", - "latency": 3516, - "type": "realtime" - }, - "1731080760": { - "status": "UP", - "latency": 158, - "type": "realtime" - }, - "1731080820": { - "status": "UP", - "latency": 146, - "type": "realtime" - }, - "1731080880": { - "status": "UP", - "latency": 144, - "type": "realtime" - }, - "1731080940": { - "status": "UP", - "latency": 204, - "type": "realtime" - }, - "1731081000": { - "status": "UP", - "latency": 267, - "type": "realtime" - }, - "1731081060": { - "status": "UP", - "latency": 131, - "type": "realtime" - }, - "1731081120": { - "status": "UP", - "latency": 260, - "type": "realtime" - }, - "1731081180": { - "status": "UP", - "latency": 164, - "type": "realtime" - }, - "1731081240": { - "status": "UP", - "latency": 124, - "type": "realtime" - }, - "1731081300": { - "status": "UP", - "latency": 123, - "type": "realtime" - }, - "1731081360": { - "status": "UP", - "latency": 123, - "type": "realtime" - }, - "1731081420": { - "status": "UP", - "latency": 259, - "type": "realtime" - }, - "1731081480": { - "status": "UP", - "latency": 233, - "type": "realtime" - }, - "1731081540": { - "status": "UP", - "latency": 331, - "type": "realtime" - }, - "1731081600": { - "status": "UP", - "latency": 114, - "type": "realtime" - }, - "1731081660": { - "status": "UP", - "latency": 111, - "type": "realtime" - }, - "1731081720": { - "status": "UP", - "latency": 129, - "type": "realtime" - }, - "1731081780": { - "status": "UP", - "latency": 106, - "type": "realtime" - }, - "1731081840": { - "status": "UP", - "latency": 196, - "type": "realtime" - }, - "1731081900": { - "status": "UP", - "latency": 148, - "type": "realtime" - }, - "1731081960": { - "status": "UP", - "latency": 342, - "type": "realtime" - }, - "1731082020": { - "status": "UP", - "latency": 106, - "type": "realtime" - }, - "1731082080": { - "status": "UP", - "latency": 113, - "type": "realtime" - }, - "1731082140": { - "status": "UP", - "latency": 138, - "type": "realtime" - }, - "1731082200": { - "status": "UP", - "latency": 154, - "type": "realtime" - }, - "1731082260": { - "status": "UP", - "latency": 226, - "type": "realtime" - }, - "1731082320": { - "status": "UP", - "latency": 149, - "type": "realtime" - }, - "1731082380": { - "status": "UP", - "latency": 365, - "type": "realtime" - }, - "1731082440": { - "status": "UP", - "latency": 175, - "type": "realtime" - }, - "1731082500": { - "status": "UP", - "latency": 121, - "type": "realtime" - }, - "1731082560": { - "status": "UP", - "latency": 158, - "type": "realtime" - }, - "1731082620": { - "status": "UP", - "latency": 168, - "type": "realtime" - }, - "1731082680": { - "status": "UP", - "latency": 281, - "type": "realtime" - }, - "1731082740": { - "status": "UP", - "latency": 172, - "type": "realtime" - }, - "1731082800": { - "status": "UP", - "latency": 2240, - "type": "realtime" - }, - "1731082860": { - "status": "UP", - "latency": 135, - "type": "realtime" - }, - "1731082920": { - "status": "UP", - "latency": 120, - "type": "realtime" - }, - "1731082980": { - "status": "UP", - "latency": 113, - "type": "realtime" - }, - "1731083040": { - "status": "UP", - "latency": 120, - "type": "realtime" - }, - "1731083100": { - "status": "UP", - "latency": 116, - "type": "realtime" - }, - "1731083160": { - "status": "UP", - "latency": 162, - "type": "realtime" - }, - "1731083220": { - "status": "UP", - "latency": 2507, - "type": "realtime" - }, - "1731083280": { - "status": "UP", - "latency": 131, - "type": "realtime" - }, - "1731083340": { - "status": "UP", - "latency": 168, - "type": "realtime" - }, - "1731083400": { - "status": "UP", - "latency": 169, - "type": "realtime" - }, - "1731083460": { - "status": "UP", - "latency": 277, - "type": "realtime" - }, - "1731083520": { - "status": "UP", - "latency": 221, - "type": "realtime" - }, - "1731083580": { - "status": "UP", - "latency": 170, - "type": "realtime" - }, - "1731083640": { - "status": "UP", - "latency": 49, - "type": "realtime" - }, - "1731083700": { - "status": "UP", - "latency": 202, - "type": "realtime" - }, - "1731083760": { - "status": "UP", - "latency": 175, - "type": "realtime" - }, - "1731083820": { - "status": "UP", - "latency": 101, - "type": "realtime" - }, - "1731083880": { - "status": "UP", - "latency": 158, - "type": "realtime" - }, - "1731083940": { - "status": "UP", - "latency": 171, - "type": "realtime" - }, - "1731084000": { - "status": "UP", - "latency": 172, - "type": "realtime" - }, - "1731084060": { - "status": "UP", - "latency": 321, - "type": "realtime" - }, - "1731084120": { - "status": "UP", - "latency": 156, - "type": "realtime" - }, - "1731084180": { - "status": "UP", - "latency": 112, - "type": "realtime" - }, - "1731084240": { - "status": "UP", - "latency": 368, - "type": "realtime" - }, - "1731084300": { - "status": "UP", - "latency": 164, - "type": "realtime" - }, - "1731084360": { - "status": "UP", - "latency": 165, - "type": "realtime" - }, - "1731084420": { - "status": "UP", - "latency": 195, - "type": "realtime" - }, - "1731084480": { - "status": "UP", - "latency": 320, - "type": "realtime" - }, - "1731084540": { - "status": "UP", - "latency": 145, - "type": "realtime" - }, - "1731084600": { - "status": "UP", - "latency": 132, - "type": "realtime" - }, - "1731084660": { - "status": "UP", - "latency": 266, - "type": "realtime" - }, - "1731084720": { - "status": "UP", - "latency": 159, - "type": "realtime" - }, - "1731084780": { - "status": "UP", - "latency": 159, - "type": "realtime" - }, - "1731084840": { - "status": "UP", - "latency": 182, - "type": "realtime" - }, - "1731084900": { - "status": "UP", - "latency": 2240, - "type": "realtime" - }, - "1731084960": { - "status": "UP", - "latency": 148, - "type": "realtime" - }, - "1731085020": { - "status": "UP", - "latency": 155, - "type": "realtime" - }, - "1731085080": { - "status": "UP", - "latency": 353, - "type": "realtime" - }, - "1731085140": { - "status": "UP", - "latency": 165, - "type": "realtime" - }, - "1731085200": { - "status": "UP", - "latency": 191, - "type": "realtime" - }, - "1731085260": { - "status": "UP", - "latency": 145, - "type": "realtime" - }, - "1731085320": { - "status": "UP", - "latency": 2449, - "type": "realtime" - }, - "1731085380": { - "status": "UP", - "latency": 157, - "type": "realtime" - }, - "1731085440": { - "status": "UP", - "latency": 154, - "type": "realtime" - }, - "1731085500": { - "status": "UP", - "latency": 215, - "type": "realtime" - }, - "1731085560": { - "status": "UP", - "latency": 174, - "type": "realtime" - }, - "1731085620": { - "status": "UP", - "latency": 143, - "type": "realtime" - }, - "1731085680": { - "status": "UP", - "latency": 163, - "type": "realtime" - }, - "1731085740": { - "status": "UP", - "latency": 277, - "type": "realtime" - }, - "1731085800": { - "status": "UP", - "latency": 153, - "type": "realtime" - }, - "1731085860": { - "status": "UP", - "latency": 167, - "type": "realtime" - }, - "1731085920": { - "status": "UP", - "latency": 292, - "type": "realtime" - }, - "1731085980": { - "status": "UP", - "latency": 155, - "type": "realtime" - }, - "1731086040": { - "status": "UP", - "latency": 166, - "type": "realtime" - }, - "1731086100": { - "status": "UP", - "latency": 163, - "type": "realtime" - }, - "1731086160": { - "status": "UP", - "latency": 332, - "type": "realtime" - }, - "1731086220": { - "status": "UP", - "latency": 219, - "type": "realtime" - }, - "1731086280": { - "status": "UP", - "latency": 346, - "type": "realtime" - }, - "1731086340": { - "status": "UP", - "latency": 231, - "type": "realtime" - }, - "1731086400": { - "status": "UP", - "latency": 157, - "type": "realtime" - }, - "1731086460": { - "status": "UP", - "latency": 480, - "type": "realtime" - }, - "1731086520": { - "status": "UP", - "latency": 177, - "type": "realtime" - }, - "1731086580": { - "status": "UP", - "latency": 328, - "type": "realtime" - }, - "1731086640": { - "status": "UP", - "latency": 148, - "type": "realtime" - }, - "1731086700": { - "status": "UP", - "latency": 149, - "type": "realtime" - }, - "1731086760": { - "status": "UP", - "latency": 159, - "type": "realtime" - } -} \ No newline at end of file diff --git a/src/lib/server/data/frogment.90day.utc.json b/src/lib/server/data/frogment.90day.utc.json deleted file mode 100644 index 49c8fadfe..000000000 --- a/src/lib/server/data/frogment.90day.utc.json +++ /dev/null @@ -1 +0,0 @@ -{"_90Day":{"1723248000":{"timestamp":1723248000,"cssClass":"api-nodata","message":"No Data"},"1723334400":{"timestamp":1723334400,"cssClass":"api-nodata","message":"No Data"},"1723420800":{"timestamp":1723420800,"cssClass":"api-nodata","message":"No Data"},"1723507200":{"timestamp":1723507200,"cssClass":"api-nodata","message":"No Data"},"1723593600":{"timestamp":1723593600,"cssClass":"api-nodata","message":"No Data"},"1723680000":{"timestamp":1723680000,"cssClass":"api-nodata","message":"No Data"},"1723766400":{"timestamp":1723766400,"cssClass":"api-nodata","message":"No Data"},"1723852800":{"timestamp":1723852800,"cssClass":"api-nodata","message":"No Data"},"1723939200":{"timestamp":1723939200,"cssClass":"api-nodata","message":"No Data"},"1724025600":{"timestamp":1724025600,"cssClass":"api-nodata","message":"No Data"},"1724112000":{"timestamp":1724112000,"cssClass":"api-nodata","message":"No Data"},"1724198400":{"timestamp":1724198400,"cssClass":"api-nodata","message":"No Data"},"1724284800":{"timestamp":1724284800,"cssClass":"api-nodata","message":"No Data"},"1724371200":{"timestamp":1724371200,"cssClass":"api-nodata","message":"No Data"},"1724457600":{"timestamp":1724457600,"cssClass":"api-nodata","message":"No Data"},"1724544000":{"timestamp":1724544000,"cssClass":"api-nodata","message":"No Data"},"1724630400":{"timestamp":1724630400,"cssClass":"api-nodata","message":"No Data"},"1724716800":{"timestamp":1724716800,"cssClass":"api-nodata","message":"No Data"},"1724803200":{"timestamp":1724803200,"cssClass":"api-nodata","message":"No Data"},"1724889600":{"timestamp":1724889600,"cssClass":"api-nodata","message":"No Data"},"1724976000":{"timestamp":1724976000,"cssClass":"api-nodata","message":"No Data"},"1725062400":{"timestamp":1725062400,"cssClass":"api-nodata","message":"No Data"},"1725148800":{"timestamp":1725148800,"cssClass":"api-nodata","message":"No Data"},"1725235200":{"timestamp":1725235200,"cssClass":"api-nodata","message":"No Data"},"1725321600":{"timestamp":1725321600,"cssClass":"api-nodata","message":"No Data"},"1725408000":{"timestamp":1725408000,"cssClass":"api-nodata","message":"No Data"},"1725494400":{"timestamp":1725494400,"cssClass":"api-nodata","message":"No Data"},"1725580800":{"timestamp":1725580800,"cssClass":"api-nodata","message":"No Data"},"1725667200":{"timestamp":1725667200,"cssClass":"api-nodata","message":"No Data"},"1725753600":{"timestamp":1725753600,"cssClass":"api-nodata","message":"No Data"},"1725840000":{"timestamp":1725840000,"cssClass":"api-nodata","message":"No Data"},"1725926400":{"timestamp":1725926400,"cssClass":"api-nodata","message":"No Data"},"1726012800":{"timestamp":1726012800,"cssClass":"api-nodata","message":"No Data"},"1726099200":{"timestamp":1726099200,"cssClass":"api-nodata","message":"No Data"},"1726185600":{"timestamp":1726185600,"cssClass":"api-nodata","message":"No Data"},"1726272000":{"timestamp":1726272000,"cssClass":"api-nodata","message":"No Data"},"1726358400":{"timestamp":1726358400,"cssClass":"api-nodata","message":"No Data"},"1726444800":{"timestamp":1726444800,"cssClass":"api-nodata","message":"No Data"},"1726531200":{"timestamp":1726531200,"cssClass":"api-nodata","message":"No Data"},"1726617600":{"timestamp":1726617600,"cssClass":"api-nodata","message":"No Data"},"1726704000":{"timestamp":1726704000,"cssClass":"api-nodata","message":"No Data"},"1726790400":{"timestamp":1726790400,"cssClass":"api-nodata","message":"No Data"},"1726876800":{"timestamp":1726876800,"cssClass":"api-nodata","message":"No Data"},"1726963200":{"timestamp":1726963200,"cssClass":"api-nodata","message":"No Data"},"1727049600":{"timestamp":1727049600,"cssClass":"api-nodata","message":"No Data"},"1727136000":{"timestamp":1727136000,"cssClass":"api-nodata","message":"No Data"},"1727222400":{"timestamp":1727222400,"cssClass":"api-nodata","message":"No Data"},"1727308800":{"timestamp":1727308800,"cssClass":"api-nodata","message":"No Data"},"1727395200":{"timestamp":1727395200,"cssClass":"api-nodata","message":"No Data"},"1727481600":{"timestamp":1727481600,"cssClass":"api-nodata","message":"No Data"},"1727568000":{"timestamp":1727568000,"cssClass":"api-nodata","message":"No Data"},"1727654400":{"timestamp":1727654400,"cssClass":"api-nodata","message":"No Data"},"1727740800":{"timestamp":1727740800,"cssClass":"api-nodata","message":"No Data"},"1727827200":{"timestamp":1727827200,"cssClass":"api-nodata","message":"No Data"},"1727913600":{"timestamp":1727913600,"cssClass":"api-nodata","message":"No Data"},"1728000000":{"timestamp":1728000000,"cssClass":"api-nodata","message":"No Data"},"1728086400":{"timestamp":1728086400,"cssClass":"api-nodata","message":"No Data"},"1728172800":{"timestamp":1728172800,"cssClass":"api-nodata","message":"No Data"},"1728259200":{"timestamp":1728259200,"cssClass":"api-nodata","message":"No Data"},"1728345600":{"timestamp":1728345600,"cssClass":"api-nodata","message":"No Data"},"1728432000":{"timestamp":1728432000,"cssClass":"api-nodata","message":"No Data"},"1728518400":{"timestamp":1728518400,"cssClass":"api-nodata","message":"No Data"},"1728604800":{"timestamp":1728604800,"cssClass":"api-nodata","message":"No Data"},"1728691200":{"timestamp":1728691200,"cssClass":"api-nodata","message":"No Data"},"1728777600":{"timestamp":1728777600,"cssClass":"api-nodata","message":"No Data"},"1728864000":{"timestamp":1728864000,"cssClass":"api-nodata","message":"No Data"},"1728950400":{"timestamp":1728950400,"cssClass":"api-nodata","message":"No Data"},"1729036800":{"timestamp":1729036800,"cssClass":"api-nodata","message":"No Data"},"1729123200":{"timestamp":1729123200,"cssClass":"api-nodata","message":"No Data"},"1729209600":{"timestamp":1729209600,"cssClass":"api-nodata","message":"No Data"},"1729296000":{"timestamp":1729296000,"cssClass":"api-nodata","message":"No Data"},"1729382400":{"timestamp":1729382400,"cssClass":"api-nodata","message":"No Data"},"1729468800":{"timestamp":1729468800,"cssClass":"api-nodata","message":"No Data"},"1729555200":{"timestamp":1729555200,"cssClass":"api-nodata","message":"No Data"},"1729641600":{"timestamp":1729641600,"cssClass":"api-nodata","message":"No Data"},"1729728000":{"timestamp":1729728000,"cssClass":"api-nodata","message":"No Data"},"1729814400":{"timestamp":1729814400,"cssClass":"api-nodata","message":"No Data"},"1729900800":{"timestamp":1729900800,"cssClass":"api-nodata","message":"No Data"},"1729987200":{"timestamp":1729987200,"cssClass":"api-nodata","message":"No Data"},"1730073600":{"timestamp":1730073600,"cssClass":"api-nodata","message":"No Data"},"1730160000":{"timestamp":1730160000,"cssClass":"api-nodata","message":"No Data"},"1730246400":{"timestamp":1730246400,"cssClass":"api-nodata","message":"No Data"},"1730332800":{"timestamp":1730332800,"cssClass":"api-nodata","message":"No Data"},"1730419200":{"timestamp":1730419200,"cssClass":"api-nodata","message":"No Data"},"1730505600":{"timestamp":1730505600,"cssClass":"api-nodata","message":"No Data"},"1730592000":{"timestamp":1730592000,"cssClass":"api-nodata","message":"No Data"},"1730678400":{"timestamp":1730678400,"cssClass":"api-nodata","message":"No Data"},"1730764800":{"timestamp":1730764800,"cssClass":"api-nodata","message":"No Data"},"1730851200":{"timestamp":1730851200,"cssClass":"api-nodata","message":"No Data"},"1730937600":{"timestamp":1730937600,"cssClass":"api-up","message":"Status OK"},"1731024000":{"timestamp":1731024000,"cssClass":"api-up","message":"Status OK"}},"uptime0Day":"100","uptime90Day":"100","dailyUps":403,"dailyDown":0,"dailyDegraded":0} diff --git a/src/lib/server/data/google-search.0day.utc.json b/src/lib/server/data/google-search.0day.utc.json deleted file mode 100644 index 515ac2654..000000000 --- a/src/lib/server/data/google-search.0day.utc.json +++ /dev/null @@ -1,2067 +0,0 @@ -{ - "1731003360": { - "status": "UP", - "latency": 1191, - "type": "realtime" - }, - "1731003420": { - "status": "UP", - "latency": 191, - "type": "realtime" - }, - "1731003480": { - "status": "UP", - "latency": 191, - "type": "realtime" - }, - "1731003540": { - "status": "UP", - "latency": 198, - "type": "realtime" - }, - "1731003600": { - "status": "UP", - "latency": 198, - "type": "realtime" - }, - "1731003660": { - "status": "UP", - "latency": 199, - "type": "realtime" - }, - "1731004380": { - "status": "UP", - "latency": 94, - "type": "realtime" - }, - "1731004440": { - "status": "UP", - "latency": 181, - "type": "realtime" - }, - "1731004500": { - "status": "UP", - "latency": 85, - "type": "realtime" - }, - "1731031740": { - "status": "UP", - "latency": 461, - "type": "realtime" - }, - "1731033300": { - "status": "UP", - "latency": 539, - "type": "realtime" - }, - "1731033660": { - "status": "UP", - "latency": 544, - "type": "realtime" - }, - "1731033780": { - "status": "UP", - "latency": 653, - "type": "realtime" - }, - "1731033840": { - "status": "UP", - "latency": 675, - "type": "realtime" - }, - "1731033900": { - "status": "UP", - "latency": 625, - "type": "realtime" - }, - "1731033960": { - "status": "UP", - "latency": 558, - "type": "realtime" - }, - "1731034020": { - "status": "UP", - "latency": 574, - "type": "realtime" - }, - "1731034080": { - "status": "UP", - "latency": 562, - "type": "realtime" - }, - "1731034140": { - "status": "UP", - "latency": 544, - "type": "realtime" - }, - "1731034200": { - "status": "UP", - "latency": 563, - "type": "realtime" - }, - "1731034260": { - "status": "UP", - "latency": 957, - "type": "realtime" - }, - "1731034320": { - "status": "UP", - "latency": 629, - "type": "realtime" - }, - "1731034380": { - "status": "UP", - "latency": 784, - "type": "realtime" - }, - "1731034440": { - "status": "UP", - "latency": 557, - "type": "realtime" - }, - "1731034500": { - "status": "UP", - "latency": 1284, - "type": "realtime" - }, - "1731034560": { - "status": "UP", - "latency": 751, - "type": "realtime" - }, - "1731034620": { - "status": "UP", - "latency": 684, - "type": "realtime" - }, - "1731034680": { - "status": "UP", - "latency": 702, - "type": "realtime" - }, - "1731034740": { - "status": "UP", - "latency": 748, - "type": "realtime" - }, - "1731034800": { - "status": "UP", - "latency": 705, - "type": "realtime" - }, - "1731034860": { - "status": "UP", - "latency": 754, - "type": "realtime" - }, - "1731034920": { - "status": "UP", - "latency": 754, - "type": "realtime" - }, - "1731034980": { - "status": "UP", - "latency": 759, - "type": "realtime" - }, - "1731035040": { - "status": "UP", - "latency": 763, - "type": "realtime" - }, - "1731035100": { - "status": "UP", - "latency": 683, - "type": "realtime" - }, - "1731035160": { - "status": "UP", - "latency": 773, - "type": "realtime" - }, - "1731035220": { - "status": "UP", - "latency": 762, - "type": "realtime" - }, - "1731035280": { - "status": "UP", - "latency": 746, - "type": "realtime" - }, - "1731035340": { - "status": "UP", - "latency": 741, - "type": "realtime" - }, - "1731035400": { - "status": "UP", - "latency": 711, - "type": "realtime" - }, - "1731035460": { - "status": "UP", - "latency": 709, - "type": "realtime" - }, - "1731035520": { - "status": "UP", - "latency": 598, - "type": "realtime" - }, - "1731035580": { - "status": "UP", - "latency": 568, - "type": "realtime" - }, - "1731035640": { - "status": "UP", - "latency": 573, - "type": "realtime" - }, - "1731035700": { - "status": "UP", - "latency": 593, - "type": "realtime" - }, - "1731035760": { - "status": "UP", - "latency": 546, - "type": "realtime" - }, - "1731035820": { - "status": "UP", - "latency": 579, - "type": "realtime" - }, - "1731035880": { - "status": "UP", - "latency": 585, - "type": "realtime" - }, - "1731035940": { - "status": "UP", - "latency": 590, - "type": "realtime" - }, - "1731036000": { - "status": "UP", - "latency": 533, - "type": "realtime" - }, - "1731036060": { - "status": "UP", - "latency": 541, - "type": "realtime" - }, - "1731036120": { - "status": "UP", - "latency": 636, - "type": "realtime" - }, - "1731036180": { - "status": "UP", - "latency": 694, - "type": "realtime" - }, - "1731036240": { - "status": "UP", - "latency": 871, - "type": "realtime" - }, - "1731036300": { - "status": "UP", - "latency": 662, - "type": "realtime" - }, - "1731036360": { - "status": "UP", - "latency": 679, - "type": "realtime" - }, - "1731036420": { - "status": "UP", - "latency": 773, - "type": "realtime" - }, - "1731036480": { - "status": "UP", - "latency": 560, - "type": "realtime" - }, - "1731036540": { - "status": "UP", - "latency": 578, - "type": "realtime" - }, - "1731036600": { - "status": "UP", - "latency": 573, - "type": "realtime" - }, - "1731036660": { - "status": "UP", - "latency": 527, - "type": "realtime" - }, - "1731036720": { - "status": "UP", - "latency": 692, - "type": "realtime" - }, - "1731036780": { - "status": "UP", - "latency": 683, - "type": "realtime" - }, - "1731036840": { - "status": "UP", - "latency": 810, - "type": "realtime" - }, - "1731036900": { - "status": "UP", - "latency": 935, - "type": "realtime" - }, - "1731036960": { - "status": "UP", - "latency": 713, - "type": "realtime" - }, - "1731037020": { - "status": "UP", - "latency": 885, - "type": "realtime" - }, - "1731037080": { - "status": "UP", - "latency": 569, - "type": "realtime" - }, - "1731037140": { - "status": "UP", - "latency": 610, - "type": "realtime" - }, - "1731037200": { - "status": "UP", - "latency": 606, - "type": "realtime" - }, - "1731037260": { - "status": "UP", - "latency": 580, - "type": "realtime" - }, - "1731037320": { - "status": "UP", - "latency": 698, - "type": "realtime" - }, - "1731037380": { - "status": "UP", - "latency": 785, - "type": "realtime" - }, - "1731037440": { - "status": "UP", - "latency": 702, - "type": "realtime" - }, - "1731037500": { - "status": "UP", - "latency": 703, - "type": "realtime" - }, - "1731037560": { - "status": "UP", - "latency": 793, - "type": "realtime" - }, - "1731037620": { - "status": "UP", - "latency": 558, - "type": "realtime" - }, - "1731037680": { - "status": "UP", - "latency": 876, - "type": "realtime" - }, - "1731037740": { - "status": "UP", - "latency": 1532, - "type": "realtime" - }, - "1731037800": { - "status": "UP", - "latency": 574, - "type": "realtime" - }, - "1731037860": { - "status": "UP", - "latency": 1547, - "type": "realtime" - }, - "1731037920": { - "status": "UP", - "latency": 1380, - "type": "realtime" - }, - "1731037980": { - "status": "UP", - "latency": 766, - "type": "realtime" - }, - "1731038040": { - "status": "UP", - "latency": 729, - "type": "realtime" - }, - "1731038100": { - "status": "UP", - "latency": 750, - "type": "realtime" - }, - "1731038160": { - "status": "UP", - "latency": 693, - "type": "realtime" - }, - "1731038220": { - "status": "UP", - "latency": 597, - "type": "realtime" - }, - "1731038280": { - "status": "UP", - "latency": 596, - "type": "realtime" - }, - "1731038340": { - "status": "UP", - "latency": 532, - "type": "realtime" - }, - "1731038400": { - "status": "UP", - "latency": 557, - "type": "realtime" - }, - "1731038460": { - "status": "UP", - "latency": 552, - "type": "realtime" - }, - "1731038520": { - "status": "UP", - "latency": 559, - "type": "realtime" - }, - "1731038580": { - "status": "UP", - "latency": 560, - "type": "realtime" - }, - "1731038640": { - "status": "UP", - "latency": 570, - "type": "realtime" - }, - "1731038700": { - "status": "UP", - "latency": 534, - "type": "realtime" - }, - "1731038760": { - "status": "UP", - "latency": 550, - "type": "realtime" - }, - "1731038820": { - "status": "UP", - "latency": 607, - "type": "realtime" - }, - "1731038880": { - "status": "UP", - "latency": 525, - "type": "realtime" - }, - "1731038940": { - "status": "UP", - "latency": 874, - "type": "realtime" - }, - "1731039000": { - "status": "UP", - "latency": 600, - "type": "realtime" - }, - "1731039060": { - "status": "UP", - "latency": 696, - "type": "realtime" - }, - "1731039120": { - "status": "UP", - "latency": 691, - "type": "realtime" - }, - "1731039180": { - "status": "UP", - "latency": 642, - "type": "realtime" - }, - "1731039240": { - "status": "UP", - "latency": 662, - "type": "realtime" - }, - "1731039300": { - "status": "UP", - "latency": 746, - "type": "realtime" - }, - "1731039360": { - "status": "UP", - "latency": 739, - "type": "realtime" - }, - "1731039420": { - "status": "UP", - "latency": 715, - "type": "realtime" - }, - "1731039480": { - "status": "UP", - "latency": 986, - "type": "realtime" - }, - "1731039540": { - "status": "UP", - "latency": 635, - "type": "realtime" - }, - "1731039600": { - "status": "UP", - "latency": 620, - "type": "realtime" - }, - "1731039660": { - "status": "UP", - "latency": 532, - "type": "realtime" - }, - "1731039720": { - "status": "UP", - "latency": 492, - "type": "realtime" - }, - "1731039780": { - "status": "UP", - "latency": 520, - "type": "realtime" - }, - "1731039840": { - "status": "UP", - "latency": 287, - "type": "realtime" - }, - "1731039900": { - "status": "UP", - "latency": 262, - "type": "realtime" - }, - "1731040200": { - "status": "UP", - "latency": 880, - "type": "realtime" - }, - "1731041160": { - "status": "UP", - "latency": 921, - "type": "realtime" - }, - "1731041220": { - "status": "UP", - "latency": 631, - "type": "realtime" - }, - "1731041280": { - "status": "UP", - "latency": 534, - "type": "realtime" - }, - "1731041340": { - "status": "UP", - "latency": 480, - "type": "realtime" - }, - "1731041400": { - "status": "UP", - "latency": 714, - "type": "realtime" - }, - "1731041460": { - "status": "UP", - "latency": 889, - "type": "realtime" - }, - "1731041520": { - "status": "UP", - "latency": 724, - "type": "realtime" - }, - "1731041580": { - "status": "UP", - "latency": 610, - "type": "realtime" - }, - "1731041640": { - "status": "UP", - "latency": 646, - "type": "realtime" - }, - "1731041700": { - "status": "UP", - "latency": 1073, - "type": "realtime" - }, - "1731041760": { - "status": "UP", - "latency": 708, - "type": "realtime" - }, - "1731041820": { - "status": "UP", - "latency": 672, - "type": "realtime" - }, - "1731041880": { - "status": "UP", - "latency": 656, - "type": "realtime" - }, - "1731041940": { - "status": "UP", - "latency": 766, - "type": "realtime" - }, - "1731042000": { - "status": "UP", - "latency": 690, - "type": "realtime" - }, - "1731042060": { - "status": "UP", - "latency": 522, - "type": "realtime" - }, - "1731042120": { - "status": "UP", - "latency": 555, - "type": "realtime" - }, - "1731042180": { - "status": "UP", - "latency": 407, - "type": "realtime" - }, - "1731042240": { - "status": "UP", - "latency": 468, - "type": "realtime" - }, - "1731042300": { - "status": "UP", - "latency": 616, - "type": "realtime" - }, - "1731042360": { - "status": "UP", - "latency": 634, - "type": "realtime" - }, - "1731042420": { - "status": "UP", - "latency": 1175, - "type": "realtime" - }, - "1731042480": { - "status": "UP", - "latency": 520, - "type": "realtime" - }, - "1731042540": { - "status": "UP", - "latency": 520, - "type": "realtime" - }, - "1731042600": { - "status": "UP", - "latency": 605, - "type": "realtime" - }, - "1731042660": { - "status": "UP", - "latency": 380, - "type": "realtime" - }, - "1731042720": { - "status": "UP", - "latency": 395, - "type": "realtime" - }, - "1731042780": { - "status": "UP", - "latency": 455, - "type": "realtime" - }, - "1731042840": { - "status": "UP", - "latency": 412, - "type": "realtime" - }, - "1731042900": { - "status": "UP", - "latency": 460, - "type": "realtime" - }, - "1731042960": { - "status": "UP", - "latency": 412, - "type": "realtime" - }, - "1731043020": { - "status": "UP", - "latency": 461, - "type": "realtime" - }, - "1731043080": { - "status": "UP", - "latency": 489, - "type": "realtime" - }, - "1731043140": { - "status": "UP", - "latency": 526, - "type": "realtime" - }, - "1731043200": { - "status": "UP", - "latency": 467, - "type": "realtime" - }, - "1731043260": { - "status": "UP", - "latency": 452, - "type": "realtime" - }, - "1731043320": { - "status": "UP", - "latency": 496, - "type": "realtime" - }, - "1731043380": { - "status": "UP", - "latency": 395, - "type": "realtime" - }, - "1731043440": { - "status": "UP", - "latency": 399, - "type": "realtime" - }, - "1731043500": { - "status": "UP", - "latency": 436, - "type": "realtime" - }, - "1731043560": { - "status": "UP", - "latency": 429, - "type": "realtime" - }, - "1731043620": { - "status": "UP", - "latency": 546, - "type": "realtime" - }, - "1731043680": { - "status": "UP", - "latency": 554, - "type": "realtime" - }, - "1731043740": { - "status": "UP", - "latency": 531, - "type": "realtime" - }, - "1731043800": { - "status": "UP", - "latency": 522, - "type": "realtime" - }, - "1731043860": { - "status": "UP", - "latency": 501, - "type": "realtime" - }, - "1731043920": { - "status": "UP", - "latency": 420, - "type": "realtime" - }, - "1731043980": { - "status": "UP", - "latency": 580, - "type": "realtime" - }, - "1731044040": { - "status": "UP", - "latency": 717, - "type": "realtime" - }, - "1731044100": { - "status": "UP", - "latency": 378, - "type": "realtime" - }, - "1731044160": { - "status": "UP", - "latency": 428, - "type": "realtime" - }, - "1731044220": { - "status": "UP", - "latency": 447, - "type": "realtime" - }, - "1731044280": { - "status": "UP", - "latency": 450, - "type": "realtime" - }, - "1731044340": { - "status": "UP", - "latency": 368, - "type": "realtime" - }, - "1731044400": { - "status": "UP", - "latency": 401, - "type": "realtime" - }, - "1731044460": { - "status": "UP", - "latency": 356, - "type": "realtime" - }, - "1731044520": { - "status": "UP", - "latency": 462, - "type": "realtime" - }, - "1731044580": { - "status": "UP", - "latency": 539, - "type": "realtime" - }, - "1731044640": { - "status": "UP", - "latency": 560, - "type": "realtime" - }, - "1731044700": { - "status": "UP", - "latency": 577, - "type": "realtime" - }, - "1731044760": { - "status": "UP", - "latency": 511, - "type": "realtime" - }, - "1731044820": { - "status": "UP", - "latency": 557, - "type": "realtime" - }, - "1731044880": { - "status": "UP", - "latency": 598, - "type": "realtime" - }, - "1731044940": { - "status": "UP", - "latency": 550, - "type": "realtime" - }, - "1731045000": { - "status": "UP", - "latency": 517, - "type": "realtime" - }, - "1731045060": { - "status": "UP", - "latency": 510, - "type": "realtime" - }, - "1731045120": { - "status": "UP", - "latency": 421, - "type": "realtime" - }, - "1731045180": { - "status": "UP", - "latency": 568, - "type": "realtime" - }, - "1731045240": { - "status": "UP", - "latency": 688, - "type": "realtime" - }, - "1731045300": { - "status": "UP", - "latency": 385, - "type": "realtime" - }, - "1731045360": { - "status": "UP", - "latency": 624, - "type": "realtime" - }, - "1731045420": { - "status": "UP", - "latency": 359, - "type": "realtime" - }, - "1731045480": { - "status": "UP", - "latency": 585, - "type": "realtime" - }, - "1731045540": { - "status": "UP", - "latency": 819, - "type": "realtime" - }, - "1731045600": { - "status": "UP", - "latency": 444, - "type": "realtime" - }, - "1731045660": { - "status": "UP", - "latency": 447, - "type": "realtime" - }, - "1731045720": { - "status": "UP", - "latency": 562, - "type": "realtime" - }, - "1731045780": { - "status": "UP", - "latency": 550, - "type": "realtime" - }, - "1731045840": { - "status": "UP", - "latency": 932, - "type": "realtime" - }, - "1731045900": { - "status": "UP", - "latency": 644, - "type": "realtime" - }, - "1731045960": { - "status": "UP", - "latency": 569, - "type": "realtime" - }, - "1731046020": { - "status": "UP", - "latency": 1667, - "type": "realtime" - }, - "1731046080": { - "status": "UP", - "latency": 1137, - "type": "realtime" - }, - "1731046140": { - "status": "UP", - "latency": 1198, - "type": "realtime" - }, - "1731046200": { - "status": "UP", - "latency": 557, - "type": "realtime" - }, - "1731046260": { - "status": "UP", - "latency": 564, - "type": "realtime" - }, - "1731046320": { - "status": "UP", - "latency": 1222, - "type": "realtime" - }, - "1731046380": { - "status": "UP", - "latency": 538, - "type": "realtime" - }, - "1731046440": { - "status": "UP", - "latency": 545, - "type": "realtime" - }, - "1731046500": { - "status": "UP", - "latency": 520, - "type": "realtime" - }, - "1731046560": { - "status": "UP", - "latency": 527, - "type": "realtime" - }, - "1731046620": { - "status": "UP", - "latency": 404, - "type": "realtime" - }, - "1731046680": { - "status": "UP", - "latency": 439, - "type": "realtime" - }, - "1731046740": { - "status": "UP", - "latency": 436, - "type": "realtime" - }, - "1731046800": { - "status": "UP", - "latency": 392, - "type": "realtime" - }, - "1731047040": { - "status": "UP", - "latency": 398, - "type": "realtime" - }, - "1731047100": { - "status": "UP", - "latency": 431, - "type": "realtime" - }, - "1731047160": { - "status": "UP", - "latency": 391, - "type": "realtime" - }, - "1731047220": { - "status": "UP", - "latency": 417, - "type": "realtime" - }, - "1731047280": { - "status": "UP", - "latency": 501, - "type": "realtime" - }, - "1731047340": { - "status": "UP", - "latency": 443, - "type": "realtime" - }, - "1731047400": { - "status": "UP", - "latency": 422, - "type": "realtime" - }, - "1731075120": { - "status": "UP", - "latency": 345, - "type": "realtime" - }, - "1731075180": { - "status": "UP", - "latency": 185, - "type": "realtime" - }, - "1731075240": { - "status": "UP", - "latency": 285, - "type": "realtime" - }, - "1731075300": { - "status": "UP", - "latency": 336, - "type": "realtime" - }, - "1731075360": { - "status": "UP", - "latency": 328, - "type": "realtime" - }, - "1731075420": { - "status": "UP", - "latency": 556, - "type": "realtime" - }, - "1731075480": { - "status": "UP", - "latency": 315, - "type": "realtime" - }, - "1731075540": { - "status": "UP", - "latency": 336, - "type": "realtime" - }, - "1731075600": { - "status": "UP", - "latency": 596, - "type": "realtime" - }, - "1731075660": { - "status": "UP", - "latency": 335, - "type": "realtime" - }, - "1731075720": { - "status": "UP", - "latency": 377, - "type": "realtime" - }, - "1731075780": { - "status": "UP", - "latency": 354, - "type": "realtime" - }, - "1731075840": { - "status": "UP", - "latency": 339, - "type": "realtime" - }, - "1731075900": { - "status": "UP", - "latency": 539, - "type": "realtime" - }, - "1731075960": { - "status": "UP", - "latency": 316, - "type": "realtime" - }, - "1731076020": { - "status": "UP", - "latency": 252, - "type": "realtime" - }, - "1731076080": { - "status": "UP", - "latency": 670, - "type": "realtime" - }, - "1731076140": { - "status": "UP", - "latency": 238, - "type": "realtime" - }, - "1731076200": { - "status": "UP", - "latency": 279, - "type": "realtime" - }, - "1731076260": { - "status": "UP", - "latency": 229, - "type": "realtime" - }, - "1731076320": { - "status": "UP", - "latency": 540, - "type": "realtime" - }, - "1731076380": { - "status": "UP", - "latency": 357, - "type": "realtime" - }, - "1731076440": { - "status": "UP", - "latency": 418, - "type": "realtime" - }, - "1731076500": { - "status": "UP", - "latency": 336, - "type": "realtime" - }, - "1731076560": { - "status": "UP", - "latency": 461, - "type": "realtime" - }, - "1731076620": { - "status": "UP", - "latency": 694, - "type": "realtime" - }, - "1731076680": { - "status": "UP", - "latency": 519, - "type": "realtime" - }, - "1731076740": { - "status": "UP", - "latency": 411, - "type": "realtime" - }, - "1731076800": { - "status": "UP", - "latency": 288, - "type": "realtime" - }, - "1731076860": { - "status": "UP", - "latency": 166, - "type": "realtime" - }, - "1731076920": { - "status": "UP", - "latency": 355, - "type": "realtime" - }, - "1731076980": { - "status": "UP", - "latency": 1532, - "type": "realtime" - }, - "1731077040": { - "status": "UP", - "latency": 287, - "type": "realtime" - }, - "1731077100": { - "status": "UP", - "latency": 640, - "type": "realtime" - }, - "1731077160": { - "status": "UP", - "latency": 349, - "type": "realtime" - }, - "1731077220": { - "status": "UP", - "latency": 1303, - "type": "realtime" - }, - "1731077280": { - "status": "UP", - "latency": 310, - "type": "realtime" - }, - "1731077340": { - "status": "UP", - "latency": 309, - "type": "realtime" - }, - "1731077400": { - "status": "UP", - "latency": 319, - "type": "realtime" - }, - "1731077460": { - "status": "UP", - "latency": 307, - "type": "realtime" - }, - "1731077520": { - "status": "UP", - "latency": 306, - "type": "realtime" - }, - "1731077580": { - "status": "UP", - "latency": 331, - "type": "realtime" - }, - "1731077640": { - "status": "UP", - "latency": 171, - "type": "realtime" - }, - "1731077700": { - "status": "UP", - "latency": 195, - "type": "realtime" - }, - "1731077760": { - "status": "UP", - "latency": 2086, - "type": "realtime" - }, - "1731077820": { - "status": "UP", - "latency": 207, - "type": "realtime" - }, - "1731077880": { - "status": "UP", - "latency": 265, - "type": "realtime" - }, - "1731077940": { - "status": "UP", - "latency": 239, - "type": "realtime" - }, - "1731078000": { - "status": "UP", - "latency": 530, - "type": "realtime" - }, - "1731078060": { - "status": "UP", - "latency": 233, - "type": "realtime" - }, - "1731078120": { - "status": "UP", - "latency": 264, - "type": "realtime" - }, - "1731078180": { - "status": "UP", - "latency": 376, - "type": "realtime" - }, - "1731078240": { - "status": "UP", - "latency": 1195, - "type": "realtime" - }, - "1731078300": { - "status": "UP", - "latency": 179, - "type": "realtime" - }, - "1731078360": { - "status": "UP", - "latency": 343, - "type": "realtime" - }, - "1731078420": { - "status": "UP", - "latency": 183, - "type": "realtime" - }, - "1731078480": { - "status": "UP", - "latency": 256, - "type": "realtime" - }, - "1731078540": { - "status": "UP", - "latency": 185, - "type": "realtime" - }, - "1731078600": { - "status": "UP", - "latency": 200, - "type": "realtime" - }, - "1731078660": { - "status": "UP", - "latency": 230, - "type": "realtime" - }, - "1731078720": { - "status": "UP", - "latency": 257, - "type": "realtime" - }, - "1731078780": { - "status": "UP", - "latency": 214, - "type": "realtime" - }, - "1731078840": { - "status": "UP", - "latency": 165, - "type": "realtime" - }, - "1731078900": { - "status": "UP", - "latency": 1070, - "type": "realtime" - }, - "1731078960": { - "status": "UP", - "latency": 224, - "type": "realtime" - }, - "1731079020": { - "status": "UP", - "latency": 169, - "type": "realtime" - }, - "1731079080": { - "status": "UP", - "latency": 186, - "type": "realtime" - }, - "1731079140": { - "status": "UP", - "latency": 198, - "type": "realtime" - }, - "1731079200": { - "status": "UP", - "latency": 383, - "type": "realtime" - }, - "1731079260": { - "status": "UP", - "latency": 210, - "type": "realtime" - }, - "1731079320": { - "status": "UP", - "latency": 225, - "type": "realtime" - }, - "1731079380": { - "status": "UP", - "latency": 330, - "type": "realtime" - }, - "1731079440": { - "status": "UP", - "latency": 312, - "type": "realtime" - }, - "1731079500": { - "status": "UP", - "latency": 311, - "type": "realtime" - }, - "1731079560": { - "status": "UP", - "latency": 334, - "type": "realtime" - }, - "1731079620": { - "status": "UP", - "latency": 370, - "type": "realtime" - }, - "1731079680": { - "status": "UP", - "latency": 348, - "type": "realtime" - }, - "1731079740": { - "status": "UP", - "latency": 198, - "type": "realtime" - }, - "1731079800": { - "status": "UP", - "latency": 184, - "type": "realtime" - }, - "1731079860": { - "status": "UP", - "latency": 178, - "type": "realtime" - }, - "1731079920": { - "status": "UP", - "latency": 199, - "type": "realtime" - }, - "1731079980": { - "status": "UP", - "latency": 184, - "type": "realtime" - }, - "1731080040": { - "status": "UP", - "latency": 333, - "type": "realtime" - }, - "1731080100": { - "status": "UP", - "latency": 295, - "type": "realtime" - }, - "1731080160": { - "status": "UP", - "latency": 354, - "type": "realtime" - }, - "1731080220": { - "status": "UP", - "latency": 311, - "type": "realtime" - }, - "1731080280": { - "status": "UP", - "latency": 289, - "type": "realtime" - }, - "1731080340": { - "status": "UP", - "latency": 331, - "type": "realtime" - }, - "1731080400": { - "status": "UP", - "latency": 330, - "type": "realtime" - }, - "1731080460": { - "status": "UP", - "latency": 329, - "type": "realtime" - }, - "1731080520": { - "status": "UP", - "latency": 318, - "type": "realtime" - }, - "1731080580": { - "status": "UP", - "latency": 300, - "type": "realtime" - }, - "1731080640": { - "status": "UP", - "latency": 185, - "type": "realtime" - }, - "1731080700": { - "status": "UP", - "latency": 541, - "type": "realtime" - }, - "1731080760": { - "status": "UP", - "latency": 270, - "type": "realtime" - }, - "1731080820": { - "status": "UP", - "latency": 240, - "type": "realtime" - }, - "1731080880": { - "status": "UP", - "latency": 220, - "type": "realtime" - }, - "1731080940": { - "status": "UP", - "latency": 341, - "type": "realtime" - }, - "1731081000": { - "status": "UP", - "latency": 180, - "type": "realtime" - }, - "1731081060": { - "status": "UP", - "latency": 242, - "type": "realtime" - }, - "1731081120": { - "status": "UP", - "latency": 225, - "type": "realtime" - }, - "1731081180": { - "status": "UP", - "latency": 227, - "type": "realtime" - }, - "1731081240": { - "status": "UP", - "latency": 190, - "type": "realtime" - }, - "1731081300": { - "status": "UP", - "latency": 178, - "type": "realtime" - }, - "1731081360": { - "status": "UP", - "latency": 179, - "type": "realtime" - }, - "1731081420": { - "status": "UP", - "latency": 182, - "type": "realtime" - }, - "1731081480": { - "status": "UP", - "latency": 319, - "type": "realtime" - }, - "1731081540": { - "status": "UP", - "latency": 341, - "type": "realtime" - }, - "1731081600": { - "status": "UP", - "latency": 310, - "type": "realtime" - }, - "1731081660": { - "status": "UP", - "latency": 298, - "type": "realtime" - }, - "1731081720": { - "status": "UP", - "latency": 330, - "type": "realtime" - }, - "1731081780": { - "status": "UP", - "latency": 317, - "type": "realtime" - }, - "1731081840": { - "status": "UP", - "latency": 170, - "type": "realtime" - }, - "1731081900": { - "status": "UP", - "latency": 173, - "type": "realtime" - }, - "1731081960": { - "status": "UP", - "latency": 174, - "type": "realtime" - }, - "1731082020": { - "status": "UP", - "latency": 163, - "type": "realtime" - }, - "1731082080": { - "status": "UP", - "latency": 227, - "type": "realtime" - }, - "1731082140": { - "status": "UP", - "latency": 204, - "type": "realtime" - }, - "1731082200": { - "status": "UP", - "latency": 441, - "type": "realtime" - }, - "1731082260": { - "status": "UP", - "latency": 246, - "type": "realtime" - }, - "1731082320": { - "status": "UP", - "latency": 222, - "type": "realtime" - }, - "1731082380": { - "status": "UP", - "latency": 228, - "type": "realtime" - }, - "1731082440": { - "status": "UP", - "latency": 264, - "type": "realtime" - }, - "1731082500": { - "status": "UP", - "latency": 232, - "type": "realtime" - }, - "1731082560": { - "status": "UP", - "latency": 238, - "type": "realtime" - }, - "1731082620": { - "status": "UP", - "latency": 184, - "type": "realtime" - }, - "1731082680": { - "status": "UP", - "latency": 296, - "type": "realtime" - }, - "1731082740": { - "status": "UP", - "latency": 343, - "type": "realtime" - }, - "1731082800": { - "status": "UP", - "latency": 366, - "type": "realtime" - }, - "1731082860": { - "status": "UP", - "latency": 357, - "type": "realtime" - }, - "1731082920": { - "status": "UP", - "latency": 301, - "type": "realtime" - }, - "1731082980": { - "status": "UP", - "latency": 320, - "type": "realtime" - }, - "1731083040": { - "status": "UP", - "latency": 180, - "type": "realtime" - }, - "1731083100": { - "status": "UP", - "latency": 209, - "type": "realtime" - }, - "1731083160": { - "status": "UP", - "latency": 272, - "type": "realtime" - }, - "1731083220": { - "status": "UP", - "latency": 207, - "type": "realtime" - }, - "1731083280": { - "status": "UP", - "latency": 189, - "type": "realtime" - }, - "1731083340": { - "status": "UP", - "latency": 256, - "type": "realtime" - }, - "1731083400": { - "status": "UP", - "latency": 299, - "type": "realtime" - }, - "1731083460": { - "status": "UP", - "latency": 184, - "type": "realtime" - }, - "1731083520": { - "status": "UP", - "latency": 291, - "type": "realtime" - }, - "1731083580": { - "status": "UP", - "latency": 226, - "type": "realtime" - }, - "1731083640": { - "status": "UP", - "latency": 183, - "type": "realtime" - }, - "1731083700": { - "status": "UP", - "latency": 312, - "type": "realtime" - }, - "1731083760": { - "status": "UP", - "latency": 330, - "type": "realtime" - }, - "1731083820": { - "status": "UP", - "latency": 681, - "type": "realtime" - }, - "1731083880": { - "status": "UP", - "latency": 183, - "type": "realtime" - }, - "1731083940": { - "status": "UP", - "latency": 358, - "type": "realtime" - }, - "1731084000": { - "status": "UP", - "latency": 354, - "type": "realtime" - }, - "1731084060": { - "status": "UP", - "latency": 373, - "type": "realtime" - }, - "1731084120": { - "status": "UP", - "latency": 338, - "type": "realtime" - }, - "1731084180": { - "status": "UP", - "latency": 304, - "type": "realtime" - }, - "1731084240": { - "status": "UP", - "latency": 265, - "type": "realtime" - }, - "1731084300": { - "status": "UP", - "latency": 201, - "type": "realtime" - }, - "1731084360": { - "status": "UP", - "latency": 215, - "type": "realtime" - }, - "1731084420": { - "status": "UP", - "latency": 172, - "type": "realtime" - }, - "1731084480": { - "status": "UP", - "latency": 170, - "type": "realtime" - }, - "1731084540": { - "status": "UP", - "latency": 312, - "type": "realtime" - }, - "1731084600": { - "status": "UP", - "latency": 409, - "type": "realtime" - }, - "1731084660": { - "status": "UP", - "latency": 315, - "type": "realtime" - }, - "1731084720": { - "status": "UP", - "latency": 520, - "type": "realtime" - }, - "1731084780": { - "status": "UP", - "latency": 334, - "type": "realtime" - }, - "1731084840": { - "status": "UP", - "latency": 436, - "type": "realtime" - }, - "1731084900": { - "status": "UP", - "latency": 323, - "type": "realtime" - }, - "1731084960": { - "status": "UP", - "latency": 297, - "type": "realtime" - }, - "1731085020": { - "status": "UP", - "latency": 323, - "type": "realtime" - }, - "1731085080": { - "status": "UP", - "latency": 449, - "type": "realtime" - }, - "1731085140": { - "status": "UP", - "latency": 320, - "type": "realtime" - }, - "1731085200": { - "status": "UP", - "latency": 377, - "type": "realtime" - }, - "1731085260": { - "status": "UP", - "latency": 342, - "type": "realtime" - }, - "1731085320": { - "status": "UP", - "latency": 454, - "type": "realtime" - }, - "1731085380": { - "status": "UP", - "latency": 393, - "type": "realtime" - }, - "1731085440": { - "status": "UP", - "latency": 337, - "type": "realtime" - }, - "1731085500": { - "status": "UP", - "latency": 338, - "type": "realtime" - }, - "1731085560": { - "status": "UP", - "latency": 359, - "type": "realtime" - }, - "1731085620": { - "status": "UP", - "latency": 347, - "type": "realtime" - }, - "1731085680": { - "status": "UP", - "latency": 347, - "type": "realtime" - }, - "1731085740": { - "status": "UP", - "latency": 322, - "type": "realtime" - }, - "1731085800": { - "status": "UP", - "latency": 367, - "type": "realtime" - }, - "1731085860": { - "status": "UP", - "latency": 341, - "type": "realtime" - }, - "1731085920": { - "status": "UP", - "latency": 428, - "type": "realtime" - }, - "1731085980": { - "status": "UP", - "latency": 379, - "type": "realtime" - }, - "1731086040": { - "status": "UP", - "latency": 357, - "type": "realtime" - }, - "1731086100": { - "status": "UP", - "latency": 218, - "type": "realtime" - }, - "1731086160": { - "status": "UP", - "latency": 263, - "type": "realtime" - }, - "1731086220": { - "status": "UP", - "latency": 294, - "type": "realtime" - }, - "1731086280": { - "status": "UP", - "latency": 243, - "type": "realtime" - }, - "1731086340": { - "status": "UP", - "latency": 502, - "type": "realtime" - }, - "1731086400": { - "status": "UP", - "latency": 307, - "type": "realtime" - }, - "1731086460": { - "status": "UP", - "latency": 604, - "type": "realtime" - }, - "1731086520": { - "status": "UP", - "latency": 380, - "type": "realtime" - }, - "1731086580": { - "status": "UP", - "latency": 381, - "type": "realtime" - }, - "1731086640": { - "status": "UP", - "latency": 321, - "type": "realtime" - }, - "1731086700": { - "status": "UP", - "latency": 208, - "type": "realtime" - }, - "1731086760": { - "status": "UP", - "latency": 219, - "type": "realtime" - } -} \ No newline at end of file diff --git a/src/lib/server/data/google-search.90day.utc.json b/src/lib/server/data/google-search.90day.utc.json deleted file mode 100644 index 49c8fadfe..000000000 --- a/src/lib/server/data/google-search.90day.utc.json +++ /dev/null @@ -1 +0,0 @@ -{"_90Day":{"1723248000":{"timestamp":1723248000,"cssClass":"api-nodata","message":"No Data"},"1723334400":{"timestamp":1723334400,"cssClass":"api-nodata","message":"No Data"},"1723420800":{"timestamp":1723420800,"cssClass":"api-nodata","message":"No Data"},"1723507200":{"timestamp":1723507200,"cssClass":"api-nodata","message":"No Data"},"1723593600":{"timestamp":1723593600,"cssClass":"api-nodata","message":"No Data"},"1723680000":{"timestamp":1723680000,"cssClass":"api-nodata","message":"No Data"},"1723766400":{"timestamp":1723766400,"cssClass":"api-nodata","message":"No Data"},"1723852800":{"timestamp":1723852800,"cssClass":"api-nodata","message":"No Data"},"1723939200":{"timestamp":1723939200,"cssClass":"api-nodata","message":"No Data"},"1724025600":{"timestamp":1724025600,"cssClass":"api-nodata","message":"No Data"},"1724112000":{"timestamp":1724112000,"cssClass":"api-nodata","message":"No Data"},"1724198400":{"timestamp":1724198400,"cssClass":"api-nodata","message":"No Data"},"1724284800":{"timestamp":1724284800,"cssClass":"api-nodata","message":"No Data"},"1724371200":{"timestamp":1724371200,"cssClass":"api-nodata","message":"No Data"},"1724457600":{"timestamp":1724457600,"cssClass":"api-nodata","message":"No Data"},"1724544000":{"timestamp":1724544000,"cssClass":"api-nodata","message":"No Data"},"1724630400":{"timestamp":1724630400,"cssClass":"api-nodata","message":"No Data"},"1724716800":{"timestamp":1724716800,"cssClass":"api-nodata","message":"No Data"},"1724803200":{"timestamp":1724803200,"cssClass":"api-nodata","message":"No Data"},"1724889600":{"timestamp":1724889600,"cssClass":"api-nodata","message":"No Data"},"1724976000":{"timestamp":1724976000,"cssClass":"api-nodata","message":"No Data"},"1725062400":{"timestamp":1725062400,"cssClass":"api-nodata","message":"No Data"},"1725148800":{"timestamp":1725148800,"cssClass":"api-nodata","message":"No Data"},"1725235200":{"timestamp":1725235200,"cssClass":"api-nodata","message":"No Data"},"1725321600":{"timestamp":1725321600,"cssClass":"api-nodata","message":"No Data"},"1725408000":{"timestamp":1725408000,"cssClass":"api-nodata","message":"No Data"},"1725494400":{"timestamp":1725494400,"cssClass":"api-nodata","message":"No Data"},"1725580800":{"timestamp":1725580800,"cssClass":"api-nodata","message":"No Data"},"1725667200":{"timestamp":1725667200,"cssClass":"api-nodata","message":"No Data"},"1725753600":{"timestamp":1725753600,"cssClass":"api-nodata","message":"No Data"},"1725840000":{"timestamp":1725840000,"cssClass":"api-nodata","message":"No Data"},"1725926400":{"timestamp":1725926400,"cssClass":"api-nodata","message":"No Data"},"1726012800":{"timestamp":1726012800,"cssClass":"api-nodata","message":"No Data"},"1726099200":{"timestamp":1726099200,"cssClass":"api-nodata","message":"No Data"},"1726185600":{"timestamp":1726185600,"cssClass":"api-nodata","message":"No Data"},"1726272000":{"timestamp":1726272000,"cssClass":"api-nodata","message":"No Data"},"1726358400":{"timestamp":1726358400,"cssClass":"api-nodata","message":"No Data"},"1726444800":{"timestamp":1726444800,"cssClass":"api-nodata","message":"No Data"},"1726531200":{"timestamp":1726531200,"cssClass":"api-nodata","message":"No Data"},"1726617600":{"timestamp":1726617600,"cssClass":"api-nodata","message":"No Data"},"1726704000":{"timestamp":1726704000,"cssClass":"api-nodata","message":"No Data"},"1726790400":{"timestamp":1726790400,"cssClass":"api-nodata","message":"No Data"},"1726876800":{"timestamp":1726876800,"cssClass":"api-nodata","message":"No Data"},"1726963200":{"timestamp":1726963200,"cssClass":"api-nodata","message":"No Data"},"1727049600":{"timestamp":1727049600,"cssClass":"api-nodata","message":"No Data"},"1727136000":{"timestamp":1727136000,"cssClass":"api-nodata","message":"No Data"},"1727222400":{"timestamp":1727222400,"cssClass":"api-nodata","message":"No Data"},"1727308800":{"timestamp":1727308800,"cssClass":"api-nodata","message":"No Data"},"1727395200":{"timestamp":1727395200,"cssClass":"api-nodata","message":"No Data"},"1727481600":{"timestamp":1727481600,"cssClass":"api-nodata","message":"No Data"},"1727568000":{"timestamp":1727568000,"cssClass":"api-nodata","message":"No Data"},"1727654400":{"timestamp":1727654400,"cssClass":"api-nodata","message":"No Data"},"1727740800":{"timestamp":1727740800,"cssClass":"api-nodata","message":"No Data"},"1727827200":{"timestamp":1727827200,"cssClass":"api-nodata","message":"No Data"},"1727913600":{"timestamp":1727913600,"cssClass":"api-nodata","message":"No Data"},"1728000000":{"timestamp":1728000000,"cssClass":"api-nodata","message":"No Data"},"1728086400":{"timestamp":1728086400,"cssClass":"api-nodata","message":"No Data"},"1728172800":{"timestamp":1728172800,"cssClass":"api-nodata","message":"No Data"},"1728259200":{"timestamp":1728259200,"cssClass":"api-nodata","message":"No Data"},"1728345600":{"timestamp":1728345600,"cssClass":"api-nodata","message":"No Data"},"1728432000":{"timestamp":1728432000,"cssClass":"api-nodata","message":"No Data"},"1728518400":{"timestamp":1728518400,"cssClass":"api-nodata","message":"No Data"},"1728604800":{"timestamp":1728604800,"cssClass":"api-nodata","message":"No Data"},"1728691200":{"timestamp":1728691200,"cssClass":"api-nodata","message":"No Data"},"1728777600":{"timestamp":1728777600,"cssClass":"api-nodata","message":"No Data"},"1728864000":{"timestamp":1728864000,"cssClass":"api-nodata","message":"No Data"},"1728950400":{"timestamp":1728950400,"cssClass":"api-nodata","message":"No Data"},"1729036800":{"timestamp":1729036800,"cssClass":"api-nodata","message":"No Data"},"1729123200":{"timestamp":1729123200,"cssClass":"api-nodata","message":"No Data"},"1729209600":{"timestamp":1729209600,"cssClass":"api-nodata","message":"No Data"},"1729296000":{"timestamp":1729296000,"cssClass":"api-nodata","message":"No Data"},"1729382400":{"timestamp":1729382400,"cssClass":"api-nodata","message":"No Data"},"1729468800":{"timestamp":1729468800,"cssClass":"api-nodata","message":"No Data"},"1729555200":{"timestamp":1729555200,"cssClass":"api-nodata","message":"No Data"},"1729641600":{"timestamp":1729641600,"cssClass":"api-nodata","message":"No Data"},"1729728000":{"timestamp":1729728000,"cssClass":"api-nodata","message":"No Data"},"1729814400":{"timestamp":1729814400,"cssClass":"api-nodata","message":"No Data"},"1729900800":{"timestamp":1729900800,"cssClass":"api-nodata","message":"No Data"},"1729987200":{"timestamp":1729987200,"cssClass":"api-nodata","message":"No Data"},"1730073600":{"timestamp":1730073600,"cssClass":"api-nodata","message":"No Data"},"1730160000":{"timestamp":1730160000,"cssClass":"api-nodata","message":"No Data"},"1730246400":{"timestamp":1730246400,"cssClass":"api-nodata","message":"No Data"},"1730332800":{"timestamp":1730332800,"cssClass":"api-nodata","message":"No Data"},"1730419200":{"timestamp":1730419200,"cssClass":"api-nodata","message":"No Data"},"1730505600":{"timestamp":1730505600,"cssClass":"api-nodata","message":"No Data"},"1730592000":{"timestamp":1730592000,"cssClass":"api-nodata","message":"No Data"},"1730678400":{"timestamp":1730678400,"cssClass":"api-nodata","message":"No Data"},"1730764800":{"timestamp":1730764800,"cssClass":"api-nodata","message":"No Data"},"1730851200":{"timestamp":1730851200,"cssClass":"api-nodata","message":"No Data"},"1730937600":{"timestamp":1730937600,"cssClass":"api-up","message":"Status OK"},"1731024000":{"timestamp":1731024000,"cssClass":"api-up","message":"Status OK"}},"uptime0Day":"100","uptime90Day":"100","dailyUps":403,"dailyDown":0,"dailyDegraded":0} diff --git a/src/lib/server/data/monitors.json b/src/lib/server/data/monitors.json deleted file mode 100644 index 18624aa04..000000000 --- a/src/lib/server/data/monitors.json +++ /dev/null @@ -1,94 +0,0 @@ -[ - { - "name": "Google Search", - "description": "Search the world's information, including webpages, images, videos and more.", - "tag": "google-search", - "image": "/google.png", - "api": { - "method": "GET", - "url": "https://www.google.com/webhp", - "hideURLForGet": true, - "eval": "(function (statusCode, responseTime, responseData) {\n\tlet statusCodeShort = Math.floor(statusCode/100);\n if(statusCode == 429 || (statusCodeShort >=2 && statusCodeShort <= 3)) {\n return {\n\t\t\tstatus: 'UP',\n\t\t\tlatency: responseTime,\n }\n } \n\treturn {\n\t\tstatus: 'DOWN',\n\t\tlatency: responseTime,\n\t}\n})", - "timeout": 10000 - }, - "folderName": "google-search", - "dayDegradedMinimumCount": 1, - "dayDownMinimumCount": 1, - "includeDegradedInDowntime": false, - "path0Day": "/Users/rajnandan1/Code/kener/src/lib/server/data/google-search.0day.utc.json", - "path90Day": "/Users/rajnandan1/Code/kener/src/lib/server/data/google-search.90day.utc.json", - "hasAPI": true - }, - { - "name": "Svelte Website", - "description": "Cybernetically enhanced web apps https://svelte.dev/", - "tag": "svelte-website", - "api": { - "method": "GET", - "url": "https://svelte.dev/", - "eval": "(function (statusCode, responseTime, responseData) {\n\tlet statusCodeShort = Math.floor(statusCode/100);\n if(statusCode == 429 || (statusCodeShort >=2 && statusCodeShort <= 3)) {\n return {\n\t\t\tstatus: 'UP',\n\t\t\tlatency: responseTime,\n }\n } \n\treturn {\n\t\tstatus: 'DOWN',\n\t\tlatency: responseTime,\n\t}\n})", - "timeout": 10000 - }, - "image": "/svelte.svg", - "folderName": "svelte-website", - "dayDegradedMinimumCount": 1, - "dayDownMinimumCount": 1, - "includeDegradedInDowntime": false, - "path0Day": "/Users/rajnandan1/Code/kener/src/lib/server/data/svelte-website.0day.utc.json", - "path90Day": "/Users/rajnandan1/Code/kener/src/lib/server/data/svelte-website.90day.utc.json", - "hasAPI": true - }, - { - "name": "Earth", - "description": "Our blue planet", - "tag": "earth", - "defaultStatus": "UP", - "image": "/earth.png", - "cron": "*/2 * * * *", - "folderName": "earth", - "dayDegradedMinimumCount": 1, - "dayDownMinimumCount": 1, - "includeDegradedInDowntime": false, - "path0Day": "/Users/rajnandan1/Code/kener/src/lib/server/data/earth.0day.utc.json", - "path90Day": "/Users/rajnandan1/Code/kener/src/lib/server/data/earth.90day.utc.json", - "hasAPI": false - }, - { - "name": "Frogment", - "description": "A free openAPI spec editor and linter that breaks down your spec into fragments to make editing easier and more intuitive. Visit https://www.frogment.com https://www.frogment.com", - "tag": "frogment", - "image": "/frogment.png", - "api": { - "method": "GET", - "url": "https://www.frogment.com", - "eval": "(function (statusCode, responseTime, responseData) {\n\tlet statusCodeShort = Math.floor(statusCode/100);\n if(statusCode == 429 || (statusCodeShort >=2 && statusCodeShort <= 3)) {\n return {\n\t\t\tstatus: 'UP',\n\t\t\tlatency: responseTime,\n }\n } \n\treturn {\n\t\tstatus: 'DOWN',\n\t\tlatency: responseTime,\n\t}\n})", - "timeout": 10000 - }, - "folderName": "frogment", - "dayDegradedMinimumCount": 1, - "dayDownMinimumCount": 1, - "includeDegradedInDowntime": false, - "path0Day": "/Users/rajnandan1/Code/kener/src/lib/server/data/frogment.0day.utc.json", - "path90Day": "/Users/rajnandan1/Code/kener/src/lib/server/data/frogment.90day.utc.json", - "hasAPI": true - }, - { - "name": "OkBookmarks", - "description": "Stop forgetting about your bookmarks https://okbookmarks.com/", - "tag": "okbookmarks", - "image": "https://okbookmarks.com/app/mybookmark.png", - "api": { - "method": "GET", - "url": "https://okbookmarks.com/", - "eval": "(function (statusCode, responseTime, responseData) {\n\tlet statusCodeShort = Math.floor(statusCode/100);\n if(statusCode == 429 || (statusCodeShort >=2 && statusCodeShort <= 3)) {\n return {\n\t\t\tstatus: 'UP',\n\t\t\tlatency: responseTime,\n }\n } \n\treturn {\n\t\tstatus: 'DOWN',\n\t\tlatency: responseTime,\n\t}\n})", - "timeout": 10000 - }, - "folderName": "okbookmarks", - "dayDegradedMinimumCount": 1, - "dayDownMinimumCount": 1, - "includeDegradedInDowntime": false, - "path0Day": "/Users/rajnandan1/Code/kener/src/lib/server/data/okbookmarks.0day.utc.json", - "path90Day": "/Users/rajnandan1/Code/kener/src/lib/server/data/okbookmarks.90day.utc.json", - "hasAPI": true - } -] \ No newline at end of file diff --git a/src/lib/server/data/okbookmarks.0day.utc.json b/src/lib/server/data/okbookmarks.0day.utc.json deleted file mode 100644 index 9d78f8dbb..000000000 --- a/src/lib/server/data/okbookmarks.0day.utc.json +++ /dev/null @@ -1,1667 +0,0 @@ -{ - "1731037860": { - "status": "UP", - "latency": 58, - "type": "realtime" - }, - "1731037920": { - "status": "UP", - "latency": 231, - "type": "realtime" - }, - "1731037980": { - "status": "UP", - "latency": 201, - "type": "realtime" - }, - "1731038040": { - "status": "UP", - "latency": 186, - "type": "realtime" - }, - "1731038100": { - "status": "UP", - "latency": 282, - "type": "realtime" - }, - "1731038160": { - "status": "UP", - "latency": 202, - "type": "realtime" - }, - "1731038220": { - "status": "UP", - "latency": 228, - "type": "realtime" - }, - "1731038280": { - "status": "UP", - "latency": 200, - "type": "realtime" - }, - "1731038340": { - "status": "UP", - "latency": 195, - "type": "realtime" - }, - "1731038400": { - "status": "UP", - "latency": 194, - "type": "realtime" - }, - "1731038460": { - "status": "UP", - "latency": 160, - "type": "realtime" - }, - "1731038520": { - "status": "UP", - "latency": 185, - "type": "realtime" - }, - "1731038580": { - "status": "UP", - "latency": 198, - "type": "realtime" - }, - "1731038640": { - "status": "UP", - "latency": 224, - "type": "realtime" - }, - "1731038700": { - "status": "UP", - "latency": 151, - "type": "realtime" - }, - "1731038760": { - "status": "UP", - "latency": 169, - "type": "realtime" - }, - "1731038820": { - "status": "UP", - "latency": 216, - "type": "realtime" - }, - "1731038880": { - "status": "UP", - "latency": 159, - "type": "realtime" - }, - "1731038940": { - "status": "UP", - "latency": 188, - "type": "realtime" - }, - "1731039000": { - "status": "UP", - "latency": 190, - "type": "realtime" - }, - "1731039060": { - "status": "UP", - "latency": 184, - "type": "realtime" - }, - "1731039120": { - "status": "UP", - "latency": 217, - "type": "realtime" - }, - "1731039180": { - "status": "UP", - "latency": 167, - "type": "realtime" - }, - "1731039240": { - "status": "UP", - "latency": 167, - "type": "realtime" - }, - "1731039300": { - "status": "UP", - "latency": 183, - "type": "realtime" - }, - "1731039360": { - "status": "UP", - "latency": 204, - "type": "realtime" - }, - "1731039420": { - "status": "UP", - "latency": 194, - "type": "realtime" - }, - "1731039480": { - "status": "UP", - "latency": 215, - "type": "realtime" - }, - "1731039540": { - "status": "UP", - "latency": 150, - "type": "realtime" - }, - "1731039600": { - "status": "UP", - "latency": 179, - "type": "realtime" - }, - "1731039660": { - "status": "UP", - "latency": 209, - "type": "realtime" - }, - "1731039720": { - "status": "UP", - "latency": 145, - "type": "realtime" - }, - "1731039780": { - "status": "UP", - "latency": 145, - "type": "realtime" - }, - "1731039840": { - "status": "UP", - "latency": 226, - "type": "realtime" - }, - "1731039900": { - "status": "UP", - "latency": 301, - "type": "realtime" - }, - "1731040200": { - "status": "UP", - "latency": 574, - "type": "realtime" - }, - "1731041160": { - "status": "UP", - "latency": 622, - "type": "realtime" - }, - "1731041220": { - "status": "UP", - "latency": 1159, - "type": "realtime" - }, - "1731041280": { - "status": "UP", - "latency": 173, - "type": "realtime" - }, - "1731041340": { - "status": "UP", - "latency": 149, - "type": "realtime" - }, - "1731041400": { - "status": "UP", - "latency": 248, - "type": "realtime" - }, - "1731041460": { - "status": "UP", - "latency": 233, - "type": "realtime" - }, - "1731041520": { - "status": "UP", - "latency": 212, - "type": "realtime" - }, - "1731041580": { - "status": "UP", - "latency": 166, - "type": "realtime" - }, - "1731041640": { - "status": "UP", - "latency": 205, - "type": "realtime" - }, - "1731041700": { - "status": "UP", - "latency": 201, - "type": "realtime" - }, - "1731041760": { - "status": "UP", - "latency": 223, - "type": "realtime" - }, - "1731041820": { - "status": "UP", - "latency": 215, - "type": "realtime" - }, - "1731041880": { - "status": "UP", - "latency": 211, - "type": "realtime" - }, - "1731041940": { - "status": "UP", - "latency": 207, - "type": "realtime" - }, - "1731042000": { - "status": "UP", - "latency": 221, - "type": "realtime" - }, - "1731042060": { - "status": "UP", - "latency": 211, - "type": "realtime" - }, - "1731042120": { - "status": "UP", - "latency": 316, - "type": "realtime" - }, - "1731042180": { - "status": "UP", - "latency": 163, - "type": "realtime" - }, - "1731042240": { - "status": "UP", - "latency": 166, - "type": "realtime" - }, - "1731042300": { - "status": "UP", - "latency": 317, - "type": "realtime" - }, - "1731042360": { - "status": "UP", - "latency": 347, - "type": "realtime" - }, - "1731042420": { - "status": "UP", - "latency": 216, - "type": "realtime" - }, - "1731042480": { - "status": "UP", - "latency": 220, - "type": "realtime" - }, - "1731042540": { - "status": "UP", - "latency": 459, - "type": "realtime" - }, - "1731042600": { - "status": "UP", - "latency": 246, - "type": "realtime" - }, - "1731042660": { - "status": "UP", - "latency": 166, - "type": "realtime" - }, - "1731042720": { - "status": "UP", - "latency": 162, - "type": "realtime" - }, - "1731042780": { - "status": "UP", - "latency": 281, - "type": "realtime" - }, - "1731042840": { - "status": "UP", - "latency": 199, - "type": "realtime" - }, - "1731042900": { - "status": "UP", - "latency": 190, - "type": "realtime" - }, - "1731042960": { - "status": "UP", - "latency": 241, - "type": "realtime" - }, - "1731043020": { - "status": "UP", - "latency": 218, - "type": "realtime" - }, - "1731043080": { - "status": "UP", - "latency": 229, - "type": "realtime" - }, - "1731043140": { - "status": "UP", - "latency": 333, - "type": "realtime" - }, - "1731043200": { - "status": "UP", - "latency": 255, - "type": "realtime" - }, - "1731043260": { - "status": "UP", - "latency": 197, - "type": "realtime" - }, - "1731043320": { - "status": "UP", - "latency": 290, - "type": "realtime" - }, - "1731043380": { - "status": "UP", - "latency": 170, - "type": "realtime" - }, - "1731043440": { - "status": "UP", - "latency": 200, - "type": "realtime" - }, - "1731043500": { - "status": "UP", - "latency": 243, - "type": "realtime" - }, - "1731043560": { - "status": "UP", - "latency": 193, - "type": "realtime" - }, - "1731043620": { - "status": "UP", - "latency": 214, - "type": "realtime" - }, - "1731043680": { - "status": "UP", - "latency": 278, - "type": "realtime" - }, - "1731043740": { - "status": "UP", - "latency": 187, - "type": "realtime" - }, - "1731043800": { - "status": "UP", - "latency": 218, - "type": "realtime" - }, - "1731043860": { - "status": "UP", - "latency": 207, - "type": "realtime" - }, - "1731043920": { - "status": "UP", - "latency": 168, - "type": "realtime" - }, - "1731043980": { - "status": "UP", - "latency": 187, - "type": "realtime" - }, - "1731044040": { - "status": "UP", - "latency": 445, - "type": "realtime" - }, - "1731044100": { - "status": "UP", - "latency": 177, - "type": "realtime" - }, - "1731044160": { - "status": "UP", - "latency": 191, - "type": "realtime" - }, - "1731044220": { - "status": "UP", - "latency": 156, - "type": "realtime" - }, - "1731044280": { - "status": "UP", - "latency": 233, - "type": "realtime" - }, - "1731044340": { - "status": "UP", - "latency": 162, - "type": "realtime" - }, - "1731044400": { - "status": "UP", - "latency": 187, - "type": "realtime" - }, - "1731044460": { - "status": "UP", - "latency": 147, - "type": "realtime" - }, - "1731044520": { - "status": "UP", - "latency": 222, - "type": "realtime" - }, - "1731044580": { - "status": "UP", - "latency": 162, - "type": "realtime" - }, - "1731044640": { - "status": "UP", - "latency": 158, - "type": "realtime" - }, - "1731044700": { - "status": "UP", - "latency": 197, - "type": "realtime" - }, - "1731044760": { - "status": "UP", - "latency": 217, - "type": "realtime" - }, - "1731044820": { - "status": "UP", - "latency": 211, - "type": "realtime" - }, - "1731044880": { - "status": "UP", - "latency": 222, - "type": "realtime" - }, - "1731044940": { - "status": "UP", - "latency": 225, - "type": "realtime" - }, - "1731045000": { - "status": "UP", - "latency": 190, - "type": "realtime" - }, - "1731045060": { - "status": "UP", - "latency": 259, - "type": "realtime" - }, - "1731045120": { - "status": "UP", - "latency": 190, - "type": "realtime" - }, - "1731045180": { - "status": "UP", - "latency": 339, - "type": "realtime" - }, - "1731045240": { - "status": "UP", - "latency": 1109, - "type": "realtime" - }, - "1731045300": { - "status": "UP", - "latency": 180, - "type": "realtime" - }, - "1731045360": { - "status": "UP", - "latency": 381, - "type": "realtime" - }, - "1731045420": { - "status": "UP", - "latency": 153, - "type": "realtime" - }, - "1731045480": { - "status": "UP", - "latency": 314, - "type": "realtime" - }, - "1731045540": { - "status": "UP", - "latency": 198, - "type": "realtime" - }, - "1731045600": { - "status": "UP", - "latency": 190, - "type": "realtime" - }, - "1731045660": { - "status": "UP", - "latency": 201, - "type": "realtime" - }, - "1731045720": { - "status": "UP", - "latency": 188, - "type": "realtime" - }, - "1731045780": { - "status": "UP", - "latency": 191, - "type": "realtime" - }, - "1731045840": { - "status": "UP", - "latency": 662, - "type": "realtime" - }, - "1731045900": { - "status": "UP", - "latency": 217, - "type": "realtime" - }, - "1731045960": { - "status": "UP", - "latency": 188, - "type": "realtime" - }, - "1731046020": { - "status": "UP", - "latency": 146, - "type": "realtime" - }, - "1731046080": { - "status": "UP", - "latency": 210, - "type": "realtime" - }, - "1731046140": { - "status": "UP", - "latency": 170, - "type": "realtime" - }, - "1731046200": { - "status": "UP", - "latency": 155, - "type": "realtime" - }, - "1731046260": { - "status": "UP", - "latency": 204, - "type": "realtime" - }, - "1731046320": { - "status": "UP", - "latency": 166, - "type": "realtime" - }, - "1731046380": { - "status": "UP", - "latency": 185, - "type": "realtime" - }, - "1731046440": { - "status": "UP", - "latency": 287, - "type": "realtime" - }, - "1731046500": { - "status": "UP", - "latency": 229, - "type": "realtime" - }, - "1731046560": { - "status": "UP", - "latency": 192, - "type": "realtime" - }, - "1731046620": { - "status": "UP", - "latency": 193, - "type": "realtime" - }, - "1731046680": { - "status": "UP", - "latency": 226, - "type": "realtime" - }, - "1731046740": { - "status": "UP", - "latency": 182, - "type": "realtime" - }, - "1731046800": { - "status": "UP", - "latency": 180, - "type": "realtime" - }, - "1731047040": { - "status": "UP", - "latency": 82, - "type": "realtime" - }, - "1731047100": { - "status": "UP", - "latency": 211, - "type": "realtime" - }, - "1731047160": { - "status": "UP", - "latency": 208, - "type": "realtime" - }, - "1731047220": { - "status": "UP", - "latency": 245, - "type": "realtime" - }, - "1731047280": { - "status": "UP", - "latency": 317, - "type": "realtime" - }, - "1731047340": { - "status": "UP", - "latency": 232, - "type": "realtime" - }, - "1731047400": { - "status": "UP", - "latency": 202, - "type": "realtime" - }, - "1731075120": { - "status": "UP", - "latency": 50, - "type": "realtime" - }, - "1731075180": { - "status": "UP", - "latency": 54, - "type": "realtime" - }, - "1731075240": { - "status": "UP", - "latency": 227, - "type": "realtime" - }, - "1731075300": { - "status": "UP", - "latency": 171, - "type": "realtime" - }, - "1731075360": { - "status": "UP", - "latency": 214, - "type": "realtime" - }, - "1731075420": { - "status": "UP", - "latency": 342, - "type": "realtime" - }, - "1731075480": { - "status": "UP", - "latency": 317, - "type": "realtime" - }, - "1731075540": { - "status": "UP", - "latency": 196, - "type": "realtime" - }, - "1731075600": { - "status": "UP", - "latency": 46, - "type": "realtime" - }, - "1731075660": { - "status": "UP", - "latency": 216, - "type": "realtime" - }, - "1731075720": { - "status": "UP", - "latency": 160, - "type": "realtime" - }, - "1731075780": { - "status": "UP", - "latency": 223, - "type": "realtime" - }, - "1731075840": { - "status": "UP", - "latency": 246, - "type": "realtime" - }, - "1731075900": { - "status": "UP", - "latency": 1165, - "type": "realtime" - }, - "1731075960": { - "status": "UP", - "latency": 268, - "type": "realtime" - }, - "1731076020": { - "status": "UP", - "latency": 259, - "type": "realtime" - }, - "1731076080": { - "status": "UP", - "latency": 216, - "type": "realtime" - }, - "1731076140": { - "status": "UP", - "latency": 195, - "type": "realtime" - }, - "1731076200": { - "status": "UP", - "latency": 283, - "type": "realtime" - }, - "1731076260": { - "status": "UP", - "latency": 583, - "type": "realtime" - }, - "1731076320": { - "status": "UP", - "latency": 184, - "type": "realtime" - }, - "1731076380": { - "status": "UP", - "latency": 271, - "type": "realtime" - }, - "1731076440": { - "status": "UP", - "latency": 275, - "type": "realtime" - }, - "1731076500": { - "status": "UP", - "latency": 254, - "type": "realtime" - }, - "1731076560": { - "status": "UP", - "latency": 589, - "type": "realtime" - }, - "1731076620": { - "status": "UP", - "latency": 1500, - "type": "realtime" - }, - "1731076680": { - "status": "UP", - "latency": 156, - "type": "realtime" - }, - "1731076740": { - "status": "UP", - "latency": 274, - "type": "realtime" - }, - "1731076800": { - "status": "UP", - "latency": 55, - "type": "realtime" - }, - "1731076860": { - "status": "UP", - "latency": 68, - "type": "realtime" - }, - "1731076920": { - "status": "UP", - "latency": 49, - "type": "realtime" - }, - "1731076980": { - "status": "UP", - "latency": 49, - "type": "realtime" - }, - "1731077040": { - "status": "UP", - "latency": 56, - "type": "realtime" - }, - "1731077100": { - "status": "UP", - "latency": 469, - "type": "realtime" - }, - "1731077160": { - "status": "UP", - "latency": 249, - "type": "realtime" - }, - "1731077220": { - "status": "UP", - "latency": 49, - "type": "realtime" - }, - "1731077280": { - "status": "UP", - "latency": 213, - "type": "realtime" - }, - "1731077340": { - "status": "UP", - "latency": 190, - "type": "realtime" - }, - "1731077400": { - "status": "UP", - "latency": 225, - "type": "realtime" - }, - "1731077460": { - "status": "UP", - "latency": 154, - "type": "realtime" - }, - "1731077520": { - "status": "UP", - "latency": 187, - "type": "realtime" - }, - "1731077580": { - "status": "UP", - "latency": 166, - "type": "realtime" - }, - "1731077640": { - "status": "UP", - "latency": 166, - "type": "realtime" - }, - "1731077700": { - "status": "UP", - "latency": 160, - "type": "realtime" - }, - "1731077760": { - "status": "UP", - "latency": 2189, - "type": "realtime" - }, - "1731077820": { - "status": "UP", - "latency": 209, - "type": "realtime" - }, - "1731077880": { - "status": "UP", - "latency": 219, - "type": "realtime" - }, - "1731077940": { - "status": "UP", - "latency": 205, - "type": "realtime" - }, - "1731078000": { - "status": "UP", - "latency": 1333, - "type": "realtime" - }, - "1731078060": { - "status": "UP", - "latency": 182, - "type": "realtime" - }, - "1731078120": { - "status": "UP", - "latency": 263, - "type": "realtime" - }, - "1731078180": { - "status": "UP", - "latency": 475, - "type": "realtime" - }, - "1731078240": { - "status": "UP", - "latency": 214, - "type": "realtime" - }, - "1731078300": { - "status": "UP", - "latency": 227, - "type": "realtime" - }, - "1731078360": { - "status": "UP", - "latency": 495, - "type": "realtime" - }, - "1731078420": { - "status": "UP", - "latency": 191, - "type": "realtime" - }, - "1731078480": { - "status": "UP", - "latency": 270, - "type": "realtime" - }, - "1731078540": { - "status": "UP", - "latency": 157, - "type": "realtime" - }, - "1731078600": { - "status": "UP", - "latency": 171, - "type": "realtime" - }, - "1731078660": { - "status": "UP", - "latency": 175, - "type": "realtime" - }, - "1731078720": { - "status": "UP", - "latency": 301, - "type": "realtime" - }, - "1731078780": { - "status": "UP", - "latency": 159, - "type": "realtime" - }, - "1731078840": { - "status": "UP", - "latency": 161, - "type": "realtime" - }, - "1731078900": { - "status": "UP", - "latency": 60, - "type": "realtime" - }, - "1731078960": { - "status": "UP", - "latency": 264, - "type": "realtime" - }, - "1731079020": { - "status": "UP", - "latency": 224, - "type": "realtime" - }, - "1731079080": { - "status": "UP", - "latency": 159, - "type": "realtime" - }, - "1731079140": { - "status": "UP", - "latency": 143, - "type": "realtime" - }, - "1731079200": { - "status": "UP", - "latency": 347, - "type": "realtime" - }, - "1731079260": { - "status": "UP", - "latency": 185, - "type": "realtime" - }, - "1731079320": { - "status": "UP", - "latency": 228, - "type": "realtime" - }, - "1731079380": { - "status": "UP", - "latency": 287, - "type": "realtime" - }, - "1731079440": { - "status": "UP", - "latency": 189, - "type": "realtime" - }, - "1731079500": { - "status": "UP", - "latency": 189, - "type": "realtime" - }, - "1731079560": { - "status": "UP", - "latency": 234, - "type": "realtime" - }, - "1731079620": { - "status": "UP", - "latency": 231, - "type": "realtime" - }, - "1731079680": { - "status": "UP", - "latency": 237, - "type": "realtime" - }, - "1731079740": { - "status": "UP", - "latency": 289, - "type": "realtime" - }, - "1731079800": { - "status": "UP", - "latency": 201, - "type": "realtime" - }, - "1731079860": { - "status": "UP", - "latency": 182, - "type": "realtime" - }, - "1731079920": { - "status": "UP", - "latency": 211, - "type": "realtime" - }, - "1731079980": { - "status": "UP", - "latency": 210, - "type": "realtime" - }, - "1731080040": { - "status": "UP", - "latency": 258, - "type": "realtime" - }, - "1731080100": { - "status": "UP", - "latency": 252, - "type": "realtime" - }, - "1731080160": { - "status": "UP", - "latency": 217, - "type": "realtime" - }, - "1731080220": { - "status": "UP", - "latency": 181, - "type": "realtime" - }, - "1731080280": { - "status": "UP", - "latency": 170, - "type": "realtime" - }, - "1731080340": { - "status": "UP", - "latency": 151, - "type": "realtime" - }, - "1731080400": { - "status": "UP", - "latency": 194, - "type": "realtime" - }, - "1731080460": { - "status": "UP", - "latency": 143, - "type": "realtime" - }, - "1731080520": { - "status": "UP", - "latency": 188, - "type": "realtime" - }, - "1731080580": { - "status": "UP", - "latency": 156, - "type": "realtime" - }, - "1731080640": { - "status": "UP", - "latency": 152, - "type": "realtime" - }, - "1731080700": { - "status": "UP", - "latency": 792, - "type": "realtime" - }, - "1731080760": { - "status": "UP", - "latency": 277, - "type": "realtime" - }, - "1731080820": { - "status": "UP", - "latency": 351, - "type": "realtime" - }, - "1731080880": { - "status": "UP", - "latency": 203, - "type": "realtime" - }, - "1731080940": { - "status": "UP", - "latency": 252, - "type": "realtime" - }, - "1731081000": { - "status": "UP", - "latency": 174, - "type": "realtime" - }, - "1731081060": { - "status": "UP", - "latency": 152, - "type": "realtime" - }, - "1731081120": { - "status": "UP", - "latency": 274, - "type": "realtime" - }, - "1731081180": { - "status": "UP", - "latency": 203, - "type": "realtime" - }, - "1731081240": { - "status": "UP", - "latency": 235, - "type": "realtime" - }, - "1731081300": { - "status": "UP", - "latency": 211, - "type": "realtime" - }, - "1731081360": { - "status": "UP", - "latency": 201, - "type": "realtime" - }, - "1731081420": { - "status": "UP", - "latency": 163, - "type": "realtime" - }, - "1731081480": { - "status": "UP", - "latency": 287, - "type": "realtime" - }, - "1731081540": { - "status": "UP", - "latency": 225, - "type": "realtime" - }, - "1731081600": { - "status": "UP", - "latency": 168, - "type": "realtime" - }, - "1731081660": { - "status": "UP", - "latency": 190, - "type": "realtime" - }, - "1731081720": { - "status": "UP", - "latency": 185, - "type": "realtime" - }, - "1731081780": { - "status": "UP", - "latency": 161, - "type": "realtime" - }, - "1731081840": { - "status": "UP", - "latency": 197, - "type": "realtime" - }, - "1731081900": { - "status": "UP", - "latency": 166, - "type": "realtime" - }, - "1731081960": { - "status": "UP", - "latency": 160, - "type": "realtime" - }, - "1731082020": { - "status": "UP", - "latency": 168, - "type": "realtime" - }, - "1731082080": { - "status": "UP", - "latency": 213, - "type": "realtime" - }, - "1731082140": { - "status": "UP", - "latency": 178, - "type": "realtime" - }, - "1731082200": { - "status": "UP", - "latency": 184, - "type": "realtime" - }, - "1731082260": { - "status": "UP", - "latency": 271, - "type": "realtime" - }, - "1731082320": { - "status": "UP", - "latency": 213, - "type": "realtime" - }, - "1731082380": { - "status": "UP", - "latency": 179, - "type": "realtime" - }, - "1731082440": { - "status": "UP", - "latency": 154, - "type": "realtime" - }, - "1731082500": { - "status": "UP", - "latency": 169, - "type": "realtime" - }, - "1731082560": { - "status": "UP", - "latency": 391, - "type": "realtime" - }, - "1731082620": { - "status": "UP", - "latency": 304, - "type": "realtime" - }, - "1731082680": { - "status": "UP", - "latency": 228, - "type": "realtime" - }, - "1731082740": { - "status": "UP", - "latency": 232, - "type": "realtime" - }, - "1731082800": { - "status": "UP", - "latency": 245, - "type": "realtime" - }, - "1731082860": { - "status": "UP", - "latency": 182, - "type": "realtime" - }, - "1731082920": { - "status": "UP", - "latency": 167, - "type": "realtime" - }, - "1731082980": { - "status": "UP", - "latency": 1163, - "type": "realtime" - }, - "1731083040": { - "status": "UP", - "latency": 202, - "type": "realtime" - }, - "1731083100": { - "status": "UP", - "latency": 204, - "type": "realtime" - }, - "1731083160": { - "status": "UP", - "latency": 179, - "type": "realtime" - }, - "1731083220": { - "status": "UP", - "latency": 163, - "type": "realtime" - }, - "1731083280": { - "status": "UP", - "latency": 182, - "type": "realtime" - }, - "1731083340": { - "status": "UP", - "latency": 290, - "type": "realtime" - }, - "1731083400": { - "status": "UP", - "latency": 255, - "type": "realtime" - }, - "1731083460": { - "status": "UP", - "latency": 151, - "type": "realtime" - }, - "1731083520": { - "status": "UP", - "latency": 238, - "type": "realtime" - }, - "1731083580": { - "status": "UP", - "latency": 204, - "type": "realtime" - }, - "1731083640": { - "status": "UP", - "latency": 49, - "type": "realtime" - }, - "1731083700": { - "status": "UP", - "latency": 309, - "type": "realtime" - }, - "1731083760": { - "status": "UP", - "latency": 206, - "type": "realtime" - }, - "1731083820": { - "status": "UP", - "latency": 58, - "type": "realtime" - }, - "1731083880": { - "status": "UP", - "latency": 195, - "type": "realtime" - }, - "1731083940": { - "status": "UP", - "latency": 229, - "type": "realtime" - }, - "1731084000": { - "status": "UP", - "latency": 217, - "type": "realtime" - }, - "1731084060": { - "status": "UP", - "latency": 228, - "type": "realtime" - }, - "1731084120": { - "status": "UP", - "latency": 190, - "type": "realtime" - }, - "1731084180": { - "status": "UP", - "latency": 146, - "type": "realtime" - }, - "1731084240": { - "status": "UP", - "latency": 226, - "type": "realtime" - }, - "1731084300": { - "status": "UP", - "latency": 229, - "type": "realtime" - }, - "1731084360": { - "status": "UP", - "latency": 224, - "type": "realtime" - }, - "1731084420": { - "status": "UP", - "latency": 241, - "type": "realtime" - }, - "1731084480": { - "status": "UP", - "latency": 404, - "type": "realtime" - }, - "1731084540": { - "status": "UP", - "latency": 213, - "type": "realtime" - }, - "1731084600": { - "status": "UP", - "latency": 224, - "type": "realtime" - }, - "1731084660": { - "status": "UP", - "latency": 219, - "type": "realtime" - }, - "1731084720": { - "status": "UP", - "latency": 192, - "type": "realtime" - }, - "1731084780": { - "status": "UP", - "latency": 218, - "type": "realtime" - }, - "1731084840": { - "status": "UP", - "latency": 268, - "type": "realtime" - }, - "1731084900": { - "status": "UP", - "latency": 194, - "type": "realtime" - }, - "1731084960": { - "status": "UP", - "latency": 205, - "type": "realtime" - }, - "1731085020": { - "status": "UP", - "latency": 240, - "type": "realtime" - }, - "1731085080": { - "status": "UP", - "latency": 252, - "type": "realtime" - }, - "1731085140": { - "status": "UP", - "latency": 208, - "type": "realtime" - }, - "1731085200": { - "status": "UP", - "latency": 217, - "type": "realtime" - }, - "1731085260": { - "status": "UP", - "latency": 208, - "type": "realtime" - }, - "1731085320": { - "status": "UP", - "latency": 372, - "type": "realtime" - }, - "1731085380": { - "status": "UP", - "latency": 218, - "type": "realtime" - }, - "1731085440": { - "status": "UP", - "latency": 207, - "type": "realtime" - }, - "1731085500": { - "status": "UP", - "latency": 195, - "type": "realtime" - }, - "1731085560": { - "status": "UP", - "latency": 306, - "type": "realtime" - }, - "1731085620": { - "status": "UP", - "latency": 174, - "type": "realtime" - }, - "1731085680": { - "status": "UP", - "latency": 234, - "type": "realtime" - }, - "1731085740": { - "status": "UP", - "latency": 195, - "type": "realtime" - }, - "1731085800": { - "status": "UP", - "latency": 209, - "type": "realtime" - }, - "1731085860": { - "status": "UP", - "latency": 227, - "type": "realtime" - }, - "1731085920": { - "status": "UP", - "latency": 416, - "type": "realtime" - }, - "1731085980": { - "status": "UP", - "latency": 192, - "type": "realtime" - }, - "1731086040": { - "status": "UP", - "latency": 211, - "type": "realtime" - }, - "1731086100": { - "status": "UP", - "latency": 212, - "type": "realtime" - }, - "1731086160": { - "status": "UP", - "latency": 357, - "type": "realtime" - }, - "1731086220": { - "status": "UP", - "latency": 492, - "type": "realtime" - }, - "1731086280": { - "status": "UP", - "latency": 272, - "type": "realtime" - }, - "1731086340": { - "status": "UP", - "latency": 519, - "type": "realtime" - }, - "1731086400": { - "status": "UP", - "latency": 208, - "type": "realtime" - }, - "1731086460": { - "status": "UP", - "latency": 619, - "type": "realtime" - }, - "1731086520": { - "status": "UP", - "latency": 202, - "type": "realtime" - }, - "1731086580": { - "status": "UP", - "latency": 223, - "type": "realtime" - }, - "1731086640": { - "status": "UP", - "latency": 178, - "type": "realtime" - }, - "1731086700": { - "status": "UP", - "latency": 160, - "type": "realtime" - }, - "1731086760": { - "status": "UP", - "latency": 144, - "type": "realtime" - } -} \ No newline at end of file diff --git a/src/lib/server/data/okbookmarks.90day.utc.json b/src/lib/server/data/okbookmarks.90day.utc.json deleted file mode 100644 index 7d72f609c..000000000 --- a/src/lib/server/data/okbookmarks.90day.utc.json +++ /dev/null @@ -1 +0,0 @@ -{"_90Day":{"1723248000":{"timestamp":1723248000,"cssClass":"api-nodata","message":"No Data"},"1723334400":{"timestamp":1723334400,"cssClass":"api-nodata","message":"No Data"},"1723420800":{"timestamp":1723420800,"cssClass":"api-nodata","message":"No Data"},"1723507200":{"timestamp":1723507200,"cssClass":"api-nodata","message":"No Data"},"1723593600":{"timestamp":1723593600,"cssClass":"api-nodata","message":"No Data"},"1723680000":{"timestamp":1723680000,"cssClass":"api-nodata","message":"No Data"},"1723766400":{"timestamp":1723766400,"cssClass":"api-nodata","message":"No Data"},"1723852800":{"timestamp":1723852800,"cssClass":"api-nodata","message":"No Data"},"1723939200":{"timestamp":1723939200,"cssClass":"api-nodata","message":"No Data"},"1724025600":{"timestamp":1724025600,"cssClass":"api-nodata","message":"No Data"},"1724112000":{"timestamp":1724112000,"cssClass":"api-nodata","message":"No Data"},"1724198400":{"timestamp":1724198400,"cssClass":"api-nodata","message":"No Data"},"1724284800":{"timestamp":1724284800,"cssClass":"api-nodata","message":"No Data"},"1724371200":{"timestamp":1724371200,"cssClass":"api-nodata","message":"No Data"},"1724457600":{"timestamp":1724457600,"cssClass":"api-nodata","message":"No Data"},"1724544000":{"timestamp":1724544000,"cssClass":"api-nodata","message":"No Data"},"1724630400":{"timestamp":1724630400,"cssClass":"api-nodata","message":"No Data"},"1724716800":{"timestamp":1724716800,"cssClass":"api-nodata","message":"No Data"},"1724803200":{"timestamp":1724803200,"cssClass":"api-nodata","message":"No Data"},"1724889600":{"timestamp":1724889600,"cssClass":"api-nodata","message":"No Data"},"1724976000":{"timestamp":1724976000,"cssClass":"api-nodata","message":"No Data"},"1725062400":{"timestamp":1725062400,"cssClass":"api-nodata","message":"No Data"},"1725148800":{"timestamp":1725148800,"cssClass":"api-nodata","message":"No Data"},"1725235200":{"timestamp":1725235200,"cssClass":"api-nodata","message":"No Data"},"1725321600":{"timestamp":1725321600,"cssClass":"api-nodata","message":"No Data"},"1725408000":{"timestamp":1725408000,"cssClass":"api-nodata","message":"No Data"},"1725494400":{"timestamp":1725494400,"cssClass":"api-nodata","message":"No Data"},"1725580800":{"timestamp":1725580800,"cssClass":"api-nodata","message":"No Data"},"1725667200":{"timestamp":1725667200,"cssClass":"api-nodata","message":"No Data"},"1725753600":{"timestamp":1725753600,"cssClass":"api-nodata","message":"No Data"},"1725840000":{"timestamp":1725840000,"cssClass":"api-nodata","message":"No Data"},"1725926400":{"timestamp":1725926400,"cssClass":"api-nodata","message":"No Data"},"1726012800":{"timestamp":1726012800,"cssClass":"api-nodata","message":"No Data"},"1726099200":{"timestamp":1726099200,"cssClass":"api-nodata","message":"No Data"},"1726185600":{"timestamp":1726185600,"cssClass":"api-nodata","message":"No Data"},"1726272000":{"timestamp":1726272000,"cssClass":"api-nodata","message":"No Data"},"1726358400":{"timestamp":1726358400,"cssClass":"api-nodata","message":"No Data"},"1726444800":{"timestamp":1726444800,"cssClass":"api-nodata","message":"No Data"},"1726531200":{"timestamp":1726531200,"cssClass":"api-nodata","message":"No Data"},"1726617600":{"timestamp":1726617600,"cssClass":"api-nodata","message":"No Data"},"1726704000":{"timestamp":1726704000,"cssClass":"api-nodata","message":"No Data"},"1726790400":{"timestamp":1726790400,"cssClass":"api-nodata","message":"No Data"},"1726876800":{"timestamp":1726876800,"cssClass":"api-nodata","message":"No Data"},"1726963200":{"timestamp":1726963200,"cssClass":"api-nodata","message":"No Data"},"1727049600":{"timestamp":1727049600,"cssClass":"api-nodata","message":"No Data"},"1727136000":{"timestamp":1727136000,"cssClass":"api-nodata","message":"No Data"},"1727222400":{"timestamp":1727222400,"cssClass":"api-nodata","message":"No Data"},"1727308800":{"timestamp":1727308800,"cssClass":"api-nodata","message":"No Data"},"1727395200":{"timestamp":1727395200,"cssClass":"api-nodata","message":"No Data"},"1727481600":{"timestamp":1727481600,"cssClass":"api-nodata","message":"No Data"},"1727568000":{"timestamp":1727568000,"cssClass":"api-nodata","message":"No Data"},"1727654400":{"timestamp":1727654400,"cssClass":"api-nodata","message":"No Data"},"1727740800":{"timestamp":1727740800,"cssClass":"api-nodata","message":"No Data"},"1727827200":{"timestamp":1727827200,"cssClass":"api-nodata","message":"No Data"},"1727913600":{"timestamp":1727913600,"cssClass":"api-nodata","message":"No Data"},"1728000000":{"timestamp":1728000000,"cssClass":"api-nodata","message":"No Data"},"1728086400":{"timestamp":1728086400,"cssClass":"api-nodata","message":"No Data"},"1728172800":{"timestamp":1728172800,"cssClass":"api-nodata","message":"No Data"},"1728259200":{"timestamp":1728259200,"cssClass":"api-nodata","message":"No Data"},"1728345600":{"timestamp":1728345600,"cssClass":"api-nodata","message":"No Data"},"1728432000":{"timestamp":1728432000,"cssClass":"api-nodata","message":"No Data"},"1728518400":{"timestamp":1728518400,"cssClass":"api-nodata","message":"No Data"},"1728604800":{"timestamp":1728604800,"cssClass":"api-nodata","message":"No Data"},"1728691200":{"timestamp":1728691200,"cssClass":"api-nodata","message":"No Data"},"1728777600":{"timestamp":1728777600,"cssClass":"api-nodata","message":"No Data"},"1728864000":{"timestamp":1728864000,"cssClass":"api-nodata","message":"No Data"},"1728950400":{"timestamp":1728950400,"cssClass":"api-nodata","message":"No Data"},"1729036800":{"timestamp":1729036800,"cssClass":"api-nodata","message":"No Data"},"1729123200":{"timestamp":1729123200,"cssClass":"api-nodata","message":"No Data"},"1729209600":{"timestamp":1729209600,"cssClass":"api-nodata","message":"No Data"},"1729296000":{"timestamp":1729296000,"cssClass":"api-nodata","message":"No Data"},"1729382400":{"timestamp":1729382400,"cssClass":"api-nodata","message":"No Data"},"1729468800":{"timestamp":1729468800,"cssClass":"api-nodata","message":"No Data"},"1729555200":{"timestamp":1729555200,"cssClass":"api-nodata","message":"No Data"},"1729641600":{"timestamp":1729641600,"cssClass":"api-nodata","message":"No Data"},"1729728000":{"timestamp":1729728000,"cssClass":"api-nodata","message":"No Data"},"1729814400":{"timestamp":1729814400,"cssClass":"api-nodata","message":"No Data"},"1729900800":{"timestamp":1729900800,"cssClass":"api-nodata","message":"No Data"},"1729987200":{"timestamp":1729987200,"cssClass":"api-nodata","message":"No Data"},"1730073600":{"timestamp":1730073600,"cssClass":"api-nodata","message":"No Data"},"1730160000":{"timestamp":1730160000,"cssClass":"api-nodata","message":"No Data"},"1730246400":{"timestamp":1730246400,"cssClass":"api-nodata","message":"No Data"},"1730332800":{"timestamp":1730332800,"cssClass":"api-nodata","message":"No Data"},"1730419200":{"timestamp":1730419200,"cssClass":"api-nodata","message":"No Data"},"1730505600":{"timestamp":1730505600,"cssClass":"api-nodata","message":"No Data"},"1730592000":{"timestamp":1730592000,"cssClass":"api-nodata","message":"No Data"},"1730678400":{"timestamp":1730678400,"cssClass":"api-nodata","message":"No Data"},"1730764800":{"timestamp":1730764800,"cssClass":"api-nodata","message":"No Data"},"1730851200":{"timestamp":1730851200,"cssClass":"api-nodata","message":"No Data"},"1730937600":{"timestamp":1730937600,"cssClass":"api-nodata","message":"No Data"},"1731024000":{"timestamp":1731024000,"cssClass":"api-up","message":"Status OK"}},"uptime0Day":"100","uptime90Day":"100","dailyUps":332,"dailyDown":0,"dailyDegraded":0} diff --git a/src/lib/server/data/site.json b/src/lib/server/data/site.json deleted file mode 100644 index 136f14a53..000000000 --- a/src/lib/server/data/site.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "title": "Kener - Open-Source and Modern looking Node.js Status Page for Effortless Incident Management", - "siteName": "Kener.ing", - "home": "/", - "logo": "/logo.png", - "github": { - "owner": "rajnandan1", - "repo": "kener", - "incidentSince": 48 - }, - "metaTags": { - "description": "Kener: Open-source modern looking Node.js status page tool, designed to make service monitoring and incident handling a breeze. It offers a sleek and user-friendly interface that simplifies tracking service outages and improves how we communicate during incidents. And the best part? Kener integrates seamlessly with GitHub, making incident management a team effort—making it easier for us to track and fix issues together in a collaborative and friendly environment.", - "keywords": "Node.js status page, Incident management tool, Service monitoring, Service outage tracking, Real-time status updates, GitHub integration for incidents, Open-source status page, Node.js monitoring application, Service reliability, User-friendly incident management, Collaborative incident resolution, Seamless outage communication, Service disruption tracker, Real-time incident alerts, Node.js status reporting", - "og:description": "Kener: Open-source Node.js status page tool, designed to make service monitoring and incident handling a breeze. It offers a sleek and user-friendly interface that simplifies tracking service outages and improves how we communicate during incidents. And the best part? Kener integrates seamlessly with GitHub, making incident management a team effort—making it easier for us to track and fix issues together in a collaborative and friendly environment.", - "og:image": "https://kener.ing/ss.png", - "og:title": "Kener - Open-Source and Modern looking Node.js Status Page for Effortless Incident Management", - "og:type": "website", - "og:site_name": "Kener", - "twitter:card": "summary_large_image", - "twitter:site": "@_rajnandan_", - "twitter:creator": "@_rajnandan_", - "twitter:image": "https://kener.ing/ss.png", - "twitter:title": "Kener: Open-Source and Modern looking Node.js Status Page for Effortless Incident Management", - "twitter:description": "Kener: Open-source Node.js status page tool, designed to make service monitoring and incident handling a breeze. It offers a sleek and user-friendly interface that simplifies tracking service outages and improves how we communicate during incidents. And the best part? Kener integrates seamlessly with GitHub, making incident management a team effort—making it easier for us to track and fix issues together in a collaborative and friendly environment." - }, - "nav": [ - { - "name": "Documentation", - "url": "/docs" - }, - { - "name": "Github", - "iconURL": "/github.svg", - "url": "https://github.com/rajnandan1/kener" - }, - { - "name": "Buy me a coffee", - "iconURL": "/buymeacoffee.svg", - "url": "https://buymeacoffee.com/rajnandan1" - } - ], - "hero": { - "title": "Kener is a Open-Source Status Page System", - "subtitle": "Let your users know what's going on." - }, - "footerHTML": "Made using \n\n Kener\n\nan open source status page system built with Svelte and TailwindCSS.\n", - "i18n": { - "defaultLocale": "en", - "locales": { - "en": "English", - "hi": "हिन्दी", - "zh-CN": "中文", - "ja": "日本語", - "vi": "Tiếng Việt" - } - }, - "theme": "dark", - "pattern": "squares", - "font": { - "cssSrc": "https://fonts.googleapis.com/css2?family=Lato:ital,wght@0,100;0,300;0,400;0,700;0,900;1,100;1,300;1,400;1,700;1,900&display=swap", - "family": "\"Lato\", sans-serif" - } -} \ No newline at end of file diff --git a/src/lib/server/data/svelte-website.0day.utc.json b/src/lib/server/data/svelte-website.0day.utc.json deleted file mode 100644 index 006db777d..000000000 --- a/src/lib/server/data/svelte-website.0day.utc.json +++ /dev/null @@ -1,2072 +0,0 @@ -{ - "1731003360": { - "status": "UP", - "latency": 194, - "type": "realtime" - }, - "1731003420": { - "status": "UP", - "latency": 132, - "type": "realtime" - }, - "1731003480": { - "status": "UP", - "latency": 149, - "type": "realtime" - }, - "1731003540": { - "status": "UP", - "latency": 157, - "type": "realtime" - }, - "1731003600": { - "status": "UP", - "latency": 140, - "type": "realtime" - }, - "1731003660": { - "status": "UP", - "latency": 157, - "type": "realtime" - }, - "1731004380": { - "status": "UP", - "latency": 55, - "type": "realtime" - }, - "1731004440": { - "status": "UP", - "latency": 195, - "type": "realtime" - }, - "1731004500": { - "status": "UP", - "latency": 71, - "type": "realtime" - }, - "1731031740": { - "status": "UP", - "latency": 58, - "type": "realtime" - }, - "1731033300": { - "status": "UP", - "latency": 88, - "type": "realtime" - }, - "1731033660": { - "status": "UP", - "latency": 72, - "type": "realtime" - }, - "1731033720": { - "status": "UP", - "latency": 56, - "type": "realtime" - }, - "1731033780": { - "status": "UP", - "latency": 158, - "type": "realtime" - }, - "1731033840": { - "status": "UP", - "latency": 162, - "type": "realtime" - }, - "1731033900": { - "status": "UP", - "latency": 159, - "type": "realtime" - }, - "1731033960": { - "status": "UP", - "latency": 175, - "type": "realtime" - }, - "1731034020": { - "status": "UP", - "latency": 150, - "type": "realtime" - }, - "1731034080": { - "status": "UP", - "latency": 138, - "type": "realtime" - }, - "1731034140": { - "status": "UP", - "latency": 139, - "type": "realtime" - }, - "1731034200": { - "status": "UP", - "latency": 150, - "type": "realtime" - }, - "1731034260": { - "status": "UP", - "latency": 167, - "type": "realtime" - }, - "1731034320": { - "status": "UP", - "latency": 186, - "type": "realtime" - }, - "1731034380": { - "status": "UP", - "latency": 128, - "type": "realtime" - }, - "1731034440": { - "status": "UP", - "latency": 170, - "type": "realtime" - }, - "1731034500": { - "status": "UP", - "latency": 163, - "type": "realtime" - }, - "1731034560": { - "status": "UP", - "latency": 198, - "type": "realtime" - }, - "1731034620": { - "status": "UP", - "latency": 152, - "type": "realtime" - }, - "1731034680": { - "status": "UP", - "latency": 120, - "type": "realtime" - }, - "1731034740": { - "status": "UP", - "latency": 246, - "type": "realtime" - }, - "1731034800": { - "status": "UP", - "latency": 146, - "type": "realtime" - }, - "1731034860": { - "status": "UP", - "latency": 124, - "type": "realtime" - }, - "1731034920": { - "status": "UP", - "latency": 162, - "type": "realtime" - }, - "1731034980": { - "status": "UP", - "latency": 148, - "type": "realtime" - }, - "1731035040": { - "status": "UP", - "latency": 199, - "type": "realtime" - }, - "1731035100": { - "status": "UP", - "latency": 158, - "type": "realtime" - }, - "1731035160": { - "status": "UP", - "latency": 142, - "type": "realtime" - }, - "1731035220": { - "status": "UP", - "latency": 148, - "type": "realtime" - }, - "1731035280": { - "status": "UP", - "latency": 209, - "type": "realtime" - }, - "1731035340": { - "status": "UP", - "latency": 159, - "type": "realtime" - }, - "1731035400": { - "status": "UP", - "latency": 261, - "type": "realtime" - }, - "1731035460": { - "status": "UP", - "latency": 194, - "type": "realtime" - }, - "1731035520": { - "status": "UP", - "latency": 141, - "type": "realtime" - }, - "1731035580": { - "status": "UP", - "latency": 123, - "type": "realtime" - }, - "1731035640": { - "status": "UP", - "latency": 135, - "type": "realtime" - }, - "1731035700": { - "status": "UP", - "latency": 507, - "type": "realtime" - }, - "1731035760": { - "status": "UP", - "latency": 155, - "type": "realtime" - }, - "1731035820": { - "status": "UP", - "latency": 119, - "type": "realtime" - }, - "1731035880": { - "status": "UP", - "latency": 107, - "type": "realtime" - }, - "1731035940": { - "status": "UP", - "latency": 232, - "type": "realtime" - }, - "1731036000": { - "status": "UP", - "latency": 140, - "type": "realtime" - }, - "1731036060": { - "status": "UP", - "latency": 121, - "type": "realtime" - }, - "1731036120": { - "status": "UP", - "latency": 151, - "type": "realtime" - }, - "1731036180": { - "status": "UP", - "latency": 189, - "type": "realtime" - }, - "1731036240": { - "status": "UP", - "latency": 163, - "type": "realtime" - }, - "1731036300": { - "status": "UP", - "latency": 331, - "type": "realtime" - }, - "1731036360": { - "status": "UP", - "latency": 115, - "type": "realtime" - }, - "1731036420": { - "status": "UP", - "latency": 130, - "type": "realtime" - }, - "1731036480": { - "status": "UP", - "latency": 121, - "type": "realtime" - }, - "1731036540": { - "status": "UP", - "latency": 165, - "type": "realtime" - }, - "1731036600": { - "status": "UP", - "latency": 164, - "type": "realtime" - }, - "1731036660": { - "status": "UP", - "latency": 151, - "type": "realtime" - }, - "1731036720": { - "status": "UP", - "latency": 138, - "type": "realtime" - }, - "1731036780": { - "status": "UP", - "latency": 121, - "type": "realtime" - }, - "1731036840": { - "status": "UP", - "latency": 133, - "type": "realtime" - }, - "1731036900": { - "status": "UP", - "latency": 325, - "type": "realtime" - }, - "1731036960": { - "status": "UP", - "latency": 223, - "type": "realtime" - }, - "1731037020": { - "status": "UP", - "latency": 149, - "type": "realtime" - }, - "1731037080": { - "status": "UP", - "latency": 335, - "type": "realtime" - }, - "1731037140": { - "status": "UP", - "latency": 273, - "type": "realtime" - }, - "1731037200": { - "status": "UP", - "latency": 177, - "type": "realtime" - }, - "1731037260": { - "status": "UP", - "latency": 145, - "type": "realtime" - }, - "1731037320": { - "status": "UP", - "latency": 190, - "type": "realtime" - }, - "1731037380": { - "status": "UP", - "latency": 185, - "type": "realtime" - }, - "1731037440": { - "status": "UP", - "latency": 135, - "type": "realtime" - }, - "1731037500": { - "status": "UP", - "latency": 202, - "type": "realtime" - }, - "1731037560": { - "status": "UP", - "latency": 205, - "type": "realtime" - }, - "1731037620": { - "status": "UP", - "latency": 207, - "type": "realtime" - }, - "1731037680": { - "status": "UP", - "latency": 144, - "type": "realtime" - }, - "1731037740": { - "status": "UP", - "latency": 189, - "type": "realtime" - }, - "1731037800": { - "status": "UP", - "latency": 178, - "type": "realtime" - }, - "1731037860": { - "status": "UP", - "latency": 138, - "type": "realtime" - }, - "1731037920": { - "status": "UP", - "latency": 140, - "type": "realtime" - }, - "1731037980": { - "status": "UP", - "latency": 191, - "type": "realtime" - }, - "1731038040": { - "status": "UP", - "latency": 125, - "type": "realtime" - }, - "1731038100": { - "status": "UP", - "latency": 117, - "type": "realtime" - }, - "1731038160": { - "status": "UP", - "latency": 163, - "type": "realtime" - }, - "1731038220": { - "status": "UP", - "latency": 181, - "type": "realtime" - }, - "1731038280": { - "status": "UP", - "latency": 162, - "type": "realtime" - }, - "1731038340": { - "status": "UP", - "latency": 127, - "type": "realtime" - }, - "1731038400": { - "status": "UP", - "latency": 156, - "type": "realtime" - }, - "1731038460": { - "status": "UP", - "latency": 170, - "type": "realtime" - }, - "1731038520": { - "status": "UP", - "latency": 136, - "type": "realtime" - }, - "1731038580": { - "status": "UP", - "latency": 155, - "type": "realtime" - }, - "1731038640": { - "status": "UP", - "latency": 145, - "type": "realtime" - }, - "1731038700": { - "status": "UP", - "latency": 133, - "type": "realtime" - }, - "1731038760": { - "status": "UP", - "latency": 184, - "type": "realtime" - }, - "1731038820": { - "status": "UP", - "latency": 282, - "type": "realtime" - }, - "1731038880": { - "status": "UP", - "latency": 134, - "type": "realtime" - }, - "1731038940": { - "status": "UP", - "latency": 135, - "type": "realtime" - }, - "1731039000": { - "status": "UP", - "latency": 222, - "type": "realtime" - }, - "1731039060": { - "status": "UP", - "latency": 123, - "type": "realtime" - }, - "1731039120": { - "status": "UP", - "latency": 116, - "type": "realtime" - }, - "1731039180": { - "status": "UP", - "latency": 105, - "type": "realtime" - }, - "1731039240": { - "status": "UP", - "latency": 184, - "type": "realtime" - }, - "1731039300": { - "status": "UP", - "latency": 175, - "type": "realtime" - }, - "1731039360": { - "status": "UP", - "latency": 180, - "type": "realtime" - }, - "1731039420": { - "status": "UP", - "latency": 174, - "type": "realtime" - }, - "1731039480": { - "status": "UP", - "latency": 124, - "type": "realtime" - }, - "1731039540": { - "status": "UP", - "latency": 141, - "type": "realtime" - }, - "1731039600": { - "status": "UP", - "latency": 113, - "type": "realtime" - }, - "1731039660": { - "status": "UP", - "latency": 167, - "type": "realtime" - }, - "1731039720": { - "status": "UP", - "latency": 116, - "type": "realtime" - }, - "1731039780": { - "status": "UP", - "latency": 130, - "type": "realtime" - }, - "1731039840": { - "status": "UP", - "latency": 163, - "type": "realtime" - }, - "1731039900": { - "status": "UP", - "latency": 159, - "type": "realtime" - }, - "1731040200": { - "status": "UP", - "latency": 557, - "type": "realtime" - }, - "1731041160": { - "status": "UP", - "latency": 850, - "type": "realtime" - }, - "1731041220": { - "status": "UP", - "latency": 256, - "type": "realtime" - }, - "1731041280": { - "status": "UP", - "latency": 152, - "type": "realtime" - }, - "1731041340": { - "status": "UP", - "latency": 113, - "type": "realtime" - }, - "1731041400": { - "status": "UP", - "latency": 252, - "type": "realtime" - }, - "1731041460": { - "status": "UP", - "latency": 163, - "type": "realtime" - }, - "1731041520": { - "status": "UP", - "latency": 160, - "type": "realtime" - }, - "1731041580": { - "status": "UP", - "latency": 168, - "type": "realtime" - }, - "1731041640": { - "status": "UP", - "latency": 163, - "type": "realtime" - }, - "1731041700": { - "status": "UP", - "latency": 159, - "type": "realtime" - }, - "1731041760": { - "status": "UP", - "latency": 195, - "type": "realtime" - }, - "1731041820": { - "status": "UP", - "latency": 133, - "type": "realtime" - }, - "1731041880": { - "status": "UP", - "latency": 114, - "type": "realtime" - }, - "1731041940": { - "status": "UP", - "latency": 156, - "type": "realtime" - }, - "1731042000": { - "status": "UP", - "latency": 167, - "type": "realtime" - }, - "1731042060": { - "status": "UP", - "latency": 220, - "type": "realtime" - }, - "1731042120": { - "status": "UP", - "latency": 279, - "type": "realtime" - }, - "1731042180": { - "status": "UP", - "latency": 119, - "type": "realtime" - }, - "1731042240": { - "status": "UP", - "latency": 113, - "type": "realtime" - }, - "1731042300": { - "status": "UP", - "latency": 322, - "type": "realtime" - }, - "1731042360": { - "status": "UP", - "latency": 339, - "type": "realtime" - }, - "1731042420": { - "status": "UP", - "latency": 147, - "type": "realtime" - }, - "1731042480": { - "status": "UP", - "latency": 165, - "type": "realtime" - }, - "1731042540": { - "status": "UP", - "latency": 314, - "type": "realtime" - }, - "1731042600": { - "status": "UP", - "latency": 122, - "type": "realtime" - }, - "1731042660": { - "status": "UP", - "latency": 122, - "type": "realtime" - }, - "1731042720": { - "status": "UP", - "latency": 105, - "type": "realtime" - }, - "1731042780": { - "status": "UP", - "latency": 176, - "type": "realtime" - }, - "1731042840": { - "status": "UP", - "latency": 184, - "type": "realtime" - }, - "1731042900": { - "status": "UP", - "latency": 173, - "type": "realtime" - }, - "1731042960": { - "status": "UP", - "latency": 188, - "type": "realtime" - }, - "1731043020": { - "status": "UP", - "latency": 115, - "type": "realtime" - }, - "1731043080": { - "status": "UP", - "latency": 193, - "type": "realtime" - }, - "1731043140": { - "status": "UP", - "latency": 234, - "type": "realtime" - }, - "1731043200": { - "status": "UP", - "latency": 105, - "type": "realtime" - }, - "1731043260": { - "status": "UP", - "latency": 191, - "type": "realtime" - }, - "1731043320": { - "status": "UP", - "latency": 143, - "type": "realtime" - }, - "1731043380": { - "status": "UP", - "latency": 95, - "type": "realtime" - }, - "1731043440": { - "status": "UP", - "latency": 98, - "type": "realtime" - }, - "1731043500": { - "status": "UP", - "latency": 170, - "type": "realtime" - }, - "1731043560": { - "status": "UP", - "latency": 206, - "type": "realtime" - }, - "1731043620": { - "status": "UP", - "latency": 196, - "type": "realtime" - }, - "1731043680": { - "status": "UP", - "latency": 220, - "type": "realtime" - }, - "1731043740": { - "status": "UP", - "latency": 178, - "type": "realtime" - }, - "1731043800": { - "status": "UP", - "latency": 136, - "type": "realtime" - }, - "1731043860": { - "status": "UP", - "latency": 99, - "type": "realtime" - }, - "1731043920": { - "status": "UP", - "latency": 113, - "type": "realtime" - }, - "1731043980": { - "status": "UP", - "latency": 293, - "type": "realtime" - }, - "1731044040": { - "status": "UP", - "latency": 435, - "type": "realtime" - }, - "1731044100": { - "status": "UP", - "latency": 119, - "type": "realtime" - }, - "1731044160": { - "status": "UP", - "latency": 158, - "type": "realtime" - }, - "1731044220": { - "status": "UP", - "latency": 170, - "type": "realtime" - }, - "1731044280": { - "status": "UP", - "latency": 266, - "type": "realtime" - }, - "1731044340": { - "status": "UP", - "latency": 155, - "type": "realtime" - }, - "1731044400": { - "status": "UP", - "latency": 168, - "type": "realtime" - }, - "1731044460": { - "status": "UP", - "latency": 222, - "type": "realtime" - }, - "1731044520": { - "status": "UP", - "latency": 118, - "type": "realtime" - }, - "1731044580": { - "status": "UP", - "latency": 95, - "type": "realtime" - }, - "1731044640": { - "status": "UP", - "latency": 132, - "type": "realtime" - }, - "1731044700": { - "status": "UP", - "latency": 148, - "type": "realtime" - }, - "1731044760": { - "status": "UP", - "latency": 139, - "type": "realtime" - }, - "1731044820": { - "status": "UP", - "latency": 135, - "type": "realtime" - }, - "1731044880": { - "status": "UP", - "latency": 186, - "type": "realtime" - }, - "1731044940": { - "status": "UP", - "latency": 149, - "type": "realtime" - }, - "1731045000": { - "status": "UP", - "latency": 155, - "type": "realtime" - }, - "1731045060": { - "status": "UP", - "latency": 126, - "type": "realtime" - }, - "1731045120": { - "status": "UP", - "latency": 132, - "type": "realtime" - }, - "1731045180": { - "status": "UP", - "latency": 282, - "type": "realtime" - }, - "1731045240": { - "status": "UP", - "latency": 451, - "type": "realtime" - }, - "1731045300": { - "status": "UP", - "latency": 363, - "type": "realtime" - }, - "1731045360": { - "status": "UP", - "latency": 370, - "type": "realtime" - }, - "1731045420": { - "status": "UP", - "latency": 164, - "type": "realtime" - }, - "1731045480": { - "status": "UP", - "latency": 307, - "type": "realtime" - }, - "1731045540": { - "status": "UP", - "latency": 202, - "type": "realtime" - }, - "1731045600": { - "status": "UP", - "latency": 148, - "type": "realtime" - }, - "1731045660": { - "status": "UP", - "latency": 192, - "type": "realtime" - }, - "1731045720": { - "status": "UP", - "latency": 209, - "type": "realtime" - }, - "1731045780": { - "status": "UP", - "latency": 168, - "type": "realtime" - }, - "1731045840": { - "status": "UP", - "latency": 502, - "type": "realtime" - }, - "1731045900": { - "status": "UP", - "latency": 169, - "type": "realtime" - }, - "1731045960": { - "status": "UP", - "latency": 141, - "type": "realtime" - }, - "1731046020": { - "status": "UP", - "latency": 132, - "type": "realtime" - }, - "1731046080": { - "status": "UP", - "latency": 142, - "type": "realtime" - }, - "1731046140": { - "status": "UP", - "latency": 449, - "type": "realtime" - }, - "1731046200": { - "status": "UP", - "latency": 220, - "type": "realtime" - }, - "1731046260": { - "status": "UP", - "latency": 171, - "type": "realtime" - }, - "1731046320": { - "status": "UP", - "latency": 204, - "type": "realtime" - }, - "1731046380": { - "status": "UP", - "latency": 218, - "type": "realtime" - }, - "1731046440": { - "status": "UP", - "latency": 244, - "type": "realtime" - }, - "1731046500": { - "status": "UP", - "latency": 127, - "type": "realtime" - }, - "1731046560": { - "status": "UP", - "latency": 211, - "type": "realtime" - }, - "1731046620": { - "status": "UP", - "latency": 173, - "type": "realtime" - }, - "1731046680": { - "status": "UP", - "latency": 166, - "type": "realtime" - }, - "1731046740": { - "status": "UP", - "latency": 179, - "type": "realtime" - }, - "1731046800": { - "status": "UP", - "latency": 188, - "type": "realtime" - }, - "1731047040": { - "status": "UP", - "latency": 77, - "type": "realtime" - }, - "1731047100": { - "status": "UP", - "latency": 152, - "type": "realtime" - }, - "1731047160": { - "status": "UP", - "latency": 168, - "type": "realtime" - }, - "1731047220": { - "status": "UP", - "latency": 188, - "type": "realtime" - }, - "1731047280": { - "status": "UP", - "latency": 257, - "type": "realtime" - }, - "1731047340": { - "status": "UP", - "latency": 190, - "type": "realtime" - }, - "1731047400": { - "status": "UP", - "latency": 156, - "type": "realtime" - }, - "1731075120": { - "status": "UP", - "latency": 45, - "type": "realtime" - }, - "1731075180": { - "status": "UP", - "latency": 59, - "type": "realtime" - }, - "1731075240": { - "status": "UP", - "latency": 130, - "type": "realtime" - }, - "1731075300": { - "status": "UP", - "latency": 111, - "type": "realtime" - }, - "1731075360": { - "status": "UP", - "latency": 141, - "type": "realtime" - }, - "1731075420": { - "status": "UP", - "latency": 128, - "type": "realtime" - }, - "1731075480": { - "status": "UP", - "latency": 260, - "type": "realtime" - }, - "1731075540": { - "status": "UP", - "latency": 135, - "type": "realtime" - }, - "1731075600": { - "status": "UP", - "latency": 53, - "type": "realtime" - }, - "1731075660": { - "status": "UP", - "latency": 145, - "type": "realtime" - }, - "1731075720": { - "status": "UP", - "latency": 134, - "type": "realtime" - }, - "1731075780": { - "status": "UP", - "latency": 210, - "type": "realtime" - }, - "1731075840": { - "status": "UP", - "latency": 288, - "type": "realtime" - }, - "1731075900": { - "status": "UP", - "latency": 1249, - "type": "realtime" - }, - "1731075960": { - "status": "UP", - "latency": 229, - "type": "realtime" - }, - "1731076020": { - "status": "UP", - "latency": 227, - "type": "realtime" - }, - "1731076080": { - "status": "UP", - "latency": 1232, - "type": "realtime" - }, - "1731076140": { - "status": "UP", - "latency": 237, - "type": "realtime" - }, - "1731076200": { - "status": "UP", - "latency": 217, - "type": "realtime" - }, - "1731076260": { - "status": "UP", - "latency": 399, - "type": "realtime" - }, - "1731076320": { - "status": "UP", - "latency": 247, - "type": "realtime" - }, - "1731076380": { - "status": "UP", - "latency": 201, - "type": "realtime" - }, - "1731076440": { - "status": "UP", - "latency": 274, - "type": "realtime" - }, - "1731076500": { - "status": "UP", - "latency": 144, - "type": "realtime" - }, - "1731076560": { - "status": "UP", - "latency": 355, - "type": "realtime" - }, - "1731076620": { - "status": "UP", - "latency": 335, - "type": "realtime" - }, - "1731076680": { - "status": "UP", - "latency": 182, - "type": "realtime" - }, - "1731076740": { - "status": "UP", - "latency": 189, - "type": "realtime" - }, - "1731076800": { - "status": "UP", - "latency": 43, - "type": "realtime" - }, - "1731076860": { - "status": "UP", - "latency": 45, - "type": "realtime" - }, - "1731076920": { - "status": "UP", - "latency": 59, - "type": "realtime" - }, - "1731076980": { - "status": "UP", - "latency": 185, - "type": "realtime" - }, - "1731077040": { - "status": "UP", - "latency": 78, - "type": "realtime" - }, - "1731077100": { - "status": "UP", - "latency": 410, - "type": "realtime" - }, - "1731077160": { - "status": "UP", - "latency": 171, - "type": "realtime" - }, - "1731077220": { - "status": "UP", - "latency": 200, - "type": "realtime" - }, - "1731077280": { - "status": "UP", - "latency": 275, - "type": "realtime" - }, - "1731077340": { - "status": "UP", - "latency": 125, - "type": "realtime" - }, - "1731077400": { - "status": "UP", - "latency": 189, - "type": "realtime" - }, - "1731077460": { - "status": "UP", - "latency": 261, - "type": "realtime" - }, - "1731077520": { - "status": "UP", - "latency": 145, - "type": "realtime" - }, - "1731077580": { - "status": "UP", - "latency": 125, - "type": "realtime" - }, - "1731077640": { - "status": "UP", - "latency": 123, - "type": "realtime" - }, - "1731077700": { - "status": "UP", - "latency": 230, - "type": "realtime" - }, - "1731077760": { - "status": "UP", - "latency": 1926, - "type": "realtime" - }, - "1731077820": { - "status": "UP", - "latency": 181, - "type": "realtime" - }, - "1731077880": { - "status": "UP", - "latency": 182, - "type": "realtime" - }, - "1731077940": { - "status": "UP", - "latency": 240, - "type": "realtime" - }, - "1731078000": { - "status": "UP", - "latency": 1372, - "type": "realtime" - }, - "1731078060": { - "status": "UP", - "latency": 167, - "type": "realtime" - }, - "1731078120": { - "status": "UP", - "latency": 192, - "type": "realtime" - }, - "1731078180": { - "status": "UP", - "latency": 369, - "type": "realtime" - }, - "1731078240": { - "status": "UP", - "latency": 128, - "type": "realtime" - }, - "1731078300": { - "status": "UP", - "latency": 117, - "type": "realtime" - }, - "1731078360": { - "status": "UP", - "latency": 346, - "type": "realtime" - }, - "1731078420": { - "status": "UP", - "latency": 130, - "type": "realtime" - }, - "1731078480": { - "status": "UP", - "latency": 167, - "type": "realtime" - }, - "1731078540": { - "status": "UP", - "latency": 168, - "type": "realtime" - }, - "1731078600": { - "status": "UP", - "latency": 138, - "type": "realtime" - }, - "1731078660": { - "status": "UP", - "latency": 170, - "type": "realtime" - }, - "1731078720": { - "status": "UP", - "latency": 199, - "type": "realtime" - }, - "1731078780": { - "status": "UP", - "latency": 110, - "type": "realtime" - }, - "1731078840": { - "status": "UP", - "latency": 108, - "type": "realtime" - }, - "1731078900": { - "status": "UP", - "latency": 190, - "type": "realtime" - }, - "1731078960": { - "status": "UP", - "latency": 219, - "type": "realtime" - }, - "1731079020": { - "status": "UP", - "latency": 181, - "type": "realtime" - }, - "1731079080": { - "status": "UP", - "latency": 137, - "type": "realtime" - }, - "1731079140": { - "status": "UP", - "latency": 175, - "type": "realtime" - }, - "1731079200": { - "status": "UP", - "latency": 346, - "type": "realtime" - }, - "1731079260": { - "status": "UP", - "latency": 166, - "type": "realtime" - }, - "1731079320": { - "status": "UP", - "latency": 215, - "type": "realtime" - }, - "1731079380": { - "status": "UP", - "latency": 185, - "type": "realtime" - }, - "1731079440": { - "status": "UP", - "latency": 126, - "type": "realtime" - }, - "1731079500": { - "status": "UP", - "latency": 127, - "type": "realtime" - }, - "1731079560": { - "status": "UP", - "latency": 194, - "type": "realtime" - }, - "1731079620": { - "status": "UP", - "latency": 231, - "type": "realtime" - }, - "1731079680": { - "status": "UP", - "latency": 151, - "type": "realtime" - }, - "1731079740": { - "status": "UP", - "latency": 181, - "type": "realtime" - }, - "1731079800": { - "status": "UP", - "latency": 207, - "type": "realtime" - }, - "1731079860": { - "status": "UP", - "latency": 134, - "type": "realtime" - }, - "1731079920": { - "status": "UP", - "latency": 222, - "type": "realtime" - }, - "1731079980": { - "status": "UP", - "latency": 143, - "type": "realtime" - }, - "1731080040": { - "status": "UP", - "latency": 241, - "type": "realtime" - }, - "1731080100": { - "status": "UP", - "latency": 156, - "type": "realtime" - }, - "1731080160": { - "status": "UP", - "latency": 201, - "type": "realtime" - }, - "1731080220": { - "status": "UP", - "latency": 126, - "type": "realtime" - }, - "1731080280": { - "status": "UP", - "latency": 110, - "type": "realtime" - }, - "1731080340": { - "status": "UP", - "latency": 112, - "type": "realtime" - }, - "1731080400": { - "status": "UP", - "latency": 139, - "type": "realtime" - }, - "1731080460": { - "status": "UP", - "latency": 132, - "type": "realtime" - }, - "1731080520": { - "status": "UP", - "latency": 159, - "type": "realtime" - }, - "1731080580": { - "status": "UP", - "latency": 104, - "type": "realtime" - }, - "1731080640": { - "status": "UP", - "latency": 126, - "type": "realtime" - }, - "1731080700": { - "status": "UP", - "latency": 388, - "type": "realtime" - }, - "1731080760": { - "status": "UP", - "latency": 132, - "type": "realtime" - }, - "1731080820": { - "status": "UP", - "latency": 200, - "type": "realtime" - }, - "1731080880": { - "status": "UP", - "latency": 132, - "type": "realtime" - }, - "1731080940": { - "status": "UP", - "latency": 439, - "type": "realtime" - }, - "1731081000": { - "status": "UP", - "latency": 115, - "type": "realtime" - }, - "1731081060": { - "status": "UP", - "latency": 117, - "type": "realtime" - }, - "1731081120": { - "status": "UP", - "latency": 215, - "type": "realtime" - }, - "1731081180": { - "status": "UP", - "latency": 180, - "type": "realtime" - }, - "1731081240": { - "status": "UP", - "latency": 179, - "type": "realtime" - }, - "1731081300": { - "status": "UP", - "latency": 147, - "type": "realtime" - }, - "1731081360": { - "status": "UP", - "latency": 136, - "type": "realtime" - }, - "1731081420": { - "status": "UP", - "latency": 127, - "type": "realtime" - }, - "1731081480": { - "status": "UP", - "latency": 260, - "type": "realtime" - }, - "1731081540": { - "status": "UP", - "latency": 180, - "type": "realtime" - }, - "1731081600": { - "status": "UP", - "latency": 96, - "type": "realtime" - }, - "1731081660": { - "status": "UP", - "latency": 134, - "type": "realtime" - }, - "1731081720": { - "status": "UP", - "latency": 122, - "type": "realtime" - }, - "1731081780": { - "status": "UP", - "latency": 100, - "type": "realtime" - }, - "1731081840": { - "status": "UP", - "latency": 142, - "type": "realtime" - }, - "1731081900": { - "status": "UP", - "latency": 130, - "type": "realtime" - }, - "1731081960": { - "status": "UP", - "latency": 121, - "type": "realtime" - }, - "1731082020": { - "status": "UP", - "latency": 230, - "type": "realtime" - }, - "1731082080": { - "status": "UP", - "latency": 121, - "type": "realtime" - }, - "1731082140": { - "status": "UP", - "latency": 147, - "type": "realtime" - }, - "1731082200": { - "status": "UP", - "latency": 157, - "type": "realtime" - }, - "1731082260": { - "status": "UP", - "latency": 97, - "type": "realtime" - }, - "1731082320": { - "status": "UP", - "latency": 103, - "type": "realtime" - }, - "1731082380": { - "status": "UP", - "latency": 176, - "type": "realtime" - }, - "1731082440": { - "status": "UP", - "latency": 110, - "type": "realtime" - }, - "1731082500": { - "status": "UP", - "latency": 161, - "type": "realtime" - }, - "1731082560": { - "status": "UP", - "latency": 263, - "type": "realtime" - }, - "1731082620": { - "status": "UP", - "latency": 134, - "type": "realtime" - }, - "1731082680": { - "status": "UP", - "latency": 191, - "type": "realtime" - }, - "1731082740": { - "status": "UP", - "latency": 186, - "type": "realtime" - }, - "1731082800": { - "status": "UP", - "latency": 148, - "type": "realtime" - }, - "1731082860": { - "status": "UP", - "latency": 122, - "type": "realtime" - }, - "1731082920": { - "status": "UP", - "latency": 115, - "type": "realtime" - }, - "1731082980": { - "status": "UP", - "latency": 191, - "type": "realtime" - }, - "1731083040": { - "status": "UP", - "latency": 116, - "type": "realtime" - }, - "1731083100": { - "status": "UP", - "latency": 149, - "type": "realtime" - }, - "1731083160": { - "status": "UP", - "latency": 151, - "type": "realtime" - }, - "1731083220": { - "status": "UP", - "latency": 120, - "type": "realtime" - }, - "1731083280": { - "status": "UP", - "latency": 119, - "type": "realtime" - }, - "1731083340": { - "status": "UP", - "latency": 204, - "type": "realtime" - }, - "1731083400": { - "status": "UP", - "latency": 304, - "type": "realtime" - }, - "1731083460": { - "status": "UP", - "latency": 102, - "type": "realtime" - }, - "1731083520": { - "status": "UP", - "latency": 238, - "type": "realtime" - }, - "1731083580": { - "status": "UP", - "latency": 170, - "type": "realtime" - }, - "1731083640": { - "status": "UP", - "latency": 58, - "type": "realtime" - }, - "1731083700": { - "status": "UP", - "latency": 187, - "type": "realtime" - }, - "1731083760": { - "status": "UP", - "latency": 431, - "type": "realtime" - }, - "1731083820": { - "status": "UP", - "latency": 144, - "type": "realtime" - }, - "1731083880": { - "status": "UP", - "latency": 162, - "type": "realtime" - }, - "1731083940": { - "status": "UP", - "latency": 147, - "type": "realtime" - }, - "1731084000": { - "status": "UP", - "latency": 163, - "type": "realtime" - }, - "1731084060": { - "status": "UP", - "latency": 135, - "type": "realtime" - }, - "1731084120": { - "status": "UP", - "latency": 193, - "type": "realtime" - }, - "1731084180": { - "status": "UP", - "latency": 147, - "type": "realtime" - }, - "1731084240": { - "status": "UP", - "latency": 226, - "type": "realtime" - }, - "1731084300": { - "status": "UP", - "latency": 219, - "type": "realtime" - }, - "1731084360": { - "status": "UP", - "latency": 153, - "type": "realtime" - }, - "1731084420": { - "status": "UP", - "latency": 133, - "type": "realtime" - }, - "1731084480": { - "status": "UP", - "latency": 122, - "type": "realtime" - }, - "1731084540": { - "status": "UP", - "latency": 175, - "type": "realtime" - }, - "1731084600": { - "status": "UP", - "latency": 132, - "type": "realtime" - }, - "1731084660": { - "status": "UP", - "latency": 136, - "type": "realtime" - }, - "1731084720": { - "status": "UP", - "latency": 166, - "type": "realtime" - }, - "1731084780": { - "status": "UP", - "latency": 116, - "type": "realtime" - }, - "1731084840": { - "status": "UP", - "latency": 166, - "type": "realtime" - }, - "1731084900": { - "status": "UP", - "latency": 103, - "type": "realtime" - }, - "1731084960": { - "status": "UP", - "latency": 90, - "type": "realtime" - }, - "1731085020": { - "status": "UP", - "latency": 189, - "type": "realtime" - }, - "1731085080": { - "status": "UP", - "latency": 151, - "type": "realtime" - }, - "1731085140": { - "status": "UP", - "latency": 198, - "type": "realtime" - }, - "1731085200": { - "status": "UP", - "latency": 227, - "type": "realtime" - }, - "1731085260": { - "status": "UP", - "latency": 175, - "type": "realtime" - }, - "1731085320": { - "status": "UP", - "latency": 304, - "type": "realtime" - }, - "1731085380": { - "status": "UP", - "latency": 143, - "type": "realtime" - }, - "1731085440": { - "status": "UP", - "latency": 197, - "type": "realtime" - }, - "1731085500": { - "status": "UP", - "latency": 297, - "type": "realtime" - }, - "1731085560": { - "status": "UP", - "latency": 167, - "type": "realtime" - }, - "1731085620": { - "status": "UP", - "latency": 186, - "type": "realtime" - }, - "1731085680": { - "status": "UP", - "latency": 172, - "type": "realtime" - }, - "1731085740": { - "status": "UP", - "latency": 146, - "type": "realtime" - }, - "1731085800": { - "status": "UP", - "latency": 143, - "type": "realtime" - }, - "1731085860": { - "status": "UP", - "latency": 193, - "type": "realtime" - }, - "1731085920": { - "status": "UP", - "latency": 208, - "type": "realtime" - }, - "1731085980": { - "status": "UP", - "latency": 144, - "type": "realtime" - }, - "1731086040": { - "status": "UP", - "latency": 174, - "type": "realtime" - }, - "1731086100": { - "status": "UP", - "latency": 173, - "type": "realtime" - }, - "1731086160": { - "status": "UP", - "latency": 234, - "type": "realtime" - }, - "1731086220": { - "status": "UP", - "latency": 1353, - "type": "realtime" - }, - "1731086280": { - "status": "UP", - "latency": 300, - "type": "realtime" - }, - "1731086340": { - "status": "UP", - "latency": 263, - "type": "realtime" - }, - "1731086400": { - "status": "UP", - "latency": 158, - "type": "realtime" - }, - "1731086460": { - "status": "UP", - "latency": 280, - "type": "realtime" - }, - "1731086520": { - "status": "UP", - "latency": 176, - "type": "realtime" - }, - "1731086580": { - "status": "UP", - "latency": 133, - "type": "realtime" - }, - "1731086640": { - "status": "UP", - "latency": 117, - "type": "realtime" - }, - "1731086700": { - "status": "UP", - "latency": 164, - "type": "realtime" - }, - "1731086760": { - "status": "UP", - "latency": 133, - "type": "realtime" - } -} \ No newline at end of file diff --git a/src/lib/server/data/svelte-website.90day.utc.json b/src/lib/server/data/svelte-website.90day.utc.json deleted file mode 100644 index 3e07a89a5..000000000 --- a/src/lib/server/data/svelte-website.90day.utc.json +++ /dev/null @@ -1 +0,0 @@ -{"_90Day":{"1723248000":{"timestamp":1723248000,"cssClass":"api-nodata","message":"No Data"},"1723334400":{"timestamp":1723334400,"cssClass":"api-nodata","message":"No Data"},"1723420800":{"timestamp":1723420800,"cssClass":"api-nodata","message":"No Data"},"1723507200":{"timestamp":1723507200,"cssClass":"api-nodata","message":"No Data"},"1723593600":{"timestamp":1723593600,"cssClass":"api-nodata","message":"No Data"},"1723680000":{"timestamp":1723680000,"cssClass":"api-nodata","message":"No Data"},"1723766400":{"timestamp":1723766400,"cssClass":"api-nodata","message":"No Data"},"1723852800":{"timestamp":1723852800,"cssClass":"api-nodata","message":"No Data"},"1723939200":{"timestamp":1723939200,"cssClass":"api-nodata","message":"No Data"},"1724025600":{"timestamp":1724025600,"cssClass":"api-nodata","message":"No Data"},"1724112000":{"timestamp":1724112000,"cssClass":"api-nodata","message":"No Data"},"1724198400":{"timestamp":1724198400,"cssClass":"api-nodata","message":"No Data"},"1724284800":{"timestamp":1724284800,"cssClass":"api-nodata","message":"No Data"},"1724371200":{"timestamp":1724371200,"cssClass":"api-nodata","message":"No Data"},"1724457600":{"timestamp":1724457600,"cssClass":"api-nodata","message":"No Data"},"1724544000":{"timestamp":1724544000,"cssClass":"api-nodata","message":"No Data"},"1724630400":{"timestamp":1724630400,"cssClass":"api-nodata","message":"No Data"},"1724716800":{"timestamp":1724716800,"cssClass":"api-nodata","message":"No Data"},"1724803200":{"timestamp":1724803200,"cssClass":"api-nodata","message":"No Data"},"1724889600":{"timestamp":1724889600,"cssClass":"api-nodata","message":"No Data"},"1724976000":{"timestamp":1724976000,"cssClass":"api-nodata","message":"No Data"},"1725062400":{"timestamp":1725062400,"cssClass":"api-nodata","message":"No Data"},"1725148800":{"timestamp":1725148800,"cssClass":"api-nodata","message":"No Data"},"1725235200":{"timestamp":1725235200,"cssClass":"api-nodata","message":"No Data"},"1725321600":{"timestamp":1725321600,"cssClass":"api-nodata","message":"No Data"},"1725408000":{"timestamp":1725408000,"cssClass":"api-nodata","message":"No Data"},"1725494400":{"timestamp":1725494400,"cssClass":"api-nodata","message":"No Data"},"1725580800":{"timestamp":1725580800,"cssClass":"api-nodata","message":"No Data"},"1725667200":{"timestamp":1725667200,"cssClass":"api-nodata","message":"No Data"},"1725753600":{"timestamp":1725753600,"cssClass":"api-nodata","message":"No Data"},"1725840000":{"timestamp":1725840000,"cssClass":"api-nodata","message":"No Data"},"1725926400":{"timestamp":1725926400,"cssClass":"api-nodata","message":"No Data"},"1726012800":{"timestamp":1726012800,"cssClass":"api-nodata","message":"No Data"},"1726099200":{"timestamp":1726099200,"cssClass":"api-nodata","message":"No Data"},"1726185600":{"timestamp":1726185600,"cssClass":"api-nodata","message":"No Data"},"1726272000":{"timestamp":1726272000,"cssClass":"api-nodata","message":"No Data"},"1726358400":{"timestamp":1726358400,"cssClass":"api-nodata","message":"No Data"},"1726444800":{"timestamp":1726444800,"cssClass":"api-nodata","message":"No Data"},"1726531200":{"timestamp":1726531200,"cssClass":"api-nodata","message":"No Data"},"1726617600":{"timestamp":1726617600,"cssClass":"api-nodata","message":"No Data"},"1726704000":{"timestamp":1726704000,"cssClass":"api-nodata","message":"No Data"},"1726790400":{"timestamp":1726790400,"cssClass":"api-nodata","message":"No Data"},"1726876800":{"timestamp":1726876800,"cssClass":"api-nodata","message":"No Data"},"1726963200":{"timestamp":1726963200,"cssClass":"api-nodata","message":"No Data"},"1727049600":{"timestamp":1727049600,"cssClass":"api-nodata","message":"No Data"},"1727136000":{"timestamp":1727136000,"cssClass":"api-nodata","message":"No Data"},"1727222400":{"timestamp":1727222400,"cssClass":"api-nodata","message":"No Data"},"1727308800":{"timestamp":1727308800,"cssClass":"api-nodata","message":"No Data"},"1727395200":{"timestamp":1727395200,"cssClass":"api-nodata","message":"No Data"},"1727481600":{"timestamp":1727481600,"cssClass":"api-nodata","message":"No Data"},"1727568000":{"timestamp":1727568000,"cssClass":"api-nodata","message":"No Data"},"1727654400":{"timestamp":1727654400,"cssClass":"api-nodata","message":"No Data"},"1727740800":{"timestamp":1727740800,"cssClass":"api-nodata","message":"No Data"},"1727827200":{"timestamp":1727827200,"cssClass":"api-nodata","message":"No Data"},"1727913600":{"timestamp":1727913600,"cssClass":"api-nodata","message":"No Data"},"1728000000":{"timestamp":1728000000,"cssClass":"api-nodata","message":"No Data"},"1728086400":{"timestamp":1728086400,"cssClass":"api-nodata","message":"No Data"},"1728172800":{"timestamp":1728172800,"cssClass":"api-nodata","message":"No Data"},"1728259200":{"timestamp":1728259200,"cssClass":"api-nodata","message":"No Data"},"1728345600":{"timestamp":1728345600,"cssClass":"api-nodata","message":"No Data"},"1728432000":{"timestamp":1728432000,"cssClass":"api-nodata","message":"No Data"},"1728518400":{"timestamp":1728518400,"cssClass":"api-nodata","message":"No Data"},"1728604800":{"timestamp":1728604800,"cssClass":"api-nodata","message":"No Data"},"1728691200":{"timestamp":1728691200,"cssClass":"api-nodata","message":"No Data"},"1728777600":{"timestamp":1728777600,"cssClass":"api-nodata","message":"No Data"},"1728864000":{"timestamp":1728864000,"cssClass":"api-nodata","message":"No Data"},"1728950400":{"timestamp":1728950400,"cssClass":"api-nodata","message":"No Data"},"1729036800":{"timestamp":1729036800,"cssClass":"api-nodata","message":"No Data"},"1729123200":{"timestamp":1729123200,"cssClass":"api-nodata","message":"No Data"},"1729209600":{"timestamp":1729209600,"cssClass":"api-nodata","message":"No Data"},"1729296000":{"timestamp":1729296000,"cssClass":"api-nodata","message":"No Data"},"1729382400":{"timestamp":1729382400,"cssClass":"api-nodata","message":"No Data"},"1729468800":{"timestamp":1729468800,"cssClass":"api-nodata","message":"No Data"},"1729555200":{"timestamp":1729555200,"cssClass":"api-nodata","message":"No Data"},"1729641600":{"timestamp":1729641600,"cssClass":"api-nodata","message":"No Data"},"1729728000":{"timestamp":1729728000,"cssClass":"api-nodata","message":"No Data"},"1729814400":{"timestamp":1729814400,"cssClass":"api-nodata","message":"No Data"},"1729900800":{"timestamp":1729900800,"cssClass":"api-nodata","message":"No Data"},"1729987200":{"timestamp":1729987200,"cssClass":"api-nodata","message":"No Data"},"1730073600":{"timestamp":1730073600,"cssClass":"api-nodata","message":"No Data"},"1730160000":{"timestamp":1730160000,"cssClass":"api-nodata","message":"No Data"},"1730246400":{"timestamp":1730246400,"cssClass":"api-nodata","message":"No Data"},"1730332800":{"timestamp":1730332800,"cssClass":"api-nodata","message":"No Data"},"1730419200":{"timestamp":1730419200,"cssClass":"api-nodata","message":"No Data"},"1730505600":{"timestamp":1730505600,"cssClass":"api-nodata","message":"No Data"},"1730592000":{"timestamp":1730592000,"cssClass":"api-nodata","message":"No Data"},"1730678400":{"timestamp":1730678400,"cssClass":"api-nodata","message":"No Data"},"1730764800":{"timestamp":1730764800,"cssClass":"api-nodata","message":"No Data"},"1730851200":{"timestamp":1730851200,"cssClass":"api-nodata","message":"No Data"},"1730937600":{"timestamp":1730937600,"cssClass":"api-up","message":"Status OK"},"1731024000":{"timestamp":1731024000,"cssClass":"api-up","message":"Status OK"}},"uptime0Day":"100","uptime90Day":"100","dailyUps":404,"dailyDown":0,"dailyDegraded":0} From 5abfafe2fa471bccc26322c4257a5fde17deb778 Mon Sep 17 00:00:00 2001 From: Raj Nandan Sharma Date: Mon, 11 Nov 2024 08:40:44 +0530 Subject: [PATCH 03/18] new doc site --- $lib/server/data/site.json | 0 docs/customize-site.md | 301 +++++++++++++ docs/deployment.md | 74 ++++ docs/environment-vars.md | 59 +++ docs/gh-setup.md | 42 ++ docs/home.md | 87 ++++ docs/how-it-works.md | 29 ++ docs/i18n.md | 39 ++ docs/incident-management.md | 25 ++ docs/kener-apis.md | 404 ++++++++++++++++++ docs/monitor-examples.md | 202 +++++++++ docs/monitors.md | 91 ++++ docs/quick-start.md | 34 ++ docs/showcase.md | 22 + docs/status-badges.md | 163 +++++++ docs/structure.json | 89 ++++ main.js | 9 + package.json | 3 +- src/lib/components/incident.svelte | 68 +-- src/lib/components/monitor.svelte | 4 +- src/lib/server/check.js | 15 +- src/lib/server/startup.js | 8 +- src/lib/server/tool.js | 33 -- src/routes/(docs)/+layout.server.js | 52 +++ src/routes/(docs)/+layout.svelte | 177 ++++++++ src/routes/(docs)/docs/[doc]/+page.server.js | 16 + src/routes/(docs)/docs/[doc]/+page.svelte | 56 +++ src/routes/{ => (kener)}/+layout.server.js | 0 src/routes/{ => (kener)}/+layout.svelte | 10 +- src/routes/{ => (kener)}/+page.server.js | 0 src/routes/{ => (kener)}/+page.svelte | 6 +- .../{ => (kener)}/api/incident/+server.js | 0 .../api/incident/[incidentNumber]/+server.js | 0 .../[incidentNumber]/comment/+server.js | 0 .../[incidentNumber]/status/+server.js | 0 .../{ => (kener)}/api/status/+server.js | 0 src/routes/{ => (kener)}/api/today/+server.js | 0 .../{ => (kener)}/badge/[tag]/dot/+server.js | 0 .../badge/[tag]/status/+server.js | 0 .../badge/[tag]/uptime/+server.js | 0 .../category-[category]/+page.server.js | 0 .../category-[category]/+page.svelte | 0 .../{ => (kener)}/embed-[tag]/+page.server.js | 0 .../{ => (kener)}/embed-[tag]/+page.svelte | 0 .../{ => (kener)}/embed-[tag]/js/+server.js | 0 .../incident/[id]/+page.server.js | 0 .../{ => (kener)}/incident/[id]/+page.svelte | 0 .../incident/[id]/comments/+server.js | 0 .../monitor-[tag]/+page.server.js | 0 .../{ => (kener)}/monitor-[tag]/+page.svelte | 10 +- src/routes/docs/+page.server.js | 9 - src/routes/docs/+page.svelte | 122 ------ static/newbg.png | Bin 0 -> 2233896 bytes 53 files changed, 2030 insertions(+), 229 deletions(-) delete mode 100644 $lib/server/data/site.json create mode 100644 docs/customize-site.md create mode 100644 docs/deployment.md create mode 100644 docs/environment-vars.md create mode 100644 docs/gh-setup.md create mode 100644 docs/home.md create mode 100644 docs/how-it-works.md create mode 100644 docs/i18n.md create mode 100644 docs/incident-management.md create mode 100644 docs/kener-apis.md create mode 100644 docs/monitor-examples.md create mode 100644 docs/monitors.md create mode 100644 docs/quick-start.md create mode 100644 docs/showcase.md create mode 100644 docs/status-badges.md create mode 100644 docs/structure.json create mode 100644 main.js create mode 100644 src/routes/(docs)/+layout.server.js create mode 100644 src/routes/(docs)/+layout.svelte create mode 100644 src/routes/(docs)/docs/[doc]/+page.server.js create mode 100644 src/routes/(docs)/docs/[doc]/+page.svelte rename src/routes/{ => (kener)}/+layout.server.js (100%) rename src/routes/{ => (kener)}/+layout.svelte (92%) rename src/routes/{ => (kener)}/+page.server.js (100%) rename src/routes/{ => (kener)}/+page.svelte (95%) rename src/routes/{ => (kener)}/api/incident/+server.js (100%) rename src/routes/{ => (kener)}/api/incident/[incidentNumber]/+server.js (100%) rename src/routes/{ => (kener)}/api/incident/[incidentNumber]/comment/+server.js (100%) rename src/routes/{ => (kener)}/api/incident/[incidentNumber]/status/+server.js (100%) rename src/routes/{ => (kener)}/api/status/+server.js (100%) rename src/routes/{ => (kener)}/api/today/+server.js (100%) rename src/routes/{ => (kener)}/badge/[tag]/dot/+server.js (100%) rename src/routes/{ => (kener)}/badge/[tag]/status/+server.js (100%) rename src/routes/{ => (kener)}/badge/[tag]/uptime/+server.js (100%) rename src/routes/{ => (kener)}/category-[category]/+page.server.js (100%) rename src/routes/{ => (kener)}/category-[category]/+page.svelte (100%) rename src/routes/{ => (kener)}/embed-[tag]/+page.server.js (100%) rename src/routes/{ => (kener)}/embed-[tag]/+page.svelte (100%) rename src/routes/{ => (kener)}/embed-[tag]/js/+server.js (100%) rename src/routes/{ => (kener)}/incident/[id]/+page.server.js (100%) rename src/routes/{ => (kener)}/incident/[id]/+page.svelte (100%) rename src/routes/{ => (kener)}/incident/[id]/comments/+server.js (100%) rename src/routes/{ => (kener)}/monitor-[tag]/+page.server.js (100%) rename src/routes/{ => (kener)}/monitor-[tag]/+page.svelte (92%) delete mode 100644 src/routes/docs/+page.server.js delete mode 100644 src/routes/docs/+page.svelte create mode 100644 static/newbg.png diff --git a/$lib/server/data/site.json b/$lib/server/data/site.json deleted file mode 100644 index e69de29bb..000000000 diff --git a/docs/customize-site.md b/docs/customize-site.md new file mode 100644 index 000000000..587593ba1 --- /dev/null +++ b/docs/customize-site.md @@ -0,0 +1,301 @@ +# Customize Site + +There is a folder called `src/lib/server/config`. Inside which there is a `site.yaml` file. You can modify this file to have your own branding and do few other things. + +## Sample site.yaml + +```yaml +title: "Kener" +siteName: "Kener.ing" +logo: "/logo.svg" +favicon: "/logo96.png" +home: "/" +theme: dark +github: + owner: "rajnandan1" + repo: "kener" + incidentSince: 72 +metaTags: + description: "Your description" + keywords: "keyword1, keyword2" +nav: + - name: "Documentation" + url: "/docs" + - name: "Github" + iconURL: "/github.svg" + url: "https://github.com/rajnandan1/kener" +siteURL: https://kener.ing +hero: + title: Kener is a Open-Source Status Page System + subtitle: Let your users know what's going on. +footerHTML: | + Made using + + Kener + + an open source status page system built with Svelte and TailwindCSS. +i18n: + defaultLocale: "en" + locales: + en: "English" + hi: "हिन्दी" + zh-CN: "中文" + ja: "日本語" + vi: "Tiếng Việt" +pattern: "squares" +font: + cssSrc: "https://fonts.googleapis.com/css2?family=Lato:ital,wght@0,100;0,300;0,400;0,700;0,900;1,100;1,300;1,400;1,700;1,900&display=swap" + family: '"Lato", sans-serif' +``` + +--- + +## title + +This translates to + +```html +Your Title +``` + +--- + +## siteName + +This is the name that will be shown in the nav bar, top left corner of the page + +## logo + +URL of the logo that will be shown in the nav bar. You can also add your logo in the `static` folder. Use the path `/logo.svg` to refer to it if you have added `logo.svg` in the `static` folder. Otherwise, you can use any URL. + +## favicon + +URL of the favicon that will be shown in the browser tab. You can also add your favicon in the `static` folder. Use the path `/logo96.png` to refer to it if you have added `logo96.png` in the `static` folder. Otherwise, you can use any URL. + +## home + +This is the location where someone will be taken when they click on the site name in the nav bar + +## theme + +This is the default theme of the site that will be used when a user lands for the first time. It can be `light` or `dark`. Defaults to `light`. The user still gets the option to change the theme. + +As of now there is no option to change the colors of the theme using `site.yaml`. If you still want to change the colors you can do so by modifying the `src/app.postcss` file. + +## favicon + +It can be set by modifying the `` tag in `src/app.html` file. +Example add a png called `logo.png` file in `static/` and then + +```html +... + +... +``` + +--- + +## github + +For incident kener uses github comments. Create an empty [github](https://github.com) repo and add them to `site.yaml` + +```yaml +github: + owner: "username" + repo: "repository" + incidentSince: 72 +``` + +### owner + +Owner of the github repository. If the repository is `https://github.com/rajnandan1/kener` then the owner is `rajnandan1` + +### repo + +Repository name of the github repository. If the repository is `https://github.com/rajnandan1/kener` then the repo is `kener` + +### incidentSince + +`incidentSince` is in hours. It means if an issue is created before X hours then kener would not honor it. What it means is that kener would not show it active incident pages nor it will update the uptime. Default is 48 hours. + +--- + +## metaTags + +Meta tags are nothing but html ``. You can use them for SEO purposes + +```yaml +metaTags: + description: "Your description" + keywords: "keyword1, keyword2" + og:image: "https://example.com/og.png" +``` + +will become + +```html + + + + + +``` + +--- + +## siteURL + +You can set this to generate SiteMaps + +```yaml +siteURL: https://kener.ing +``` + +Sitemaps urls will be `https://kener.ing/sitemap.xml` + +--- + +## hero + +Use hero to add a banner to your kener page + +```yaml +hero: + title: Kener is a Open-Source Status Page System + subtitle: Let your users know what's going on. +``` + +### title + +Title of the hero section + +### subtitle + +Subtitle of the hero section + +--- + +## nav + +You can add more links to your navbar. + +```yaml +nav: + - name: "Home" + url: "/home" +``` + +### name + +Name of the link + +### url + +URL of the link + +### iconURL + +Icon of the link. You can add an icon in the `static` folder and refer to it using the path `/github.svg` + +--- + +## categories + +You can define categories for your monitors. Each category can have a description. The monitors can be grouped by categories. +`name=home` will be shown in the home page. Categories are shown in the order they are defined in the yaml file. A dropdown will appear in the nav bar to select the category. + +```yaml +categories: + - name: API + description: "Kener provides a simple API for you to use to update your status page." + - name: home + description: "loroem ipsum lorem ipsum" +``` + +### name + +Name of the category + +### description + +Description of the category + +--- + +## footerHTML + +You can add HTML to the footer. You can add links to your social media or anything else. + +```yaml +footerHTML: | + Made using Kener an open source status page system built with Svelte and TailwindCSS. +``` + +--- + +## i18n + +You can add translations to your site. By default it is set to `en`. Available translations are present in `locales/` folders in the root directory. You can add more translations by adding a new file in the `locales` folder. + +### Enable + +Once you have added a new translation file in the `locales` folder, you can enable it by adding the locale code in the `site.yaml` file. + +Let us say you have added a `hi.json` file in the `locales` folder. You can enable it by adding the following to the `site.yaml` file. + +```yaml +i18n: + defaultLocale: en + locales: + en: English + hi: हिन्दी +``` + +### defaultLocale + +**_defaultLocale_**: The default locale to be used for a user when he or she visits for the first time. It is important to note that the default locale json file should be present in the locales folder. + +### locales + +**_locales_**: A list of locales that you want to enable. The key is the locale code and the value is the name of the language. The locale code should be the same as the json file name in the locales folder. `en` means `en.json` should be present in the locales folder. + +Adding more than one locales will enable a dropdown in the navbar to select the language. + +Selected languages are stored in cookies and will be used when the user visits the site again. + +There is no auto detection of the language. The user has to manually select the language. + +### Variables + +There are few variables that you you should not change, + +- %hours : This will be replaced by the hours +- %minutes : This will be replaced by the minutes +- %minute : This will be replaced by the minute +- %status : This will be replaced by the status + +--- + +## pattern + +You can set the background pattern of the site. It can be `squares`, `dots`, `none` + +--- + +## font + +You can set the font of the site. You can use google fonts or any other font. + +```yaml +font: + cssSrc: "https://fonts.googleapis.com/css2?family=Lato:ital,wght@0,100;0,300;0,400;0,700;0,900;1,100;1,300;1,400;1,700;1,900&display=swap" + family: '"Lato", sans-serif' +``` + +### cssSrc + +URL of the font css + +### family + +Font family diff --git a/docs/deployment.md b/docs/deployment.md new file mode 100644 index 000000000..cccf228ee --- /dev/null +++ b/docs/deployment.md @@ -0,0 +1,74 @@ +# Deployment + +```shell +export NODE_ENV=production +npm i +npm run build +npm run serve +``` + +It also needs 2 yaml files to work + +- site.yaml: Contains information about the site +- monitors.yaml: Contains your monitors and their related specifications + +By default these are present in `config/`. However you can use different location either passing them as argument or having the path as enviorment variable + +## Add as Environment variables + +```shell +export MONITOR_YAML_PATH=/your/path/monitors.yaml +export SITE_YAML_PATH=/your/path/site.yaml +``` + +## Add as argument to prod.js + +```shell +npm run serve -- --monitors /your/path/monitors.yaml --site /your/path/site.yaml +``` + +## Install using Docker + +[Dockerhub](https://hub.docker.com/r/rajnandan1/kener) + +```shell +docker.io/rajnandan1/kener:latest +``` + +[Github Packages](https://github.com/rajnandan1/kener/pkgs/container/kener) + +```shell +ghcr.io/rajnandan1/kener:latest +``` + +You should mount a host directory to persist your configuration and expose the web port. [Environmental variables](https://rajnandan1.github.io/kener-docs/docs/environment-vars) can be passed with `-e` An example `docker run` command: + +Make sure you have a `/static` folder inside your config folder + +```shell +docker run -d -v /path/on/host/config:/config -p 3000:3000 -e "GH_TOKEN=1234" rajnandan1/kener +``` + +Or use **Docker Compose** with the example [docker-compose.yaml](https://raw.githubusercontent.com/rajnandan1/kener/main/docker-compose.yml) + +## Using PUID and PGID + +If you are + +- running on a **linux host** (ie unraid) and +- **not** using [rootless containers with Podman](https://developers.redhat.com/blog/2020/09/25/rootless-containers-with-podman-the-basics#why_podman_) + +then you must set the [environmental variables **PUID** and **PGID**.](https://docs.linuxserver.io/general/understanding-puid-and-pgid) in the container in order for it to generate files/folders your normal user can interact it. + +Run these commands from your terminal + +- `id -u` -- prints UID for **PUID** +- `id -g` -- prints GID for **PGID** + +Then add to your docker command like so: + +```shell +docker run -d ... -e "PUID=1000" -e "PGID=1000" ... rajnandan1/kener +``` + +or substitute them in [docker-compose.yml](https://raw.githubusercontent.com/rajnandan1/kener/main/docker-compose.yml) \ No newline at end of file diff --git a/docs/environment-vars.md b/docs/environment-vars.md new file mode 100644 index 000000000..791690bfa --- /dev/null +++ b/docs/environment-vars.md @@ -0,0 +1,59 @@ +# Environment Variables + +Kener needs some environment variables to be set to run properly. Here are the list of environment variables that you need to set. + +All of these are optional but are required for specific features. + +## PORT + +Defaults to 3000 if not specified + +```shell +export PORT=4242 +``` + +## GH_TOKEN + +A github token to read issues and create labels. This is required for **incident management** + +```shell +export GH_TOKEN=your-github-token +``` + +## API_TOKEN + +To talk to **kener apis** you will need to set up a token. It uses Bearer Authorization + +```shell +export API_TOKEN=sometoken +``` + +## API_IP + +While using API you can set this variable to accept request from a **specific IP** + +```shell +export API_IP=127.0.0.1 +``` + +## API_IP_REGEX + +While using API you can set this variable to accept request from a specific IP that matches the regex. Below example shows an **IPv6 regex** + +```shell +export API_IP_REGEX=^([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}$ +``` + +If you set both API_IP and API_IP_REGEX, API_IP will be given preference + +## KENER_BASE_PATH + +By default kener runs on `/` but you can change it to `/status` or any other path. + +- Important: The base path should _**NOT**_ have a trailing slash and should start with `/` +- Important: This env variable should be present during both build and run time +- If you are using docker you will have to do your own build and set this env variable during `docker build` + +```shell +export KENER_BASE_PATH=/status +``` diff --git a/docs/gh-setup.md b/docs/gh-setup.md new file mode 100644 index 000000000..75b0d6e33 --- /dev/null +++ b/docs/gh-setup.md @@ -0,0 +1,42 @@ +# Github Setup + +Kener uses github for incident management. Issues created in github using certain tags go to kener as incidents. + +## Step 1: Create Github Repository + +Create a Github Repository. It can be either public or private. After you have created a repository open `site.yaml` and add them like this + +```yaml +github: + owner: "username" + repo: "repository" +``` + +## Step 2: Create Github Token + +You can create either a classic token or personal access token + +### Creating Classic Token + +- Go to [Tokens](https://github.com/settings/tokens/new) +- Note: kener +- Expiration: No Expiration +- Scopes: write:packages +- Click on generate Token + +### Creating Personal Access Token + +- Go to [Personal Access Token](https://github.com/settings/personal-access-tokens/new) +- Token Name: kener +- Expiration: Use custom to select a calendar date +- Description: My Kener +- Repository access: Check Only Selected Repositories. Select your github repository +- Repository Permission: Select Issues Read Write +- Click on generate token + +## Step 3: Set environment + + +```shell +export GH_TOKEN=github_pat_11AD3ZA3Y0 +``` \ No newline at end of file diff --git a/docs/home.md b/docs/home.md new file mode 100644 index 000000000..38e3bb3f0 --- /dev/null +++ b/docs/home.md @@ -0,0 +1,87 @@ +# Kener - Status Page System + +

+ kener example illustration +

+ +

+ + GitHub Repo stars + + + Awesome status page + + + Docker Kener + +

+ +#### 👉 Visit a live server [here](https://kener.ing) + +#### 👉 Quick Start [here](https://rajnandan1.github.io/kener-docs/docs/quick-start) + +Kener: Open-source Node.js status page tool, designed to make service monitoring and incident handling a breeze. It offers a sleek and user-friendly interface that simplifies tracking service outages and improves how we communicate during incidents. And the best part? Kener integrates seamlessly with GitHub, making incident management a team effort—making it easier for us to track and fix issues together in a collaborative and friendly environment. + +It uses files to store the data. Other adapters are coming soon + +## Features + +### Monitoring and Tracking + +- Real-time monitoring +- Polls HTTP endpoint or Push data to monitor using Rest APIs +- Handles Timezones for visitors +- Categorize Monitors into different Sections +- Cron-based scheduling for monitors. Minimum per minute +- Flexible monitor configuration using YAML. Define your own parsing for monitor being UP/DOWN/DEGRADED +- Construct complex API Polls - Chain, Secrets etc +- Supports a Default Status for Monitors. Example defaultStatus=DOWN if you dont hit API per minute with Status UP +- Supports base path for hosting in k8s +- Pre-built docker image for easy deployment + +### Customization and Branding + +- Customizable status page using yaml or code +- Badge generation for status and uptime of Monitors +- Support for custom domains +- Embed Monitor as an iframe or widget +- Light + Dark Theme +- Internationalization support + +### Incident Management + +- Create Incidents using Github Issues - Rich Text +- Or use APIs to create Incidents + +### User Experience and Design + +- 100% Accessibility Score +- Easy installation and setup +- User-friendly interface +- Responsive design for various devices +- Auto SEO and Social Media ready + +## Technologies used + +- [SvelteKit](https://kit.svelte.dev/) +- [shadcn-svelte](https://www.shadcn-svelte.com/) + +## Inspired from + +- [Upptime](https://upptime.js.org/) + +## Roadmap + +- [x] Add api to create incident +- [x] Add docker file +- [ ] Add notification +- [ ] Add Mysql adapter + +## Support Me + +If you are using Kener and want to support me, you can do so by sponsoring me on GitHub or buying me a coffee. + +[Sponsor Me Using Github](https://github.com/sponsors/rajnandan1) + +[Buy Me a Coffee](https://www.buymeacoffee.com/rajnandan1) diff --git a/docs/how-it-works.md b/docs/how-it-works.md new file mode 100644 index 000000000..60ed6d951 --- /dev/null +++ b/docs/how-it-works.md @@ -0,0 +1,29 @@ +# How it works + +Kener has two parts. + +- Sveltekit application which is server rendered and is the frontend. It is running on Svelte 4. +- Hooks into the backend to get the data for your monitors + +## Folder structure + +```shell +├── src (svelte frontend files) +├── static (things put here can be referenced directly example static/logo.png -> /logo.png) +├── src +├──── routes +├────── (docs) (You can delete this, this has routes for documentation) +├──── lib +├────── server +├──────── config (Location for you site.yaml and monitos.yaml) +├──────── data (This is the location where server computate data is stored. Do not touch this) +├── docs (Documentation, you can delete this folder) +``` + +## Site.yaml + +This is the configuration file for your site. This is where you define the name of your site, the look and feel of your site etc + +## Monitors.yaml + +This is the configuration file for your monitors. This is where you define the monitors you want to show on your site. diff --git a/docs/i18n.md b/docs/i18n.md new file mode 100644 index 000000000..97d0650a8 --- /dev/null +++ b/docs/i18n.md @@ -0,0 +1,39 @@ +# i18n + +You can add translations to your site. By default it is set to `en`. Available translations are present in `locales/` folders in the root directory. You can add more translations by adding a new file in the `locales` folder. + +## How to enable a translation + +Once you have added a new translation file in the `locales` folder, you can enable it by adding the locale code in the `site.yaml` file. + +Let us say you have added a `hi.json` file in the `locales` folder. You can enable it by adding the following to the `site.yaml` file. + +```yaml +i18n: + defaultLocale: en + locales: + en: English + hi: हिन्दी +``` + +> **_defaultLocale:_** The default locale to be used. This will be the language used when a user visits the site for the first time. It is important to note that the default locale json file should be present in the locales folder. + + +## Variables + +There are few variables that you you should not change, + +- %hours : This will be replaced by the hours +- %minutes : This will be replaced by the minutes +- %minute : This will be replaced by the minute +- %status : This will be replaced by the status + +> **locales:_** A list of locales that you want to enable. The key is the locale code and the value is the name of the language. The locale code should be the same as the json file name in the locales folder. `en` means `en.json` should be present in the locales folder. + + + +Adding more than one locales will enable a dropdown in the navbar to select the language. + +Selected languages are stored in cookies and will be used when the user visits the site again. + +There is no auto detection of the language. The user has to manually select the language. \ No newline at end of file diff --git a/docs/incident-management.md b/docs/incident-management.md new file mode 100644 index 000000000..585db1f0c --- /dev/null +++ b/docs/incident-management.md @@ -0,0 +1,25 @@ +# Incident Management + +Kener uses Github to power incident management using labels + +## Labels + +Kener auto creates labels for your monitors using the `tag` parameter + +- `incident`: If an issue is marked as incident it will show up in kener home page +- `incident-down`: If an issue is marked as incident-down and incident kener would make that monitor down +- `incident-degraded`: If an issue is marked as incident-degraded and incident then kener would make the monitor degraded +- `resolved`: Use this tag to mark the incident has RESOLVED +- `identified`: Use this tag to show that the root cause of the incident has been identified + +## Creating your first incident + +- Go to your github repo of kener +- Go to issues +- Create an issue. Give it a title +- In the body add [start_datetime:1702651340] and [end_datetime:1702651140] and add some description. Time is UTC +- Add `incident`, `incident-down` and the monitor tag. This will make the monitor down for 4 minutes + +If you clone the repo it gives you an issue template to create incidents + +Here is a [sample incident](https://github.com/rajnandan1/kener/issues/15) for your reference. \ No newline at end of file diff --git a/docs/kener-apis.md b/docs/kener-apis.md new file mode 100644 index 000000000..b8ba4bbe2 --- /dev/null +++ b/docs/kener-apis.md @@ -0,0 +1,404 @@ +# Kener APIs + +Kener also gives APIs to push data and create incident. Before you use kener apis you will have to set an authorization token called `API_TOKEN`. This also has to be set as an environment variable. + +```shell +export API_TOKEN=some-token-set-by-you +``` + +Additonally you can set IP whitelisting by setting another environment token called `API_IP` or `API_IP_REGEX`. If you set both `API_IP` and `API_IP_REGEX`, `API_IP` will be given preference. Read more [here](/docs/environment-vars#api_ip) + +--- + +## Update Status - API + +![Static Badge](https://img.shields.io/badge/METHOD-POST-blue?style=flat-square) + +The update status API can be used to manually update the state of a monitor from a remote server. + +### Request Body + +| Parameter | Description | +| ------------------ | ------------------------------------------------------------------------------------ | +| status | `Required` Can be only UP/DOWN/DEGRADED | +| latency | `Required` In Seconds. Leave 0 if not required | +| timestampInSeconds | `Optional` Timestamp in UTC seconds. Defaults to now. Should between 90 Days and now | +| tag | `Required` Monitor Tag set in monitors.yaml | + +```shell +curl --request POST \ + --url http://your-kener.host/api/status \ + --header 'Authorization: Bearer some-token-set-by-you' \ + --header 'Content-Type: application/json' \ + --data '{ + "status": "DOWN", + "latency": 1213, + "timestampInSeconds": 1702405860, + "tag": "google-search" +}' +``` + +### Response + +```json +{ + "status": 200, + "message": "success at 1702405860" +} +``` + +This will update the status of the monitor with tag `google-search` to DOWN at UTC 1702405860 + +--- + +## Get Status - API + +![Static Badge](https://img.shields.io/badge/METHOD-GET-green?style=flat-square) + +Use this API to get the status of a monitor. + +### Request + +Replace `google-search` with your monitor tag in query param + +```shell +curl --request GET \ + --url 'http://your-kener.host/api/status?tag=google-search' \ + --header 'Authorization: Bearer some-token-set-by-you' +``` + +### Response + +```json +{ + "status": "UP", + "uptime": "9.0026", + "lastUpdatedAt": 1706447160 +} +``` + +--- + +## Create an Incident - API + +![Static Badge](https://img.shields.io/badge/METHOD-POST-blue?style=flat-square) + +Can be use to create an incident from a remote server + +### Request Body + +| Parameter | Description | +| ------------- | -------------------------------------------------------- | +| startDatetime | `Optional` When did the incident start in UTC second | +| endDatetime | `Optional` When did the incident end in UTC seconds | +| title | `Required` Title of the incident | +| body | `Optional` Body of the incident | +| tags | `Required` Array of String, Monitor Tags of the incident | +| impact | `Optional` Can be only DOWN/DEGRADED | +| isMaintenance | `Optional` Boolean if incident is a maintenance | +| isIdentified | `Optional` Incident identified | +| isResolved | `Optional` Incident resolved | + +```shell +curl --request POST \ + --url http://your-kener.host/api/incident \ + --header 'Authorization: Bearer some-token-set-by-you' \ + --header 'Content-Type: application/json' \ + --data '{ + "startDatetime": 1702405740, + "endDatetime": 1702405920, + "title": "Outage in Mumbai", + "body": "Login cluster is down in mumbai region", + "tags": ["google-search"], + "impact": "DOWN", + "isMaintenance": false, + "isIdentified": true, + "isResolved": false +}' +``` + +### Response + +```json +{ + "createdAt": 1703940450, + "closedAt": null, + "title": "Outage in Mumbai", + "tags": ["google-search"], + "incidentNumber": 12, + "startDatetime": 1702405740, + "endDatetime": 1702405920, + "body": "Login cluster is down in mumbai region", + "impact": "DOWN", + "isMaintenance": false, + "isIdentified": true, + "isResolved": false +} +``` + +--- + +## Update an Incident - API + +![Static Badge](https://img.shields.io/badge/METHOD-PATCH-yellow?style=flat-square) + +Can be use to update an incident from a remote server. It will clear values if not passed + +### Request Param + +- `incidentNumber`: Number of the incident + +### Request Body + +| Parameter | Description | +| ------------- | -------------------------------------------------------- | +| startDatetime | `Optional` When did the incident start in UTC second | +| endDatetime | `Optional` When did the incident end in UTC seconds | +| title | `Required` Title of the incident | +| body | `Optional` Body of the incident | +| tags | `Required` Array of String, Monitor Tags of the incident | +| impact | `Optional` Can be only DOWN/DEGRADED | +| isMaintenance | `Optional` Boolean if incident is a maintenance | +| isIdentified | `Optional` Incident identified | +| isResolved | `Optional` Incident resolved | + +```shell +curl --request PATCH \ + --url http://your-kener.host/api/incident/{incidentNumber} \ + --header 'Authorization: Bearer some-token-set-by-you' \ + --header 'Content-Type: application/json' \ + --data '{ + "startDatetime": 1702405740, + "endDatetime": 1702405920, + "title": "Outage in Mumbai", + "body": "Login cluster is down in mumbai region", + "tags": ["google-search"], + "impact": "DOWN", + "isMaintenance": false, + "isIdentified": true, + "isResolved": false +}' +``` + +### Response + +```json +{ + "createdAt": 1703940450, + "closedAt": null, + "title": "Outage in Mumbai", + "tags": ["google-search"], + "incidentNumber": 12, + "startDatetime": 1702405740, + "endDatetime": 1702405920, + "body": "Login cluster is down in mumbai region", + "impact": "DOWN", + "isMaintenance": false, + "isIdentified": true, + "isResolved": false +} +``` + +--- + +## Get an Incident - API + +![Static Badge](https://img.shields.io/badge/METHOD-GET-green?style=flat-square) + +Use `incidentNumber` to fetch an incident + +### Request Body + +```shell +curl --request GET \ + --url http://your-kener.host/api/incident/{incidentNumber} \ + --header 'Authorization: Bearer some-token-set-by-you' \ +``` + +### Response + +```json +{ + "createdAt": 1703940450, + "closedAt": null, + "title": "Outage in Mumbai", + "tags": ["google-search"], + "incidentNumber": 12, + "startDatetime": 1702405740, + "endDatetime": 1702405920, + "body": "Login cluster is down in mumbai region", + "impact": "DOWN", + "isMaintenance": false, + "isIdentified": true, + "isResolved": false +} +``` + +--- + +## Add Comment - API + +![Static Badge](https://img.shields.io/badge/METHOD-POST-blue?style=flat-square) + +Add comments for incident using `incidentNumber` + +### Request + +```shell +curl --request POST \ + --url http://your-kener.host/api/incident/{incidentNumber}/comment \ + --header 'Authorization: Bearer some-token-set-by-you' \ + --header 'Content-Type: application/json' \ + --data '{ + "body": "comment 1" +}' +``` + +### Response + +```json +{ + "commentID": 1873376745, + "body": "comment 1", + "createdAt": 1704123938 +} +``` + +--- + +## Get Comments - API + +![Static Badge](https://img.shields.io/badge/METHOD-GET-green?style=flat-square) + +Use this API to fetch all the comments for an incident + +### Request + +```shell +curl --request GET \ + --url http://your-kener.host/api/incident/{incidentNumber}/comment \ + --header 'Authorization: Bearer some-token-set-by-you' \ +``` + +### Response + +```json +[ + { + "commentID": 1873372042, + "body": "comment 1", + "createdAt": 1704123116 + }, + { + "commentID": 1873372169, + "body": "comment 2", + "createdAt": 1704123139 + } +] +``` + +--- + +## Update Incident Status - API + +![Static Badge](https://img.shields.io/badge/METHOD-POST-blue?style=flat-square) + +Use this to API to update the status of an ongoing incident. + +### Request Body + +| Parameter | Description | +| ------------ | ------------------------------------------------------------ | +| isIdentified | `Optional` Boolean, set it when incident has been identified | +| isResolved | `Optional` Boolean, set it when incident has been resolved | +| endDatetime | `Optional` When did the incident end in UTC seconds | + +### Request + +```shell +curl --request POST \ + --url http://your-kener.host/api/incident/{incidentNumber}/status \ + --header 'Authorization: Bearer some-token-set-by-you' \ + --header 'Content-Type: application/json' \ + --data '{ + "isIdentified": true, + "isResolved": false + "endDatetime": 1702405920 +}' +``` + +### Response + +```json +{ + "createdAt": 1703940450, + "closedAt": null, + "title": "Outage in Mumbai", + "tags": ["google-search"], + "incidentNumber": 12, + "startDatetime": 1702405740, + "endDatetime": 1702405920, + "body": "Login cluster is down in mumbai region", + "impact": "DOWN", + "isMaintenance": false, + "isIdentified": true, + "isResolved": false +} +``` + +--- + +## Search Incidents - API + +![Static Badge](https://img.shields.io/badge/METHOD-POST-blue?style=flat-square) + +Use this to API to search incidents. + +### Request Body + +| Parameter | Description | +| ------------------ | ---------------------------------------------------------------------------------------------- | +| state | `Optional` open or closed. Default is open | +| tags | `Optional` Comma separated monitor tags, example: earth,google-seach | +| page | `Optional` Page number, starts with 1, defaults to 1 | +| per_page | `Optional` Page size, defaults to 10, max is 100 | +| created_after_utc | `Optional` timestamp in UTC seconds when the incident was created after. Example: 1702405920 | +| created_before_utc | `Optional` timestamp in UTC seconds when the incident was created before . Example: 1702405920 | +| title_like | `Optional` search incidents with title | + +### Request + +Search incidents that are closed and title contains `hello incident` + +```shell +curl --request POST \ + --url http://your-kener.host/api/incident?state=closed&title_like=Hello%20Incident \ + --header 'Authorization: Bearer some-token-set-by-you' \ + --header 'Content-Type: application/json' \ + --data '{ + "isIdentified": true, + "isResolved": false + "endDatetime": 1702405920 +}' +``` + +### Response + +```json +[ + { + "createdAt": 1703940450, + "closedAt": null, + "title": "Outage in Mumbai - Hello Incident", + "tags": ["google-search"], + "incidentNumber": 12, + "startDatetime": 1702405740, + "endDatetime": 1702405920, + "body": "Login cluster is down in mumbai region", + "impact": "DOWN", + "isMaintenance": false, + "isIdentified": true, + "isResolved": false + } +] +``` diff --git a/docs/monitor-examples.md b/docs/monitor-examples.md new file mode 100644 index 000000000..a1a930814 --- /dev/null +++ b/docs/monitor-examples.md @@ -0,0 +1,202 @@ +# Monitor Examples + +Here are some exhaustive examples for monitors + +## Simple GET Monitor + +Below example will call https://www.google.com/webhp. If the status code is 200 then it will be UP else DOWN. + +```yaml +- name: Google Search + tag: "google-search" + api: + method: GET + url: https://www.google.com/webhp +``` + +## Simple GET Monitor Without Hyperlink + +Below example will call https://www.google.com/webhp. If the status code is 200 then it will be UP else DOWN. It will not show the GET hyperlink in the monitor description. + +```yaml +- name: Google Search + tag: "google-search" + api: + method: GET + url: https://www.google.com/webhp + hideURLForGet: true +``` + +## Monitor with HTML description + +Below example will call https://www.google.com/webhp. If the status code is 200 then it will be UP else DOWN. It will show the description in HTML format. + +```yaml +- name: Google Search + tag: "google-search" + description: "Hello world" + api: + method: GET + url: https://www.google.com/webhp +``` + +## Monitor with image + +google.png is in the static folder + +```yaml +- name: Google Search + tag: "google-search" + image: "/google.png" + api: + method: GET + url: https://www.google.com/webhp +``` + +## Get Monitor 15 Minute + +Below example will call https://www.google.com/webhp every 15 minutes. If the status code is 200 then it will be UP else DOWN. + +```yaml +- name: Google Search + description: Search the world's information, including webpages, images, videos and more. + tag: "google-search" + cron: "*/15 * * * *" + api: + method: GET + url: https://www.google.com/webhp +``` + +## POST Monitor With Body + +Below example will call https://www.google.com/webhp with body. If the status code is 200 then it will be UP else DOWN. + +```yaml +- name: Google Search + description: Google Search + tag: "google-search-post" + api: + method: POST + url: https://www.google.com/webhp + headers: + Content-Type: application/json + body: '{"order_amount":22222.1,"order_currency":"INR"}' +``` + +## Secrets in Header + +You can set ENV variables in your machine and use them in your monitors. Example below has `GH_TOKEN` as an environment variable. It uses process.env.GH_TOKEN. + +``` +export GH_TOKEN=some.token.for.github +``` + +> **_NOTE:_** DO NOT forget the `$` sign in your monitor secret, otherwise it will not be picked up. + +```yaml +- name: Github Issues + description: Github Issues Fetch + tag: "gh-search-issue" + api: + method: GET + url: https://api.github.com/repos/rajnandan1/kener/issues + headers: + Authorization: Bearer $GH_TOKEN +``` + +## Secrets in Body + +Assuming `ORDER_ID` is present in env + +```yaml +- name: Github Issues + description: Github Issues Fetch + tag: "gh-search-issue" + api: + method: POST + url: https://api.github.com/repos/rajnandan1/kener/issues + headers: + Content-Type: application/json + body: '{"order_amount":22222.1,"order_currency":"INR", "order_id": "$ORDER_ID"}' +``` + +## Eval Body + +Read more about [eval](https://kener.ing/docs/monitors#eval) + +Below example will call https://api.github.com/repos/rajnandan1/kener/issues. If the status code is 200 then it will be UP else DOWN. It will also check if the response time is greater than 2000ms then it will be DEGRADED. + +```yaml +- name: Github Issues + description: Github Issues Fetch + tag: "gh-search-issue" + api: + method: GET + url: https://api.github.com/repos/rajnandan1/kener/issues + eval: | + (function(statusCode, responseTime, responseDataBase64){ + const resp = JSON.parse(atob(responseDataBase64)); + let status = 'DOWN' + if(statusCode == 200) status = 'UP'; + if(Object.keys(resp).length == 0) status = 'DOWN'; + if(statusCode == 200 && responseTime > 2000) status = 'DEGRADED'; + return { + status: status, + latency: responseTime, + } + }) +``` + +## With defaultStatus UP + +Each minute it will set the status as UP + +```yaml +- name: Earth + description: Our Planet + tag: "earth" + defaultStatus: UP +``` + +## With Category + +Add this monitor to the API category instead of the default home category + +```yaml +- name: Earth + description: Our Planent + tag: "earth" + category: API +``` + +## Ping Monitor + +This will ping the hosts. It will be up if the ping is successful for all the hosts present in the list of ip4 and ip6. + +```yaml +- name: Earth + description: Our Planent + tag: "earth" + ping: + hostsV4: + - www.frogment.com + - 52.84.205.24 + hostsV6: + - ipv6.google.com +``` + +If both ping and api monitors are present then API data will overwrite ping data + +## Custom Thresholds + +The below monitor will show DEGRADED if 3 or more degraded status in a day and DOWN if 2 or more down status in a day. It will also include degraded in downtime calculation. + +```yaml +- name: Earth + description: Our blue planet + tag: "earth" + defaultStatus: "UP" + dayDegradedMinimumCount: 3 + dayDownMinimumCount: 2 + includeDegradedInDowntime: true +``` diff --git a/docs/monitors.md b/docs/monitors.md new file mode 100644 index 000000000..711601081 --- /dev/null +++ b/docs/monitors.md @@ -0,0 +1,91 @@ +# Monitors + +Inside `config/` folder there is a file called `monitors.yaml`. We will be adding our monitors here. Please note that your yaml must be valid. It is an array. + +## Understanding monitors + +Each monitor runs at 1 minute interval by default. Monitor runs in below priorty order. + +- defaultStatus Data +- API call Data overrides above data(if specified) +- Pushed Status Data overrides API Data using [Kener Update Statue API](https://rajnandan1.github.io/kener-docs/docs/kener-apis#update-status) +- Manual Incident Data overrides Pushed Status Data + +Sample + +```yaml +- name: Google Search + description: Search the world's information, including webpages, images, videos and more. + tag: "google-search" + image: "/google.png" + cron: "* * * * *" + defaultStatus: "UP" + api: + timeout: 4000 + method: POST + url: https://www.google.com/webhp + headers: + Content-Type: application/json + body: '{"order_amount":1,"order_currency":"INR"}' + eval: | + (function(statusCode, responseTime, responseDataBase64){ + const resp = JSON.parse(atob(responseDataBase64)); + return { + status: statusCode == 200 ? 'UP':'DOWN', + latency: responseTime, + } + }) +``` + +| name | Required | This will be shown in the UI to your users. Keep it short and unique | +| ------------------------- | ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| name | Required + Unique | This will be shown in the UI to your users. Keep it short and unique | +| description | Optional | This will be show below your name | +| tag | Required + Unique | This is used to tag incidents created in Github using comments | +| image | Optional | To show a logo before the name | +| cron | Optional | Use cron expression to specify the interval to run the monitors. Defaults to `* * * * *` i.e every minute | +| api.timeout | Optional | timeout for the api in milliseconds. Default is 10000(10 secs) | +| api.method | Optional | HTTP Method | +| api.url | Optional | HTTP URL | +| api.headers | Optional | HTTP headers | +| api.body | Optional | HTTP Body as string | +| api.hideURLForGet | Optional | if the monitor is a GET URL and no headers are specified and the response body content-type is a text/html then kener shows a GET hyperlink in monitor description. To hide that set this as false. Default is true | +| api.eval | Optional | Evaluator written in JS, to parse HTTP response and calculate uptime and latency | +| defaultStatus | Optional | If no API is given this will be the default status. can be UP/DOWN/DEGRADED | +| hidden | Optional | If set to `true` will not show the monitor in the UI | +| category | Optional | Use this to group your monitors. Make sure you have defined category in `site.yaml` and use the `name` attribute here | +| dayDegradedMinimumCount | Optional | Default is 1. It means minimum this number of count for the day to be classified as DEGRADED(Yellow Bar) in 90 day view. Has to be `number` greater than 0 | +| dayDownMinimumCount | Optional | Default is 1. It means minimum this number of count for the day to be classified as DOWN(Red Bar) in 90 day view. Has to be `number` greater than 0 | +| includeDegradedInDowntime | Optional | By deafault uptime percentage is calculated as (UP+DEGRADED/UP+DEGRADED+DOWN). Setting it as `true` will change the calculation to (UP/UP+DEGRADED+DOWN) | +| ping.hostsV4 | Optional | Array of hosts / IP to monitor ping response. Either domain name or IP4 | +| ping.hostsV6 | Optional | Array of hosts / IP to monitor ping response. Either domain name or IP6 | + +## eval + +This is a anonymous JS function, by default it looks like this. + +> **_NOTE:_** The eval function should always return a json object. The json object can have only status(UP/DOWN/DEGRADED) and lantecy(number) +> `{status:"DEGRADED", latency: 200}`. + +```js +(function (statusCode, responseTime, responseDataBase64) { + let statusCodeShort = Math.floor(statusCode/100); + let status = 'DOWN' + if(statusCodeShort >=2 && statusCodeShort <= 3) { + status = 'UP', + } + return { + status: 'DOWN', + latency: responseTime, + } +}) +``` + +- `statusCode` **REQUIRED** is a number. It is the HTTP status code +- `responseTime` **REQUIRED**is a number. It is the latency in milliseconds +- `responseDataBase64` **REQUIRED** is a string. It is the base64 encoded response data. To use it you will have to decode it + +```js +let decodedResp = atob(responseDataBase64); +//let jsonResp = JSON.parse(decodedResp) +``` diff --git a/docs/quick-start.md b/docs/quick-start.md new file mode 100644 index 000000000..8f91aa72b --- /dev/null +++ b/docs/quick-start.md @@ -0,0 +1,34 @@ +# Quick Start + +Please make sure you have [Node](https://nodejs.org/en) installed in your system. Minimum version required is `v16.17.0`. + +## Clone the repository + +```shell +git clone https://github.com/rajnandan1/kener.git +cd kener +``` + +## Install Dependencies + +```shell +npm install +``` + +## Configs + +- Rename `config/site.example.yaml` -> `config/site.yaml` +- Rename `config/monitors.example.yaml` -> `config/monitors.yaml` + +```shell +mv src/lib/server/config/site.example.yaml src/lib/server/config/site.yaml +mv src/lib/server/config/monitors.example.yaml src/lib/server/config/monitors.yaml +``` + +## Start Kener Development Server + +```bash +npm run dev +``` + +Kener Development Server would be running at PORT 3000. Go to [http://localhost:3000](http://localhost:3000) diff --git a/docs/showcase.md b/docs/showcase.md new file mode 100644 index 000000000..72919bbd0 --- /dev/null +++ b/docs/showcase.md @@ -0,0 +1,22 @@ +# Kener Showcase + +This page is a showcase of how kener is getting used in the wild. If you want to add your site here, please raise a PR and modify this [file](https://github.com/rajnandan1/kener-docs/blob/main/docs/md/docs/showcase.md) + +#### [Kener](https://kener.ing) +#### [Cashfree Payments India](https://statuspage.cashfree.com/) +#### [status.orhun.dev](https://status.orhun.dev/) +#### [status.ordinalsbot.com](https://status.ordinalsbot.com/) +#### [status.britsov.com](https://status.britsov.net/) +#### [status.gosu.bar](https://status.gosu.bar/) +#### [stat.imsun.org](https://stat.imsun.org/) +#### [Goomer](https://status.goomer.com.br/) +#### [kennek.io](https://status.kennek.io/) +#### [evelan.io](https://status.evelan.io/) +#### [evelan.io](https://status.evelan.io/) +#### [sveir.xyz](https://status.sveir.xyz/) +#### [cellcast.com](https://status.cellcast.com/) +#### [flytbase.com](https://status.flytbase.com/) +#### [scriptor-artis.fr](https://status.scriptor-artis.fr/) +#### [jiance.f.ozizio.com](http://jiance.f.ozizio.com/) +#### [sshaw.cn](https://s.sshaw.cn/) +#### [donotes.app](https://status.donotes.app) diff --git a/docs/status-badges.md b/docs/status-badges.md new file mode 100644 index 000000000..383b44739 --- /dev/null +++ b/docs/status-badges.md @@ -0,0 +1,163 @@ +# Status Badges + +There are three types of badges + +Syntax + +```md +http://[hostname]/badge/[tag]/status +http://[hostname]/badge/[tag]/dot +http://[hostname]/badge/[tag]/uptime +``` + +--- + +## Status + +### Badge SVG + +Shows the last health check was UP/DOWN/DEGRADED + +![Earth Status](https://kener.ing/badge/earth/status) + +Example in HTML + +```html + +``` + +Example in MarkDown + +```md +![Status Badge](https://kener.ing/badge/[monitor.tag]/status) +``` + +### Icon SVG + +Shows the last health check was UP/DOWN/DEGRADED as SVG dot + +#### Standard + +![Earth Status](http://localhost:3000/badge/google-search/dot) + +```html + +``` + +#### Animated + +![Earth Status](http://localhost:3000/badge/google-search/dot?animate=ping) + +```html + +``` + +--- + +## Uptime + +Shows the 90 Day uptime by default. You can `sinceLast` as query param to get uptime since last x seconds. + +![Earth Uptime](https://kener.ing/badge/earth/uptime) + +### 90 Day Uptime + +Example in HTML + +```html + +``` + +Example in MarkDown + +```md +![Uptime Badge](https://kener.ing/badge/[monitor.tag]/uptime) +``` + +### 15 Minute Uptime + +Example in HTML + +```html + +``` + +Example in MarkDown + +```md +![Uptime Badge](https://kener.ing/badge/[monitor.tag]/uptime?sinceLast=900) +``` + +--- + +## Customize Badges + +You can set different colors for badges and style. + +### With Custom Label Color + +![Earth Status](https://kener.ing/badge/earth/status?labelColor=F2BED1) + +```md +![Earth Status](https://kener.ing/badge/earth/status?labelColor=F2BED1) +``` + +### With Custom Value Color + +![Earth Status](https://kener.ing/badge/earth/status?color=FFC0D9) + +```md +![Earth Status](https://kener.ing/badge/earth/status?color=FFC0D9) +``` + +### With Both Different Colors + +![Earth Status](https://kener.ing/badge/earth/uptime?color=D0BFFF&labelColor=FFF3DA) + +```md +![Earth Status](https://kener.ing/badge/earth/uptime?color=D0BFFF&labelColor=FFF3DA) +``` + +### Style Of the Badge + +You can change the style of the badge. Supported Styles are `plastic`, `flat`, `flat-square`, `for-the-badge` or `social`. Default is `flat` + +#### plastic + +![Earth Uptime](https://kener.ing/badge/earth/uptime?style=plastic) + +```md +![Earth Uptime](https://kener.ing/badge/earth/uptime?style=plastic) +``` + +#### flat + +![Earth Uptime](https://kener.ing/badge/earth/uptime?style=flat) + +```md +![Earth Uptime](https://kener.ing/badge/earth/uptime?style=flat) +``` + +#### flat-square + +![Earth Uptime](https://kener.ing/badge/earth/uptime?style=flat-square) + +```md +![Earth Uptime](https://kener.ing/badge/earth/uptime?style=flat-square) +``` + +#### for-the-badge + +![Earth Uptime](https://kener.ing/badge/earth/uptime?style=for-the-badge) + +```md +![Earth Uptime](https://kener.ing/badge/earth/uptime?style=for-the-badge) +``` + +#### social + +![Earth Uptime](https://kener.ing/badge/earth/uptime?style=social) + +```md +![Earth Uptime](https://kener.ing/badge/earth/uptime?style=social) +``` diff --git a/docs/structure.json b/docs/structure.json new file mode 100644 index 000000000..e0207c892 --- /dev/null +++ b/docs/structure.json @@ -0,0 +1,89 @@ +{ + "sidebar": [ + { + "sectionTitle": "Getting Started", + "children": [ + { + "title": "Introduction", + "link": "/docs/home", + "file": "/home.md" + }, + { + "title": "Quick Start", + "link": "/docs/quick-start", + "file": "/docs/quick-start.md" + }, + { + "title": "How it works", + "link": "/docs/how-it-works", + "file": "/how-it-works.md" + } + ] + }, + { + "sectionTitle": "Core Concepts", + "children": [ + { + "title": "Site Configuration", + "link": "/docs/customize-site", + "file": "/customize-site.md" + }, + { + "title": "Monitors", + "link": "/docs/monitors", + "file": "/monitors.md" + }, + { + "title": "Monitors Examples", + "link": "/docs/monitor-examples", + "file": "/monitor-examples.md" + }, + { + "title": "Incident Management", + "link": "/docs/incident-management", + "file": "/incident-management.md" + }, + { + "title": "Localization", + "link": "/docs/i18n", + "file": "/i18n.md" + }, + { + "title": "Badges", + "link": "/docs/status-badges", + "file": "/status-badges.md" + } + ] + }, + { + "sectionTitle": "Deployment", + "children": [ + { + "title": "Environment Setup", + "link": "/docs/environment-vars", + "file": "/environment-vars.md" + }, + { + "title": "Deployment", + "link": "/docs/deployment", + "file": "/deployment.md" + }, + { + "title": "Github Setup", + "link": "/docs/gh-setup", + "file": "/gh-setup.md" + } + ] + }, + { + "sectionTitle": "API Reference", + "children": [ + { + "title": "Kener APIs", + "link": "/docs/kener-apis", + "file": "/kener-apis.md" + } + ] + } + ] +} diff --git a/main.js b/main.js new file mode 100644 index 000000000..1700295e3 --- /dev/null +++ b/main.js @@ -0,0 +1,9 @@ +import { handler } from "./build/handler.js"; +import express from "express"; +const PORT = process.env.PORT || 3000; +const app = express(); +app.use(handler); + +app.listen(PORT, () => { + console.log("Kener is running on port " + PORT + "!"); +}); diff --git a/package.json b/package.json index 960a971b4..a5f3ce7e1 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,8 @@ "url": "https://github.com/rajnandan1/kener.git" }, "scripts": { - "build": "node scripts/check.js && vite build", + "build": "vite build", + "preview": "vite preview", "serve": "node prod.js", "dev": "vite dev", "kener:dev": "cross-env NODE_ENV=development PUBLIC_KENER_FOLDER=./static/kener node scripts/check.js && concurrently \"cross-env NODE_ENV=development PUBLIC_KENER_FOLDER=./static/kener node dev.js\" \"cross-env NODE_ENV=development PUBLIC_KENER_FOLDER=./static/kener vite dev\"", diff --git a/src/lib/components/incident.svelte b/src/lib/components/incident.svelte index 229f0b8b5..07f1f81dc 100644 --- a/src/lib/components/incident.svelte +++ b/src/lib/components/incident.svelte @@ -52,7 +52,6 @@ let commentsLoading = true; function getComments() { - state = state == "open" ? "close" : "open"; if (incident.comments.length > 0) return; if (commentsLoading === false) return; axios @@ -65,17 +64,22 @@ // console.log(error); }); } + $: { + if (state == "open") { + getComments(); + } + } -
+
- - + + {#if incidentPriority != "" && incidentDuration > 0} -

+

@@ -86,24 +90,26 @@

{/if} - {#if variant.includes("monitor")} -
-
- {#if monitor.image} - - {/if} - {monitor.name} -
-
- {/if} - {#if variant.includes("title")} - {incident.title} + {#if monitor.image} + {/if} + +
+
+ {#if variant.includes("monitor")} + {monitor.name} - + {/if} + {#if variant.includes("title")} + {incident.title} + {/if} +
+
+ {#if incidentState == "open"}
{/if} - + {moment(incidentCreatedAt * 1000).format("MMMM Do YYYY, h:mm:ss a")}

@@ -151,7 +159,7 @@ {#if (variant.includes("body") || variant.includes("comments")) && state == "open"} - + {#if variant.includes("body")}

{/if} {#if variant.includes("comments") && incident.comments?.length > 0} -
+
    {#each incident.comments as comment}
  1. @@ -168,7 +176,7 @@ class="absolute -start-1.5 mt-1.5 h-3 w-3 rounded-full border border-secondary bg-secondary" >