Gestión del Panel de Control

Listar y Recuperar Paneles de Control

Acceda a los paneles de control que contienen paneles de visualización para perspectivas de minería de procesos, KPIs y análisis. Los paneles de control son contenedores para mostrar sus resultados analíticos en un formato organizado y compartible.

Pruebas de Conectividad

Ping No Autorizado

GET /api/{tenantId}/{projectId}/dashboard/unauthorized-ping

Punto final de prueba que no requiere autenticación. Use esto para verificar que la API del Panel de Control es accesible.

Respuesta

Ping Successful

Ping Autenticado

GET /api/{tenantId}/{projectId}/dashboard/ping

Punto final de ping autenticado para verificar el acceso a la API para un inquilino y proyecto específicos.

Respuesta (200 OK)

Ping Successful (tenant id: {tenantId})

Respuesta (401 Unauthorized)

{error message describing authorization failure}

Listar Todos los Paneles de Control

GET /api/{tenantId}/{projectId}/dashboard

Recupera una lista paginada de todos los paneles de control dentro del proyecto especificado. Cada panel incluye metadatos, contador de paneles y una URL para compartir.

Parámetros de Ruta

Parámetro Tipo Obligatorio Descripción
tenantId GUID El identificador del inquilino
projectId GUID El identificador del proyecto

Parámetros de Consulta

Parámetro Tipo Por defecto Descripción
page entero 1 Número de página para paginación
pageSize entero 50 Número de elementos por página (máximo recomendado: 100)

Respuesta (200 OK)

{
  "dashboards": [
    {
      "dashboardId": "880e8400-e29b-41d4-a716-446655440000",
      "projectId": "660e8400-e29b-41d4-a716-446655440000",
      "name": "Process Overview Dashboard",
      "description": "Main dashboard showing key process metrics",
      "panelCount": 8,
      "url": "https://your-instance.com/dashboard/880e8400-e29b-41d4-a716-446655440000",
      "dateCreated": "2024-01-15T10:30:00Z",
      "dateModified": "2024-01-20T14:45:00Z",
      "createdBy": "user@example.com",
      "modifiedBy": "user@example.com"
    }
  ],
  "totalCount": 25,
  "page": 1,
  "pageSize": 50
}

Campos de Respuesta

Campo Tipo Descripción
dashboards array Lista de objetos panel de control
totalCount entero Número total de paneles de control
page entero Número de página actual
pageSize entero Elementos por página

Campos del Objeto del Panel de Control

Campo Tipo Descripción
dashboardId GUID Identificador único del panel de control
projectId GUID Proyecto al que pertenece este panel
name string Nombre para mostrar del panel de control
description string Descripción del panel de control
panelCount entero Número de paneles en el panel de control
url string URL compartible para el panel de control
dateCreated datetime Fecha en que se creó el panel de control
dateModified datetime Fecha en que se modificó por última vez
createdBy string Usuario que creó el panel de control
modifiedBy string Usuario que modificó el panel de control por última vez

Obtener Detalles del Panel de Control

GET /api/{tenantId}/{projectId}/dashboard/{dashboardId}

Recupera información completa sobre un panel de control específico, incluyendo metadatos, contador de paneles y URL compartible.

Parámetros de Ruta

Parámetro Tipo Obligatorio Descripción
tenantId GUID El identificador del inquilino
projectId GUID El identificador del proyecto
dashboardId GUID El identificador del panel de control

Respuesta (200 OK)

{
  "dashboardId": "880e8400-e29b-41d4-a716-446655440000",
  "projectId": "660e8400-e29b-41d4-a716-446655440000",
  "name": "Process Overview Dashboard",
  "description": "Main dashboard showing key process metrics and performance indicators",
  "panelCount": 8,
  "url": "https://your-instance.com/dashboard/880e8400-e29b-41d4-a716-446655440000",
  "dateCreated": "2024-01-15T10:30:00Z",
  "dateModified": "2024-01-20T14:45:00Z",
  "createdBy": "user@example.com",
  "modifiedBy": "user@example.com"
}

Respuestas de Error

No Encontrado (404):

{
  "Error": "Dashboard not found",
  "DashboardId": "880e8400-e29b-41d4-a716-446655440000"
}

Creación de Paneles de Control

La creación de paneles de control se gestiona a través de la interfaz de mindzieStudio, ya que requiere contexto de investigación y relaciones con notebooks. Consulte Resumen del Panel de Control para más detalles.

Ejemplos de Implementación

cURL

# Probar conectividad (sin autenticación)
curl -X GET "https://your-mindzie-instance.com/api/12345678-1234-1234-1234-123456789012/87654321-4321-4321-4321-210987654321/dashboard/unauthorized-ping"

# Probar conectividad (autenticado)
curl -X GET "https://your-mindzie-instance.com/api/12345678-1234-1234-1234-123456789012/87654321-4321-4321-4321-210987654321/dashboard/ping" \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN"

# Listar todos los paneles de control
curl -X GET "https://your-mindzie-instance.com/api/12345678-1234-1234-1234-123456789012/87654321-4321-4321-4321-210987654321/dashboard?page=1&pageSize=50" \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN"

# Obtener panel de control específico
curl -X GET "https://your-mindzie-instance.com/api/12345678-1234-1234-1234-123456789012/87654321-4321-4321-4321-210987654321/dashboard/880e8400-e29b-41d4-a716-446655440000" \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN"

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 DashboardManager {
  constructor(token) {
    this.headers = {
      'Authorization': `Bearer ${token}`,
      'Content-Type': 'application/json'
    };
  }

  async getAllDashboards(page = 1, pageSize = 50) {
    const url = `${BASE_URL}/api/${TENANT_ID}/${PROJECT_ID}/dashboard?page=${page}&pageSize=${pageSize}`;
    const response = await fetch(url, { headers: this.headers });
    return await response.json();
  }

  async getDashboard(dashboardId) {
    const url = `${BASE_URL}/api/${TENANT_ID}/${PROJECT_ID}/dashboard/${dashboardId}`;
    const response = await fetch(url, { headers: this.headers });

    if (response.ok) {
      return await response.json();
    } else if (response.status === 404) {
      throw new Error('Dashboard not found');
    } else {
      throw new Error(`Failed to get dashboard: ${response.status}`);
    }
  }

  async listAllDashboards() {
    const allDashboards = [];
    let page = 1;

    while (true) {
      const result = await this.getAllDashboards(page);
      allDashboards.push(...result.dashboards);

      if (allDashboards.length >= result.totalCount) {
        break;
      }
      page++;
    }

    return allDashboards;
  }
}

// Uso
const manager = new DashboardManager('your-auth-token');

// Obtener todos los paneles de control
const result = await manager.getAllDashboards();
console.log(`Se encontraron ${result.totalCount} paneles de control`);

result.dashboards.forEach(d => {
  console.log(`- ${d.name}: ${d.panelCount} paneles`);
  console.log(`  URL: ${d.url}`);
});

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 DashboardManager:
    def __init__(self, token):
        self.headers = {
            'Authorization': f'Bearer {token}',
            'Content-Type': 'application/json'
        }

    def get_all_dashboards(self, page=1, page_size=50):
        """Obtener lista paginada de paneles de control."""
        url = f'{BASE_URL}/api/{TENANT_ID}/{PROJECT_ID}/dashboard'
        params = {'page': page, 'pageSize': page_size}
        response = requests.get(url, headers=self.headers, params=params)
        return response.json()

    def get_dashboard(self, dashboard_id):
        """Obtener detalles del panel de control."""
        url = f'{BASE_URL}/api/{TENANT_ID}/{PROJECT_ID}/dashboard/{dashboard_id}'
        response = requests.get(url, headers=self.headers)

        if response.ok:
            return response.json()
        elif response.status_code == 404:
            raise Exception('Dashboard not found')
        else:
            raise Exception(f'Failed to get dashboard: {response.status_code}')

    def list_all_dashboards(self):
        """Obtener todos los paneles de control (manejo de paginación)."""
        all_dashboards = []
        page = 1

        while True:
            result = self.get_all_dashboards(page=page)
            all_dashboards.extend(result['dashboards'])

            if len(all_dashboards) >= result['totalCount']:
                break
            page += 1

        return all_dashboards

# Uso
manager = DashboardManager('your-auth-token')

# Obtener todos los paneles de control
dashboards = manager.get_all_dashboards()
print(f"Total de paneles de control: {dashboards['totalCount']}")

for dashboard in dashboards['dashboards']:
    print(f"\nPanel de control: {dashboard['name']}")
    print(f"  Paneles: {dashboard['panelCount']}")
    print(f"  URL: {dashboard['url']}")

C#

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

public class DashboardListReturn
{
    public List<DashboardReturn> Dashboards { get; set; }
    public int TotalCount { get; set; }
    public int Page { get; set; }
    public int PageSize { get; set; }
}

public class DashboardReturn
{
    public Guid DashboardId { get; set; }
    public Guid ProjectId { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
    public int PanelCount { get; set; }
    public string Url { get; set; }
    public DateTime DateCreated { get; set; }
    public DateTime DateModified { get; set; }
    public string CreatedBy { get; set; }
    public string ModifiedBy { get; set; }
}

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

    public DashboardApiClient(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<DashboardListReturn> GetAllDashboardsAsync(int page = 1, int pageSize = 50)
    {
        var url = $"{_baseUrl}/api/{_tenantId}/{_projectId}/dashboard?page={page}&pageSize={pageSize}";
        var response = await _httpClient.GetAsync(url);

        if (response.IsSuccessStatusCode)
        {
            var json = await response.Content.ReadAsStringAsync();
            return JsonSerializer.Deserialize<DashboardListReturn>(json,
                new JsonSerializerOptions { PropertyNameCaseInsensitive = true });
        }

        throw new Exception($"Failed to get dashboards: {response.StatusCode}");
    }

    public async Task<DashboardReturn> GetDashboardAsync(Guid dashboardId)
    {
        var url = $"{_baseUrl}/api/{_tenantId}/{_projectId}/dashboard/{dashboardId}";
        var response = await _httpClient.GetAsync(url);

        if (response.IsSuccessStatusCode)
        {
            var json = await response.Content.ReadAsStringAsync();
            return JsonSerializer.Deserialize<DashboardReturn>(json,
                new JsonSerializerOptions { PropertyNameCaseInsensitive = true });
        }
        else if (response.StatusCode == System.Net.HttpStatusCode.NotFound)
        {
            throw new Exception($"Dashboard {dashboardId} not found");
        }

        throw new Exception($"Failed to get dashboard: {response.StatusCode}");
    }
}