T.ME/BIBIL_0DAY
CasperSecurity


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/domains/soundstudiopro.com/private_html/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /home/gositeme/domains/soundstudiopro.com/private_html/diagnose_missing_lyrics.php
<?php
/**
 * Diagnostic Script for Missing Lyrics
 * Analyzes task_results JSON files to understand why lyrics are missing
 */

require_once 'config/database.php';

$pdo = getDBConnection();
if (!$pdo) {
    die("❌ Database connection failed\n");
}

echo "<!DOCTYPE html>
<html>
<head>
    <title>Diagnose Missing Lyrics</title>
    <style>
        body { font-family: Arial, sans-serif; padding: 20px; background: #f5f5f5; }
        .container { max-width: 1400px; margin: 0 auto; background: white; padding: 20px; border-radius: 8px; }
        h1 { color: #333; }
        .track-item { padding: 15px; margin: 10px 0; border: 1px solid #ddd; border-radius: 5px; background: #fafafa; }
        .success { color: green; font-weight: bold; }
        .error { color: red; font-weight: bold; }
        .warning { color: orange; font-weight: bold; }
        .info { color: #666; }
        .json-preview { background: #f8f9fa; padding: 10px; border-radius: 5px; margin: 10px 0; max-height: 300px; overflow-y: auto; font-family: monospace; font-size: 0.85em; }
        .stats { background: #e8f4f8; padding: 15px; border-radius: 5px; margin: 20px 0; }
    </style>
</head>
<body>
<div class='container'>
    <h1>🔍 Diagnose Missing Lyrics</h1>
    <p>Analyzing tracks missing lyrics to understand why they're not being extracted.</p>
";

// Get tracks missing lyrics
$stmt = $pdo->prepare("
    SELECT 
        id, 
        task_id, 
        title, 
        lyrics,
        created_at
    FROM music_tracks 
    WHERE status = 'complete'
    AND (lyrics IS NULL OR lyrics = '' OR lyrics = 'null' OR lyrics = 'NULL')
    ORDER BY created_at DESC
    LIMIT 20
");
$stmt->execute();
$tracks = $tracks = $stmt->fetchAll(PDO::FETCH_ASSOC);

$stats = [
    'total_checked' => 0,
    'has_task_result_file' => 0,
    'has_prompt_field' => 0,
    'prompt_is_instrumental' => 0,
    'prompt_has_lyrics' => 0,
    'no_prompt_field' => 0,
    'callback_type_text' => 0,
    'callback_type_first' => 0,
    'callback_type_complete' => 0,
    'callback_type_unknown' => 0
];

echo "<div class='stats'>
    <h2>Analysis Results</h2>
    <p>Analyzing first 20 tracks missing lyrics...</p>
</div>";

foreach ($tracks as $track) {
    $trackId = $track['id'];
    $taskId = $track['task_id'];
    $title = htmlspecialchars($track['title'] ?: 'Untitled Track');
    $createdAt = $track['created_at'];
    
    echo "<div class='track-item'>";
    echo "<h3>Track #{$trackId}: {$title}</h3>";
    echo "<p class='info'>Task ID: {$taskId} | Created: {$createdAt}</p>";
    
    $stats['total_checked']++;
    
    // Check task_results file
    $taskResultFile = "task_results/{$taskId}.json";
    if (file_exists($taskResultFile)) {
        $stats['has_task_result_file']++;
        echo "<p class='success'>✅ task_results file exists</p>";
        
        $taskResultContent = @file_get_contents($taskResultFile);
        if ($taskResultContent) {
            $taskResultData = @json_decode($taskResultContent, true);
            if (is_array($taskResultData)) {
                // Check callback type
                $callbackType = $taskResultData['data']['callbackType'] ?? 'unknown';
                echo "<p class='info'>📋 Callback Type: <strong>{$callbackType}</strong></p>";
                
                switch ($callbackType) {
                    case 'text':
                        $stats['callback_type_text']++;
                        break;
                    case 'first':
                        $stats['callback_type_first']++;
                        break;
                    case 'complete':
                        $stats['callback_type_complete']++;
                        break;
                    default:
                        $stats['callback_type_unknown']++;
                }
                
                // Check for prompt field in data array
                $hasPrompt = false;
                $promptValue = null;
                $promptLocation = '';
                
                if (isset($taskResultData['data']['data']) && is_array($taskResultData['data']['data'])) {
                    echo "<p class='info'>📦 Data array has " . count($taskResultData['data']['data']) . " items</p>";
                    
                    foreach ($taskResultData['data']['data'] as $index => $item) {
                        if (isset($item['prompt']) && !empty($item['prompt'])) {
                            $hasPrompt = true;
                            $promptValue = $item['prompt'];
                            $promptLocation = "data.data[{$index}].prompt";
                            $stats['has_prompt_field']++;
                            
                            echo "<p class='info'>📝 Found prompt in {$promptLocation}</p>";
                            
                            // Check if it's instrumental
                            $trimmed = trim($promptValue);
                            if (strtolower($trimmed) === '[instrumental]' || 
                                strtolower($trimmed) === 'instrumental' ||
                                strtolower($trimmed) === '[inst]' ||
                                strtolower($trimmed) === 'inst') {
                                $stats['prompt_is_instrumental']++;
                                echo "<p class='warning'>⚠️ Prompt is '[Instrumental]' - no lyrics available</p>";
                            } else {
                                $stats['prompt_has_lyrics']++;
                                echo "<p class='success'>✅ Prompt contains lyrics (" . strlen($promptValue) . " chars)</p>";
                                
                                // Show preview
                                $preview = htmlspecialchars(substr($promptValue, 0, 200));
                                if (strlen($promptValue) > 200) {
                                    $preview .= '...';
                                }
                                echo "<div class='json-preview'>{$preview}</div>";
                            }
                            break; // Use first item with prompt
                        }
                    }
                    
                    if (!$hasPrompt) {
                        $stats['no_prompt_field']++;
                        echo "<p class='error'>❌ No prompt field found in any data items</p>";
                        
                        // Show what fields ARE available
                        if (!empty($taskResultData['data']['data'])) {
                            $firstItem = $taskResultData['data']['data'][0];
                            $availableFields = array_keys($firstItem);
                            echo "<p class='info'>Available fields in first item: " . implode(', ', $availableFields) . "</p>";
                        }
                    }
                } else {
                    echo "<p class='error'>❌ No data.data array found</p>";
                }
                
                // Show JSON structure preview
                echo "<details><summary>📄 View JSON Structure</summary>";
                echo "<div class='json-preview'>" . htmlspecialchars(json_encode($taskResultData, JSON_PRETTY_PRINT)) . "</div>";
                echo "</details>";
            } else {
                echo "<p class='error'>❌ Failed to parse JSON</p>";
            }
        } else {
            echo "<p class='error'>❌ Failed to read file</p>";
        }
    } else {
        echo "<p class='error'>❌ task_results file NOT found: {$taskResultFile}</p>";
    }
    
    echo "</div>";
}

echo "<div class='stats'>
    <h2>📊 Diagnostic Summary</h2>
    <table style='width: 100%; border-collapse: collapse;'>
        <tr>
            <th style='text-align: left; padding: 10px; border: 1px solid #ddd;'>Metric</th>
            <th style='text-align: right; padding: 10px; border: 1px solid #ddd;'>Count</th>
            <th style='text-align: right; padding: 10px; border: 1px solid #ddd;'>Percentage</th>
        </tr>
        <tr>
            <td style='padding: 10px; border: 1px solid #ddd;'>Total Tracks Checked</td>
            <td style='text-align: right; padding: 10px; border: 1px solid #ddd;'><strong>{$stats['total_checked']}</strong></td>
            <td style='text-align: right; padding: 10px; border: 1px solid #ddd;'>100%</td>
        </tr>
        <tr>
            <td style='padding: 10px; border: 1px solid #ddd;'>✅ Has task_results File</td>
            <td style='text-align: right; padding: 10px; border: 1px solid #ddd;'><strong>{$stats['has_task_result_file']}</strong></td>
            <td style='text-align: right; padding: 10px; border: 1px solid #ddd;'>" . round(($stats['has_task_result_file'] / max($stats['total_checked'], 1)) * 100, 1) . "%</td>
        </tr>
        <tr>
            <td style='padding: 10px; border: 1px solid #ddd;'>📝 Has Prompt Field</td>
            <td style='text-align: right; padding: 10px; border: 1px solid #ddd;'><strong>{$stats['has_prompt_field']}</strong></td>
            <td style='text-align: right; padding: 10px; border: 1px solid #ddd;'>" . round(($stats['has_prompt_field'] / max($stats['total_checked'], 1)) * 100, 1) . "%</td>
        </tr>
        <tr>
            <td style='padding: 10px; border: 1px solid #ddd;' class='success'>✅ Prompt Has Lyrics</td>
            <td style='text-align: right; padding: 10px; border: 1px solid #ddd;'><strong>{$stats['prompt_has_lyrics']}</strong></td>
            <td style='text-align: right; padding: 10px; border: 1px solid #ddd;'>" . round(($stats['prompt_has_lyrics'] / max($stats['total_checked'], 1)) * 100, 1) . "%</td>
        </tr>
        <tr>
            <td style='padding: 10px; border: 1px solid #ddd;' class='warning'>⚠️ Prompt is [Instrumental]</td>
            <td style='text-align: right; padding: 10px; border: 1px solid #ddd;'><strong>{$stats['prompt_is_instrumental']}</strong></td>
            <td style='text-align: right; padding: 10px; border: 1px solid #ddd;'>" . round(($stats['prompt_is_instrumental'] / max($stats['total_checked'], 1)) * 100, 1) . "%</td>
        </tr>
        <tr>
            <td style='padding: 10px; border: 1px solid #ddd;' class='error'>❌ No Prompt Field</td>
            <td style='text-align: right; padding: 10px; border: 1px solid #ddd;'><strong>{$stats['no_prompt_field']}</strong></td>
            <td style='text-align: right; padding: 10px; border: 1px solid #ddd;'>" . round(($stats['no_prompt_field'] / max($stats['total_checked'], 1)) * 100, 1) . "%</td>
        </tr>
        <tr>
            <td colspan='3' style='padding: 10px; border: 1px solid #ddd; background: #f8f9fa;'><strong>Callback Types:</strong></td>
        </tr>
        <tr>
            <td style='padding: 10px; border: 1px solid #ddd;'>📝 callbackType: 'text'</td>
            <td style='text-align: right; padding: 10px; border: 1px solid #ddd;'><strong>{$stats['callback_type_text']}</strong></td>
            <td style='text-align: right; padding: 10px; border: 1px solid #ddd;'>" . round(($stats['callback_type_text'] / max($stats['total_checked'], 1)) * 100, 1) . "%</td>
        </tr>
        <tr>
            <td style='padding: 10px; border: 1px solid #ddd;'>🎵 callbackType: 'first'</td>
            <td style='text-align: right; padding: 10px; border: 1px solid #ddd;'><strong>{$stats['callback_type_first']}</strong></td>
            <td style='text-align: right; padding: 10px; border: 1px solid #ddd;'>" . round(($stats['callback_type_first'] / max($stats['total_checked'], 1)) * 100, 1) . "%</td>
        </tr>
        <tr>
            <td style='padding: 10px; border: 1px solid #ddd;'>✅ callbackType: 'complete'</td>
            <td style='text-align: right; padding: 10px; border: 1px solid #ddd;'><strong>{$stats['callback_type_complete']}</strong></td>
            <td style='text-align: right; padding: 10px; border: 1px solid #ddd;'>" . round(($stats['callback_type_complete'] / max($stats['total_checked'], 1)) * 100, 1) . "%</td>
        </tr>
        <tr>
            <td style='padding: 10px; border: 1px solid #ddd;'>❓ callbackType: unknown</td>
            <td style='text-align: right; padding: 10px; border: 1px solid #ddd;'><strong>{$stats['callback_type_unknown']}</strong></td>
            <td style='text-align: right; padding: 10px; border: 1px solid #ddd;'>" . round(($stats['callback_type_unknown'] / max($stats['total_checked'], 1)) * 100, 1) . "%</td>
        </tr>
    </table>
</div>";

echo "<p><a href='audit_tracks.php' style='background: #6c757d; color: white; padding: 10px 20px; text-decoration: none; border-radius: 5px; display: inline-block;'>← Back to Audit</a></p>";

echo "</div></body></html>";
?>


CasperSecurity Mini