Historial de Ejecución de Acciones

Realice el seguimiento y monitoreo del historial de ejecución de acciones y descargue los paquetes de resultados.

Visión General

La API de Ejecución de Acciones proporciona endpoints para rastrear el historial de ejecución de acciones, monitorear el estado y descargar los resultados de la ejecución. Esta API usa un controlador separado del API principal de Acciones.

URL Base: /api/{tenantId}/{projectId}/actionexecution

Obtener Historial de Ejecución de una Acción

GET /api/{tenantId}/{projectId}/actionexecution/action/{actionId}

Recupera todo el historial de ejecución para una acción específica.

Solicitud

GET https://your-mindzie-instance.com/api/{tenantId}/{projectId}/actionexecution/action/{actionId}
Authorization: Bearer {your-access-token}

Parámetros de Ruta

Parámetro Tipo Obligatorio Descripción
tenantId GUID Identificador de tu tenant
projectId GUID Identificador de tu proyecto
actionId GUID La acción para obtener el historial de ejecución

Respuesta

Éxito (200 OK):

{
  "items": [
    {
      "actionId": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
      "actionExecutionId": "11111111-2222-3333-4444-555555555555",
      "dateStarted": "2024-01-15T10:30:00Z",
      "dateEnded": "2024-01-15T10:32:15Z",
      "status": "Completed",
      "notes": null
    },
    {
      "actionId": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
      "actionExecutionId": "22222222-3333-4444-5555-666666666666",
      "dateStarted": "2024-01-14T10:30:00Z",
      "dateEnded": "2024-01-14T10:31:45Z",
      "status": "Completed",
      "notes": null
    }
  ]
}

Obtener Última Ejecución de una Acción

GET /api/{tenantId}/{projectId}/actionexecution/lastaction/{actionId}

Recupera la ejecución más reciente para una acción específica.

Solicitud

GET https://your-mindzie-instance.com/api/{tenantId}/{projectId}/actionexecution/lastaction/{actionId}
Authorization: Bearer {your-access-token}

Parámetros de Ruta

Parámetro Tipo Obligatorio Descripción
tenantId GUID Identificador de tu tenant
projectId GUID Identificador de tu proyecto
actionId GUID La acción para obtener la última ejecución

Respuesta

Éxito (200 OK):

{
  "actionId": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
  "actionExecutionId": "11111111-2222-3333-4444-555555555555",
  "dateStarted": "2024-01-15T10:30:00Z",
  "dateEnded": "2024-01-15T10:32:15Z",
  "status": "Completed",
  "notes": null
}

No Encontrado (404):

{
  "error": "Can't find action",
  "actionId": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee"
}

Obtener Detalles de una Ejecución Específica

GET /api/{tenantId}/{projectId}/actionexecution/{executionId}

Recupera detalles para una ejecución específica por su ID de ejecución.

Solicitud

GET https://your-mindzie-instance.com/api/{tenantId}/{projectId}/actionexecution/{executionId}
Authorization: Bearer {your-access-token}

Parámetros de Ruta

Parámetro Tipo Obligatorio Descripción
tenantId GUID Identificador de tu tenant
projectId GUID Identificador de tu proyecto
executionId GUID La ejecución a recuperar

Respuesta

Éxito (200 OK):

{
  "actionId": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
  "actionExecutionId": "11111111-2222-3333-4444-555555555555",
  "dateStarted": "2024-01-15T10:30:00Z",
  "dateEnded": "2024-01-15T10:32:15Z",
  "status": "Completed",
  "notes": null
}

No Encontrado (404):

{
  "error": "Can't find action",
  "executionId": "11111111-2222-3333-4444-555555555555"
}

Descargar Paquete de Ejecución

GET /api/{tenantId}/{projectId}/actionexecution/downloadpackage/{executionId}

Descarga el paquete de resultados (archivo ZIP) para una ejecución completada.

Solicitud

GET https://your-mindzie-instance.com/api/{tenantId}/{projectId}/actionexecution/downloadpackage/{executionId}
Authorization: Bearer {your-access-token}

Parámetros de Ruta

Parámetro Tipo Obligatorio Descripción
tenantId GUID Identificador de tu tenant
projectId GUID Identificador de tu proyecto
executionId GUID La ejecución para la cual descargar resultados

Respuesta

Éxito (200 OK):

Devuelve la descarga de un archivo ZIP que contiene los resultados de la ejecución, reportes y artefactos.

HTTP/1.1 200 OK
Content-Type: application/zip
Content-Disposition: attachment; filename="{executionId}.zip"

[binary ZIP file content]

No Encontrado (404):

{
  "error": "Execution not found",
  "executionId": "11111111-2222-3333-4444-555555555555"
}
{
  "error": "Zip file not found",
  "executionId": "11111111-2222-3333-4444-555555555555"
}

Campos de Respuesta de Ejecución

Campo Tipo Descripción
actionId GUID La acción que fue ejecutada
actionExecutionId GUID Identificador único de esta ejecución
dateStarted datetime Momento en que se inició la ejecución
dateEnded datetime Momento en que la ejecución finalizó (null si sigue en ejecución)
status string Estado actual de la ejecución
notes string Notas de la ejecución o mensajes de error

Valores de Estado de la Ejecución

Estado Descripción
Queued La ejecución está en cola, esperando para iniciar
Running La ejecución está en progreso
Completed La ejecución finalizó exitosamente
Failed La ejecución encontró un error

Ejemplos de Implementación

cURL

# Obtener historial de ejecución para una acción
curl -X GET "https://your-mindzie-instance.com/api/12345678-1234-1234-1234-123456789012/87654321-4321-4321-4321-210987654321/actionexecution/action/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee" \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN"

# Obtener última ejecución
curl -X GET "https://your-mindzie-instance.com/api/12345678-1234-1234-1234-123456789012/87654321-4321-4321-4321-210987654321/actionexecution/lastaction/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee" \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN"

# Obtener ejecución específica
curl -X GET "https://your-mindzie-instance.com/api/12345678-1234-1234-1234-123456789012/87654321-4321-4321-4321-210987654321/actionexecution/11111111-2222-3333-4444-555555555555" \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN"

# Descargar paquete de ejecución
curl -X GET "https://your-mindzie-instance.com/api/12345678-1234-1234-1234-123456789012/87654321-4321-4321-4321-210987654321/actionexecution/downloadpackage/11111111-2222-3333-4444-555555555555" \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -o execution_results.zip

JavaScript/Node.js

const TENANT_ID = '12345678-1234-1234-1234-123456789012';
const PROJECT_ID = '87654321-4321-4321-4321-210987654321';
const BASE_URL = 'https://your-mindzie-instance.com';

// Obtener historial de ejecución para una acción
const getExecutionHistory = async (actionId, token) => {
  const url = `${BASE_URL}/api/${TENANT_ID}/${PROJECT_ID}/actionexecution/action/${actionId}`;

  const response = await fetch(url, {
    headers: { 'Authorization': `Bearer ${token}` }
  });

  if (response.ok) {
    const result = await response.json();
    return result.items;
  }
  throw new Error(`Failed: ${response.status}`);
};

// Obtener última ejecución para una acción
const getLastExecution = async (actionId, token) => {
  const url = `${BASE_URL}/api/${TENANT_ID}/${PROJECT_ID}/actionexecution/lastaction/${actionId}`;

  const response = await fetch(url, {
    headers: { 'Authorization': `Bearer ${token}` }
  });

  if (response.ok) {
    return await response.json();
  } else if (response.status === 404) {
    return null;
  }
  throw new Error(`Failed: ${response.status}`);
};

// Obtener detalles de una ejecución específica
const getExecution = async (executionId, token) => {
  const url = `${BASE_URL}/api/${TENANT_ID}/${PROJECT_ID}/actionexecution/${executionId}`;

  const response = await fetch(url, {
    headers: { 'Authorization': `Bearer ${token}` }
  });

  if (response.ok) {
    return await response.json();
  }
  throw new Error(`Failed: ${response.status}`);
};

// Descargar paquete de ejecución
const downloadPackage = async (executionId, token) => {
  const url = `${BASE_URL}/api/${TENANT_ID}/${PROJECT_ID}/actionexecution/downloadpackage/${executionId}`;

  const response = await fetch(url, {
    headers: { 'Authorization': `Bearer ${token}` }
  });

  if (response.ok) {
    const blob = await response.blob();
    // Guardar o procesar el archivo ZIP
    return blob;
  }
  throw new Error(`Failed: ${response.status}`);
};

Python

import requests

TENANT_ID = '12345678-1234-1234-1234-123456789012'
PROJECT_ID = '87654321-4321-4321-4321-210987654321'
BASE_URL = 'https://your-mindzie-instance.com'

def get_execution_history(action_id, token):
    """Obtener todas las ejecuciones para una acción."""
    url = f'{BASE_URL}/api/{TENANT_ID}/{PROJECT_ID}/actionexecution/action/{action_id}'
    headers = {'Authorization': f'Bearer {token}'}

    response = requests.get(url, headers=headers)
    response.raise_for_status()
    return response.json()['items']

def get_last_execution(action_id, token):
    """Obtener la ejecución más reciente para una acción."""
    url = f'{BASE_URL}/api/{TENANT_ID}/{PROJECT_ID}/actionexecution/lastaction/{action_id}'
    headers = {'Authorization': f'Bearer {token}'}

    response = requests.get(url, headers=headers)
    if response.status_code == 404:
        return None
    response.raise_for_status()
    return response.json()

def get_execution(execution_id, token):
    """Obtener detalles de una ejecución específica."""
    url = f'{BASE_URL}/api/{TENANT_ID}/{PROJECT_ID}/actionexecution/{execution_id}'
    headers = {'Authorization': f'Bearer {token}'}

    response = requests.get(url, headers=headers)
    response.raise_for_status()
    return response.json()

def download_package(execution_id, token, output_path):
    """Descargar el paquete de resultados de la ejecución."""
    url = f'{BASE_URL}/api/{TENANT_ID}/{PROJECT_ID}/actionexecution/downloadpackage/{execution_id}'
    headers = {'Authorization': f'Bearer {token}'}

    response = requests.get(url, headers=headers)
    response.raise_for_status()

    with open(output_path, 'wb') as f:
        f.write(response.content)

    return output_path

# Ejemplo: Monitorear la ejecución hasta que finalice
def wait_for_completion(execution_id, token, max_wait_seconds=300):
    import time

    start_time = time.time()
    while time.time() - start_time < max_wait_seconds:
        execution = get_execution(execution_id, token)
        status = execution['status']

        if status == 'Completed':
            print(f'Ejecución completada exitosamente')
            return execution
        elif status == 'Failed':
            print(f'Ejecución fallida: {execution.get("notes", "Error desconocido")}')
            return execution
        else:
            print(f'Estado: {status}, esperando...')
            time.sleep(5)

    raise TimeoutError('La ejecución no finalizó dentro del tiempo de espera')

Mejores Prácticas

  • Consultar el Estado: Después de ejecutar una acción, consulte el endpoint de ejecución para monitorear el progreso
  • Manejar Acciones de Larga Duración: Use tiempos de espera adecuados al esperar la finalización
  • Descargar Resultados: Para acciones que generen salida, descargue el paquete después de la finalización
  • Manejo de Errores: Consulte el campo notes para detalles de errores cuando el estado sea "Failed"
  • Historial de Ejecución: Use los endpoints de historial para auditoría y depuración de ejecuciones pasadas