Referencia de Allure Diesel
AllureInstrumentation
AllureInstrumentation::new()— instrumentación con lasCaptureOptionspredeterminadasAllureInstrumentation::with_options(options: CaptureOptions)— ver Configuración
Implementa el trait Instrumentation de Diesel. Ádjuntala a una conexión con conn.set_instrumentation(instrumentation).
install_default
allure_diesel::install_default() -> diesel::QueryResult<()>
Registra AllureInstrumentation::new() (con las CaptureOptions predeterminadas) como la instrumentación predeterminada para cada conexión de Diesel establecida a partir de ese momento en el proceso actual, mediante set_default_instrumentation de Diesel. Llámalo una vez, antes de que se establezcan las conexiones que quieras capturar. No existe una forma integrada de instalar la instrumentación predeterminada con CaptureOptions no predeterminadas — usa set_instrumentation por conexión en su lugar si necesitas eso.
Nomenclatura de pasos
El nombre de un paso es el SQL renderizado de la consulta — el texto exacto pasado a sql_query(...), o la propia salida renderizada mediante Debug de Diesel para las llamadas tipadas del constructor de consultas (palabras clave en mayúsculas, por ejemplo INSERT INTO ...), la cual, para consultas parametrizadas, típicamente incluye un comentario interno de Diesel al final -- binds: [...] que muestra los valores vinculados.
Cuando el SQL renderizado es más largo que max_sql_preview caracteres (1024 de forma predeterminada — ver Configuración), el nombre del paso se recorta a esa cantidad de caracteres con un … al final. Este recorte solo afecta al nombre del paso; el adjunto query.sql (cuando está habilitado) siempre contiene el texto completo, sin recortar.
Transacciones
Con la captura de transacciones habilitada (predeterminado), un límite BEGIN/SAVEPOINT abre un paso transaction (depth N) (N es la profundidad de anidamiento de transacciones de Diesel), y cada declaración ejecutada mientras está abierto — incluyendo el propio límite de cierre COMMIT/ROLLBACK — se anida dentro de él como un paso hermano, en el orden de ejecución.
El estado del propio paso transaction y cualquier mensaje de fallo provienen de las declaraciones límite, no del valor de retorno del closure de tu transacción:
- Si el
BEGIN/SAVEPOINTde apertura falla, el pasotransactionse cierra inmediatamente comofailedcon ese error, y no sigue ningún límite de cierre (no hay nada que confirmar ni revertir). Las consultas posteriores se registran nuevamente en el nivel superior, no anidadas dentro del paso de transacción fallido. - Si
BEGINtiene éxito y la transacción luego se confirma exitosamente, el pasotransactionespassed. - Si el propio
COMMITfalla (por ejemplo, una restricción de clave externa diferida que solo se verifica en el momento de la confirmación), el pasotransactionesfailed, llevando el error delCOMMIT— incluso si todas las declaraciones dentro de la transacción tuvieron éxito individualmente. - Si tu closure devuelve
Erry Diesel emite unROLLBACK, el pasotransactionespassedsiempre que la propia declaraciónROLLBACKtenga éxito — una reversión es una operación de base de datos normal y exitosa desde el punto de vista de la instrumentación. ElErrque devolvió tu closure nunca es visible paraAllureInstrumentation; solo importa si el SQL del límite tuvo éxito. Si quieres que un reporte marque visiblemente "esta transacción se revirtió", regístralo tú mismo (por ejemplo con una etiqueta o un paso de log) dentro del closure.
Después de que un paso de transacción se cierra — sea como sea que se cierre — las consultas posteriores se registran nuevamente como hermanos de nivel superior; la pila interna de pasos siempre se rebalancea, incluso cuando una declaración límite falló.
CaptureOptions
Ver Configuración para la lista completa de métodos del builder (without_transactions, with_connection_events, without_sql_attachment, with_max_sql_preview) y sus valores predeterminados.