![]() Server : Apache/2 System : Linux server-15-235-50-60 5.15.0-164-generic #174-Ubuntu SMP Fri Nov 14 20:25:16 UTC 2025 x86_64 User : gositeme ( 1004) PHP Version : 8.2.29 Disable Function : exec,system,passthru,shell_exec,proc_close,proc_open,dl,popen,show_source,posix_kill,posix_mkfifo,posix_getpwuid,posix_setpgid,posix_setsid,posix_setuid,posix_setgid,posix_seteuid,posix_setegid,posix_uname Directory : /home/gositeme/.cursor-server/data/User/History/-2a76b433/ |
<?php
/**
* Comprehensive Statistics Report
* Analyzes your website's song generation and provides detailed insights
*/
require_once 'config/database.php';
$pdo = getDBConnection();
echo "<h1>🎵 SoundStudioPro - Comprehensive Statistics Report</h1>";
echo "<p><em>Generated on: " . date('Y-m-d H:i:s') . "</em></p>";
// Database Statistics
echo "<h2>🗄️ Database Statistics</h2>";
// Overall stats
$overall_stats = $pdo->query("
SELECT
COUNT(*) as total_tracks,
COUNT(CASE WHEN status = 'complete' THEN 1 END) as completed,
COUNT(CASE WHEN status = 'processing' THEN 1 END) as processing,
COUNT(CASE WHEN status = 'failed' THEN 1 END) as failed,
COUNT(CASE WHEN metadata IS NOT NULL AND metadata != '' THEN 1 END) as with_metadata,
COUNT(CASE WHEN task_id IS NOT NULL THEN 1 END) as with_task_id,
COUNT(CASE WHEN user_id IS NOT NULL THEN 1 END) as with_user,
COUNT(CASE WHEN user_id IS NULL THEN 1 END) as orphaned
FROM music_tracks
")->fetch();
echo "<div style='display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 1rem; margin-bottom: 2rem;'>";
echo "<div style='background: #1a1a1a; padding: 1rem; border-radius: 8px; color: white;'>";
echo "<h3>Total Tracks</h3>";
echo "<div style='font-size: 2rem; font-weight: bold; color: #667eea;'>{$overall_stats['total_tracks']}</div>";
echo "</div>";
echo "<div style='background: #1a1a1a; padding: 1rem; border-radius: 8px; color: white;'>";
echo "<h3>Completed</h3>";
echo "<div style='font-size: 2rem; font-weight: bold; color: #48bb78;'>{$overall_stats['completed']}</div>";
echo "<div style='font-size: 0.9rem; color: #a0aec0;'>" . round(($overall_stats['completed'] / $overall_stats['total_tracks']) * 100, 1) . "% success rate</div>";
echo "</div>";
echo "<div style='background: #1a1a1a; padding: 1rem; border-radius: 8px; color: white;'>";
echo "<h3>Processing</h3>";
echo "<div style='font-size: 2rem; font-weight: bold; color: #f59e0b;'>{$overall_stats['processing']}</div>";
echo "</div>";
echo "<div style='background: #1a1a1a; padding: 1rem; border-radius: 8px; color: white;'>";
echo "<h3>Failed</h3>";
echo "<div style='font-size: 2rem; font-weight: bold; color: #f56565;'>{$overall_stats['failed']}</div>";
echo "</div>";
echo "<div style='background: #1a1a1a; padding: 1rem; border-radius: 8px; color: white;'>";
echo "<h3>With Metadata</h3>";
echo "<div style='font-size: 2rem; font-weight: bold; color: #667eea;'>{$overall_stats['with_metadata']}</div>";
echo "</div>";
echo "<div style='background: #1a1a1a; padding: 1rem; border-radius: 8px; color: white;'>";
echo "<h3>Orphaned</h3>";
echo "<div style='font-size: 2rem; font-weight: bold; color: #f56565;'>{$overall_stats['orphaned']}</div>";
echo "</div>";
echo "</div>";
// User Statistics
echo "<h2>👥 User Statistics</h2>";
$user_stats = $pdo->query("
SELECT
COUNT(*) as total_users,
COUNT(CASE WHEN is_admin = 1 THEN 1 END) as admin_users,
COUNT(CASE WHEN plan = 'free' THEN 1 END) as free_users,
COUNT(CASE WHEN plan = 'starter' THEN 1 END) as starter_users,
COUNT(CASE WHEN plan = 'pro' THEN 1 END) as pro_users,
SUM(credits) as total_credits,
AVG(credits) as avg_credits
FROM users
")->fetch();
echo "<div style='display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 1rem; margin-bottom: 2rem;'>";
echo "<div style='background: #1a1a1a; padding: 1rem; border-radius: 8px; color: white;'>";
echo "<h3>Total Users</h3>";
echo "<div style='font-size: 2rem; font-weight: bold; color: #667eea;'>{$user_stats['total_users']}</div>";
echo "</div>";
echo "<div style='background: #1a1a1a; padding: 1rem; border-radius: 8px; color: white;'>";
echo "<h3>Admin Users</h3>";
echo "<div style='font-size: 2rem; font-weight: bold; color: #f59e0b;'>{$user_stats['admin_users']}</div>";
echo "</div>";
echo "<div style='background: #1a1a1a; padding: 1rem; border-radius: 8px; color: white;'>";
echo "<h3>Premium Users</h3>";
echo "<div style='font-size: 2rem; font-weight: bold; color: #48bb78;'>" . ($user_stats['starter_users'] + $user_stats['pro_users']) . "</div>";
echo "<div style='font-size: 0.9rem; color: #a0aec0;'>Starter: {$user_stats['starter_users']} | Pro: {$user_stats['pro_users']}</div>";
echo "</div>";
echo "<div style='background: #1a1a1a; padding: 1rem; border-radius: 8px; color: white;'>";
echo "<h3>Total Credits</h3>";
echo "<div style='font-size: 2rem; font-weight: bold; color: #667eea;'>{$user_stats['total_credits']}</div>";
echo "<div style='font-size: 0.9rem; color: #a0aec0;'>Avg: " . round($user_stats['avg_credits'], 1) . "</div>";
echo "</div>";
echo "</div>";
// Top Users by Track Count
echo "<h2>🏆 Top Users by Track Generation</h2>";
$top_users = $pdo->query("
SELECT
u.name,
u.email,
u.plan,
COUNT(mt.id) as track_count,
COUNT(CASE WHEN mt.status = 'complete' THEN 1 END) as completed_count,
COUNT(CASE WHEN mt.status = 'failed' THEN 1 END) as failed_count,
u.credits,
u.created_at
FROM users u
LEFT JOIN music_tracks mt ON u.id = mt.user_id
GROUP BY u.id, u.name, u.email, u.plan, u.credits, u.created_at
HAVING track_count > 0
ORDER BY track_count DESC
LIMIT 10
")->fetchAll();
echo "<table style='width: 100%; border-collapse: collapse; background: #1a1a1a; color: white; border-radius: 8px; overflow: hidden;'>";
echo "<thead style='background: #2a2a2a;'>";
echo "<tr>";
echo "<th style='padding: 1rem; text-align: left;'>User</th>";
echo "<th style='padding: 1rem; text-align: left;'>Plan</th>";
echo "<th style='padding: 1rem; text-align: center;'>Total Tracks</th>";
echo "<th style='padding: 1rem; text-align: center;'>Completed</th>";
echo "<th style='padding: 1rem; text-align: center;'>Failed</th>";
echo "<th style='padding: 1rem; text-align: center;'>Credits</th>";
echo "<th style='padding: 1rem; text-align: left;'>Joined</th>";
echo "</tr>";
echo "</thead>";
echo "<tbody>";
foreach ($top_users as $user) {
$success_rate = $user['track_count'] > 0 ? round(($user['completed_count'] / $user['track_count']) * 100, 1) : 0;
echo "<tr style='border-bottom: 1px solid #333;'>";
echo "<td style='padding: 1rem;'>";
echo "<div style='font-weight: bold;'>{$user['name']}</div>";
echo "<div style='font-size: 0.9rem; color: #a0aec0;'>{$user['email']}</div>";
echo "</td>";
echo "<td style='padding: 1rem;'>";
echo "<span style='padding: 0.3rem 0.8rem; border-radius: 12px; font-size: 0.8rem; background: " .
($user['plan'] === 'pro' ? '#764ba2' : ($user['plan'] === 'starter' ? '#667eea' : '#a0aec0')) .
"; color: white;'>{$user['plan']}</span>";
echo "</td>";
echo "<td style='padding: 1rem; text-align: center; font-weight: bold;'>{$user['track_count']}</td>";
echo "<td style='padding: 1rem; text-align: center; color: #48bb78;'>{$user['completed_count']}</td>";
echo "<td style='padding: 1rem; text-align: center; color: #f56565;'>{$user['failed_count']}</td>";
echo "<td style='padding: 1rem; text-align: center;'>{$user['credits']}</td>";
echo "<td style='padding: 1rem;'>" . date('M j, Y', strtotime($user['created_at'])) . "</td>";
echo "</tr>";
}
echo "</tbody>";
echo "</table>";
// Recent Activity
echo "<h2>📈 Recent Activity (Last 7 Days)</h2>";
$recent_activity = $pdo->query("
SELECT
DATE(created_at) as date,
COUNT(*) as total_created,
COUNT(CASE WHEN status = 'complete' THEN 1 END) as completed,
COUNT(CASE WHEN status = 'failed' THEN 1 END) as failed
FROM music_tracks
WHERE created_at >= DATE_SUB(NOW(), INTERVAL 7 DAY)
GROUP BY DATE(created_at)
ORDER BY date DESC
")->fetchAll();
echo "<table style='width: 100%; border-collapse: collapse; background: #1a1a1a; color: white; border-radius: 8px; overflow: hidden;'>";
echo "<thead style='background: #2a2a2a;'>";
echo "<tr>";
echo "<th style='padding: 1rem; text-align: left;'>Date</th>";
echo "<th style='padding: 1rem; text-align: center;'>Tracks Created</th>";
echo "<th style='padding: 1rem; text-align: center;'>Completed</th>";
echo "<th style='padding: 1rem; text-align: center;'>Failed</th>";
echo "<th style='padding: 1rem; text-align: center;'>Success Rate</th>";
echo "</tr>";
echo "</thead>";
echo "<tbody>";
foreach ($recent_activity as $day) {
$success_rate = $day['total_created'] > 0 ? round(($day['completed'] / $day['total_created']) * 100, 1) : 0;
echo "<tr style='border-bottom: 1px solid #333;'>";
echo "<td style='padding: 1rem;'>" . date('M j, Y', strtotime($day['date'])) . "</td>";
echo "<td style='padding: 1rem; text-align: center; font-weight: bold;'>{$day['total_created']}</td>";
echo "<td style='padding: 1rem; text-align: center; color: #48bb78;'>{$day['completed']}</td>";
echo "<td style='padding: 1rem; text-align: center; color: #f56565;'>{$day['failed']}</td>";
echo "<td style='padding: 1rem; text-align: center; color: " . ($success_rate >= 80 ? '#48bb78' : ($success_rate >= 60 ? '#f59e0b' : '#f56565')) . ";'>{$success_rate}%</td>";
echo "</tr>";
}
echo "</tbody>";
echo "</table>";
// File System Analysis
echo "<h2>📁 File System Analysis</h2>";
// Count result files
$result_files = glob('task_results/*.json');
$result_count = count($result_files);
// Count audio files
$audio_files = glob('uploads/*.mp3');
$audio_count = count($audio_files);
echo "<div style='display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 1rem; margin-bottom: 2rem;'>";
echo "<div style='background: #1a1a1a; padding: 1rem; border-radius: 8px; color: white;'>";
echo "<h3>API Result Files</h3>";
echo "<div style='font-size: 2rem; font-weight: bold; color: #667eea;'>{$result_count}</div>";
echo "<div style='font-size: 0.9rem; color: #a0aec0;'>JSON files in task_results/</div>";
echo "</div>";
echo "<div style='background: #1a1a1a; padding: 1rem; border-radius: 8px; color: white;'>";
echo "<h3>Audio Files</h3>";
echo "<div style='font-size: 2rem; font-weight: bold; color: #48bb78;'>{$audio_count}</div>";
echo "<div style='font-size: 0.9rem; color: #a0aec0;'>MP3 files in uploads/</div>";
echo "</div>";
echo "</div>";
// Track Analysis by Status
echo "<h2>🎵 Track Analysis by Status</h2>";
$status_analysis = $pdo->query("
SELECT
status,
COUNT(*) as count,
AVG(TIMESTAMPDIFF(MINUTE, created_at,
CASE WHEN status = 'complete' THEN updated_at ELSE NOW() END
)) as avg_duration_minutes,
MIN(created_at) as first_created,
MAX(created_at) as last_created
FROM music_tracks
GROUP BY status
ORDER BY count DESC
")->fetchAll();
echo "<table style='width: 100%; border-collapse: collapse; background: #1a1a1a; color: white; border-radius: 8px; overflow: hidden;'>";
echo "<thead style='background: #2a2a2a;'>";
echo "<tr>";
echo "<th style='padding: 1rem; text-align: left;'>Status</th>";
echo "<th style='padding: 1rem; text-align: center;'>Count</th>";
echo "<th style='padding: 1rem; text-align: center;'>Percentage</th>";
echo "<th style='padding: 1rem; text-align: center;'>Avg Duration</th>";
echo "<th style='padding: 1rem; text-align: left;'>First Created</th>";
echo "<th style='padding: 1rem; text-align: left;'>Last Created</th>";
echo "</tr>";
echo "</thead>";
echo "<tbody>";
foreach ($status_analysis as $status) {
$percentage = round(($status['count'] / $overall_stats['total_tracks']) * 100, 1);
$color = $status['status'] === 'complete' ? '#48bb78' :
($status['status'] === 'processing' ? '#f59e0b' : '#f56565');
echo "<tr style='border-bottom: 1px solid #333;'>";
echo "<td style='padding: 1rem;'>";
echo "<span style='padding: 0.3rem 0.8rem; border-radius: 12px; font-size: 0.8rem; background: {$color}; color: white;'>{$status['status']}</span>";
echo "</td>";
echo "<td style='padding: 1rem; text-align: center; font-weight: bold;'>{$status['count']}</td>";
echo "<td style='padding: 1rem; text-align: center;'>{$percentage}%</td>";
echo "<td style='padding: 1rem; text-align: center;'>" . round($status['avg_duration_minutes'], 1) . " min</td>";
echo "<td style='padding: 1rem;'>" . date('M j, Y', strtotime($status['first_created'])) . "</td>";
echo "<td style='padding: 1rem;'>" . date('M j, Y', strtotime($status['last_created'])) . "</td>";
echo "</tr>";
}
echo "</tbody>";
echo "</table>";
// Summary
echo "<h2>📋 Executive Summary</h2>";
echo "<div style='background: #1a1a1a; padding: 2rem; border-radius: 8px; color: white;'>";
echo "<h3>🎯 Key Metrics</h3>";
echo "<ul style='font-size: 1.1rem; line-height: 1.8;'>";
echo "<li><strong>Total Songs Generated:</strong> {$overall_stats['total_tracks']}</li>";
echo "<li><strong>Success Rate:</strong> " . round(($overall_stats['completed'] / $overall_stats['total_tracks']) * 100, 1) . "%</li>";
echo "<li><strong>Active Users:</strong> {$user_stats['total_users']}</li>";
echo "<li><strong>Premium Users:</strong> " . ($user_stats['starter_users'] + $user_stats['pro_users']) . " (" . round((($user_stats['starter_users'] + $user_stats['pro_users']) / $user_stats['total_users']) * 100, 1) . "%)</li>";
echo "<li><strong>Total Credits Available:</strong> {$user_stats['total_credits']}</li>";
echo "<li><strong>API Result Files:</strong> {$result_count}</li>";
echo "<li><strong>Orphaned Tracks:</strong> {$overall_stats['orphaned']}</li>";
echo "</ul>";
echo "<h3>🚀 Recommendations</h3>";
echo "<ul style='font-size: 1.1rem; line-height: 1.8;'>";
if ($overall_stats['failed'] > 0) {
echo "<li>🔧 <strong>Fix Failed Tracks:</strong> {$overall_stats['failed']} tracks failed and need attention</li>";
}
if ($overall_stats['orphaned'] > 0) {
echo "<li>👥 <strong>Assign Orphaned Tracks:</strong> {$overall_stats['orphaned']} tracks have no user assignment</li>";
}
if ($overall_stats['processing'] > 0) {
echo "<li>⏳ <strong>Monitor Processing:</strong> {$overall_stats['processing']} tracks are currently processing</li>";
}
if (($user_stats['starter_users'] + $user_stats['pro_users']) < $user_stats['total_users'] * 0.3) {
echo "<li>💰 <strong>Increase Premium Conversion:</strong> Only " . round((($user_stats['starter_users'] + $user_stats['pro_users']) / $user_stats['total_users']) * 100, 1) . "% of users are premium</li>";
}
echo "</ul>";
echo "</div>";
echo "<p style='text-align: center; margin-top: 2rem; color: #a0aec0;'><em>Report generated on " . date('Y-m-d H:i:s') . "</em></p>";
?>