From 1f8082d8e1cf0eb1d63eb201e20167bf68bd0eca Mon Sep 17 00:00:00 2001 From: Thomas Hunter Date: Wed, 6 Jan 2021 09:09:21 +0000 Subject: [PATCH] [ACA-4231] Added a table format to the scan-env command (#6490) --- lib/cli/scripts/scan-env.ts | 44 +++++++++++++++++++++++++++---------- 1 file changed, 33 insertions(+), 11 deletions(-) diff --git a/lib/cli/scripts/scan-env.ts b/lib/cli/scripts/scan-env.ts index c3b9aa114d..7765c7f75f 100644 --- a/lib/cli/scripts/scan-env.ts +++ b/lib/cli/scripts/scan-env.ts @@ -1,6 +1,9 @@ const { AlfrescoApiCompatibility, PeopleApi, NodesApi, GroupsApi, SitesApi, SearchApi } = require('@alfresco/js-api'); const program = require('commander'); +interface PeopleTally { enabled: number, disabled: number } +interface RowToPrint { label: string, value: number } + const MAX_ATTEMPTS = 10; const TIMEOUT = 60000; const MAX_PEOPLE_PER_PAGE = 100; @@ -20,22 +23,42 @@ export default async function main(_args: string[]) { await attemptLogin(); + const rowsToPrint: Array = []; const peopleCount = await getPeopleCount(); - console.log('Active Users :', peopleCount.enabled); - console.log('Deactivated Users :', peopleCount.disabled); + rowsToPrint.push({ label: 'Active Users', value: peopleCount.enabled }); + rowsToPrint.push({ label: 'Deactivated Users', value: peopleCount.disabled }); + rowsToPrint.push({ label: "User's Home Folders", value: await getHomeFoldersCount() }); + rowsToPrint.push({ label: 'Groups', value: await getGroupsCount() }); + rowsToPrint.push({ label: 'Sites', value: await getSitesCount() }); + rowsToPrint.push({ label: 'Files', value: await getFilesCount() }); - const homeFoldersCount = await getHomeFoldersCount(); - console.log("User's Home Folders :", homeFoldersCount); + console.log(generateTable(rowsToPrint)); - const groupsCount = await getGroupsCount(); - console.log('Groups :', groupsCount); +} - const sitesCount = await getSitesCount(); - console.log('Sites :', sitesCount); +function generateTable(rowsToPrint: Array) { + const columnWidths = rowsToPrint.reduce((maxWidths, row: RowToPrint) => { + return { + labelColumn: Math.max(maxWidths.labelColumn, row.label.length), + valueColumn: Math.max(maxWidths.valueColumn, row.value.toString().length) + }; + }, { labelColumn: 12, valueColumn: 1 }); + + const horizontalLine = ''.padEnd(columnWidths.labelColumn + columnWidths.valueColumn + 5, '═'); + const headerText = 'ENVIRONM'.padStart(Math.floor((columnWidths.labelColumn + columnWidths.valueColumn + 3) / 2), ' ') + + 'ENT SCAN'.padEnd(Math.ceil((columnWidths.labelColumn + columnWidths.valueColumn + 3) / 2), ' '); - const filesCount = await getFilesCount(); - console.log('Files :', filesCount); + const reset = '\x1b[0m', grey = '\x1b[90m', cyan = '\x1b[36m', yellow = '\x1b[93m', bright = '\x1b[1m'; + let tableString = `${grey}╒${horizontalLine}╕${reset} +${grey}│ ${bright}${cyan}${headerText} ${grey}│${reset} +${grey}╞${horizontalLine}╡${reset}`; + rowsToPrint.forEach(row => { + tableString += `\n${grey}│${reset} ${row.label.padEnd(columnWidths.labelColumn, ' ')} ${yellow}${row.value.toString().padEnd(columnWidths.valueColumn, ' ')} ${grey}│${reset}`; + }); + tableString += `\n${grey}╘${horizontalLine}╛${reset}`; + + return tableString; } async function attemptLogin() { @@ -59,7 +82,6 @@ async function attemptLogin() { } } -interface PeopleTally { enabled: number, disabled: number } async function getPeopleCount(skipCount: number = 0): Promise { try { const peopleApi = new PeopleApi(jsApiConnection);