# Assembly Execution Progress

###### Advertencia

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](mailto:support@transloadit.com).

Assembly Execution Progress proporciona estimaciones en tiempo real sobre cuánto ha avanzado la ejecución de unaAssembly. 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 mismaAssembly, por ejemplo, debido a que tienen distintos tipos de archivo.

Para calcular estos valores porcentuales, nuestro motor de Assemblypredice qué Steps probablemente se ejecutarán durante el resto de la Assembly. Luego, esta predicción se compara con losSteps que ya finalizaron para obtener la estimación del progreso. Después, mejoramos esta estimación incorporando información sobre el progreso de losSteps que se están ejecutando. Por ejemplo, para `/video/encode`, en losSteps 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 Progresspara cada Assembly, pero no es posible hacerlo de manera confiable en todos los casos. Si tu Assembly incluye unStep 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 esosSteps,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](/es/docs/api/assemblies-post.md) incluyendo la propiedad`"emit_execution_progress": true` en las Assembly Instructions, por ejemplo:

![](/_next/static/media/copy.04p1cju9qekk_.svg?dpl=dpl_3z41v8VuCJJKgtsQfSKB6o2uiSXL)

```jsonc
{
  "steps": {
    "resized": {
      "robot": "/image/resize",
      "use": ":original",
      "width": 100,
      "height": 100,
      "resize_strategy": "fillcrop",
    },
    // ...
  },
  // ...

  // Enable execution progress
  "emit_execution_progress": true,
}

```

## Inicio rápido

1. Agrega `"emit_execution_progress": true` a tus Assembly Instructions.
2. Abre el [flujo de actualizaciones de la Assembly](/es/docs/api/assemblies-assembly-id-stream-get.md).
3. Escucha el evento `assembly_execution_progress` y 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, elAssembly Status contiene una URL desde la que puedes recuperar mensajes y eventos en tiempo real sobre el estado de laAssembly. Los detalles exactos se describen en la[documentación](/es/docs/api/assemblies-assembly-id-stream-get.md).

Una vez que abras el flujo de actualizaciones de una Assembly yExecution 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:

![](/_next/static/media/copy.04p1cju9qekk_.svg?dpl=dpl_3z41v8VuCJJKgtsQfSKB6o2uiSXL)

```json
{
  "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 Assemblyincluye Steps sin finalizar cuya cantidad de resultados no se puede predecir, no se emitirá ningún evento hasta que estos Stepshayan finalizado.
