agentic-qe
Version:
Agentic Quality Engineering Fleet System - AI-driven quality management platform
89 lines • 3.03 kB
JavaScript
;
/**
* Fleet Backup Command
* Create complete fleet state backup
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.backup = void 0;
const Logger_1 = require("../../../utils/Logger");
const promises_1 = require("fs/promises");
const zlib_1 = require("zlib");
const util_1 = require("util");
const gzipAsync = (0, util_1.promisify)(zlib_1.gzip);
async function backup(options) {
const logger = Logger_1.Logger.getInstance();
try {
const status = options.fleetManager.getStatus();
const agents = options.fleetManager.getAllAgents();
const tasks = options.fleetManager.getAllTasks();
// Build backup data
const agentBackups = agents.map(agent => ({
id: agent.getId(),
type: agent.getType(),
status: agent.getStatus(),
config: agent.config || {},
metrics: agent.metrics || {}
}));
const taskBackups = tasks.map(task => ({
id: task.getId(),
type: task.getType(),
status: task.getStatus(),
data: task.getData()
}));
// Get recent metrics from database
const metricsRows = await options.database.all(`
SELECT metric_type, metric_name, metric_value, timestamp
FROM metrics
WHERE timestamp > datetime('now', '-7 days')
ORDER BY timestamp DESC
LIMIT 1000
`);
const metricBackups = metricsRows.map(row => ({
type: row.metric_type,
name: row.metric_name,
value: row.metric_value,
timestamp: row.timestamp
}));
const backup = {
version: '1.0.0',
timestamp: new Date().toISOString(),
config: {
fleetId: status.id,
status: status.status
},
agents: agentBackups,
tasks: taskBackups,
metrics: metricBackups
};
// Serialize backup
let backupData = JSON.stringify(backup, null, 2);
// Compress if requested
let compressed = false;
if (options.compress) {
const buffer = await gzipAsync(Buffer.from(backupData));
backupData = buffer.toString('base64');
compressed = true;
}
// Write to file
await (0, promises_1.writeFile)(options.output, backupData, 'utf-8');
logger.info(`Fleet backup created: ${options.output} (${compressed ? 'compressed' : 'uncompressed'})`);
return {
success: true,
backupPath: options.output,
compressed,
backup
};
}
catch (error) {
logger.error('Failed to create backup:', error);
return {
success: false,
backupPath: options.output,
compressed: false,
backup: {},
error: error instanceof Error ? error.message : String(error)
};
}
}
exports.backup = backup;
//# sourceMappingURL=backup.js.map