Skip to content

Commit 229c445

Browse files
authored
Merge pull request #13 from tolstoy92/feat/failed-status-codes-in-sentry-init
feat(sentry): failed_request_status_codes
2 parents edc4e37 + a9031f3 commit 229c445

3 files changed

Lines changed: 23 additions & 5 deletions

File tree

README.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -240,7 +240,9 @@ in the `app_slug@version` format.
240240
Another Sentry configuration option is to use
241241
`fastapi_structlog.sentry.setup_sentry`. However, in this case,
242242
you must explicitly pass an instance of the settings
243-
`fastapi_structlog.sentry.SentrySettings` and the `release` parameter.
243+
`fastapi_structlog.sentry.SentrySettings` and the `release` parameter. In addition,
244+
you can pass the `failed_request_status_codes` (status codes should be reported to Sentry)
245+
and `service_integration` (additional Sentry integrations) parameters.
244246

245247
The Sentry configuration parameters are as follows:
246248

docs_src/example_3.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,11 @@ def error() -> str:
5151

5252
def main() -> None:
5353
setup_logger(settings.log)
54-
setup_sentry(settings.sentry, release='example_api@1.0')
54+
setup_sentry(
55+
settings.sentry,
56+
release='example_api@1.0',
57+
failed_request_status_codes=[range(400, 405), 422, range(500, 599)],
58+
)
5559

5660
uvicorn.run(
5761
app,

fastapi_structlog/sentry/initialization.py

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
"""Sentry configuration module."""
22
import logging
3-
from typing import Optional
3+
from typing import Optional, Union
44

55
import sentry_sdk
66
from sentry_sdk.integrations import Integration
@@ -19,6 +19,7 @@ def setup_sentry(
1919
app_slug: Optional[str] = None,
2020
version: Optional[str] = None,
2121
service_integration: Optional[Integration] = None,
22+
failed_request_status_codes: Optional[list[Union[int, range]]] = None,
2223
) -> None:
2324
"""Configuration of Sentry settings.
2425
@@ -29,6 +30,10 @@ def setup_sentry(
2930
version (Optional[str]): Version. Defaults to None.
3031
service_integration (Optional[Integration]): Integration for inter-service
3132
interaction. Defaults to None.
33+
failed_request_status_codes (Optional[list[Union[int, range]]]): A list of integers or
34+
containers (objects that allow membership checks via in) of integers that will determine
35+
which status codes should be reported to Sentry.
36+
See https://docs.sentry.io/platforms/python/integrations/starlette/
3237
"""
3338
release = release or f'{app_slug}@{version}'
3439

@@ -39,9 +44,16 @@ def setup_sentry(
3944
)
4045
return
4146

47+
failed_request_status_codes = failed_request_status_codes or [range(500, 599)]
4248
integrations: list[Integration] = [
43-
StarletteIntegration(transaction_style='url'),
44-
FastApiIntegration(transaction_style='url'),
49+
StarletteIntegration(
50+
transaction_style='url',
51+
failed_request_status_codes=failed_request_status_codes,
52+
),
53+
FastApiIntegration(
54+
transaction_style='url',
55+
failed_request_status_codes=failed_request_status_codes,
56+
),
4557
]
4658
if settings_.log_integration:
4759
integrations.append(LoggingIntegration(

0 commit comments

Comments
 (0)