Sintaxis
newrelic.agent.asgi_application(application=None, name=None, group=None, framework=None)
Monitor transacciones web marcando el punto de entrada de la aplicación ASGI.
Descripción
asgi_application
es un decorador de Python utilizado para monitor transacciones web instrumentado el punto de entrada de la aplicación ASGI. El agente Python admite automáticamente la mayoría de los marcos y servidores que utilizan ASGI. Si su framework o servidor web no es compatible, es posible que necesite utilizar esta API como parte del proceso de integración avanzado.
Si no puede utilizar el decorador asgi_application
, puede utilizar uno de estos otros formatos de llamada:
The wrapper:
La llamada contenedora es
ASGIApplicationWrapper
. Puede utilizar el contenedor en más de un lugar para distintos componentes de la aplicación ASGI que pueden estar apilados. En ese caso, el primer contenedor encontrado marca el inicio de la transacción y el agente determina la aplicación de destino en función de ese primer contenedor (e ignora los siguientes).The path-based wrapper:
La llamada contenedora basada en ruta es
wrap_asgi_application
. Úselo si no puede hacer referencia al objeto ASGI como una variable en el alcance de la instrumentación. Esto toma el mismo parámetro que el decorador con parámetrosmodule
yobject_path
adicionales.
Para obtener una explicación de los motivos para utilizar el decorador frente a los contenedores, consulte Diferentes formatos de llamada.
Parámetros
Parámetro decorador
newrelic.agent.asgi_application(application=None, name=None, group=None, framework=None)
El decorador asgi_application
utiliza estos parámetros:
Parámetro | Descripción |
---|---|
cadena u objeto de aplicación | Opcional. El nombre de la aplicación para asociar con estos datos. El valor predeterminado es Si se proporciona una cadena, debe ser el nombre exacto de la aplicación y no puede ser una lista de nombres de aplicaciones. Para obtener más información sobre cómo generar un objeto de aplicación, consulte el método |
cadena | Opcional, raramente usado. Establece un nombre de transacción para todas las solicitudes capturadas a través del punto de entrada ASGI. Generalmente no se usa, porque normalmente no se desea que todas las transacciones tengan el mismo nombre (consulte también el tema de agrupación métrica). |
cadena | Opcional, raramente usado. El |
tupla | Opcional. Una tupla con dos cadenas que representan el nombre del framework y el número de versión. Por ejemplo: |
Parámetro de envoltura
newrelic.agent.ASGIApplicationWrapper(wrapped, application=None, name=None, group=None, framework=None)
Esto toma todos los parámetros requeridos por asgi_application
además de un parámetro wrapped
:
Parámetro | Descripción |
---|---|
objeto | Required. El objeto ASGI que se va a empaquetar. |
Parámetro contenedor basado en ruta
newrelic.agent.wrap_asgi_application(module, object_path, application=None, name=None, group=None, framework=None)
Además del parámetro requerido por asgi_application
, esta llamada requiere parámetros module
y object_path
adicionales:
Parámetro | Descripción |
---|---|
objeto o cadena | Required. El módulo que contiene el objeto ASGI. |
cadena | Required. Representa el método de clase o el método para buscar el objeto ASGI dentro de un archivo. |
Ejemplos
asgi_application example
Un ejemplo de llamada del decorador sin el 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!" } )
Ejemplo de ASGIApplicationWrapper
Un ejemplo del uso de ASGIApplicationWrapper
, que puede ser necesario si el decorador asgi_application
no funciona:
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
Un ejemplo de uso del contenedor basado en ruta:
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')