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.5.tar.gz (11.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

sag_py_fastapi_health-0.3.5-py3-none-any.whl (8.8 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: sag_py_fastapi_health-0.3.5.tar.gz
  • Upload date:
  • Size: 11.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for sag_py_fastapi_health-0.3.5.tar.gz
Algorithm Hash digest
SHA256 ef2b9236bcf4e5877f41b76150be0c3e52a731bf5e73ecc3ec21538753f1c70d
MD5 ed9a67e5d1c3e733d710ee16e81cb3fb
BLAKE2b-256 7f3f715566fb3f6088eb57871c29b4a6ba727ee27a0b7caff3fc96f0bef4359f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for sag_py_fastapi_health-0.3.5-py3-none-any.whl
Algorithm Hash digest
SHA256 e3168994fa204d0767f3480ad52a96bfcfca020b0a77c9b3da088b6725533f47
MD5 dbda2ebee370dfbbafc319feb8ab8d5d
BLAKE2b-256 627ee997c52b54c316bd97d4c8555b35606f8662f57f9ac4a2429282afcbde3f

See more details on using hashes here.

Supported by

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