Skip to content

About

Experiment in consolidating status notifications from third parties.

Resources

Stars

1 star

Watchers

1 watching

Forks

Repository files navigation

semver

Python 3.12 poetry FastAPI

Ruff pre-commit

CI codecov

Snyk Security Dependencies Status

Status Tiles

Experiment in consolidating status notifications from third parties.

Challenge

In my work in infrastructure I often have to keep track of the status of many third party serivces. This can be especially painful in an outage situation where I much to check multiple dashboards to get a full picture of what may be happening.

Solution

This project is an experiment to consolidate multiple dashboards into a single page that can be easily checked.

This is also to exercise my skills in FastAPI and teach myself htmx.

Running

Using go-task you can run the following commands:

task: Show all the tasks available via the Taskfile.yaml

  • task compose:dev Start Docker Compose services in development mode
  • task compose:down Stop Docker Compose services
  • task compose:logs View Docker Compose logs
  • task compose:up Start Docker Compose services
  • task docker:build Build the production Docker image for running the application
  • task docker:build-test Build the testing Docker image for unit testing
  • task docker:run Run Docker container
  • task docker:test Run unit tests inside the testing Docker container

Once the container is running, you can view the application at http://localhost:8000

Configuring

  • Copy .env.example to .env and edit any values as needed

  • config.yaml lists the services to be checked. For example:

services:
  - name: "GitHub Status"
    type: "rss"
    config:
      name: "GitHub"
      feed_url: "https://www.githubstatus.com/history.rss"
      timeout: 30
    polling_interval: 300

At the moment, only RSS is supported

Diagram of stevedore plugins

flowchart TB
    subgraph Entry_Points
        EP[Entry Points Registry]
        NS[status-tiles.plugins Namespace]
        EP -->|Defines| NS
    end

    subgraph Plugin_Loading
        DM[Driver Manager]
        BP[BaseMonitor Plugin Interface]
        PC[Plugin Contract]
        CH["check() Method"]
        VC["validate_config() Method"]
        DM -->|Loads| BP
        BP -->|Validates| PC
        PC -->|Must Implement| CH
        PC -->|Must Implement| VC
    end

    subgraph Available_Plugins
        HTTP[HTTP Monitor]
        TCP[TCP Monitor]
        RSS[RSS Monitor]
        BP -->|Instantiates| HTTP
        BP -->|Instantiates| TCP
        BP -->|Instantiates| RSS
    end

    subgraph Monitor_Creation
        CR[Create Monitor Request]
        MT[Monitor Type]
        MI[Monitor Instance]
        CR -->|Specifies| MT
        MT -->|Passed to| DM
        DM -->|Creates Instance| MI
    end

    subgraph Execution
        SCH[Scheduler]
        SR[Status Result]
        SCH -->|Triggers| MI
        MI -->|Executes| CH
        CH -->|Returns| SR
    end

    subgraph Configuration
        PY[pyproject.toml]
        CFG[Monitor Config]
        PY -->|Registers| EP
        CFG -->|Validated by| VC
    end
Loading

About

Experiment in consolidating status notifications from third parties.

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages