UNPKG

agentic-qe

Version:

Agentic Quality Engineering Fleet System - AI-driven quality management platform

105 lines 3.59 kB
"use strict"; /** * Memory Vacuum Command * Performs VACUUM operation to rebuild database and optimize performance */ Object.defineProperty(exports, "__esModule", { value: true }); exports.vacuum = void 0; const Logger_1 = require("../../../utils/Logger"); const promises_1 = require("fs/promises"); async function vacuum(options) { const logger = Logger_1.Logger.getInstance(); const startTime = Date.now(); const mode = options.mode || 'full'; try { const dbPath = options.database.dbPath || './data/fleet.db'; // Measure initial stats let sizeBeforeMB = 0; let pagesBefore = 0; try { const statsBefore = await (0, promises_1.stat)(dbPath); sizeBeforeMB = statsBefore.size / (1024 * 1024); } catch (error) { logger.warn('Could not measure database size'); } // Get page count before try { const result = await options.database.get('PRAGMA page_count'); pagesBefore = result?.page_count || 0; } catch (error) { logger.warn('Could not get page count'); } // Perform vacuum operation if (mode === 'full') { await options.database.exec('VACUUM'); } else { // Incremental vacuum await options.database.exec('PRAGMA auto_vacuum = INCREMENTAL'); await options.database.exec('PRAGMA incremental_vacuum'); } // Rebuild indexes await options.database.exec('REINDEX'); // Count indexes rebuilt const indexResult = await options.database.all(` SELECT COUNT(*) as count FROM sqlite_master WHERE type = 'index' AND name NOT LIKE 'sqlite_%' `); const indexesRebuilt = indexResult[0]?.count || 0; // Analyze if requested let analyzed = false; if (options.analyze) { await options.database.exec('ANALYZE'); analyzed = true; } // Measure final stats let sizeAfterMB = 0; let pagesAfter = 0; try { const statsAfter = await (0, promises_1.stat)(dbPath); sizeAfterMB = statsAfter.size / (1024 * 1024); } catch (error) { logger.warn('Could not measure database size after vacuum'); } try { const result = await options.database.get('PRAGMA page_count'); pagesAfter = result?.page_count || 0; } catch (error) { logger.warn('Could not get page count after vacuum'); } const duration = Date.now() - startTime; logger.info(`Database vacuumed (${mode}): ${pagesBefore} -> ${pagesAfter} pages in ${duration}ms`); return { success: true, sizeBeforeMB: parseFloat(sizeBeforeMB.toFixed(2)), sizeAfterMB: parseFloat(sizeAfterMB.toFixed(2)), pagesBefore, pagesAfter, indexesRebuilt, analyzed, mode, duration }; } catch (error) { logger.error('Failed to vacuum database:', error); return { success: false, sizeBeforeMB: 0, sizeAfterMB: 0, pagesBefore: 0, pagesAfter: 0, indexesRebuilt: 0, analyzed: false, mode, duration: Date.now() - startTime, error: error instanceof Error ? error.message : String(error) }; } } exports.vacuum = vacuum; //# sourceMappingURL=vacuum.js.map