debug-500-error.js•15.8 kB
#!/usr/bin/env node
/**
* Debug HTTP 500 Error Test
* Analyzes the actual failing composition to identify root cause
*/
import { createAPISaveDebugger } from '../src/tools/api-save-debugger.js';
import { createComposerFormatter } from '../src/tools/format-for-composer.js';
// Recreate the failing photosynthesis composition
const failingCompositionData = {
metadata: {
topic: "Fotossíntese: A Fábrica de Energia da Vida",
subject: "Ciências",
gradeLevel: "8º ano",
duration: 50,
learningObjectives: [
"Compreender o processo da fotossíntese e sua importância para a vida",
"Identificar as estruturas celulares envolvidas na fotossíntese",
"Analisar os fatores que influenciam a eficiência fotossintética",
"Relacionar a fotossíntese com questões ambientais contemporâneas"
],
bnccAlignment: "EF08CI05, EF08CI06, EF08CI13"
},
widgets: [
{
type: "head-1",
content: {
category: "CIÊNCIAS - BIOLOGIA",
author_name: "Professor(a) Virtual",
author_office: "Especialista em Biologia Celular"
}
},
{
type: "text-1",
content: {
text: `<h2>Introdução à Fotossíntese</h2>
<p>A fotossíntese é um dos processos mais importantes da natureza, responsável por converter energia luminosa em energia química. Este processo fundamental não apenas sustenta a vida das plantas, mas também é essencial para toda a cadeia alimentar do nosso planeta.</p>
<p>Durante a fotossíntese, as plantas capturam a luz solar e, através de uma série de reações químicas complexas, produzem glicose e oxigênio a partir de dióxido de carbono e água. Este processo ocorre principalmente nas folhas, especificamente em organelas chamadas cloroplastos.</p>
<p>A importância da fotossíntese vai além da produção de alimento para as plantas. Ela é responsável pela produção de praticamente todo o oxigênio que respiramos e pela remoção de grandes quantidades de dióxido de carbono da atmosfera, ajudando a regular o clima do nosso planeta.</p>`
}
},
{
type: "image-1",
content: {
image: "https://images.unsplash.com/photo-1441974231531-c6227db76b6e?w=800",
caption: "Folhas verdes captando luz solar para o processo de fotossíntese"
}
},
{
type: "text-1",
content: {
text: `<h2>Estruturas Envolvidas na Fotossíntese</h2>
<p>A fotossíntese ocorre em estruturas celulares altamente especializadas. Vamos conhecer as principais:</p>
<h3>Cloroplastos</h3>
<p>Os cloroplastos são organelas exclusivas das células vegetais, responsáveis por capturar a energia luminosa. Dentro dos cloroplastos, encontramos:</p>
<p><strong>Tilacoides:</strong> Estruturas membranosas onde ocorrem as reações que dependem da luz. Contêm a clorofila e outros pigmentos fotossintéticos.</p>
<p><strong>Estroma:</strong> Fluido que envolve os tilacoides, onde ocorrem as reações que não dependem diretamente da luz.</p>
<p><strong>Clorofila:</strong> Pigmento verde que absorve a energia luminosa. É responsável pela cor verde característica das plantas.</p>`
}
},
{
type: "list-1",
content: {
items: [
"Clorofila a: Pigmento primário, absorve luz vermelha e azul",
"Clorofila b: Pigmento acessório, complementa a absorção de luz",
"Carotenoides: Pigmentos amarelos e alaranjados, proteção contra excesso de luz",
"Tilacoides: Compartimentos membranosos organizados em pilhas (grana)",
"Estroma: Matriz fluida rica em enzimas para síntese de carboidratos"
],
list_type: "bulleted"
}
},
{
type: "text-1",
content: {
text: `<h2>As Duas Fases da Fotossíntese</h2>
<p>A fotossíntese pode ser dividida em duas fases principais, cada uma com suas características específicas:</p>
<h3>Fase Clara (Reações Dependentes da Luz)</h3>
<p>Esta fase ocorre nos tilacoides e depende diretamente da presença de luz. Durante esta etapa:</p>
<ul>
<li>A clorofila absorve energia luminosa</li>
<li>Moléculas de água são quebradas (fotólise)</li>
<li>Oxigênio é liberado como subproduto</li>
<li>ATP e NADPH são produzidos para fornecer energia</li>
</ul>
<h3>Fase Escura (Ciclo de Calvin)</h3>
<p>Esta fase ocorre no estroma e não depende diretamente da luz, mas utiliza os produtos da fase clara:</p>
<ul>
<li>CO₂ é fixado e convertido em compostos orgânicos</li>
<li>ATP e NADPH são utilizados como fonte de energia</li>
<li>Glicose é produzida como produto final</li>
</ul>`
}
},
{
type: "hotspots-1",
content: {
background_image: "https://images.unsplash.com/photo-1530587191325-3db32d826c18?w=800",
markers: [
{
x: "25%",
y: "30%",
title: "Tilacoides",
content: "Estruturas membranosas onde ocorre a fase clara da fotossíntese"
},
{
x: "60%",
y: "45%",
title: "Estroma",
content: "Região onde ocorre o Ciclo de Calvin (fase escura)"
},
{
x: "40%",
y: "20%",
title: "Clorofila",
content: "Pigmento que absorve energia luminosa para iniciar o processo"
}
]
}
},
{
type: "text-1",
content: {
text: `<h2>Equação Geral da Fotossíntese</h2>
<p>A fotossíntese pode ser resumida pela seguinte equação química:</p>
<p><strong>6CO₂ + 6H₂O + energia luminosa → C₆H₁₂O₆ + 6O₂</strong></p>
<p>Esta equação nos mostra que:</p>
<ul>
<li><strong>Reagentes:</strong> 6 moléculas de dióxido de carbono + 6 moléculas de água + energia luminosa</li>
<li><strong>Produtos:</strong> 1 molécula de glicose + 6 moléculas de oxigênio</li>
</ul>
<p>É importante notar que a energia luminosa é convertida em energia química armazenada nas ligações da glicose, que posteriormente pode ser liberada através da respiração celular.</p>`
}
},
{
type: "quiz-1",
content: {
questions: [
{
question: "Qual é a principal função da clorofila na fotossíntese?",
answers: ["Absorver energia luminosa", "Produzir oxigênio", "Quebrar moléculas de água", "Fixar dióxido de carbono"],
correct_option: 0
},
{
question: "Em qual estrutura celular ocorre a fotossíntese?",
answers: ["Mitocôndrias", "Núcleo", "Cloroplastos", "Ribossomos"],
correct_option: 2
},
{
question: "Qual é o produto final da fase escura da fotossíntese?",
answers: ["Oxigênio", "ATP", "Glicose", "NADPH"],
correct_option: 2
}
],
max_attempts: 2
}
},
{
type: "text-1",
content: {
text: `<h2>Fatores que Afetam a Fotossíntese</h2>
<p>Diversos fatores ambientais podem influenciar a eficiência do processo fotossintético:</p>
<h3>Intensidade Luminosa</h3>
<p>A quantidade de luz disponível é fundamental. Muita luz pode causar danos, enquanto pouca luz limita o processo.</p>
<h3>Concentração de CO₂</h3>
<p>O dióxido de carbono é um reagente essencial. Ambientes com maior concentração de CO₂ podem aumentar a taxa fotossintética.</p>
<h3>Temperatura</h3>
<p>Afeta a velocidade das reações enzimáticas. Temperaturas muito altas ou baixas podem prejudicar o processo.</p>
<h3>Disponibilidade de Água</h3>
<p>A água é um reagente essencial e sua escassez pode limitar severamente a fotossíntese.</p>
<p>Compreender esses fatores é crucial para agricultura e conservação ambiental, pois permite otimizar as condições para o crescimento das plantas.</p>`
}
},
{
type: "text-1",
content: {
text: `<h2>Importância Ecológica e Ambiental</h2>
<p>A fotossíntese desempenha um papel fundamental na manutenção da vida na Terra:</p>
<h3>Produção de Oxigênio</h3>
<p>Praticamente todo o oxigênio presente na atmosfera é produto da fotossíntese realizada por plantas, algas e cianobactérias.</p>
<h3>Remoção de CO₂</h3>
<p>As plantas absorvem grandes quantidades de dióxido de carbono da atmosfera, ajudando a regular o efeito estufa.</p>
<h3>Base da Cadeia Alimentar</h3>
<p>A glicose produzida pela fotossíntese é a base energética de praticamente todos os ecossistemas terrestres.</p>
<p>Devido ao aquecimento global e às mudanças climáticas, a fotossíntese torna-se ainda mais relevante como processo natural de sequestro de carbono.</p>`
}
},
{
type: "flashcards-1",
content: {
flashcards_items: [
{
question: "Cloroplasto",
answer: "Organela onde ocorre a fotossíntese, contém clorofila e outros pigmentos"
},
{
question: "Tilacoide",
answer: "Estrutura membranosa onde ocorrem as reações dependentes da luz"
},
{
question: "Estroma",
answer: "Fluido do cloroplasto onde ocorre o Ciclo de Calvin"
},
{
question: "Clorofila",
answer: "Pigmento verde que absorve energia luminosa"
},
{
question: "Fotólise",
answer: "Quebra de moléculas de água usando energia luminosa"
}
]
}
},
{
type: "text-1",
content: {
text: `<h2>Curiosidades sobre a Fotossíntese</h2>
<p>Alguns fatos interessantes sobre este processo fundamental:</p>
<ul>
<li><strong>Eficiência:</strong> A fotossíntese converte apenas cerca de 1-2% da energia solar em energia química</li>
<li><strong>Origem:</strong> A fotossíntese evoluiu há aproximadamente 3,5 bilhões de anos</li>
<li><strong>Produção:</strong> As plantas produzem cerca de 170 bilhões de toneladas de biomassa anualmente</li>
<li><strong>Oxigênio:</strong> Uma árvore média produz oxigênio suficiente para duas pessoas por dia</li>
<li><strong>Cores:</strong> A clorofila reflete luz verde, por isso vemos as plantas verdes</li>
</ul>
<p>A fotossíntese também inspirou tecnologias como painéis solares e pesquisas sobre fotossíntese artificial para produção de energia limpa.</p>`
}
}
]
};
async function debugHTTP500Error() {
console.error('🔍 Debugging HTTP 500 Error - Targeted Analysis\n');
// Step 1: Create the actual failing composition
console.error('📋 Step 1: Recreating the failing composition');
const formatter = createComposerFormatter();
const formatResult = await formatter.formatForComposer(failingCompositionData);
if (!formatResult.success) {
console.error('❌ Failed to format composition:', formatResult.error);
return;
}
const composerJSON = formatResult.data.composerJSON;
// Step 2: Apply comprehensive debugging
console.error('📋 Step 2: Applying comprehensive debugging analysis');
const apiDebugger = createAPISaveDebugger();
// Simulate the original error
const originalError = {
status: 500,
statusText: 'Internal Server Error',
responseText: '<!DOCTYPE html><html><head><title>Error</title></head><body><h1>Internal Server Error</h1><p>The server encountered an internal error and was unable to complete your request.</p></body></html>'
};
const debugAnalysis = await apiDebugger.debugAPISaveFailure(composerJSON, null, originalError);
// Step 3: Report findings
console.error('📋 Step 3: Debug Analysis Results\n');
console.error('=== JSON STRUCTURE CHECK ===');
console.error(`Status: ${debugAnalysis.checks.jsonStructure.passed ? '✅ PASSED' : '❌ FAILED'}`);
console.error(`Size: ${debugAnalysis.checks.jsonStructure.details.serializationSize} bytes`);
console.error(`Widgets: ${debugAnalysis.checks.jsonStructure.details.widgetCount}`);
if (debugAnalysis.checks.jsonStructure.issues.length > 0) {
console.error('Issues:', debugAnalysis.checks.jsonStructure.issues);
}
console.error('\n=== HEADER COMPLETENESS CHECK ===');
console.error(`Status: ${debugAnalysis.checks.headerCompleteness.passed ? '✅ PASSED' : '❌ FAILED'}`);
console.error(`Has metadata: ${debugAnalysis.checks.headerCompleteness.details.metadataPresent}`);
console.error(`Has header widget: ${debugAnalysis.checks.headerCompleteness.details.hasHeaderWidget}`);
if (debugAnalysis.checks.headerCompleteness.issues.length > 0) {
console.error('Issues:', debugAnalysis.checks.headerCompleteness.issues);
}
console.error('\n=== CONTENT ENCODING CHECK ===');
console.error(`Status: ${debugAnalysis.checks.contentEncoding.passed ? '✅ PASSED' : '❌ FAILED'}`);
console.error(`Total size: ${debugAnalysis.checks.contentEncoding.details.totalSize} bytes`);
console.error(`Encoding: ${debugAnalysis.checks.contentEncoding.details.encoding}`);
if (debugAnalysis.checks.contentEncoding.issues.length > 0) {
console.error('Issues:', debugAnalysis.checks.contentEncoding.issues);
}
console.error('\n=== SIZE vs CONTENT ANALYSIS ===');
console.error(`Total size: ${debugAnalysis.checks.sizeAnalysis.details.totalSize} bytes (${debugAnalysis.checks.sizeAnalysis.details.sizeKB} KB)`);
console.error(`Widget count: ${debugAnalysis.checks.sizeAnalysis.details.widgetCount}`);
console.error(`Average widget size: ${debugAnalysis.checks.sizeAnalysis.details.averageWidgetSize} bytes`);
console.error('\nLargest widgets:');
debugAnalysis.checks.sizeAnalysis.details.largestWidgets.forEach(widget => {
console.error(` - Widget ${widget.index} (${widget.type}): ${widget.size} bytes`);
});
if (debugAnalysis.checks.sizeAnalysis.issues.length > 0) {
console.error('Issues:', debugAnalysis.checks.sizeAnalysis.issues);
}
console.error('\n=== API RESPONSE ANALYSIS ===');
console.error(`HTTP Status: ${debugAnalysis.checks.apiResponse.details.httpStatus}`);
console.error(`Response Type: ${debugAnalysis.checks.apiResponse.details.responseText?.includes('<!DOCTYPE html>') ? 'HTML Error Page' : 'JSON'}`);
if (debugAnalysis.checks.apiResponse.issues.length > 0) {
console.error('Issues:', debugAnalysis.checks.apiResponse.issues);
}
console.error('\n=== RECOMMENDATIONS ===');
if (debugAnalysis.recommendations.length > 0) {
debugAnalysis.recommendations.forEach(rec => {
console.error(`🎯 ${rec.priority} - ${rec.category}`);
console.error(` Action: ${rec.action}`);
if (rec.details.length > 0) {
console.error(` Details: ${rec.details.join(', ')}`);
}
});
} else {
console.error('✅ No specific issues identified - likely a server-side problem');
}
console.error('\n=== CONCLUSION ===');
console.error('Based on the analysis:');
console.error('• HTTP 500 suggests server processing error, not client request issues');
console.error('• Composition structure appears valid');
console.error('• Size is significant but not necessarily problematic');
console.error('• Focus should be on server-side issues or specific content that causes processing failures');
console.error('\n🔍 Debugging complete - check recommendations above');
}
debugHTTP500Error().catch(console.error);