Files
sistema_funcionando_lastwar/scripts/translation_stats.php

122 lines
3.5 KiB
PHP
Executable File

#!/usr/bin/env php
<?php
// scripts/translation_stats.php
// Muestra estadísticas del sistema de traducción
require_once __DIR__ . '/../config/config.php';
require_once __DIR__ . '/../includes/db.php';
require_once __DIR__ . '/../src/TranslationCache.php';
echo "\n=== ESTADÍSTICAS DEL SISTEMA DE TRADUCCIÓN ===\n\n";
// Estadísticas de la cola
echo "📊 COLA DE TRADUCCIÓN:\n";
$stmt = $pdo->query("
SELECT
status,
COUNT(*) as count,
AVG(attempts) as avg_attempts
FROM translation_queue
GROUP BY status
");
$queueStats = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach ($queueStats as $stat) {
$avgAttempts = round($stat['avg_attempts'], 2);
echo " {$stat['status']}: {$stat['count']} (avg attempts: {$avgAttempts})\n";
}
// Total de traducciones hoy
$stmt = $pdo->query("
SELECT COUNT(*) as count
FROM translation_queue
WHERE DATE(created_at) = CURDATE()
");
$todayCount = $stmt->fetchColumn();
echo "\n Traducciones hoy: {$todayCount}\n";
// Traducciones por plataforma
echo "\n📱 POR PLATAFORMA:\n";
$stmt = $pdo->query("
SELECT
platform,
status,
COUNT(*) as count
FROM translation_queue
WHERE DATE(created_at) = CURDATE()
GROUP BY platform, status
");
$platformStats = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach ($platformStats as $stat) {
echo " {$stat['platform']} - {$stat['status']}: {$stat['count']}\n";
}
// Workers activos
echo "\n👷 WORKERS ACTIVOS:\n";
$workerCount = 0;
exec("ps aux | grep -c '[T]ranslationWorker'", $output, $returnCode);
if ($returnCode === 0 && isset($output[0])) {
$workerCount = (int)$output[0];
}
echo " Workers en ejecución: {$workerCount}\n";
// Workers únicos en la BD
$stmt = $pdo->query("
SELECT DISTINCT worker_id, COUNT(*) as jobs
FROM translation_queue
WHERE status = 'processing'
GROUP BY worker_id
");
$activeWorkers = $stmt->fetchAll(PDO::FETCH_ASSOC);
if (!empty($activeWorkers)) {
echo "\n Workers procesando:\n";
foreach ($activeWorkers as $worker) {
echo " - {$worker['worker_id']}: {$worker['jobs']} job(s)\n";
}
}
// Estadísticas de caché
echo "\n💾 CACHÉ DE TRADUCCIONES:\n";
try {
$cache = new TranslationCache();
$cacheStats = $cache->getStats();
if ($cacheStats['enabled']) {
echo " Estado: Habilitado ✓\n";
echo " Hits: {$cacheStats['hits']}\n";
echo " Misses: {$cacheStats['misses']}\n";
echo " Total requests: {$cacheStats['total_requests']}\n";
echo " Hit rate: {$cacheStats['hit_rate']}%\n";
} else {
echo " Estado: Deshabilitado ✗\n";
}
} catch (Exception $e) {
echo " Error: " . $e->getMessage() . "\n";
}
// Tiempos promedio
echo "\n⏱️ RENDIMIENTO:\n";
$stmt = $pdo->query("
SELECT
AVG(TIMESTAMPDIFF(SECOND, created_at, processed_at)) as avg_time,
MIN(TIMESTAMPDIFF(SECOND, created_at, processed_at)) as min_time,
MAX(TIMESTAMPDIFF(SECOND, created_at, processed_at)) as max_time
FROM translation_queue
WHERE status = 'completed'
AND DATE(created_at) = CURDATE()
AND processed_at IS NOT NULL
");
$perfStats = $stmt->fetch(PDO::FETCH_ASSOC);
if ($perfStats && $perfStats['avg_time'] !== null) {
echo " Tiempo promedio: " . round($perfStats['avg_time'], 2) . " segundos\n";
echo " Tiempo mínimo: " . round($perfStats['min_time'], 2) . " segundos\n";
echo " Tiempo máximo: " . round($perfStats['max_time'], 2) . " segundos\n";
} else {
echo " No hay datos de rendimiento para hoy\n";
}
echo "\n" . str_repeat("=", 50) . "\n\n";