Saltar al contenido
CADCAMFUN
Documentos

Documentación

Analítica

Métricas de aplicaciones, actividad reciente, consultas de uso y solicitudes de seguimiento.

Traducido automáticamente del inglés. Ver el original en inglés

Área de pruebas

Envíe estas solicitudes a su propio sidecar en funcionamiento. Los valores permanecen en este navegador.

No conectado
¿Cómo funciona esto?

El sidecar escucha en un puerto loopback elegido al inicio y lo imprime en su ready línea; use esa URL y el CADCAMFUN_TOKEN se empezó con. Las solicitudes van directamente desde esta página a esa dirección.

El sidecar envía encabezados CORS solo a los orígenes Tauri y a http://localhost o http://127.0.0.1 en cualquier puerto. Desde los documentos alojados, el navegador bloquea la respuesta, así que ejecute los documentos localmente (bun run dev en packages/web) para usar el área de juegos o copiar la solicitud como curl. Para experimentar sin tocar datos reales, inicie el sidecar con CADCAMFUN_DATA_DIR apuntado a un directorio desechable - ver el tutorial de la API.

Operaciones

10 endpoints en el analytics grupo, generado a partir del propio sidecar Documento OpenAPI. Las operaciones protegidas toman Authorization: Bearer $CADCAMFUN_TOKEN; ver autenticación. El comportamiento y los límites están en la guía del subsistema.

conseguir /api/analytics/system-metrics analytics.systemMetrics
conseguir /api/analytics analytics.index
conseguir /api/analytics/dashboard-data analytics.dashboardData
correo /api/analytics/log-view analytics.logView
conseguir /api/analytics/recent-activity analytics.recentActivity
conseguir /api/analytics/user-history analytics.userHistory
conseguir /api/analytics/user-metrics analytics.userMetrics
conseguir /api/analytics/user-usage analytics.userUsage
borrar /api/analytics/user-usage analytics.clearUserUsage
correo /api/analytics/track analytics.track
Operaciones de análisis en 3D Arrastrar para orbitar · desplazarse para hacer zoom · arrastrar con el botón derecho para desplazarse
Un bloque por operación (10), apilado por sección de recursos de esta página y coloreado por método: GET verde, POST naranja, PUT azul, PATCH violeta, DELETE rojo. Generado a partir del documento OpenAPI en el momento de la compilación.

/api/analytics/system-metrics

conseguir /api/analytics/system-metrics # analytics.systemMetrics

Requiere Authorization: Bearer <token>.

Respuestas
200 objeto application/json
{
  cpuUsage: number | "Infinity" | "-Infinity" | "NaN"
  memoryUsage: number | "Infinity" | "-Infinity" | "NaN"
  storageUsed: number | "Infinity" | "-Infinity" | "NaN"
  networkLatency: number | "Infinity" | "-Infinity" | "NaN"
  activeConnections: number | "Infinity" | "-Infinity" | "NaN"
  cacheHitRatio: number | "Infinity" | "-Infinity" | "NaN"
  errorRate: number | "Infinity" | "-Infinity" | "NaN"
  responseTime: number | "Infinity" | "-Infinity" | "NaN"
}
401 UnauthorizedEncoded application/json
UnauthorizedEncoded
500 KeyedInternalEncoded application/json
KeyedInternalEncoded
Ejemplo de respuesta capturado · 200
OBTENER /api/analytics/system-metrics
{
  "cpuUsage": 6,
  "memoryUsage": 79,
  "storageUsed": 72,
  "networkLatency": 15,
  "activeConnections": 145,
  "cacheHitRatio": 98,
  "errorRate": 0.04,
  "responseTime": 52
}
Ejemplo de SDK
analytics.systemMetrics
import { CadCam } from "@cadcamfun/api/sdk"

const client = CadCam.make({
  baseUrl: process.env.CADCAMFUN_URL!,
  headers: { authorization: `Bearer ${process.env.CADCAMFUN_TOKEN}` },
})

// no input
const result = await client.analytics.systemMetrics()
curl
OBTENER /api/analytics/system-metrics
curl --request GET "${CADCAMFUN_URL}/api/analytics/system-metrics" \
  --header "Authorization: Bearer ${CADCAMFUN_TOKEN}"
Pruébalo

/api/analytics

conseguir /api/analytics # analytics.index

Requiere Authorization: Bearer <token>.

Parámetros
NombreEnTipoRequerido
startDate consulta cadena | null opcional
endDate consulta cadena | null opcional
itemType consulta cadena | cadena[] | null opcional
acción consulta cadena | cadena[] | null opcional
groupBy consulta cadena | null opcional
userFilter consulta cadena | cadena[] | null opcional
Respuestas
200 objeto application/json
{
  success: true
  data: {
    countByType: Array<{
      itemType: string
      _count: number | "Infinity" | "-Infinity" | "NaN"
    }>
    countByAction: Array<{
      action: string
      _count: number | "Infinity" | "-Infinity" | "NaN"
    }>
  }
  isAdmin: boolean
  filters: unknown
}
401 UnauthorizedEncoded application/json
UnauthorizedEncoded
500 AnalyticsFailureEncoded application/json
AnalyticsFailureEncoded
Ejemplo de respuesta capturado · 200
OBTENER /api/análisis
{
  "success": true,
  "data": {
    "countByType": [],
    "countByAction": []
  },
  "isAdmin": true,
  "filters": {
    "groupBy": "day"
  }
}
Ejemplo de SDK
analytics.index
import { CadCam } from "@cadcamfun/api/sdk"

const client = CadCam.make({
  baseUrl: process.env.CADCAMFUN_URL!,
  headers: { authorization: `Bearer ${process.env.CADCAMFUN_TOKEN}` },
})

// AnalyticsIndexInput
const result = await client.analytics.index({})
curl
OBTENER /api/análisis
curl --request GET "${CADCAMFUN_URL}/api/analytics" \
  --header "Authorization: Bearer ${CADCAMFUN_TOKEN}"
Pruébalo

/api/analytics/dashboard-data

conseguir /api/analytics/dashboard-data # analytics.dashboardData

Requiere Authorization: Bearer <token>.

Respuestas
200 objeto application/json
{
  components: {
    total: number | "Infinity" | "-Infinity" | "NaN"
    trend: number | "Infinity" | "-Infinity" | "NaN"
    recentActivity: number | "Infinity" | "-Infinity" | "NaN"
  }
  projects: {
    total: number | "Infinity" | "-Infinity" | "NaN"
    trend: number | "Infinity" | "-Infinity" | "NaN"
    activeProjects: number | "Infinity" | "-Infinity" | "NaN"
  }
  tools: {
    total: number | "Infinity" | "-Infinity" | "NaN"
    trend: number | "Infinity" | "-Infinity" | "NaN"
    mostUsed: string
  }
  materials: {
    total: number | "Infinity" | "-Infinity" | "NaN"
    trend: number | "Infinity" | "-Infinity" | "NaN"
    lowStock: number | "Infinity" | "-Infinity" | "NaN"
  }
}
401 UnauthorizedEncoded application/json
UnauthorizedEncoded
500 KeyedInternalEncoded application/json
KeyedInternalEncoded
Ejemplo de respuesta capturado · 200
OBTENER /api/analytics/dashboard-data
{
  "components": {
    "total": 0,
    "trend": 0,
    "recentActivity": 0
  },
  "projects": {
    "total": 0,
    "trend": 0,
    "activeProjects": 0
  },
  "tools": {
    "total": 0,
    "trend": 0,
    "mostUsed": "No tools used yet"
  },
  "materials": {
    "total": 0,
    "trend": 0,
    "lowStock": 0
  }
}
Ejemplo de SDK
analytics.dashboardData
import { CadCam } from "@cadcamfun/api/sdk"

const client = CadCam.make({
  baseUrl: process.env.CADCAMFUN_URL!,
  headers: { authorization: `Bearer ${process.env.CADCAMFUN_TOKEN}` },
})

// no input
const result = await client.analytics.dashboardData()
curl
OBTENER /api/analytics/dashboard-data
curl --request GET "${CADCAMFUN_URL}/api/analytics/dashboard-data" \
  --header "Authorization: Bearer ${CADCAMFUN_TOKEN}"
Pruébalo

/api/analytics/log-view

correo /api/analytics/log-view # analytics.logView

Requiere Authorization: Bearer <token>.

Cuerpo de la solicitud · requerido · aplicación/json
{
  path?: string | null
  query?: unknown | null
}
Respuestas
200 objeto application/json
{
  success: true
}
401 UnauthorizedEncoded application/json
UnauthorizedEncoded
500 InternalErrorEncoded application/json
InternalErrorEncoded
Ejemplo de SDK
analytics.logView
import { CadCam } from "@cadcamfun/api/sdk"

const client = CadCam.make({
  baseUrl: process.env.CADCAMFUN_URL!,
  headers: { authorization: `Bearer ${process.env.CADCAMFUN_TOKEN}` },
})

// AnalyticsLogViewInput
const result = await client.analytics.logView({
  path: "",
  query: null
})
curl
POST /api/analytics/log-view
curl --request POST "${CADCAMFUN_URL}/api/analytics/log-view" \
  --header "Authorization: Bearer ${CADCAMFUN_TOKEN}" \
  --header "Content-Type: application/json" \
  --data-binary @request.json
Pruébalo

/api/analytics/recent-activity

conseguir /api/analytics/recent-activity # analytics.recentActivity

Requiere Authorization: Bearer <token>.

Parámetros
NombreEnTipoRequerido
límite consulta cadena | null opcional
Respuestas
200 Matriz<objeto> application/json
Array<{
  id: string
  type: string
  action: string
  itemName: string
  timestamp: string
  userId: string
  userName: string
}>
401 UnauthorizedEncoded application/json
UnauthorizedEncoded
500 KeyedInternalEncoded application/json
KeyedInternalEncoded
Ejemplo de respuesta capturado · 200
OBTENER /api/analytics/actividad-reciente
[]
Ejemplo de SDK
analytics.recentActivity
import { CadCam } from "@cadcamfun/api/sdk"

const client = CadCam.make({
  baseUrl: process.env.CADCAMFUN_URL!,
  headers: { authorization: `Bearer ${process.env.CADCAMFUN_TOKEN}` },
})

// AnalyticsRecentActivityInput
const result = await client.analytics.recentActivity({})
curl
OBTENER /api/analytics/actividad-reciente
curl --request GET "${CADCAMFUN_URL}/api/analytics/recent-activity" \
  --header "Authorization: Bearer ${CADCAMFUN_TOKEN}"
Pruébalo

/api/analytics/user-history

conseguir /api/analytics/user-history # analytics.userHistory

Requiere Authorization: Bearer <token>.

Parámetros
NombreEnTipoRequerido
límite consulta cadena | null opcional
compensar consulta cadena | null opcional
itemType consulta cadena | cadena[] | null opcional
acción consulta cadena | cadena[] | null opcional
startDate consulta cadena | null opcional
endDate consulta cadena | null opcional
Respuestas
200 objeto application/json
{
  logs: unknown[]
  total: number | "Infinity" | "-Infinity" | "NaN"
}
401 UnauthorizedEncoded application/json
UnauthorizedEncoded
500 InternalErrorEncoded application/json
InternalErrorEncoded
Ejemplo de respuesta capturado · 200
OBTENER /api/analytics/user-history
{
  "logs": [],
  "total": 0
}
Ejemplo de SDK
analytics.userHistory
import { CadCam } from "@cadcamfun/api/sdk"

const client = CadCam.make({
  baseUrl: process.env.CADCAMFUN_URL!,
  headers: { authorization: `Bearer ${process.env.CADCAMFUN_TOKEN}` },
})

// AnalyticsUserHistoryInput
const result = await client.analytics.userHistory({})
curl
OBTENER /api/analytics/user-history
curl --request GET "${CADCAMFUN_URL}/api/analytics/user-history" \
  --header "Authorization: Bearer ${CADCAMFUN_TOKEN}"
Pruébalo

/api/analytics/user-metrics

conseguir /api/analytics/user-metrics # analytics.userMetrics

Requiere Authorization: Bearer <token>.

Parámetros
NombreEnTipoRequerido
startDate consulta cadena | null opcional
endDate consulta cadena | null opcional
groupBy consulta cadena | null opcional
métrico consulta cadena | null opcional
Respuestas
200 objeto application/json
{
  summary: {
    totalAiRequests: number | "Infinity" | "-Infinity" | "NaN"
    totalCadDrawings: number | "Infinity" | "-Infinity" | "NaN"
    totalStorageUsage: number | "Infinity" | "-Infinity" | "NaN"
    totalProjects: number | "Infinity" | "-Infinity" | "NaN"
    totalComponents: number | "Infinity" | "-Infinity" | "NaN"
    totalToolpaths: number | "Infinity" | "-Infinity" | "NaN"
    totalActivityCount?: number | "Infinity" | "-Infinity" | "NaN" | null
  }
  chartData: Array<{
    [key: string]: string | number | "Infinity" | "-Infinity" | "NaN"
  }>
}
400 AnalyticsKeyedBadRequestEncoded application/json
AnalyticsKeyedBadRequestEncoded
401 UnauthorizedEncoded application/json
UnauthorizedEncoded
500 KeyedInternalEncoded application/json
KeyedInternalEncoded
Ejemplo de respuesta capturado · 200
OBTENER /api/analytics/user-metrics
{
  "summary": {
    "totalAiRequests": 0,
    "totalCadDrawings": 0,
    "totalStorageUsage": 0,
    "totalProjects": 0,
    "totalComponents": 0,
    "totalToolpaths": 0,
    "totalActivityCount": 0
  },
  "chartData": [
    {
      "date": "2026-09-15",
      "activityCount": 0,
      "toolpathsGenerated": 0,
      "connections": 0,
      "programRuns": 0,
      "aiRequests": 0,
      "cadDrawings": 0,
      "storageUsage": 0,
      "projects": 0,
      "components": 0,
      "toolpaths": 0
    },
    {
      "date": "2026-09-16",
      "activityCount": 0,
      "toolpathsGenerated": 0,
      "connections": 0,
      "programRuns": 0,
      "aiRequests": 0,
      "cadDrawings": 0,
      "storageUsage": 0,
      "projects": 0,
      "components": 0,
      "toolpaths": 0
    },
    {
      "date": "2026-09-17",
      "activityCount": 0,
      "toolpathsGenerated": 0,
      "connections": 0,
      "programRuns": 0,
      "aiRequests": 0,
      "cadDrawings": 0,
      "storageUsage": 0,
      "projects": 0,
      "components": 0,
      "toolpaths": 0
    },
    {
      "date": "2026-09-18",
      "activityCount": 0,
      "toolpathsGenerated": 0,
      "connections": 0,
      "programRuns": 0,
      "aiRequests": 0,
      "cadDrawings": 0,
      "storageUsage": 0,
      "projects": 0,
      "components": 0,
      "toolpaths": 0
    },
    {
      "date": "2026-09-19",
      "activityCount": 0,
      "toolpathsGenerated": 0,
      "connections": 0,
      "programRuns": 0,
      "aiRequests": 0,
      "cadDrawings": 0,
      "storageUsage": 0,
      "projects": 0,
      "components": 0,
      "toolpaths": 0
    },
    {
      "date": "2026-09-20",
      "activityCount": 0,
      "toolpathsGenerated": 0,
      "connections": 0,
      "programRuns": 0,
      "aiRequests": 0,
      "cadDrawings": 0,
      "storageUsage": 0,
      "projects": 0,
      "components": 0,
      "toolpaths": 0
    },
    {
      "date": "2026-09-21",
      "activityCount": 0,
      "toolpathsGenerated": 0,
      "connections": 0,
      "programRuns": 0,
      "aiRequests": 0,
      "cadDrawings": 0,
      "storageUsage": 0,
      "projects": 0,
      "components": 0,
      "toolpaths": 0
    },
    {
      "date": "2026-09-22",
      "activityCount": 0,
      "toolpathsGenerated": 0,
      "connections": 0,
      "programRuns": 0,
      "aiRequests": 0,
      "cadDrawings": 0,
      "storageUsage": 0,
      "projects": 0,
      "components": 0,
      "toolpaths": 0
    },
    {
      "
…
Ejemplo de SDK
analytics.userMetrics
import { CadCam } from "@cadcamfun/api/sdk"

const client = CadCam.make({
  baseUrl: process.env.CADCAMFUN_URL!,
  headers: { authorization: `Bearer ${process.env.CADCAMFUN_TOKEN}` },
})

// AnalyticsUserMetricsInput
const result = await client.analytics.userMetrics({})
curl
OBTENER /api/analytics/user-metrics
curl --request GET "${CADCAMFUN_URL}/api/analytics/user-metrics" \
  --header "Authorization: Bearer ${CADCAMFUN_TOKEN}"
Pruébalo

/api/analytics/user-usage

conseguir /api/analytics/user-usage # analytics.userUsage

Requiere Authorization: Bearer <token>.

Parámetros
NombreEnTipoRequerido
userId consulta cadena | null opcional
startDate consulta cadena | null opcional
endDate consulta cadena | null opcional
período consulta cadena | null opcional
Respuestas
200 objeto application/json
{
  summary?: unknown | null
  breakdown?: unknown | null
  users?: unknown[] | null
  systemStats?: unknown | null
}
401 UnauthorizedEncoded application/json
UnauthorizedEncoded
403 AnalyticsKeyedForbiddenEncoded application/json
AnalyticsKeyedForbiddenEncoded
500 KeyedInternalEncoded application/json
KeyedInternalEncoded
Ejemplo de respuesta capturado · 200
OBTENER /api/analytics/uso-usuario
{
  "users": [],
  "systemStats": {
    "totalUsers": 0,
    "totalTokens": 0,
    "totalCost": 0,
    "totalRequests": 0,
    "averageCostPerUser": 0,
    "topSpendingUsers": [],
    "modelDistribution": {}
  }
}
Ejemplo de SDK
analytics.userUsage
import { CadCam } from "@cadcamfun/api/sdk"

const client = CadCam.make({
  baseUrl: process.env.CADCAMFUN_URL!,
  headers: { authorization: `Bearer ${process.env.CADCAMFUN_TOKEN}` },
})

// AnalyticsUserUsageInput
const result = await client.analytics.userUsage({})
curl
OBTENER /api/analytics/uso-usuario
curl --request GET "${CADCAMFUN_URL}/api/analytics/user-usage" \
  --header "Authorization: Bearer ${CADCAMFUN_TOKEN}"
Pruébalo
borrar /api/analytics/user-usage # analytics.clearUserUsage

Requiere Authorization: Bearer <token>.

Respuestas
200 objeto application/json
{
  message: string
}
401 UnauthorizedEncoded application/json
UnauthorizedEncoded
500 KeyedInternalEncoded application/json
KeyedInternalEncoded
Ejemplo de SDK
analytics.clearUserUsage
import { CadCam } from "@cadcamfun/api/sdk"

const client = CadCam.make({
  baseUrl: process.env.CADCAMFUN_URL!,
  headers: { authorization: `Bearer ${process.env.CADCAMFUN_TOKEN}` },
})

// no input
const result = await client.analytics.clearUserUsage()
curl
ELIMINAR /api/analytics/uso-usuario
curl --request DELETE "${CADCAMFUN_URL}/api/analytics/user-usage" \
  --header "Authorization: Bearer ${CADCAMFUN_TOKEN}"
Pruébalo

/api/analytics/track

correo /api/analytics/track # analytics.track

Requiere Authorization: Bearer <token>.

Cuerpo de la solicitud · requerido · aplicación/json
{
  itemId?: string | null
  itemType?: string | null
  action?: string | null
  details?: unknown | null
}
Respuestas
200 objeto application/json
{
  success: true
}
400 BadRequestEncoded application/json
BadRequestEncoded
401 UnauthorizedEncoded application/json
UnauthorizedEncoded
500 InternalErrorEncoded application/json
InternalErrorEncoded
Ejemplo de SDK
analytics.track
import { CadCam } from "@cadcamfun/api/sdk"

const client = CadCam.make({
  baseUrl: process.env.CADCAMFUN_URL!,
  headers: { authorization: `Bearer ${process.env.CADCAMFUN_TOKEN}` },
})

// AnalyticsTrackInput
const result = await client.analytics.track({
  itemId: "",
  itemType: "",
  action: "",
  details: null
})
curl
ENVIAR /api/analytics/track
curl --request POST "${CADCAMFUN_URL}/api/analytics/track" \
  --header "Authorization: Bearer ${CADCAMFUN_TOKEN}" \
  --header "Content-Type: application/json" \
  --data-binary @request.json
Pruébalo

esquemas

Esquemas con nombre accesibles desde los parámetros, cuerpos y respuestas de este grupo. A ? marca un campo opcional; | null marca un campo que puede estar presente con un valor nulo.

AnalyticsFailureEncoded
{
  _tag: "AnalyticsFailure"
  success: false
  message: string
}
AnalyticsKeyedBadRequestEncoded
{
  _tag: "AnalyticsKeyedBadRequest"
  error: string
}
AnalyticsKeyedForbiddenEncoded
{
  _tag: "AnalyticsKeyedForbidden"
  error: string
}
BadRequestEncoded
{
  _tag: "BadRequest"
  message: string
}
InternalErrorEncoded
{
  _tag: "InternalError"
  message: string
}
KeyedInternalEncoded
{
  _tag: "KeyedInternal"
  error: string
}
UnauthorizedEncoded
{
  _tag: "Unauthorized"
  message: string
}

Llamando a este grupo

Los identificadores de operación tienen la forma analytics.<name>. El SDK de promesa generado (@cadcamfun/api/sdk) expone la mayoría de ellos como client.<namespace>.<method>(input), dónde input es un objeto plano de parámetros de ruta y campos de cuerpo; El ejemplo de SDK de cada tarjeta muestra el acceso exacto y el tipo de entrada. No se generan cargas de varias partes, respuestas binarias o JavaScript ni webhooks sin formato; esas tarjetas muestran fetch en su lugar.

Errores del SDK de Promise
import { CadCam, ClientError } from "@cadcamfun/api/sdk"

const client = CadCam.make({
  baseUrl: process.env.CADCAMFUN_URL!,
  headers: { authorization: `Bearer ${process.env.CADCAMFUN_TOKEN}` },
})

try {
  await client.projects.list()
} catch (error) {
  if (error instanceof ClientError) {
    // Transport | UnexpectedStatus | UnsupportedContentType | MalformedResponse | SseEventTooLarge
  } else {
    // a declared error body: switch on error._tag
  }
}

Solución de problemas

Síntomacausa probableArreglar
401 en cada llamadaToken de un lanzamiento anterior o faltante Bearer prefijoEnviar Authorization: Bearer <token> con la ficha con la que se inició el sidecar.
400 antes de que ocurra algoEl cuerpo o el parámetro no coincide con el esquemaCompare la carga útil con el esquema de solicitud en la tarjeta.
403 o 404 en un registro que puedes ver en otro sitioLa cuenta de actuación difiere.enviar la derecha x-session-tokeno utilice el perfil local propietario del registro.
409Estado conflictivo, como un nombre duplicado o un encabezado de sucursal obsoletoVuelva a leer el recurso y vuelva a intentarlo con los datos actuales.
Pruébelo, dice "bloqueado por CORS"Los documentos se entregan desde un origen sin bucle invertido.Ejecute los documentos localmente o copie la solicitud como curl.
Conexión rechazadaEl sidecar se reinició en un nuevo puerto.Leer el puerto del nuevo ready línea.