perf-audit-cli
Version:
CLI tool for continuous performance monitoring and analysis
78 lines • 2.74 kB
JavaScript
import ora from 'ora';
import { PerformanceDatabaseService } from "../core/database/index.js";
import { PluginManager } from "../core/plugin-system.js";
import { CIIntegration } from "./ci-integration.js";
import { loadConfig } from "./config.js";
import { Logger } from "./logger.js";
export const getCurrentTimestamp = () => {
return new Date().toISOString();
};
export const initializeCommand = async (message = 'Loading configuration...') => {
const spinner = ora(message).start();
const config = await loadConfig();
return { config, spinner };
};
export const initializePluginManager = async (config) => {
const pluginManager = new PluginManager(config);
await pluginManager.loadPlugins();
return pluginManager;
};
export const saveBuildData = async (result, additionalData) => {
try {
const ciContext = CIIntegration.detectCIEnvironment();
const db = await PerformanceDatabaseService.instance();
const buildId = await db.saveBuild({
timestamp: result.timestamp,
branch: ciContext.branch,
commitHash: ciContext.commitHash,
url: additionalData?.url,
device: additionalData?.device,
bundles: [...result.serverBundles, ...result.clientBundles],
metrics: additionalData?.metrics,
recommendations: result.recommendations,
});
await db.close();
Logger.debug(`Build saved with ID: ${buildId}`);
}
catch (error) {
Logger.warn('Failed to save build to database');
Logger.debug(`Database error: ${error instanceof Error ? error.message : String(error)}`);
}
};
export const handleCommandError = async (spinner, error, message = 'Operation failed', config) => {
spinner.fail(message);
Logger.error(error instanceof Error ? error.message : 'Unknown error');
if (config) {
try {
const pluginManager = new PluginManager(config);
await pluginManager.loadPlugins();
await pluginManager.executeHook('onError', {
error: error,
context: 'command',
});
await pluginManager.unloadPlugins();
}
catch {
}
}
process.exit(1);
};
export const completeCommand = (spinner, message, shouldExit = false, exitCode = 0) => {
spinner.succeed(message);
if (shouldExit) {
process.exit(exitCode);
}
};
export const exitBasedOnStatus = (status) => {
switch (status) {
case 'error':
process.exit(1);
break;
case 'warning':
process.exit(2);
break;
default:
break;
}
};
//# sourceMappingURL=command-helpers.js.map