Skip to content

Commit 3a5a4cd

Browse files
author
AvrAlexandra
committed
fixed cli command
1 parent 6c5f547 commit 3a5a4cd

File tree

3 files changed

+29
-11
lines changed

3 files changed

+29
-11
lines changed

src/commands/history-metrics/chart-generator.ts

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,18 @@ export async function generateHtmlChart(outputFile: string, charts: { data: any[
66
const html = generateMultiChartHtml(charts);
77

88
fs.writeFileSync(chartFile, html);
9+
console.log(`📊 Chart generated: ${chartFile}`);
910

1011
if (process.env.NODE_ENV !== 'test') {
11-
const open = (await import('open')).default;
12-
await open(chartFile);
12+
try {
13+
const openModule = await import('open');
14+
const open = openModule.default || openModule;
15+
await open(chartFile);
16+
console.log(`🌐 Chart opened in browser`);
17+
} catch (error: any) {
18+
console.log(`⚠️ Could not automatically open chart in browser: ${error.message}`);
19+
console.log(`📁 Please manually open: ${chartFile}`);
20+
}
1321
}
1422
}
1523

src/commands/history-metrics/metrics-command.ts

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,16 +14,16 @@ import {
1414
generateVulnerabilityFixBySeverityChartData,
1515
generateVulnerabilityFixTimelinessChartData
1616
} from './chart-generator'
17+
import os from "os";
1718

1819
export const metricsCommand = new Command()
1920
.name('metrics')
2021
.description('Run metrics on dependency history and optionally generate charts')
21-
.argument('<historyFolder>', 'Folder where the base input/output folders are located')
2222
.option('--inputDir <inputDir>', 'Directory to look for input .json files', '')
23-
.option('--results, -r <resultsFolder>', 'Folder to save results in', 'results')
23+
.option('--results <resultsFolder>', 'Folder to save results in', 'results')
2424
.option('--metric <metricType>', 'Metric type to calculate')
2525
.option('--chart', 'Generate chart visualization', false)
26-
.option('--chartType <chartType>', 'Chart type (bar | line | stacked | stacked-area)', 'bar')
26+
.option('--chartType <chartType>', 'Chart types to generate (bar, line, stacked, stacked-area)')
2727
.option('--inputFiles <inputFiles...>', 'List of input files to use (without .json)')
2828
.action(runMetrics);
2929

@@ -75,9 +75,17 @@ function isValidMetricType(metric: string): metric is MetricType {
7575
return metric in metricsRegistry;
7676
}
7777

78-
export async function runMetrics(historyFolder: string, options: MetricOptions): Promise<void> {
78+
export async function runMetrics(options: MetricOptions): Promise<void> {
79+
const homeDir = os.homedir();
7980
const metricType = options.metric;
8081

82+
// Ensure chartType is always an array with a default value
83+
if (!options.chartType || !Array.isArray(options.chartType)) {
84+
options.chartType = options.chartType ? [options.chartType as any] : ['bar'];
85+
}
86+
87+
console.log('Chart types:', options.chartType);
88+
8189
if (!isValidMetricType(metricType)) {
8290
console.error(`❌ Unknown metric type: ${metricType}`);
8391
return;
@@ -90,8 +98,8 @@ export async function runMetrics(historyFolder: string, options: MetricOptions):
9098
return;
9199
}
92100

93-
const inputBase = path.join(historyFolder, options.inputDir || '');
94-
const outputBase = path.join(historyFolder, options.results);
101+
const inputBase = path.join(homeDir, options.inputDir || '');
102+
const outputBase = path.join(homeDir, options.results);
95103
fs.mkdirSync(outputBase, { recursive: true });
96104

97105
let libraryInfo: any = undefined;

src/commands/history/history.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,11 +31,13 @@ export interface Plugin {
3131
export const historyCommand = new Command()
3232
.name('history')
3333
.argument('[folders...]', 'A list of git repositories to analyse')
34-
.option('--results, -r', 'The results folder', 'results')
35-
.option('--plugins, -p [plugins...]', 'A list of plugins')
34+
.option('--results <folder>', 'The results folder', 'results')
35+
.option('--plugins <plugins...>', 'A list of plugins')
3636
.action(analyseHistory);
3737

38-
export async function analyseHistory(folders: string[], options: HistoryOptions, useCache = true): Promise<void> {
38+
export async function analyseHistory(folders: string[], options: HistoryOptions, useCache = true): Promise<void> {
39+
console.log('Input folders:', folders);
40+
console.log('Results folder:', options.results);
3941
const selectedPlugins: Plugin[] = getPluginsFromNames(options.plugins);
4042
if (folders.length === 0) {
4143
log.info('No folders provided to analyze.');

0 commit comments

Comments
 (0)