Debug: agregar logging extensivo al endpoint de panorama
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 44s
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 44s
- Agregar logs para verificar que las cards se encuentren correctamente - Agregar logs detallados de los parámetros enviados a cada query - Agregar logs de la estructura de respuesta de Metabase - Agregar logs de la transformación de datos (single row y multiple rows) - Esto ayudará a diagnosticar por qué las respuestas están vacías
This commit is contained in:
@@ -18,15 +18,21 @@ export default defineEventHandler(async (event) => {
|
||||
|
||||
const cards: Record<string, any> = {}
|
||||
|
||||
console.log('[Panorama] Available cards:', allCards.map((c: any) => ({ id: c.id, name: c.name })))
|
||||
console.log('[Panorama] Looking for queries:', queryNames)
|
||||
|
||||
for (const [key, name] of Object.entries(queryNames)) {
|
||||
const card = allCards.find((c: any) => c.name === name)
|
||||
if (!card) {
|
||||
console.warn(`[Panorama] Query not found: ${name}`)
|
||||
} else {
|
||||
console.log(`[Panorama] Found card ${key}: ${name} (ID: ${card.id})`)
|
||||
cards[key] = card
|
||||
}
|
||||
}
|
||||
|
||||
console.log('[Panorama] Cards to execute:', Object.keys(cards))
|
||||
|
||||
// Build parameters array for Metabase queries
|
||||
// Convertir null a string vacío para que las queries usen NULLIF correctamente
|
||||
const parameters = [
|
||||
@@ -55,12 +61,17 @@ export default defineEventHandler(async (event) => {
|
||||
}
|
||||
|
||||
try {
|
||||
console.log(`[Panorama] Executing query: ${name} (ID: ${cardId})`)
|
||||
console.log(`[Panorama] Executing query: ${name} (ID: ${cardId}) with params:`, JSON.stringify(parameters))
|
||||
const result = await executeCardQuery(cardId, parameters)
|
||||
console.log(`[Panorama] Query ${name} returned ${result.data?.rows?.length || 0} rows`)
|
||||
console.log(`[Panorama] Query ${name} result:`, {
|
||||
hasData: !!result.data,
|
||||
rowsLength: result.data?.rows?.length || 0,
|
||||
colsLength: result.data?.cols?.length || 0,
|
||||
firstRow: result.data?.rows?.[0] || null
|
||||
})
|
||||
return result
|
||||
} catch (error: any) {
|
||||
console.error(`[Panorama] Error executing ${name}:`, error.message)
|
||||
console.error(`[Panorama] Error executing ${name}:`, error.message, error.stack)
|
||||
return defaultValue
|
||||
}
|
||||
}
|
||||
@@ -89,7 +100,18 @@ export default defineEventHandler(async (event) => {
|
||||
|
||||
// Transform Metabase responses to objects for easier frontend consumption
|
||||
const transformSingleRow = (result: any) => {
|
||||
if (!result.data?.rows?.[0] || !result.data?.cols) return {}
|
||||
console.log('[Panorama] transformSingleRow input:', {
|
||||
hasData: !!result.data,
|
||||
hasRows: !!result.data?.rows,
|
||||
hasCols: !!result.data?.cols,
|
||||
rowsLength: result.data?.rows?.length,
|
||||
colsLength: result.data?.cols?.length
|
||||
})
|
||||
|
||||
if (!result.data?.rows?.[0] || !result.data?.cols) {
|
||||
console.warn('[Panorama] transformSingleRow: Missing data, rows, or cols')
|
||||
return {}
|
||||
}
|
||||
|
||||
const row = result.data.rows[0]
|
||||
const cols = result.data.cols
|
||||
@@ -99,20 +121,34 @@ export default defineEventHandler(async (event) => {
|
||||
obj[col.name] = row[index]
|
||||
})
|
||||
|
||||
console.log('[Panorama] transformSingleRow output:', obj)
|
||||
return obj
|
||||
}
|
||||
|
||||
const transformMultipleRows = (result: any) => {
|
||||
if (!result.data?.rows || !result.data?.cols) return []
|
||||
console.log('[Panorama] transformMultipleRows input:', {
|
||||
hasData: !!result.data,
|
||||
hasRows: !!result.data?.rows,
|
||||
hasCols: !!result.data?.cols,
|
||||
rowsLength: result.data?.rows?.length
|
||||
})
|
||||
|
||||
if (!result.data?.rows || !result.data?.cols) {
|
||||
console.warn('[Panorama] transformMultipleRows: Missing data, rows, or cols')
|
||||
return []
|
||||
}
|
||||
|
||||
const cols = result.data.cols
|
||||
return result.data.rows.map((row: any[]) => {
|
||||
const transformed = result.data.rows.map((row: any[]) => {
|
||||
const obj: any = {}
|
||||
cols.forEach((col: any, index: number) => {
|
||||
obj[col.name] = row[index]
|
||||
})
|
||||
return obj
|
||||
})
|
||||
|
||||
console.log('[Panorama] transformMultipleRows output:', transformed.length, 'rows')
|
||||
return transformed
|
||||
}
|
||||
|
||||
// Return all data in a structured format
|
||||
|
||||
Reference in New Issue
Block a user