UNPKG

ctrlshiftleft

Version:

AI-powered toolkit for embedding QA and security testing into development workflows

159 lines (126 loc) • 5.54 kB
#!/usr/bin/env node /** * Performance Metrics Demo Script * * This script demonstrates the performance tracking capabilities * added in v1.4.0 by performing some basic operations and generating * a performance report. */ const fs = require('fs'); const path = require('path'); const crypto = require('crypto'); const { PerformanceTracker } = require('./utils/performanceTracker'); const { PathUtils, FileUtils } = require('./utils/platformUtils'); const { errorHandler } = require('./utils/errorHandler'); // Create output directory for reports const outputDir = path.join(process.cwd(), 'demo-performance-reports'); PathUtils.ensureDir(outputDir); // Create performance tracker const tracker = new PerformanceTracker({ projectName: 'ctrl.shift.left-demo', version: require('../package.json').version, outputDir, enabled: true }); // Simulate file operations with performance tracking async function runPerformanceDemo() { console.log('šŸ“Š Running performance metrics demo...\n'); try { // Demo file operations console.log('šŸ’¾ Testing file operations...'); const fileOpTimer = tracker.startTimer('file-operations', 'demo-files'); // Create test files const testDir = path.join(outputDir, 'test-files'); PathUtils.ensureDir(testDir); // Generate some test files with different content for (let i = 1; i <= 5; i++) { const filePath = path.join(testDir, `test-file-${i}.txt`); const content = `This is test file ${i}\nCreated at ${new Date().toISOString()}\n` + `Random data: ${crypto.randomBytes(100).toString('hex')}`; FileUtils.writeFile(filePath, content, 'auto'); console.log(` āœ“ Created file ${i}`); } const fileOpDuration = tracker.stopTimer(fileOpTimer); console.log(` āœ… File operations completed in ${fileOpDuration}ms\n`); // Demo complex computation operations console.log('🧮 Testing compute operations...'); const computeTimer = tracker.startTimer('computation', 'hash-generation'); // Perform some computation (hash generation) const results = []; for (let i = 1; i <= 10; i++) { const startTime = Date.now(); // Generate a complex hash const data = crypto.randomBytes(10000).toString('hex'); const hash = crypto.createHash('sha512').update(data).digest('hex'); results.push(hash); const opTime = Date.now() - startTime; tracker.recordOperation('hash-calculation', `round-${i}`, opTime, { inputSize: data.length, outputSize: hash.length, algorithm: 'sha512' }); console.log(` āœ“ Computed hash ${i} in ${opTime}ms`); } const computeDuration = tracker.stopTimer(computeTimer); console.log(` āœ… Computation operations completed in ${computeDuration}ms\n`); // Read files back with timing console.log('šŸ“– Testing read operations...'); const readTimer = tracker.startTimer('file-reads', 'demo-files'); for (let i = 1; i <= 5; i++) { const startTime = Date.now(); const filePath = path.join(testDir, `test-file-${i}.txt`); const content = FileUtils.readFile(filePath, 'auto'); const contentSize = content ? content.length : 0; const readTime = Date.now() - startTime; console.log(` āœ“ Read file ${i} (${contentSize} bytes) in ${readTime}ms`); tracker.recordOperation('file-read', filePath, readTime, { fileSize: contentSize, success: !!content }); } const readDuration = tracker.stopTimer(readTimer); console.log(` āœ… Read operations completed in ${readDuration}ms\n`); // Generate and save reports console.log('šŸ“ Generating performance reports...'); // Generate JSON report const jsonReportPath = tracker.saveReport('json', 'demo-run'); console.log(` āœ“ JSON report saved to: ${jsonReportPath}`); // Generate Markdown report const markdownReportPath = tracker.saveReport('markdown', 'demo-run'); console.log(` āœ“ Markdown report saved to: ${markdownReportPath}`); // Display performance summary const report = tracker.generateReport('demo-run'); console.log('\nšŸ“Š Performance Summary:'); console.log(`Total operations: ${report.summary.operationCount}`); console.log(`Total duration: ${report.summary.totalDuration}ms`); console.log(`Average duration: ${report.summary.averageDuration.toFixed(2)}ms`); console.log(`Success rate: ${report.summary.successRate}%`); console.log('\nOperation types:'); Object.keys(report.summary.byType).forEach(type => { const stats = report.summary.byType[type]; console.log(`- ${type}: ${stats.count} operations, avg ${stats.averageDuration.toFixed(2)}ms`); }); console.log(`\nāœ… Performance demo completed successfully!`); console.log(`Reports saved to: ${outputDir}`); return { success: true }; } catch (error) { // Use our enhanced error handler const enhancedError = errorHandler.handleError(error, 'performance-demo', { outputDir }); errorHandler.displayError(enhancedError); errorHandler.logError(enhancedError); return { success: false, error: enhancedError }; } } // Run the demo runPerformanceDemo() .then(result => { if (!result.success) { process.exit(1); } }) .catch(error => { console.error('Unhandled error:', error); process.exit(1); });