From 595bd6cd6e1132a63ce9b359b098cd64b1abf445 Mon Sep 17 00:00:00 2001 From: Thomas Hunter Date: Tue, 1 Dec 2020 23:58:50 +0000 Subject: [PATCH] ACA-4171 to ACA-4174 Display the number of activated and deactivated users (#6400) * ACA-4171 to ACA-4174 Display the number of activated and deactivated users * ACA-4171 to ACA-4174 Added scan-env command to README Co-authored-by: Thomas Hunter --- lib/cli/README.md | 1 + lib/cli/scripts/scan-env.ts | 76 +++++++++++++++++++++++++++++++++++++ 2 files changed, 77 insertions(+) create mode 100644 lib/cli/scripts/scan-env.ts diff --git a/lib/cli/README.md b/lib/cli/README.md index 90b00af9bd..3a79c10267 100644 --- a/lib/cli/README.md +++ b/lib/cli/README.md @@ -56,6 +56,7 @@ In develop mode, the CLI takes the prebuilt scripts from the dist folder. |update-version |This command allows you to update the adf dependencies and js-api with different versions Update adf libs and js-api with latest alpha| |licenses |Create a 3th party license file | |audit |Check the security risk dependency in your package.json | +|scan-env |Scan the environment to show its status | ## Examples diff --git a/lib/cli/scripts/scan-env.ts b/lib/cli/scripts/scan-env.ts new file mode 100644 index 0000000000..79ef1fde33 --- /dev/null +++ b/lib/cli/scripts/scan-env.ts @@ -0,0 +1,76 @@ +const { AlfrescoApiCompatibility, PeopleApi } = require('@alfresco/js-api'); +const program = require('commander'); + +const MAX_ATTEMPTS = 10; +const TIMEOUT = 60000; +const MAX_PEOPLE_PER_PAGE = 100; + +let jsApiConnection; +let loginAttempts: number = 0; + +export default async function main(_args: string[]) { + + program + .version('0.1.0') + .option('--host ', 'Remote environment host') + .option('-p, --password ', 'password ') + .option('-u, --username ', 'username ') + .parse(process.argv); + + await attemptLogin(); + + const peopleCount = await getPeopleCount(); + console.log('Active Users :', peopleCount.enabled); + console.log('Deactivated Users :', peopleCount.disabled); +} + +async function attemptLogin() { + try { + jsApiConnection = new AlfrescoApiCompatibility({ + 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(); + } + } +} + +interface PeopleTally { enabled: number, disabled: number } +async function getPeopleCount(skipCount: number = 0): Promise { + try { + const peopleApi = new PeopleApi(jsApiConnection); + const apiResult = await peopleApi.listPeople({ + fields: ['enabled'], + maxItems: MAX_PEOPLE_PER_PAGE, + skipCount: skipCount + }); + const result: PeopleTally = apiResult.list.entries.reduce((peopleTally: PeopleTally, currentPerson) => { + if (currentPerson.entry.enabled) { peopleTally.enabled++; } else { peopleTally.disabled++; } + return peopleTally; + }, { enabled: 0, disabled: 0 }); + if (apiResult.list.pagination.hasMoreItems) { + const more = await getPeopleCount(apiResult.list.pagination.skipCount + MAX_PEOPLE_PER_PAGE); + result.enabled += more.enabled; + result.disabled += more.disabled; + } + return result; + } catch (error) { + console.log(error); + } +} + +async function wait(ms: number) { + return new Promise(resolve => { + setTimeout(resolve, ms); + }); +}