1
0
mirror of https://github.com/tormachris/cf-workers-status-page.git synced 2025-09-21 08:25:16 +02:00

15 Commits

Author SHA1 Message Date
d5d0ed3b42 Update deploy.yml 2023-09-23 11:26:39 +02:00
616a127173 Merge branch 'eidam:main' into main 2023-09-23 11:22:29 +02:00
f0ec1c016a remove 2023-08-31 18:51:59 +02:00
f5b49dcae7 Fixes recent deployment issues 2023-06-30 11:09:36 +01:00
f419b8ad2b chore(deps): bump nanoid from 3.1.23 to 3.3.4
Bumps [nanoid](https://github.com/ai/nanoid) from 3.1.23 to 3.3.4.
- [Release notes](https://github.com/ai/nanoid/releases)
- [Changelog](https://github.com/ai/nanoid/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ai/nanoid/compare/3.1.23...3.3.4)

---
updated-dependencies:
- dependency-name: nanoid
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-08-24 10:51:37 +01:00
8d704ef44c chore(deps-dev): bump postcss from 8.2.10 to 8.2.13
Bumps [postcss](https://github.com/postcss/postcss) from 8.2.10 to 8.2.13.
- [Release notes](https://github.com/postcss/postcss/releases)
- [Changelog](https://github.com/postcss/postcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/postcss/postcss/compare/8.2.10...8.2.13)

---
updated-dependencies:
- dependency-name: postcss
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-08-24 10:51:26 +01:00
7f58e2673a chore(deps): bump eventsource from 1.0.7 to 1.1.1
Bumps [eventsource](https://github.com/EventSource/eventsource) from 1.0.7 to 1.1.1.
- [Release notes](https://github.com/EventSource/eventsource/releases)
- [Changelog](https://github.com/EventSource/eventsource/blob/master/HISTORY.md)
- [Commits](https://github.com/EventSource/eventsource/compare/v1.0.7...v1.1.1)

---
updated-dependencies:
- dependency-name: eventsource
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-08-24 10:50:21 +01:00
8e968732b9 expect 401 2022-05-25 11:35:56 +02:00
798408aba1 reduce interval 2022-05-25 10:59:51 +02:00
aa76e3f1ed update application config 2022-05-25 10:58:55 +02:00
7813ff93ac Replace all '-' for monitor name.
Signed-off-by: corvofeng <corvofeng@gmail.com>
2022-02-15 22:08:15 +00:00
596d30389f Increment failed checks at least once
Currently, a failure is only recorded if a monitor transitions from operational
to not in a given day. If the monitor is non-operational at the start of the day,
or remains non-operational for a full day, the failure will not be recorded.
2021-11-18 11:22:15 +00:00
1189e708da Supply fallback text for Slack message
This is used as a plain-text summary of the attachment, e.g. in push notifications.

Docs: https://api.slack.com/reference/messaging/attachments#legacy_fields
2021-10-11 14:21:30 +01:00
de0cfaf504 Update wrangler.toml
Add "compatibility_date" for Cloudflare to prevent jq json parse issues.
2021-10-11 14:20:37 +01:00
f0b27a8446 Add more data centre locations
The full list of locations was generated from the [Cloudflare Status Page](https://www.cloudflarestatus.com/):

```bash
{
  echo 'export const locations = {';
  curl -ks https://www.cloudflarestatus.com/ | grep -- '- (' | while read line; do
    code=$(awk -F '[()]' '{print $2}' <<< "$line");
    city=$(awk -F '[,-]' '{print $1}' <<< "$line");
    echo "  $code: '${city//\'/’}',";
  done | sort;
  echo '}';
} > src/functions/locations.js
```
2021-10-11 14:13:49 +01:00
10 changed files with 257 additions and 50 deletions

View File

@ -1,6 +1,7 @@
name: Deploy
on:
workflow_dispatch:
push:
branches:
- main
@ -26,9 +27,8 @@ jobs:
with:
apiToken: ${{ secrets.CF_API_TOKEN }}
preCommands: |
wrangler kv:namespace create KV_STATUS_PAGE
apt-get update && apt-get install -y jq
export KV_NAMESPACE_ID=$(wrangler kv:namespace list | jq -c 'map(select(.title | contains("KV_STATUS_PAGE")))' | jq -r ".[0].id")
wrangler kv:namespace create KV_STATUS_PAGE || true
export KV_NAMESPACE_ID=$(npx @cloudflare/wrangler@1 kv:namespace list 2> >(tee stderr.log >&2) | head -1 | node -pe "JSON.parse(fs.readFileSync('/dev/stdin').toString()).find(kv => kv.title.includes('KV_STATUS_PAGE')).id")
echo "[env.production]" >> wrangler.toml
echo "kv_namespaces = [{binding=\"KV_STATUS_PAGE\", id=\"${KV_NAMESPACE_ID}\"}]" >> wrangler.toml
[ -z "$SECRET_SLACK_WEBHOOK_URL" ] && echo "Secret SECRET_SLACK_WEBHOOK_URL not set, creating dummy one..." && SECRET_SLACK_WEBHOOK_URL="default-gh-action-secret" || true

View File

@ -1,6 +1,6 @@
settings:
title: 'Status Page'
url: 'https://status-page.eidam.dev' # used for Slack messages
url: 'https://status.tormakristof.eu' # used for Slack messages
logo: logo-192x192.png # image in ./public/ folder
daysInHistogram: 90 # number of days you want to display in histogram
collectResponseTimes: true # collects avg response times from CRON locations
@ -15,25 +15,11 @@ settings:
dayInHistogramNotOperational: ' incident(s)' # xx incident(s) recorded
monitors:
- id: workers-cloudflare-com # unique identifier
name: workers.cloudflare.com
description: 'You write code. They handle the rest.' # default=empty
url: 'https://workers.cloudflare.com/' # URL to fetch
- id: webgateway # unique identifier
name: webgateway.tormakristof.eu
description: 'On-prem webgateway status' # default=empty
url: 'https://tormakristof.eu/' # URL to fetch
method: GET # default=GET
expectStatus: 200 # operational status, default=200
expectStatus: 301 # operational status, default=200
followRedirect: false # should fetch follow redirects, default=false
linkable: false # allows the title to be a link, default=true
- id: www-cloudflare-com
name: www.cloudflare.com
description: 'Built for anything connected to the Internet.'
url: 'https://www.cloudflare.com'
method: GET
expectStatus: 200
linkable: true # allows the title to be a link, default=true
- id: blog-cloudflare-com
name: The Cloudflare Blog
url: 'https://blog.cloudflare.com/'
method: GET
expectStatus: 200

View File

@ -23,7 +23,7 @@
"devDependencies": {
"autoprefixer": "^10.0.2",
"node-fetch": "^2.6.1",
"postcss": "^8.2.10",
"postcss": "^8.2.13",
"postcss-cli": "^8.3.0",
"prettier": "^2.2.0",
"tailwindcss": "^2.0.1",

View File

@ -1,4 +1,4 @@
import { locations } from '../functions/helpers'
import { locations } from '../functions/locations'
export default function MonitorDayAverage({ location, avg }) {
return (

View File

@ -1,5 +1,5 @@
import config from '../../config.yaml'
import { locations } from '../functions/helpers'
import { locations } from '../functions/locations'
const classes = {
green:

View File

@ -141,8 +141,8 @@ export async function processCronTrigger(event) {
// Save allOperational to false
monitorsState.lastUpdate.allOperational = false
// Increment failed checks, only on status change (maybe call it .incidents instead?)
if (monitorStatusChanged) {
// Increment failed checks on status change or first fail of the day (maybe call it .incidents instead?)
if (monitorStatusChanged || monitorsState.monitors[monitor.id].checks[checkDay].fails == 0) {
monitorsState.monitors[monitor.id].checks[checkDay].fails++
}
}

View File

@ -3,13 +3,6 @@ import { useEffect, useState } from 'react'
const kvDataKey = 'monitors_data_v1_1'
export const locations = {
WAW: 'Warsaw',
SCL: 'Santiago de Chile',
MEL: 'Melbourne',
SIN: 'Singapore',
}
export async function getKVMonitors() {
// trying both to see performance difference
return KV_STATUS_PAGE.get(kvDataKey, 'json')
@ -34,6 +27,7 @@ export async function notifySlack(monitor, operational) {
const payload = {
attachments: [
{
fallback: `Monitor ${monitor.name} changed status to ${getOperationalLabel(operational)}`,
color: operational ? '#36a64f' : '#f2c744',
blocks: [
{
@ -70,7 +64,7 @@ export async function notifySlack(monitor, operational) {
}
export async function notifyTelegram(monitor, operational) {
const text = `Monitor *${monitor.name.replace(
const text = `Monitor *${monitor.name.replaceAll(
'-',
'\\-',
)}* changed status to *${getOperationalLabel(operational)}*

226
src/functions/locations.js Normal file
View File

@ -0,0 +1,226 @@
export const locations = {
ADL: 'Adelaide',
AKL: 'Auckland',
ALG: 'Algiers',
AMM: 'Amman',
AMS: 'Amsterdam',
ARI: 'Arica',
ARN: 'Stockholm',
ASU: 'Asunción',
ATH: 'Athens',
ATL: 'Atlanta',
BAH: 'Manama',
BCN: 'Barcelona',
BEG: 'Belgrade',
BEL: 'Belém',
BEY: 'Beirut',
BGW: 'Baghdad',
BKK: 'Bangkok',
BLR: 'Bangalore',
BNA: 'Nashville',
BNE: 'Brisbane',
BNU: 'Blumenau',
BOG: 'Bogotá',
BOM: 'Mumbai',
BOS: 'Boston',
BRU: 'Brussels',
BSB: 'Brasilia',
BUD: 'Budapest',
BUF: 'Buffalo',
BWN: 'Bandar Seri Begawan',
CAN: 'Guangzhou',
CBR: 'Canberra',
CCU: 'Kolkata',
CDG: 'Paris',
CEB: 'Cebu',
CFC: 'Caçador',
CGK: 'Jakarta',
CGO: 'Zhengzhou',
CGP: 'Chittagong',
CKG: 'Chongqing',
CLT: 'Charlotte',
CMB: 'Colombo',
CMH: 'Columbus',
CMN: 'Casablanca',
CNF: 'Belo Horizonte',
CPH: 'Copenhagen',
CPT: 'Cape Town',
CSX: 'Zhuzhou',
CTU: 'Chengdu',
CUR: 'Willemstad',
CWB: 'Curitiba',
DAC: 'Dhaka',
DAR: 'Dar Es Salaam',
DEL: 'New Delhi',
DEN: 'Denver',
DFW: 'Dallas',
DKR: 'Dakar',
DME: 'Moscow',
DMM: 'Dammam',
DOH: 'Doha',
DTW: 'Detroit',
DUB: 'Dublin',
DUR: 'Durban',
DUS: 'Düsseldorf',
DXB: 'Dubai',
EDI: 'Edinburgh',
EVN: 'Yerevan',
EWR: 'Newark',
EZE: 'Buenos Aires',
FCO: 'Rome',
FLN: 'Florianopolis',
FOR: 'Fortaleza',
FRA: 'Frankfurt',
GIG: 'Rio de Janeiro',
GND: 'St. Georges',
GOT: 'Gothenburg',
GRU: 'São Paulo',
GUA: 'Guatemala City',
GVA: 'Geneva',
GYD: 'Baku',
GYE: 'Guayaquil',
HAM: 'Hamburg',
HAN: 'Hanoi',
HEL: 'Helsinki',
HKG: 'Hong Kong ',
HNL: 'Honolulu',
HRE: 'Harare',
HYD: 'Hyderabad',
IAD: 'Ashburn',
IAH: 'Houston',
ICN: 'Seoul',
IND: 'Indianapolis',
ISB: 'Islamabad',
IST: 'Istanbul',
ITJ: 'Itajaí',
JAX: 'Jacksonville',
JIB: 'Djibouti City',
JNB: 'Johannesburg',
JSR: 'Jashore',
KBP: 'Kyiv',
KEF: 'Reykjavík',
KGL: 'Kigali',
KHI: 'Karachi',
KIV: 'Chișinău',
KIX: 'Osaka',
KJA: 'Krasnoyarsk',
KTM: 'Kathmandu',
KUL: 'Kuala Lumpur',
KWI: 'Kuwait City',
LAD: 'Luanda',
LAS: 'Las Vegas',
LAX: 'Los Angeles',
LCA: 'Nicosia',
LED: 'Saint Petersburg',
LHE: 'Lahore',
LHR: 'London',
LIM: 'Lima',
LIS: 'Lisbon',
LOS: 'Lagos',
LUX: 'Luxembourg City',
MAA: 'Chennai',
MAD: 'Madrid',
MAN: 'Manchester',
MBA: 'Mombasa',
MCI: 'Kansas City',
MCT: 'Muscat',
MDE: 'Medellín',
MEL: 'Melbourne',
MEM: 'Memphis',
MEX: 'Mexico City',
MFE: 'McAllen',
MFM: 'Macau ',
MGM: 'Montgomery',
MIA: 'Miami',
MLE: 'Malé',
MNL: 'Manila',
MPM: 'Maputo',
MRS: 'Marseille',
MRU: 'Port Louis',
MSP: 'Minneapolis',
MUC: 'Munich',
MXP: 'Milan',
NAG: 'Nagpur',
NBG: 'Ningbo',
NBO: 'Nairobi',
NOU: 'Noumea',
NRT: 'Tokyo',
OMA: 'Omaha',
ORD: 'Chicago',
ORF: 'Norfolk',
OSL: 'Oslo',
OTP: 'Bucharest',
PAP: 'Port',
PBH: 'Thimphu',
PBM: 'Paramaribo',
PDX: 'Portland',
PER: 'Perth',
PHL: 'Philadelphia',
PHX: 'Phoenix',
PIT: 'Pittsburgh',
PMO: 'Palermo',
PNH: 'Phnom Penh',
POA: 'Porto Alegre',
PRG: 'Prague',
PTY: 'Panama City',
QRO: 'Queretaro',
QWJ: 'Americana',
RAO: 'Ribeirao Preto',
RGN: 'Yangon',
RIC: 'Richmond',
RIX: 'Riga',
ROB: 'Monrovia',
RUH: 'Riyadh',
RUN: 'Réunion',
SAN: 'San Diego',
SCL: 'Santiago',
SEA: 'Seattle',
SGN: 'Ho Chi Minh City',
SHA: 'Shanghai',
SIN: 'Singapore',
SJC: 'San Jose',
SJO: 'San José',
SJP: 'São José do Rio Preto',
SKG: 'Thessaloniki',
SLC: 'Salt Lake City',
SMF: 'Sacramento',
SOD: 'Sorocaba',
SOF: 'Sofia',
SSA: 'Salvador',
STL: 'St. Louis',
SVX: 'Yekaterinburg',
SYD: 'Sydney',
SZV: 'Suzhou',
TBS: 'Tbilisi',
TGU: 'Tegucigalpa',
TLH: 'Tallahassee',
TLL: 'Tallinn',
TLV: 'Tel Aviv',
TNA: 'Jinan',
TNR: 'Antananarivo',
TPA: 'Tampa',
TPE: 'Taipei ',
TSN: 'Tianjin',
TUN: 'Tunis',
TXL: 'Berlin',
UIO: 'Quito',
ULN: 'Ulaanbaatar',
URT: 'Surat Thani',
VCP: 'Campinas',
VIE: 'Vienna',
VNO: 'Vilnius',
VTE: 'Vientiane',
WAW: 'Warsaw',
WUH: 'Wuhan',
WUX: 'Wuxi',
XIY: 'Xian',
YUL: 'Montréal',
YVR: 'Vancouver',
YWG: 'Winnipeg',
YXE: 'Saskatoon',
YYC: 'Calgary',
YYZ: 'Toronto',
ZAG: 'Zagreb',
ZDM: 'Ramallah ',
ZRH: 'Zürich',
}

View File

@ -3,9 +3,10 @@ workers_dev = true
account_id = ""
type = "webpack"
webpack_config = "node_modules/flareact/webpack"
compatibility_date = "2021-07-23"
[triggers]
crons = ["* * * * *"]
crons = ["*/2 * * * *"]
[site]
bucket = "out"

View File

@ -2874,9 +2874,9 @@ events@^3.0.0:
integrity sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg==
eventsource@^1.0.7:
version "1.0.7"
resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-1.0.7.tgz#8fbc72c93fcd34088090bc0a4e64f4b5cee6d8d0"
integrity sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==
version "1.1.1"
resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-1.1.1.tgz#4544a35a57d7120fba4fa4c86cb4023b2c09df2f"
integrity sha512-qV5ZC0h7jYIAOhArFJgSfdyz6rALJyb270714o7ZtNnw2WSJ+eexhKtE0O8LYPRsHZHf2osHKZBxGPvm3kPkCA==
dependencies:
original "^1.0.0"
@ -4609,9 +4609,9 @@ nan@^2.12.1:
integrity sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==
nanoid@^3.1.12, nanoid@^3.1.22:
version "3.1.23"
resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.23.tgz#f744086ce7c2bc47ee0a8472574d5c78e4183a81"
integrity sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==
version "3.3.4"
resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab"
integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==
nanomatch@^1.2.9:
version "1.2.13"
@ -5862,10 +5862,10 @@ postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.17, postcss@^7.0.2
source-map "^0.6.1"
supports-color "^6.1.0"
postcss@^8.1.6, postcss@^8.2.10:
version "8.2.10"
resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.2.10.tgz#ca7a042aa8aff494b334d0ff3e9e77079f6f702b"
integrity sha512-b/h7CPV7QEdrqIxtAf2j31U5ef05uBDuvoXv6L51Q4rcS1jdlXAVKJv+atCFdUXYl9dyTHGyoMzIepwowRJjFw==
postcss@^8.1.6, postcss@^8.2.13:
version "8.2.13"
resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.2.13.tgz#dbe043e26e3c068e45113b1ed6375d2d37e2129f"
integrity sha512-FCE5xLH+hjbzRdpbRb1IMCvPv9yZx2QnDarBEYSN0N0HYk+TcXsEhwdFcFb+SRWOKzKGErhIEbBK2ogyLdTtfQ==
dependencies:
colorette "^1.2.2"
nanoid "^3.1.22"
@ -7256,9 +7256,9 @@ urix@^0.1.0:
integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=
url-parse@^1.4.3:
version "1.5.1"
resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.1.tgz#d5fa9890af8a5e1f274a2c98376510f6425f6e3b"
integrity sha512-HOfCOUJt7iSYzEx/UqgtwKRMC6EU91NFhsCHMv9oM03VJcVo2Qrp8T8kI9D7amFf1cu+/3CEhgb3rF9zL7k85Q==
version "1.5.10"
resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1"
integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==
dependencies:
querystringify "^2.1.1"
requires-port "^1.0.0"