Ejecución de Bloques

Ejecutar Bloques de Análisis

Ejecute bloques individuales de forma asincrónica y monitoree su estado de procesamiento. Los bloques procesan datos según su tipo y configuración.

Ejecutar Bloque

POST /api/{tenantId}/{projectId}/block/{blockId}/execute

Cola un bloque para su ejecución asincrónica. El bloque procesará datos según su tipo y configuración (filtro, calculadora, alerta, etc.). Devuelve un ID de ejecución para rastrear el progreso.

Parámetros de Ruta

Parámetro Tipo Obligatorio Descripción
tenantId GUID Identificador del tenant
projectId GUID Identificador del proyecto
blockId GUID Identificador del bloque a ejecutar

Cuerpo de la Solicitud (Opcional)

{
  "parameters": {
    "dateFrom": "2024-01-01",
    "dateTo": "2024-12-31",
    "threshold": 1000
  }
}

Respuesta (202 Aceptado)

{
  "blockId": "550e8400-e29b-41d4-a716-446655440000",
  "executionId": "770e8400-e29b-41d4-a716-446655440000",
  "status": "Queued",
  "dateQueued": "2024-01-15T10:30:00Z",
  "dateStarted": null,
  "dateEnded": null,
  "result": null,
  "errorMessage": null,
  "message": "Block execution has been queued"
}

Campos de la Respuesta

Campo Tipo Descripción
blockId GUID El bloque que fue puesto en cola
executionId GUID Identificador único para esta ejecución
status string Estado actual de la ejecución
dateQueued datetime Momento en que la ejecución fue puesta en cola
dateStarted datetime Momento en que inició la ejecución (null si no ha iniciado)
dateEnded datetime Momento en que finalizó la ejecución (null si no ha terminado)
result object Datos del resultado de la ejecución (null hasta completar)
errorMessage string Detalles del error si la ejecución falló
message string Mensaje de estado legible para humanos

Respuestas de Error

No Encontrado (404):

{
  "Error": "Block not found",
  "BlockId": "550e8400-e29b-41d4-a716-446655440000"
}

No Autorizado (401):

{mensaje de error que describe la falla de autorización}

Valores de Estado de la Ejecución

La ejecución del bloque progresa a través de estos valores de estado:

Estado Descripción
Queued El bloque está esperando en la cola de ejecución
Running El bloque está procesando datos actualmente
Success El bloque completó la ejecución con éxito
Failed La ejecución del bloque falló con errores
Cancelled La ejecución del bloque fue cancelada

Ejemplos de Implementación

cURL

# Ejecutar bloque sin parámetros
curl -X POST "https://your-mindzie-instance.com/api/12345678-1234-1234-1234-123456789012/87654321-4321-4321-4321-210987654321/block/550e8400-e29b-41d4-a716-446655440000/execute" \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json"

# Ejecutar bloque con parámetros
curl -X POST "https://your-mindzie-instance.com/api/12345678-1234-1234-1234-123456789012/87654321-4321-4321-4321-210987654321/block/550e8400-e29b-41d4-a716-446655440000/execute" \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"parameters": {"dateFrom": "2024-01-01", "dateTo": "2024-12-31"}}'

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';

class BlockExecutor {
  constructor(token) {
    this.headers = {
      'Authorization': `Bearer ${token}`,
      'Content-Type': 'application/json'
    };
  }

  async executeBlock(blockId, parameters = null) {
    const url = `${BASE_URL}/api/${TENANT_ID}/${PROJECT_ID}/block/${blockId}/execute`;

    const body = parameters ? JSON.stringify({ parameters }) : null;

    const response = await fetch(url, {
      method: 'POST',
      headers: this.headers,
      body: body
    });

    if (response.status === 202) {
      return await response.json();
    }

    throw new Error(`Fallo en la ejecución: ${response.statusText}`);
  }
}

// Uso
const executor = new BlockExecutor('your-auth-token');

// Ejecutar sin parámetros
const result = await executor.executeBlock('block-guid');
console.log(`Ejecución en cola: ${result.executionId}`);

// Ejecutar con parámetros
const resultWithParams = await executor.executeBlock('block-guid', {
  dateFrom: '2024-01-01',
  dateTo: '2024-12-31'
});

Python

import requests

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

class BlockExecutor:
    def __init__(self, token):
        self.headers = {
            'Authorization': f'Bearer {token}',
            'Content-Type': 'application/json'
        }

    def execute_block(self, block_id, parameters=None):
        """Poner en cola el bloque para ejecución."""
        url = f'{BASE_URL}/api/{TENANT_ID}/{PROJECT_ID}/block/{block_id}/execute'

        payload = {'parameters': parameters} if parameters else {}
        response = requests.post(url, json=payload, headers=self.headers)

        if response.status_code == 202:
            return response.json()
        else:
            raise Exception(f'Error al ejecutar el bloque: {response.text}')

# Uso
executor = BlockExecutor('your-auth-token')

# Ejecutar sin parámetros
result = executor.execute_block('block-guid')
print(f"Ejecución en cola: {result['executionId']}")

# Ejecutar con parámetros
result = executor.execute_block('block-guid', {
    'dateFrom': '2024-01-01',
    'dateTo': '2024-12-31',
    'threshold': 1000
})
print(f"Estado: {result['status']}")

C#

using System;
using System.Net.Http;
using System.Text;
using System.Text.Json;
using System.Threading.Tasks;

public class ExecuteBlockReturn
{
    public Guid BlockId { get; set; }
    public Guid ExecutionId { get; set; }
    public string Status { get; set; }
    public DateTime DateQueued { get; set; }
    public DateTime? DateStarted { get; set; }
    public DateTime? DateEnded { get; set; }
    public object Result { get; set; }
    public string ErrorMessage { get; set; }
    public string Message { get; set; }
}

public class BlockExecutorClient
{
    private readonly HttpClient _httpClient;
    private readonly string _baseUrl;
    private readonly Guid _tenantId;
    private readonly Guid _projectId;

    public BlockExecutorClient(string baseUrl, Guid tenantId, Guid projectId, string accessToken)
    {
        _baseUrl = baseUrl;
        _tenantId = tenantId;
        _projectId = projectId;
        _httpClient = new HttpClient();
        _httpClient.DefaultRequestHeaders.Authorization =
            new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", accessToken);
    }

    public async Task<ExecuteBlockReturn> ExecuteBlockAsync(Guid blockId, object parameters = null)
    {
        var url = $"{_baseUrl}/api/{_tenantId}/{_projectId}/block/{blockId}/execute";

        var payload = parameters != null ? new { parameters } : new { };
        var content = new StringContent(
            JsonSerializer.Serialize(payload),
            Encoding.UTF8,
            "application/json");

        var response = await _httpClient.PostAsync(url, content);

        if (response.StatusCode == System.Net.HttpStatusCode.Accepted)
        {
            var json = await response.Content.ReadAsStringAsync();
            return JsonSerializer.Deserialize<ExecuteBlockReturn>(json,
                new JsonSerializerOptions { PropertyNameCaseInsensitive = true });
        }

        throw new Exception($"Fallo en la ejecución del bloque: {response.StatusCode}");
    }
}

// Uso
var executor = new BlockExecutorClient(
    "https://your-mindzie-instance.com",
    Guid.Parse("12345678-1234-1234-1234-123456789012"),
    Guid.Parse("87654321-4321-4321-4321-210987654321"),
    "your-access-token");

// Ejecutar bloque
var result = await executor.ExecuteBlockAsync(
    Guid.Parse("block-guid"),
    new { dateFrom = "2024-01-01", dateTo = "2024-12-31" });

Console.WriteLine($"Ejecución en cola: {result.ExecutionId}");

Mejores Prácticas

  • Verificar Estado del Bloque: Asegúrese de que el bloque no esté deshabilitado antes de ejecutarlo
  • Usar Parámetros con Precaución: Pase parámetros en tiempo de ejecución para personalizar la ejecución sin modificar la configuración del bloque
  • Manejar la Naturaleza Asincrónica: La ejecución del bloque es asincrónica - utilice el endpoint de resultados para verificar la finalización
  • Monitorear la Ejecución: Para bloques que toman mucho tiempo, consulte periódicamente el endpoint de resultados para seguir el progreso