Skip to main content

A library for fastapi health checks

Project description

sag_py_fastapi_health

Maintainability Coverage Status Known Vulnerabilities

Add health check endpoints to fastapi (similar to the ones dotnet core has)

What it does

  • Adds one or multiple health endpoint
  • Configurable output format (json or prtg)
  • Possibility to add checks (own and pre shipped)
  • Pre-Shipped tests for http get requests including basic auth and directory existence/readability/writability

Installation

pip install sag-py-fastapi-health

How to use

Sample usage with existing checks

from sag_py_fastapi_health.checks.http import HttpCheck
from sag_py_fastapi_health.checks.storage import StorageExistsCheck, StorageReadableCheck
from sag_py_fastapi_health.formatter import DefaultResponseFormatter, PrtgResponseFormatter
from sag_py_fastapi_health.models import Probe
from sag_py_fastapi_health.router import HealthcheckRouter

from config import config

router = HealthcheckRouter(
    Probe(
        name="health",
        response_formatter=DefaultResponseFormatter(),
        checks=[
            StorageExistsCheck("/opt/app/data", name="my_dir_exists"),
            StorageReadableCheck("/opt/app/data", name="my_dir_is_readable"),
            HttpCheck("https://localhost/auth", name="auth_available", timeout=5),
        ],
    ),
    Probe(
        name="health-prtg",
        response_formatter=PrtgResponseFormatter(),
        checks=[
            StorageExistsCheck("/opt/app/data", name="my_dir_exists"),
            StorageReadableCheck("/opt/app/data", name="my_dir_is_readable"),
            HttpCheck("https://localhost/auth", name="auth_available", timeout=5),
        ],
    ),
)

Write your own check

from sag_py_fastapi_health.models import CheckResult

class TestCheck(Check):
    def __init__(self, name: str = "check") -> None:
        self._name: str = name

    async def __call__(self) -> CheckResult:
        is_healthy: bool = a_custom_check()
        description: str = "A description of the status or a error message"

        return CheckResult(
            name=self._name,
            status="Healthy" if is_healthy else "Unhealthy",
            description=description,
        )

The description contains something like "Directory ... was accessable" or "Service is running" if everything is ok. If there was an error, you can add the error message/exception message there.

How to configure in prtg

use the sensor "HTTP data advanced" (https://www.paessler.com/manuals/prtg/http_data_advanced_sensor) and configure to your prtg health endpoint (like in the example above ([URL_TO_YOUR_SERVICE]/health/health-prtg)

How to start developing

With vscode

Just install vscode with dev containers extension. All required extensions and configurations are prepared automatically.

With pycharm

  • Install latest pycharm
  • Install pycharm plugin BlackConnect
  • Install pycharm plugin Mypy
  • Configure the python interpreter/venv
  • pip install requirements-dev.txt
  • pip install black[d]
  • Ctl+Alt+S => Check Tools => BlackConnect => Trigger when saving changed files
  • Ctl+Alt+S => Check Tools => BlackConnect => Trigger on code reformat
  • Ctl+Alt+S => Click Tools => BlackConnect => "Load from pyproject.yaml" (ensure line length is 120)
  • Ctl+Alt+S => Click Tools => BlackConnect => Configure path to the blackd.exe at the "local instance" config (e.g. C:\Python310\Scripts\blackd.exe)
  • Ctl+Alt+S => Click Tools => Actions on save => Reformat code
  • Restart pycharm

How to publish

  • Update the version in setup.py and commit your change
  • Create a tag with the same version number
  • Let github do the rest

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

sag_py_fastapi_health-0.3.0.tar.gz (11.1 kB view details)

Uploaded Source

Built Distribution

sag_py_fastapi_health-0.3.0-py3-none-any.whl (8.7 kB view details)

Uploaded Python 3

File details

Details for the file sag_py_fastapi_health-0.3.0.tar.gz.

File metadata

  • Download URL: sag_py_fastapi_health-0.3.0.tar.gz
  • Upload date:
  • Size: 11.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.12.6

File hashes

Hashes for sag_py_fastapi_health-0.3.0.tar.gz
Algorithm Hash digest
SHA256 49f6f87fb5a5607dec943524cd7f21592b1d15f29593f7956c9f1d93c8f6f96e
MD5 c6e0369a2a2064848c06ab39d906b4ef
BLAKE2b-256 4d9946fab60c891c327ae5917cde3444f3f8a7a58f3da418610babea6e1f6579

See more details on using hashes here.

File details

Details for the file sag_py_fastapi_health-0.3.0-py3-none-any.whl.

File metadata

File hashes

Hashes for sag_py_fastapi_health-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 c2c7e4c596c2b8e16e046e9ed492f89457cc6e5024bcaf1114d6e2b4ab0c5205
MD5 e8db27c261107313f2f9a221043b1b4b
BLAKE2b-256 220e231f94d20ebaa6ef81c5d41097080820a0bcbdde600b17a14286c8422dfd

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page