1. Ludia
  2. Untitled project
  3. pyramid_health



Simple healthcheck endpoint for Pyramid, with maintenance mode and application checks.


Install using setuptools, e.g. (within a virtualenv):

$ pip install pyramid_health


Once pyramid_health is installed, you must use the config.include mechanism to include it into your Pyramid project's configuration. In your Pyramid project's __init__.py:

config = Configurator(.....)

Alternately you can use the pyramid.includes configuration value in your .ini file:

pyramid.includes = pyramid_health


Pyramid_health configuration (values are defaults):

healthcheck.url = /health

healthcheck.disablefile = /tmp/maintenance  # touch this file to activate

healthcheck.maintenance_code = 299  # Code to return in maintenance mode

healthcheck.failure_code = 503  # Code to return when one or more checks fail


When your application is healthy, pyramid_health endpoint returns 200 OK. When you enable the maintenance mode, the endpoint returns 299 MAINTENANCE and logs Health response: MAINTENANCE. If the request to the healthcheck endpoint asks for the application checks, and one application check or more return an error, the endpoint returns 503 ERROR and logs Health response: ERROR (<all-check-results>).

Application checks

The application checks are routines in your application that subscribe to pyramid_health.HealthCheckEvent event, execute a specific health check and report the outcome as a status (OK or ERROR) and an optional message.

The application checks are not called unless you explicitely request it with the request param checks set to true or all (like: GET /health?checks=all)

To add an application check in your application:

from pyramid.events import subscriber
from pyramid_health import HealthCheckEvent

def db_check(event):
        event.report(name='db', status='NOK', message='ping failed')
        event.report(name='db', status='OK')


  • You may or may not report succeeding checks

Maintenance mode

In maintenance mode, the healthcheck endpoint's response is changed to inform the HTTP client that this backend is unavailable. Typically a loadbalancer polling the backends would stop sending traffic to a backend in maintenance mode.

The response status code is 299 MAINTENANCE by default. You can change it with healthcheck.maintenance_code.