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 información precisa
sobre el progreso, 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 /video/encode, en los
Steps 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/compress: extraer cualquier tipo de archivo comprimido./document/thumbs: generar miniaturas de un documento sin especificar el número de página.
Si tu Assembly no incluye esos Steps, Execution Progress estará disponible desde el principio. Si sí incluye esos Steps, el progreso estará disponible después de que estos Steps hayan finalizado.
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 %.
Si no hay una estimación del progreso disponible porque la Assembly incluye Steps sin finalizar cuya cantidad de resultados no se puede predecir, no se emitirá ningún evento hasta que estos Steps hayan finalizado.