const puppeteer = require('puppeteer'); const AuthHelper = require('./auth_helper'); async function testRateLimitingChart() { const browser = await puppeteer.launch({ headless: false, args: ['--no-sandbox', '--disable-setuid-sandbox'] }); try { const page = await browser.newPage(); await page.setViewport({ width: 1280, height: 720 }); const auth = new AuthHelper(page); await auth.ensureAuthenticated(); console.log('Navigating to metrics...'); await page.goto('http://127.0.0.1:5000/metrics/', { waitUntil: 'domcontentloaded', timeout: 30000 }); // Wait for content to fully load console.log('Waiting for metrics to load...'); await new Promise(resolve => setTimeout(resolve, 5000)); // Scroll to rate limiting section await page.evaluate(() => { const rateLimitSection = document.querySelector('#rate-limiting-chart'); if (rateLimitSection) { rateLimitSection.scrollIntoView({ behavior: 'smooth', block: 'center' }); } }); await new Promise(resolve => setTimeout(resolve, 2000)); // Take screenshot await page.screenshot({ path: './rate-limiting-chart.png', fullPage: false // Just viewport to see the focused area }); console.log('Screenshot saved: ./rate-limiting-chart.png'); // Check if chart is rendered const chartInfo = await page.evaluate(() => { const canvas = document.getElementById('rate-limiting-chart'); if (!canvas) return { error: 'Canvas not found' }; const ctx = canvas.getContext('2d'); const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height); const hasContent = imageData.data.some((value, index) => { // Check alpha channel (every 4th value) for non-transparent pixels return index % 4 === 3 && value > 0; }); // Check if Chart.js instance exists const chartExists = window.rateLimitingChart !== undefined; return { canvasFound: true, width: canvas.width, height: canvas.height, hasVisibleContent: hasContent, chartInstanceExists: chartExists, parentVisible: canvas.offsetParent !== null }; }); console.log('Chart Info:', JSON.stringify(chartInfo, null, 2)); // Check console for errors const consoleErrors = []; page.on('console', msg => { if (msg.type() === 'error') { consoleErrors.push(msg.text()); } }); if (consoleErrors.length > 0) { console.log('Console errors:', consoleErrors); } } finally { await browser.close(); } } testRateLimitingChart().catch(console.error);