Analyze: Log analysis summaries for custom queries

This commit is contained in:
Henry Mercer 2021-05-28 18:32:53 +01:00
parent 2ccefaccfe
commit 2338fe5db5
3 changed files with 49 additions and 15 deletions

29
lib/analyze.js generated
View file

@ -92,21 +92,23 @@ async function runQueries(sarifFolder, memoryFlag, addSnippetsFlag, threadsFlag,
throw new Error(`Unable to analyse ${language} as no queries were selected for this language`); throw new Error(`Unable to analyse ${language} as no queries were selected for this language`);
} }
try { try {
let analysisSummary = ""; let analysisSummaryBuiltIn = "";
const customAnalysisSummaries = [];
if (queries["builtin"].length > 0) { if (queries["builtin"].length > 0) {
const startTimeBuliltIn = new Date().getTime(); const startTimeBuiltIn = new Date().getTime();
const { sarifFile, stdout } = await runQueryGroup(language, "builtin", queries["builtin"], sarifFolder, undefined); const { sarifFile, stdout } = await runQueryGroup(language, "builtin", queries["builtin"], sarifFolder, undefined);
analysisSummary = stdout; analysisSummaryBuiltIn = stdout;
await injectLinesOfCode(sarifFile, language, locPromise); await injectLinesOfCode(sarifFile, language, locPromise);
statusReport[`analyze_builtin_queries_${language}_duration_ms`] = statusReport[`analyze_builtin_queries_${language}_duration_ms`] =
new Date().getTime() - startTimeBuliltIn; new Date().getTime() - startTimeBuiltIn;
} }
const startTimeCustom = new Date().getTime(); const startTimeCustom = new Date().getTime();
const temporarySarifDir = config.tempDir; const temporarySarifDir = config.tempDir;
const temporarySarifFiles = []; const temporarySarifFiles = [];
for (let i = 0; i < queries["custom"].length; ++i) { for (let i = 0; i < queries["custom"].length; ++i) {
if (queries["custom"][i].queries.length > 0) { if (queries["custom"][i].queries.length > 0) {
const { sarifFile } = await runQueryGroup(language, `custom-${i}`, queries["custom"][i].queries, temporarySarifDir, queries["custom"][i].searchPath); const { sarifFile, stdout } = await runQueryGroup(language, `custom-${i}`, queries["custom"][i].queries, temporarySarifDir, queries["custom"][i].searchPath);
customAnalysisSummaries.push(stdout);
temporarySarifFiles.push(sarifFile); temporarySarifFiles.push(sarifFile);
} }
} }
@ -118,10 +120,23 @@ async function runQueries(sarifFolder, memoryFlag, addSnippetsFlag, threadsFlag,
new Date().getTime() - startTimeCustom; new Date().getTime() - startTimeCustom;
} }
logger.endGroup(); logger.endGroup();
// Print the LoC baseline and the summary results from database analyze. // Print the LoC baseline and the summary results from database analyze for the standard
// query suite and (if appropriate) each custom query suite.
logger.startGroup(`Analysis summary for ${language}`); logger.startGroup(`Analysis summary for ${language}`);
printLinesOfCodeSummary(logger, language, await locPromise); printLinesOfCodeSummary(logger, language, await locPromise);
logger.info(analysisSummary); logger.info(analysisSummaryBuiltIn);
for (const [i, customSummary] of customAnalysisSummaries.entries()) {
if (customSummary.trim() === "") {
continue;
}
const description = customAnalysisSummaries.length === 1
? "custom queries"
: `custom query suite ${i + 1}/${customAnalysisSummaries.length}`;
logger.info(`Analysis summary for ${description}:`);
logger.info("");
logger.info(customSummary);
logger.info("");
}
logger.endGroup(); logger.endGroup();
} }
catch (e) { catch (e) {

File diff suppressed because one or more lines are too long

View file

@ -176,9 +176,10 @@ export async function runQueries(
} }
try { try {
let analysisSummary = ""; let analysisSummaryBuiltIn = "";
const customAnalysisSummaries: string[] = [];
if (queries["builtin"].length > 0) { if (queries["builtin"].length > 0) {
const startTimeBuliltIn = new Date().getTime(); const startTimeBuiltIn = new Date().getTime();
const { sarifFile, stdout } = await runQueryGroup( const { sarifFile, stdout } = await runQueryGroup(
language, language,
"builtin", "builtin",
@ -186,24 +187,25 @@ export async function runQueries(
sarifFolder, sarifFolder,
undefined undefined
); );
analysisSummary = stdout; analysisSummaryBuiltIn = stdout;
await injectLinesOfCode(sarifFile, language, locPromise); await injectLinesOfCode(sarifFile, language, locPromise);
statusReport[`analyze_builtin_queries_${language}_duration_ms`] = statusReport[`analyze_builtin_queries_${language}_duration_ms`] =
new Date().getTime() - startTimeBuliltIn; new Date().getTime() - startTimeBuiltIn;
} }
const startTimeCustom = new Date().getTime(); const startTimeCustom = new Date().getTime();
const temporarySarifDir = config.tempDir; const temporarySarifDir = config.tempDir;
const temporarySarifFiles: string[] = []; const temporarySarifFiles: string[] = [];
for (let i = 0; i < queries["custom"].length; ++i) { for (let i = 0; i < queries["custom"].length; ++i) {
if (queries["custom"][i].queries.length > 0) { if (queries["custom"][i].queries.length > 0) {
const { sarifFile } = await runQueryGroup( const { sarifFile, stdout } = await runQueryGroup(
language, language,
`custom-${i}`, `custom-${i}`,
queries["custom"][i].queries, queries["custom"][i].queries,
temporarySarifDir, temporarySarifDir,
queries["custom"][i].searchPath queries["custom"][i].searchPath
); );
customAnalysisSummaries.push(stdout);
temporarySarifFiles.push(sarifFile); temporarySarifFiles.push(sarifFile);
} }
} }
@ -217,10 +219,27 @@ export async function runQueries(
} }
logger.endGroup(); logger.endGroup();
// Print the LoC baseline and the summary results from database analyze. // Print the LoC baseline and the summary results from database analyze for the standard
// query suite and (if appropriate) each custom query suite.
logger.startGroup(`Analysis summary for ${language}`); logger.startGroup(`Analysis summary for ${language}`);
printLinesOfCodeSummary(logger, language, await locPromise); printLinesOfCodeSummary(logger, language, await locPromise);
logger.info(analysisSummary); logger.info(analysisSummaryBuiltIn);
for (const [i, customSummary] of customAnalysisSummaries.entries()) {
if (customSummary.trim() === "") {
continue;
}
const description =
customAnalysisSummaries.length === 1
? "custom queries"
: `custom query suite ${i + 1}/${customAnalysisSummaries.length}`;
logger.info(`Analysis summary for ${description}:`);
logger.info("");
logger.info(customSummary);
logger.info("");
}
logger.endGroup(); logger.endGroup();
} catch (e) { } catch (e) {
logger.info(e); logger.info(e);