Skip to content

chelnak/status-cake-exporter

Repository files navigation

Status Cake Exporter

status-cake-exporter

🚨 Container images have moved to ghcr.io/chelnak/status-cake-exporter

Status Cake Exporter is a Prometheus exporter for StatusCake.

Metrics are exposed on port 8000 when using the provided examples/manifest.yml](examples/manifest.yml) in Kubernetes, e.g.

http://status-cake-exporter.default.svc:8000

Requirements

  • Python 3.10+
  • Docker
  • Kubernetes (optional)
  • Helm 3 (optional)

Usage

Setting Required Default
HOST No https://api.statuscake.com/v1
API_KEY Yes Null
TAGS No Null
LOG_LEVEL No info
PORT No 8000
ITEMS_PER_PAGE No 25

Docker

The following will expose the exporter at localhost:8000:

export API_KEY=xxxxxxxx
docker run -d -p 8000:8000 --env API_KEY ghcr.io/chelnak/status-cake-exporter:latest

Kubernetes

To get up and running quickly, use examples/manifest.yml as an example. You will need to create a secret named status-cake-api-token containing your API_KEY first.

Otherwise, you can use the Helm Chart provided in chart/status-cake-exporter.

Grafana

To get up and running quickly, use examples/grafana-example.json as an example.

Terminal

Usage: status-cake-exporter [OPTIONS]

Options:
  --host TEXT                     The host of the StatusCake API.  [env var:
                                  HOST; default:
                                  https://api.statuscake.com/v1]
  --api-key TEXT                  API Key for the account.  [env var: API_KEY;
                                  required]
  --tags TEXT                     A comma separated list of tags used to
                                  filter tests returned from the api  [env
                                  var: TAGS]
  --log-level TEXT                The log level of the application. Value can
                                  be one of {debug, info, warn, error}  [env
                                  var: LOG_LEVEL; default: info]
  --port INTEGER                  [env var: PORT; default: 8000]
  --enable-perf-metrics / --no-enable-perf-metrics
                                  Enable the collection of test performance
                                  times and expose as a metric. Warning - this
                                  can cause additional usage of the statuscake
                                  API and slow down runtime  [env var:
                                  ENABLE_PERF_METRICS; default: no-enable-
                                  perf-metrics]
  --items-per-page TEXT           The number of items that the api will return
                                  on a page. This is a global option.  [env
                                  var: ITEMS_PER_PAGE; default: 25]
  --help                          Show this message and exit.

Metrics

Name Type Description
status_cake_test_info Gauge A basic listing of the tests under the current account.
status_cake_test_status Gauge Current test status (1 is up, 0 is down)
status_cake_test_uptime_percent Gauge Tests and their uptime percentage
status_cake_test_performance Gauge Tests and their performance percentage

Prometheus

Prometheus config needs to be updated to see the new exported. Use the following scrape config as an example:

scrape_configs:
    - job_name: status-cake-exporter
    honor_timestamps: true
    scrape_interval: 10m
    scrape_timeout: 1m
    metrics_path: /
    scheme: http
    static_configs:
    - targets:
        - status-cake-exporter.default.svc:8000

Grafana

Data collected by Prometheus can be easily surfaced in Grafana.

Using the Statusmap panel by flant you can create a basic status visualization based on uptime percentage:

grafana

PromQL

status_cake_test_info * on(test_id) group_right(test_name) status_cake_test_uptime_percent

Development

Tilt

This repository uses Tilt for rapid development on Kubernetes.

To use this, run:

cd chart/status-cake-exporter
tilt up

Tilt will reload your environment when it detects changes to your code.

Note: You will need to provide valid credentials for StatusCake in your Tiltfile for this to work.

Docker compose

You can use the provided docker-compose.yml to run the exporter locally.

docker-compose watch

This will start the exporter along with a mocked statuscake api server.