Taegis SDK for Python のミドルウェア🔗
Taegis SDK for Python は、トランスポートとしてAIOHTTPを使用しています。すべてのHTTPコールに対してミドルウェアを挿入できます。ミドルウェアは、開始時のWebsocketsリクエストにはラップされますが、メッセージにはラップされません。
ミドルウェアは、APIコールにデフォルトで割り当てることも、コンテキストマネージャで上書きすることもできます。ミドルウェアを上書きすると、ミドルウェアのフロー全体が置き換えられます。
from taegis_sdk_python import GraphQLService
from taegis_sdk_python.middlewares import retry_middleware, headers_logging_middleware
# Assign defaults
service = GraphQLService(middlewares=(retry_middleware,))
# Override
with service(middlewares=(headers_logging_middleware, retry_middleware)):
results = service.subjects.query.current_subject()
例🔗
Taegis SDK for Python には、headers_logging_middleware と retry_middleware の2つのミドルウェア例が用意されています。
headers_logging_middleware は、リクエストおよびレスポンスヘッダーをデバッグログレベルで記録します。SDKによってキャッシュされたアクセストークンは、<redacted> という文字列に置き換えられます。
retry_middleware は、REQUEST_TIMEOUT (408)、INTERNAL_SERVER_ERROR (500)、BAD_GATEWAY (502)、SERVICE_UNAVAILABLE (503)、GATEWAY_TIMEOUT (504) に対して指数バックオフでリトライを行います。TOO_MANY_REQUESTS (429) が発生した場合は、"Retry-After" ヘッダーの値がバックオフタイマーとして使用されます。
SDKは、あきらめるまでの最大秒数またはコール回数を設定できます。デフォルトは10秒で、コール回数の上限はありません。
from taegis_sdk_python.config import write_to_config
write_to_config("backoff.retry", "max_time", 60) # specifies the maximum amount of total time in seconds that can elapse before giving up
write_to_config("backoff.retry", "max_tries", 5) # specifies the maximum number of calls to make to the target function before giving up