1
0
mirror of https://github.com/tormachris/cf-workers-status-page.git synced 2024-09-21 13:13:05 +02:00
cf-workers-status-page/README.md

107 lines
5.5 KiB
Markdown
Raw Normal View History

2020-11-13 23:00:53 +01:00
# Cloudflare Worker - Status Page
2020-11-14 00:45:26 +01:00
Monitor your websites, showcase status including daily history, and get Slack notification whenever your website status changes. Using **Cloudflare Workers**, **CRON Triggers,** and **KV storage**. Check [my status page](https://status-page.eidam.dev) out! 🚀
2020-11-14 00:45:26 +01:00
![Status Page](.gitbook/assets/status_page_screenshot.png)
![Slack notifications](.gitbook/assets/slack_screenshot.png)
## Pre-requisites
2020-11-14 00:45:26 +01:00
You'll need a [Cloudflare Workers account](https://dash.cloudflare.com/sign-up/workers) with
* A workers domain set up
* The Workers Bundled subscription \($5/mo\)
* [It works with Workers Free!](https://blog.cloudflare.com/workers-kv-free-tier/) Check [more info](#workers-kv-free-tier) on how to run on Workers Free.
2020-11-14 00:45:26 +01:00
* Some websites/APIs to watch 🙂
Also, prepare the following secrets
* Cloudflare API token with `Edit Cloudflare Workers` permissions
* Slack incoming webhook \(optional\)
## Getting started
2020-11-14 00:45:26 +01:00
You can either deploy with **Cloudflare Deploy Button** using GitHub Actions or deploy on your own.
### Deploy with Cloudflare Deploy Button
2020-11-14 00:45:26 +01:00
[![Deploy to Cloudflare Workers](https://camo.githubusercontent.com/1f3d0b4d44a2c3f12c78bd02bae907169430e04d728006db9f97a4befa64c886/68747470733a2f2f6465706c6f792e776f726b6572732e636c6f7564666c6172652e636f6d2f627574746f6e3f706169643d74727565)](https://deploy.workers.cloudflare.com/?url=https://github.com/eidam/cf-workers-status-page)
2020-11-14 00:45:26 +01:00
1. Click the button and follow the instructions, you should end up with a clone of this repository
2. Navigate to your new **GitHub repository > Settings > Secrets** and add the following secrets:
```yaml
2020-11-14 00:45:26 +01:00
- Name: CF_API_TOKEN (should be added automatically)
- Name: CF_ACCOUNT_ID (should be added automatically)
- Name: SECRET_SLACK_WEBHOOK_URL (optional)
2020-11-14 00:45:26 +01:00
- Value: your-slack-webhook-url
```
3. Navigate to the **Actions** settings in your repository and enable them
4. Edit [config.yaml](./config.yaml) to adjust configuration and list all of your websites/APIs you want to monitor
2020-11-14 00:45:26 +01:00
```yaml
2020-11-14 00:45:26 +01:00
settings:
title: 'Status Page'
url: 'https://status-page.eidam.dev' # used for Slack messages
2020-11-14 00:45:26 +01:00
logo: logo-192x192.png # image in ./public/ folder
daysInHistogram: 90 # number of days you want to display in histogram
# configurable texts across the status page
allmonitorsOperational: 'All Systems Operational'
notAllmonitorsOperational: 'Not All Systems Operational'
monitorLabelOperational: 'Operational'
monitorLabelNotOperational: 'Not Operational'
monitorLabelNoData: 'No data'
dayInHistogramNoData: 'No data'
dayInHistogramOperational: 'All good'
dayInHistogramNotOperational: 'Some checks failed'
2020-11-14 00:45:26 +01:00
# list of monitors
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
2020-11-14 00:45:26 +01:00
method: GET # default=GET
expectStatus: 200 # operational status, default=200
2020-11-14 00:45:26 +01:00
followRedirect: false # should fetch follow redirects, default=false
```
5. Push to `main` branch to trigger the deployment
6. 🎉
7. _\(optional\)_ Go to [Cloudflare Workers settings](https://dash.cloudflare.com/?to=/workers) and assign custom domain/route
2020-11-14 00:45:26 +01:00
* e.g. `status-page.eidam.dev/*` _\(make sure you include `/*` as the Worker also serve static files\)_
8. _\(optional\)_ Edit [wrangler.toml](./wrangler.toml) to adjust Worker settings or CRON Trigger schedule, especially if you are on [Workers Free plan](#workers-kv-free-tier)
2020-11-14 00:45:26 +01:00
### Deploy on your own
2020-11-14 00:45:26 +01:00
You can clone the repository yourself and use Wrangler CLI to develop/deploy, extra list of things you need to take care of:
* create KV namespace and add the `KV_STATUS_PAGE` binding to [wrangler.toml](./wrangler.toml)
2020-11-14 00:45:26 +01:00
* create Worker secrets _\(optional\)_
* `SECRET_SLACK_WEBHOOK_URL`
## Workers KV free tier
The Workers Free plan includes limited KV usage, but the quota is sufficient for 2-minute checks only
* Change the CRON trigger to 2 minutes interval (`crons = ["*/2 * * * *"]`) in [wrangler.toml](./wrangler.toml)
## Known issues
2020-11-14 00:45:26 +01:00
* **Max 25 monitors to watch in case you are using Slack notifications**, due to the limit of subrequests Cloudflare Worker can make \(50\).
The plan is to support up to 49 by sending only one Slack notification per scheduled run.
* **KV replication lag** - You might get Slack notification instantly, however it may take couple of more seconds to see the change on your status page as [Cron Triggers are usually running on underutilized quiet hours machines](https://blog.cloudflare.com/introducing-cron-triggers-for-cloudflare-workers/#how-are-you-able-to-offer-this-feature-at-no-additional-cost).
2020-11-14 00:45:26 +01:00
* **Initial delay (no data)** - It takes couple of minutes to schedule and run CRON Triggers for the first time
* **Slack message for monitor just removed from the config** - It takes a couple of minutes to schedule new version of CRON Triggers, so older version of the configuration might be scheduled after deployment/gc - just ignore it or re-run the latest Github Action after a couple of minutes again.
## Future plans
Stay tuned for more features coming in, like leveraging the fact that CRON instances are scheduled around the world during the day
so we can monitor the response times. However, we will most probably wait for the [Durable Objects](https://blog.cloudflare.com/introducing-workers-durable-objects/) to be in open beta
as they are better fit to reliably store such info.