Assembly Execution Progress
Esta función todavía se encuentra en una etapa experimental. Su comportamiento exacto, su API y sus precios podrían cambiar mientras seguimos trabajando en ella. Si encuentras algún error o comportamiento extraño, contáctanos.
Assembly Execution Progress proporciona
estimaciones en tiempo real sobre cuánto ha avanzado la ejecución de una
Assembly. Se calcula un valor porcentual para el progreso
de toda la Assembly, así como para cada archivo subido (y
cualquier importación que incluya un original_id). Esto proporciona estimaciones
individuales por archivo, incluso si los archivos se procesan de manera diferente en la misma
Assembly, por ejemplo, debido a que tienen distintos tipos de archivo.
Para calcular estos valores porcentuales, nuestro motor de Assembly
predice qué Steps probablemente se ejecutarán durante el
resto de la Assembly. Luego, esta predicción se compara con los
Steps que ya finalizaron para obtener la estimación del progreso.
Después, mejoramos esta estimación incorporando información sobre el progreso de los
Steps que se están ejecutando. Por ejemplo, para los
Steps de /video/encode incluimos
información sobre qué parte del video se ha codificado hasta el momento.
Assembly Execution Progress es una excelente mejora para tu interfaz de usuario, ya que permite que tus usuarios sepan qué está sucediendo con sus archivos. En combinación con el progreso normal de subida, que muestra el avance de la transferencia de los archivos de los usuarios a nuestros servidores, Assembly Execution Progress ayuda a informarles que sus archivos están siendo atendidos y que el procesamiento se está realizando en segundo plano.
Assemblies compatibles
Intentamos proporcionar Execution Progress para cada Assembly, pero no es posible hacerlo de manera confiable en todos los casos. Si tu Assembly incluye un Step con una cantidad impredecible de resultados, no se puede estimar el progreso hasta que finalice este Step. Sin embargo, una vez que todos estos Steps hayan finalizado, Execution Progress se podrá calcular.
Los Steps cuya cantidad de resultados no se puede predecir son:
- Importar directorios mediante
/s3/import,/azure/import, etc. Esto no incluye importar una cantidad fija de archivos. /file/decompress: extraer un archivo comprimido en una cantidad variable de archivos./document/thumbs: generar miniaturas de un documento sin especificar el número de página.
Execution Progress no está disponible para
las URL Transform Assemblies (se ignora la marca emit_execution_progress). En las subidas
multiparte, el progreso solo puede comenzar después de que se extraigan los metadatos de la subida, lo
cual ocurre cuando finalizan las subidas.
Habilitar Assembly Execution Progress
Debes habilitar explícitamente esta opción en cada Assembly para
la que quieras recibir Execution Progress. Esto
se hace cuando creas la Assembly incluyendo la propiedad
"emit_execution_progress": true en las Assembly
Instructions, por ejemplo:
{
"steps": {
"resized": {
"robot": "/image/resize",
"use": ":original",
"width": 100,
"height": 100,
"resize_strategy": "fillcrop",
},
// ...
},
// ...
// Enable execution progress
"emit_execution_progress": true,
}
Inicio rápido
- Agrega
"emit_execution_progress": truea tus Assembly Instructions. - Abre el flujo de actualizaciones de la Assembly.
- Escucha el evento
assembly_execution_progressy actualiza tu interfaz de usuario.
Recibir Execution Progress
Assembly Execution Progress se puede recuperar mediante el flujo de actualizaciones de la Assembly. En resumen, una vez que se ha creado una Assembly, el Assembly Status contiene una URL desde la que puedes recuperar mensajes y eventos en tiempo real sobre el estado de la Assembly. Los detalles exactos se describen en la documentación.
Una vez que abras el flujo de actualizaciones de una Assembly y
Execution Progress esté habilitado, recibirás
actualizaciones de progreso periódicamente, aproximadamente cada 2 segundos. La actualización se envía
mediante el evento assembly_execution_progress. Incluye una carga útil JSON que describe el progreso
de toda la Assembly y de cada archivo original (las subidas y
cualquier importación que incluya un original_id). Por ejemplo:
{
"progress_combined": 75,
"progress_per_original_file": [
{
"original_id": "6bb16f6cd49a44b4ae431f576e016c6d",
"progress": 50
},
{
"original_id": "56921a2dd46246d3b4d3a98b9f8ed4e1",
"progress": 100
}
]
}
En el ejemplo anterior, se ha procesado el 75 % de toda la Assembly.
El archivo cuyo original_id es 56921a2dd46246d3b4d3a98b9f8ed4e1 ha terminado de procesarse, lo que
significa que ha pasado por todos sus Steps. El archivo cuyo
original_id es 6bb16f6cd49a44b4ae431f576e016c6d aún no ha terminado y, hasta el momento,
tiene un progreso del 50 %.
No se emite ningún evento mientras no se pueda predecir el progreso; consulta Assemblies compatibles para conocer las condiciones.
El esquema de progreso publicado también permite el valor null para progress_combined.
Maneja ese valor con cautela mediante un estado indeterminado en la interfaz de usuario, no como cero
ni como finalización. Esto no significa que el flujo envíe actualizaciones
null mientras espera a los Steps impredecibles: el flujo de actualizaciones omite esas actualizaciones.