Skip to content

Latest commit

 

History

History
77 lines (59 loc) · 2.16 KB

File metadata and controls

77 lines (59 loc) · 2.16 KB

Integrando ao Sentry

Solicite um DSN para um dos administradores do Sentry.

  • Apps em FASTAPI devem ser criados como aplicação em ASGI. Não há uma opção nativa para o framework.

As notificações para o slack do projeto devem apontar para os canais:

  • #sentry-warnings-v1 - Para alertar o pessoal relacionado aos projetos v1;
  • #sentry-warnings-v2 - Para alertar o pessoal relacionado aos projetos v2.

E ativar as tags:

environment,user,release,runtime,level

Como integrar o Sentry à sua aplicação:

FastAPI

Adicione o Sentry ao arquivo de dependências padrão do projeto (procure sempre pela última versão):

sentry_sdk==1.12.1

Crie um arquivo version.py no mesmo diretório de seu arquivo main:

from io import open

read_version = lambda filename: open(filename, "r", encoding="utf-8").read()

""" It defines the project current version """
__version__ = read_version(".version").strip()

if __name__ == "__main__":
    print(__version__)

Adicione as importações no cabeçalho do arquivo main.py:

from sentry_sdk.integrations.starlette import StarletteIntegration
from sentry_sdk.integrations.fastapi import FastApiIntegration

import sentry_sdk

from app.version import __version__

Inicialize o sdk informando o dns (SENTRY_URL) e um ambiente (production,development, homolog, etc.). Configure as variáveis de ambiente de modo que SENTRY_URL e SENTRY_ENVIRONMENT sejam vazios quando em ambiente local.

sentry_sdk.init(
    SENTRY_URL,
    environment=SENTRY_ENVIRONMENT,
    send_default_pii=True,
    sample_rate=1.0,
    traces_sample_rate=1,
    release=__version__,
    integrations=[StarletteIntegration(), FastApiIntegration()],
)

Adicione o seguinte trecho ao final do arquivo main:

@app.middleware("http")
async def sentry_exception(request: Request, call_next):
    try:
        response = await call_next(request)
        return response
    except Exception as ex:
        with sentry_sdk.push_scope() as scope:
            scope.set_context("request", request)
            scope.user = {"ip_address": request.client.host}
            sentry_sdk.capture_exception(ex)
        raise