Middlewares#

Blacksmith middleware can be configured using the settings BLACKSMITH_CLIENT.

BLACKSMITH_CLIENT = {
   "default": {
      ...,
      "middlewares": [
         # middlewares goes here.
      ],
   },
}

Note

When using the synchronous client, middleware prefixed with Sync must be used, otherwise, the Async version has to be configured.

Prometheus Middleware#

BLACKSMITH_CLIENT = {
   "default": {
      ...,
      "middlewares": [
         "dj_blacksmith.SyncPrometheusMiddlewareBuilder",
         # Async users use the async version
         # "dj_blacksmith.AsyncPrometheusMiddlewareBuilder",
      ],
      # Optional settings with default values
      # "metrics": {
      #    "buckets": [0.05 * 2 ** x for x in range(10)],
      #    "hit_cache_buckets": [0.005 * 2 ** x for x in range(10)],
      # },
   },
}

The buckets setting is used to configure the histogram of http requests, and the hit_cache_buckets is used to configure the histogram for the http requests response comming from the HTTP Cache Middleware.

Circuit Breaker Middleware#

BLACKSMITH_CLIENT = {
   "default": {
      ...,
      "middlewares": [
         "dj_blacksmith.SyncCircuitBreakerMiddlewareBuilder",
         # Async users use the async version
         # "dj_blacksmith.AsyncCircuitBreakerMiddlewareBuilder",
      ],
      # Optional settings with default values
      # "circuit_breaker": {
      #    "threshold": 5,
      #    "ttl": 30,
      # }
   },
}

Collect Circuit Breaker in prometheus#

To properly works together, middleware must be added in this order:

BLACKSMITH_CLIENT = {
   "default": {
      ...,
      "middlewares": [
         "dj_blacksmith.SyncPrometheusMiddlewareBuilder",
         "dj_blacksmith.SyncCircuitBreakerMiddlewareBuilder",
         # Async users use the async version
         # "dj_blacksmith.AsyncPrometheusMiddlewareBuilder",
         # "dj_blacksmith.AsyncCircuitBreakerMiddlewareBuilder",
      ],
   },
}

HTTP Cache Middleware#

BLACKSMITH_CLIENT = {
   "default": {
      ...,
      "middlewares": [
         # middlewares goes here.
         "dj_blacksmith.SyncHTTPCacheMiddlewareBuilder",
         # Async users use the async version
         # "dj_blacksmith.AsyncHTTPCacheMiddlewareBuilder",
      ],
      "http_cache": {
         "redis": "redis://host.example.net/42",
         # Optional settings with default values
         # "policy": "blacksmith.CacheControlPolicy",
         # "serializer": "blacksmith.JsonSerializer",
      }
   },
}