All Projects → eidam → Cf Workers Status Page

eidam / Cf Workers Status Page

Licence: mit
Monitor your websites, showcase status including daily history, and get Slack/Telegram/Discord notification whenever your website status changes. Using Cloudflare Workers, CRON Triggers, and KV storage.

Programming Languages

javascript
184084 projects - #8 most used programming language

Projects that are alternatives of or similar to Cf Workers Status Page

Dogo
Monitoring changes in the source file and automatically compile and run (restart).
Stars: ✭ 237 (-4.05%)
Mutual labels:  monitoring
Carbonapi
Implementation of graphite API (graphite-web) in golang
Stars: ✭ 243 (-1.62%)
Mutual labels:  monitoring
Prometheus rabbitmq exporter
Prometheus.io exporter as a RabbitMQ Managment Plugin plugin
Stars: ✭ 248 (+0.4%)
Mutual labels:  monitoring
Tacticalrmm
A remote monitoring & management tool, built with Django, Vue and Go.
Stars: ✭ 231 (-6.48%)
Mutual labels:  monitoring
Rabbitmq Zabbix
Zabbix RabbitMQ Configuration
Stars: ✭ 241 (-2.43%)
Mutual labels:  monitoring
Beam Dashboards
BEAM ❤️ Prometheus ❤️ Grafana
Stars: ✭ 244 (-1.21%)
Mutual labels:  monitoring
Github Exporter
Prometheus exporter for github metrics
Stars: ✭ 231 (-6.48%)
Mutual labels:  monitoring
Bot
A super Awesome Discord bot
Stars: ✭ 247 (+0%)
Mutual labels:  discord
Disco
Discord Python library for people that like to dance
Stars: ✭ 242 (-2.02%)
Mutual labels:  discord
Hunterpie
A complete, modern and clean overlay with Discord Rich Presence integration for Monster Hunter: World.
Stars: ✭ 246 (-0.4%)
Mutual labels:  discord
Quarrel
A UWP discord client
Stars: ✭ 238 (-3.64%)
Mutual labels:  discord
Puppeteer Examples
Puppeteer example scripts for running Headless Chrome from Node.
Stars: ✭ 2,781 (+1025.91%)
Mutual labels:  monitoring
Kubernetes Zabbix
📦 Kubernetes Zabbix/Grafana cluster (bare metal, Google Computer Engine - GCE, Google Container Engine - GKE)
Stars: ✭ 244 (-1.21%)
Mutual labels:  monitoring
Doga
📈 HTTP log monitoring console for Humans
Stars: ✭ 238 (-3.64%)
Mutual labels:  monitoring
Opencensus Node
A stats collection and distributed tracing framework
Stars: ✭ 249 (+0.81%)
Mutual labels:  monitoring
Pow assent
Multi-provider authentication for your Pow enabled app
Stars: ✭ 236 (-4.45%)
Mutual labels:  discord
Hackathon Starter Kit
A Node-Typescript/Express Boilerplate with Authentication(Local, Github, Facebook, Twitter, Google, Dropbox, LinkedIn, Discord, Slack), Authorization, and CRUD functionality + PWA Support!
Stars: ✭ 242 (-2.02%)
Mutual labels:  discord
Jetbrains Discord Integration
Discord rich presence integration for all JetBrains IDEs
Stars: ✭ 247 (+0%)
Mutual labels:  discord
Example Prometheus Nodejs
Prometheus monitoring example with Node.js
Stars: ✭ 249 (+0.81%)
Mutual labels:  monitoring
Awesome Consul
A list of awesome consul projects, libraries
Stars: ✭ 245 (-0.81%)
Mutual labels:  monitoring

Cloudflare Worker - Status Page

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 out! 🚀

Status Page

Slack notifications

Pre-requisites

You'll need a Cloudflare Workers account with

Also, prepare the following secrets

  • Cloudflare API token with Edit Cloudflare Workers permissions
  • Slack incoming webhook (optional)
  • Discord incoming webhook (optional)

Getting started

You can either deploy with Cloudflare Deploy Button using GitHub Actions or deploy on your own.

Deploy with Cloudflare Deploy Button

Deploy to Cloudflare Workers

  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:

    - Name: CF_API_TOKEN (should be added automatically)
    
    - Name: CF_ACCOUNT_ID (should be added automatically)
    
    - Name: SECRET_SLACK_WEBHOOK_URL (optional)
    - Value: your-slack-webhook-url
    
    - Name: SECRET_DISCORD_WEBHOOK_URL (optional)
    - Value: your-discord-webhook-url
    
  3. Navigate to the Actions settings in your repository and enable them

  4. Edit config.yaml to adjust configuration and list all of your websites/APIs you want to monitor

    settings:
      title: 'Status Page'
      url: 'https://status-page.eidam.dev' # used for Slack & Discord messages
      logo: logo-192x192.png # image in ./public/ folder
      daysInHistogram: 90 # number of days you want to display in histogram
      collectResponseTimes: false # experimental feature, enable only for <5 monitors or on paid plans
    
      # 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'
    
    # 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
        method: GET # default=GET
        expectStatus: 200 # operational status, default=200
        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 and assign custom domain/route

    • e.g. status-page.eidam.dev/* (make sure you include /* as the Worker also serve static files)
  8. (optional) Edit wrangler.toml to adjust Worker settings or CRON Trigger schedule, especially if you are on Workers Free plan

Telegram notifications

To enable telegram notifications, you'll need to take a few additional steps.

  1. Create a new Bot
  2. Set the api token you received when creating the bot as content of the SECRET_TELEGRAM_API_TOKEN secret in your github repository.
  3. Send a message to the bot from the telegram account which should receive the alerts (Something more than /start)
  4. Get the chat id with curl https://api.telegram.org/bot<YOUR TELEGRAM API TOKEN>/getUpdates | jq '.result[0] .message .chat .id'
  5. Set the retrieved chat id in the SECRET_TELEGRAM_CHAT_ID secret variable
  6. Redeploy the status page using the github action

Deploy on your own

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
  • create Worker secrets (optional)
    • SECRET_SLACK_WEBHOOK_URL
    • SECRET_DISCORD_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

Known issues

  • 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.

  • Initial delay (no data) - It takes couple of minutes to schedule and run CRON Triggers for the first time

Future plans

WIP - Support for Durable Objects - Cloudflare's product for low-latency coordination and consistent storage for the Workers platform. There is a working prototype, however, we are waiting for at least open beta.

There is also a managed version of this project, currently in beta. Feel free to check it out https://statusflare.com (https://twitter.com/statusflare_com).

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].