HTTP Cache¶
Collect metrics based on prometheus.
- class blacksmith.middleware._async.http_cache.AsyncAbstractCache¶
Abstract Redis Client.
- abstract async initialize() None ¶
Initialize the cache
- abstract async get(key: str) str | None ¶
Get a value from redis
- abstract async set(key: str, val: str, ex: timedelta) None ¶
Get a value from redis
- class blacksmith.middleware._async.http_cache.AsyncHTTPCacheMiddleware(cache: ~blacksmith.middleware._async.http_cache.AsyncAbstractCache, metrics: ~blacksmith.domain.model.middleware.prometheus.PrometheusMetrics | None = None, policy: ~blacksmith.domain.model.middleware.http_cache.AbstractCachePolicy = <blacksmith.domain.model.middleware.http_cache.CacheControlPolicy object>, serializer: type[~blacksmith.domain.model.middleware.http_cache.AbstractSerializer] = <class 'blacksmith.domain.model.middleware.http_cache.JsonSerializer'>)¶
Http Cache Middleware based on Cache-Control and redis.
- __init__(cache: ~blacksmith.middleware._async.http_cache.AsyncAbstractCache, metrics: ~blacksmith.domain.model.middleware.prometheus.PrometheusMetrics | None = None, policy: ~blacksmith.domain.model.middleware.http_cache.AbstractCachePolicy = <blacksmith.domain.model.middleware.http_cache.CacheControlPolicy object>, serializer: type[~blacksmith.domain.model.middleware.http_cache.AbstractSerializer] = <class 'blacksmith.domain.model.middleware.http_cache.JsonSerializer'>) None ¶
- async initialize() None ¶
Asynchronous initialization of a middleware.
For instance, used to initialize connection to storage backend.
- async cache_response(client_name: str, path: str, req: HTTPRequest, resp: HTTPResponse) bool ¶
- async get_from_cache(client_name: str, path: str, req: HTTPRequest) HTTPResponse | None ¶
- __call__(next: AsyncMiddleware) AsyncMiddleware ¶
Call self as a function.
- observe_cache_hit(client_name: str, method: str, path: str, status_code: int, latency: float) None ¶
- inc_cache_miss(client_name: str, cachable_state: Literal['uncachable_request', 'uncachable_response', 'cached'], method: Literal['HEAD', 'GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'OPTIONS'], path: str, status_code: int) None ¶