La bitácora turnero_tv_log solo se podía consultar con SQL, así que en la práctica nadie la iba a mirar. La pantalla de Actividad (Reportes → Actividad) muestra ahora, en lenguaje llano: cuántos llamados con voz hubo en 7 días, qué porcentaje habló completo, cuántos salieron mudos y cuántos se recuperaron con reintento, más los últimos fallos con fecha, turno y voz usada. La tarjeta no aparece mientras no haya datos (recién desplegado), para no mostrar una sección vacía. De paso: el ancla del parche se comió el async de exportarCSV; restaurado y verificado bloque por bloque. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
46 lines
1.4 KiB
PHP
46 lines
1.4 KiB
PHP
<?php
|
|
/**
|
|
* GET /api/lab/get_tv_log.php — Bitácora de la voz del televisor.
|
|
* Para la pantalla de Actividad: resumen de salud + últimos fallos, en llano.
|
|
*/
|
|
require_once __DIR__ . '/_helpers.php';
|
|
requireMethod('GET');
|
|
|
|
$pdo = db();
|
|
|
|
// Resumen de los últimos 7 días por evento
|
|
$resumen = $pdo->query(
|
|
"SELECT evento, COUNT(*) n FROM turnero_tv_log
|
|
WHERE created_at >= DATE_SUB(NOW(), INTERVAL 7 DAY)
|
|
GROUP BY evento"
|
|
)->fetchAll(PDO::FETCH_KEY_PAIR);
|
|
|
|
// Últimos incidentes (lo normal —start/end— no se lista: solo lo que falló)
|
|
$stmt = $pdo->query(
|
|
"SELECT evento, detalle, created_at FROM turnero_tv_log
|
|
WHERE evento IN ('mudo', 'sin_start', 'error')
|
|
ORDER BY id DESC LIMIT 30"
|
|
);
|
|
$incidentes = [];
|
|
foreach ($stmt->fetchAll(PDO::FETCH_ASSOC) as $r) {
|
|
$d = json_decode($r['detalle'] ?? '{}', true) ?: [];
|
|
$incidentes[] = [
|
|
'cuando' => $r['created_at'],
|
|
'evento' => $r['evento'],
|
|
'turno' => $d['cod'] ?? null,
|
|
'voz' => $d['voz'] ?? null,
|
|
];
|
|
}
|
|
|
|
$anuncios = (int)($resumen['start'] ?? 0);
|
|
$mudos = (int)($resumen['mudo'] ?? 0);
|
|
$avisos = (int)($resumen['sin_start'] ?? 0) + (int)($resumen['error'] ?? 0);
|
|
|
|
jsonOk([
|
|
'anuncios_7d' => $anuncios,
|
|
'completos_7d' => (int)($resumen['end'] ?? 0),
|
|
'mudos_7d' => $mudos,
|
|
'avisos_7d' => $avisos,
|
|
'incidentes' => $incidentes,
|
|
]);
|