Sintaxe
newrelic.agent.asgi_application(application=None, name=None, group=None, framework=None)
Monitor transações da web marcando o ponto de entrada do aplicativo ASGI.
Descrição
asgi_application
é um decorador Python usado para monitor transações da web instrumentando o ponto de entrada da aplicação ASGI. O agente Python suporta automaticamente a maioria das estruturas e servidores que usam ASGI. Se sua framework ou servidor web não for compatível, talvez seja necessário usar esta API como parte do processo de integração avançada.
Se não for possível usar o decorador asgi_application
, você poderá usar um destes outros formatos de chamada:
The wrapper:
A chamada do wrapper é
ASGIApplicationWrapper
. É possível usar o wrapper em mais de um local para componentes distintos do aplicativo ASGI que podem estar empilhados. Nesse caso, o primeiro wrapper encontrado marca o início da transação e o agente determina o aplicativo de destino com base nesse primeiro wrapper (e ignora os subsequentes).The path-based wrapper:
A chamada do wrapper baseada em caminho é
wrap_asgi_application
. Use isto se não for possível fazer referência ao objeto ASGI como uma variável no escopo de instrumentação. Isso leva o mesmo parâmetro do decorador com parâmetros adicionaismodule
eobject_path
.
Para obter uma explicação dos motivos para usar o decorador em vez dos wrappers, consulte Diferentes formatos de chamada.
Parâmetro
Parâmetro decorador
newrelic.agent.asgi_application(application=None, name=None, group=None, framework=None)
O decorador asgi_application
usa estes parâmetros:
Parâmetro | Descrição |
---|---|
string ou objeto de aplicativo | Opcional. O nome do aplicativo a ser associado a esses dados. O padrão é Se uma sequência for fornecida, ela deverá ser o nome exato do aplicativo e não poderá ser uma lista de nomes de aplicativos. Para obter mais informações sobre como gerar um objeto de aplicativo, consulte o método |
corda | Opcional, raramente usado. Define um nome de transação para todas as solicitações capturadas através do ponto de entrada ASGI. Geralmente não utilizado, porque normalmente não se deseja que todas as transações tenham o mesmo nome (ver também questão de agrupamento métrico). |
corda | Opcional, raramente usado. O |
tuple | Opcional. Uma tupla com duas strings representando o nome da framework e o número da versão. Por exemplo: |
Parâmetro do wrapper
newrelic.agent.ASGIApplicationWrapper(wrapped, application=None, name=None, group=None, framework=None)
Isso leva todos os parâmetros exigidos por asgi_application
além de um parâmetro wrapped
:
Parâmetro | Descrição |
---|---|
objeto | Required. O objeto ASGI a ser empacotado. |
Parâmetro wrapper baseado em caminho
newrelic.agent.wrap_asgi_application(module, object_path, application=None, name=None, group=None, framework=None)
Além do parâmetro exigido por asgi_application
, esta chamada requer parâmetros adicionais module
e object_path
:
Parâmetro | Descrição |
---|---|
objeto ou string | Required. O módulo que contém o objeto ASGI. |
corda | Required. Representa o método de classe ou método para localizar o objeto ASGI em um arquivo. |
Exemplos
asgi_application example
Um exemplo do decorador sendo chamado sem o parâmetro opcional application
:
@newrelic.agent.asgi_application()async def application(scope, receive, send): await send( { "type": "http.response.start", "status": 200, "headers": [(b"Content-type", b"text/plain")] } ) await send( { "type": "http.response.body", "body": b"Hello World!" } )
Exemplo ASGIApplicationWrapper
Um exemplo de uso do ASGIApplicationWrapper
, que pode ser necessário se o decorador asgi_application
não funcionar:
import osos.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings")from django.core.asgi import get_asgi_applicationapplication = get_asgi_application()
application = newrelic.agent.ASGIApplicationWrapper(application)
wrap_asgi_application example
Um exemplo de uso do wrapper baseado em caminho:
import newrelic.agentnewrelic.agent.initialize('newrelic.ini')
class Application: def __init__(self, scope): self.scope = scope
async def __call__(self, receive, send): await send({"type": "http.response.start", "status": 200}) await send({"type": "http.response.body", "body": b"Hello World!"})
newrelic.agent.wrap_asgi_application(__name__, 'Application')