diff --git a/lib/cli/scripts/scan-env.ts b/lib/cli/scripts/scan-env.ts index 7765c7f75f..17387202a5 100644 --- a/lib/cli/scripts/scan-env.ts +++ b/lib/cli/scripts/scan-env.ts @@ -1,19 +1,20 @@ -const { AlfrescoApiCompatibility, PeopleApi, NodesApi, GroupsApi, SitesApi, SearchApi } = require('@alfresco/js-api'); -const program = require('commander'); +import { AlfrescoApi, PeopleApi, NodesApi, GroupsApi, SitesApi, SearchApi } from '@alfresco/js-api'; +import * as program from 'commander'; +import { logger } from './logger'; -interface PeopleTally { enabled: number, disabled: number } -interface RowToPrint { label: string, value: number } +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; const USERS_HOME_RELATIVE_PATH = 'User Homes'; -let jsApiConnection; +let jsApiConnection: any; let loginAttempts: number = 0; export default async function main(_args: string[]) { - + program .version('0.1.0') .option('--host ', 'Remote environment host') @@ -32,7 +33,7 @@ export default async function main(_args: string[]) { rowsToPrint.push({ label: 'Sites', value: await getSitesCount() }); rowsToPrint.push({ label: 'Files', value: await getFilesCount() }); - console.log(generateTable(rowsToPrint)); + logger.info(generateTable(rowsToPrint)); } @@ -43,12 +44,12 @@ function generateTable(rowsToPrint: Array) { 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 reset = '\x1b[0m', grey = '\x1b[90m', cyan = '\x1b[36m', yellow = '\x1b[93m', bright = '\x1b[1m'; + const reset = '\x1b[0m', grey = '\x1b[90m', cyan = '\x1b[36m', yellow = '\x1b[33m', bright = '\x1b[1m'; let tableString = `${grey}╒${horizontalLine}╕${reset} ${grey}│ ${bright}${cyan}${headerText} ${grey}│${reset} @@ -63,22 +64,35 @@ ${grey}╞${horizontalLine}╡${reset}`; async function attemptLogin() { try { - jsApiConnection = new AlfrescoApiCompatibility({ + jsApiConnection = new AlfrescoApi({ provider: 'ECM', hostEcm: program.host }); await jsApiConnection.login(program.username, program.password); } catch (err) { - console.log('Login error environment down or inaccessible'); - loginAttempts++; - if (MAX_ATTEMPTS === loginAttempts) { - console.log('Give up'); - process.exit(1); - } else { - console.log(`Retry in 1 minute attempt N ${loginAttempts}`); - await wait(TIMEOUT); - await attemptLogin(); + await handleLoginError(err); + } +} + +async function handleLoginError(loginError) { + const reset = '\x1b[0m', bright = '\x1b[1m', red = '\x1b[31m'; + if (loginAttempts === 0) { + logger.error(`${red}${bright}ENVIRONMENT SCAN${reset}${red} - Login error: environment down or inaccessible${reset}`); + } + loginAttempts++; + if (MAX_ATTEMPTS === loginAttempts) { + if (loginError.response && loginError.response.text) { + const parsedJson = JSON.parse(loginError.response.text); + if (typeof parsedJson === 'object' && parsedJson.error) { + logger.error(parsedJson.error); + } } + logger.error('Give up'); + process.exit(1); + } else { + logger.error(`Retry in 1 minute attempt N ${loginAttempts}`); + await wait(TIMEOUT); + await attemptLogin(); } } @@ -101,7 +115,7 @@ async function getPeopleCount(skipCount: number = 0): Promise { } return result; } catch (error) { - console.log(error); + logger.error(error); } } @@ -114,7 +128,7 @@ async function getHomeFoldersCount(): Promise { }); return homesFolderApiResult.list.pagination.totalItems; } catch (error) { - console.log(error); + logger.error(error); } } @@ -124,7 +138,7 @@ async function getGroupsCount(): Promise { const groupsApiResult = await groupsApi.listGroups({ maxItems: 1 }); return groupsApiResult.list.pagination.totalItems; } catch (error) { - console.log(error); + logger.error(error); } } @@ -134,7 +148,7 @@ async function getSitesCount(): Promise { const sitesApiResult = await sitesApi.listSites({ maxItems: 1 }); return sitesApiResult.list.pagination.totalItems; } catch (error) { - console.log(error); + logger.error(error); } } @@ -143,7 +157,7 @@ async function getFilesCount(): Promise { const searchApi = new SearchApi(jsApiConnection); const searchApiResult = await searchApi.search({ query: { - query: "select * from cmis:document", + query: 'select * from cmis:document', language: 'cmis' }, paging: { @@ -152,7 +166,7 @@ async function getFilesCount(): Promise { }); return searchApiResult.list.pagination.totalItems; } catch (error) { - console.log(error); + logger.error(error); } }