mirror of
https://github.com/Alfresco/alfresco-ng2-components.git
synced 2025-07-24 17:32:15 +00:00
[ACA-4227] [APS] Create a script to check Process Services Management plugin status before running e2e tests (#6486)
* [ACA-4227] Create a generic script to check plugin status before running e2e tests by plugin name * * Added governace env check * * Added AAE plugin check * * Updated script * small improvements, add uiName parameter for the command * * Fixed comments * * Moved check-plugin script in the common place * * Added table format to show plugin status Co-authored-by: adomi <ardit.domi@alfresco.com>
This commit is contained in:
58
lib/cli/scripts/plugins/check-env.ts
Normal file
58
lib/cli/scripts/plugins/check-env.ts
Normal file
@@ -0,0 +1,58 @@
|
||||
import { logger } from './../logger';
|
||||
import alfrescoApi = require('@alfresco/js-api');
|
||||
|
||||
export class CheckEnv {
|
||||
_alfrescoJsApi: any;
|
||||
TIMEOUT = 6000;
|
||||
MAX_RETRY = 10;
|
||||
counter = 0;
|
||||
|
||||
constructor(
|
||||
private host: string,
|
||||
private username: string,
|
||||
private password: string
|
||||
) {}
|
||||
|
||||
async checkEnv() {
|
||||
try {
|
||||
this.alfrescoJsApi = new alfrescoApi.AlfrescoApiCompatibility(<any> {
|
||||
provider: 'ALL',
|
||||
hostBpm: this.host,
|
||||
hostEcm: this.host,
|
||||
authType: 'OAUTH',
|
||||
oauth2: {
|
||||
host: `${this.host}/auth/realms/alfresco`,
|
||||
clientId: 'alfresco',
|
||||
scope: 'openid'
|
||||
}
|
||||
});
|
||||
await this.alfrescoJsApi.login(this.username, this.password);
|
||||
} catch (e) {
|
||||
logger.error('Login error environment down or inaccessible');
|
||||
this.counter++;
|
||||
if (this.MAX_RETRY === this.counter) {
|
||||
logger.error('Give up');
|
||||
process.exit(1);
|
||||
} else {
|
||||
logger.error(
|
||||
`Retry in 1 minute at main();tempt N ${this.counter}`
|
||||
);
|
||||
this.sleep(this.TIMEOUT);
|
||||
this.checkEnv();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public get alfrescoJsApi() {
|
||||
return this._alfrescoJsApi;
|
||||
}
|
||||
|
||||
public set alfrescoJsApi(alfrescoJsApi: any) {
|
||||
this._alfrescoJsApi = alfrescoJsApi;
|
||||
}
|
||||
|
||||
sleep(delay) {
|
||||
const start = new Date().getTime();
|
||||
while (new Date().getTime() < start + delay) {}
|
||||
}
|
||||
}
|
44
lib/cli/scripts/plugins/plugin-config.ts
Normal file
44
lib/cli/scripts/plugins/plugin-config.ts
Normal file
@@ -0,0 +1,44 @@
|
||||
import { PluginInterface } from './plugin-model';
|
||||
import { logger } from '../logger';
|
||||
|
||||
export class PluginConfiguration {
|
||||
constructor(
|
||||
private plugInInfo: PluginInterface,
|
||||
private alfrescoJsApi: any
|
||||
) {}
|
||||
|
||||
async getAppConfig(url: string) {
|
||||
return this.callCustomApi(url);
|
||||
}
|
||||
|
||||
async callCustomApi(url: string) {
|
||||
const pathParams = {},
|
||||
headerParams = {},
|
||||
formParams = {},
|
||||
bodyParam = {},
|
||||
queryParams = {},
|
||||
contentTypes = ['application/json'],
|
||||
accepts = ['application/json'];
|
||||
try {
|
||||
const response = await this.alfrescoJsApi.oauth2Auth.callCustomApi(
|
||||
url,
|
||||
'GET',
|
||||
pathParams,
|
||||
queryParams,
|
||||
headerParams,
|
||||
formParams,
|
||||
bodyParam,
|
||||
contentTypes,
|
||||
accepts
|
||||
);
|
||||
|
||||
return response;
|
||||
} catch (error) {
|
||||
logger.error(
|
||||
`${this.plugInInfo.host} is not reachable error: `,
|
||||
error
|
||||
);
|
||||
return {};
|
||||
}
|
||||
}
|
||||
}
|
12
lib/cli/scripts/plugins/plugin-model.ts
Normal file
12
lib/cli/scripts/plugins/plugin-model.ts
Normal file
@@ -0,0 +1,12 @@
|
||||
export enum PluginTarget {
|
||||
processService = 'processService',
|
||||
processAutomation = 'processAutomation',
|
||||
governance = 'governance'
|
||||
}
|
||||
|
||||
export interface PluginInterface {
|
||||
name: string;
|
||||
host: string;
|
||||
appName: string;
|
||||
uiName: string;
|
||||
}
|
55
lib/cli/scripts/plugins/process-automation-check-plugin.ts
Normal file
55
lib/cli/scripts/plugins/process-automation-check-plugin.ts
Normal file
@@ -0,0 +1,55 @@
|
||||
import { PluginInterface } from './plugin-model';
|
||||
import { logger } from '../logger';
|
||||
import { ProcessAutomationHealth } from './process-automation-health';
|
||||
|
||||
export class ProcessAutomationCheckPlugin {
|
||||
processAutomationHealth: ProcessAutomationHealth;
|
||||
|
||||
constructor(
|
||||
private plugInInfo: PluginInterface,
|
||||
private alfrescoJsApi: any
|
||||
) {
|
||||
this.processAutomationHealth = new ProcessAutomationHealth(
|
||||
this.plugInInfo,
|
||||
this.alfrescoJsApi
|
||||
);
|
||||
}
|
||||
|
||||
async checkProcessAutomationPlugin() {
|
||||
let pluginStatus;
|
||||
try {
|
||||
const isPluginEnabled = await this.processAutomationHealth.isPluginEnabledFromAppConfiguration();
|
||||
const isBackendActive = await this.processAutomationHealth.checkBackendHealth();
|
||||
|
||||
if (isPluginEnabled && isBackendActive) {
|
||||
logger.info(
|
||||
`The plugin ${
|
||||
this.plugInInfo.name
|
||||
} has been correctly configured`
|
||||
);
|
||||
|
||||
pluginStatus = [{ PluginName: this.plugInInfo.name, Status: 'Active', BE: 'Enabled', FE: 'Enabled' }];
|
||||
console.table(pluginStatus);
|
||||
} else {
|
||||
this.logConfigurationError();
|
||||
pluginStatus = [{ PluginName: this.plugInInfo.name, Status: 'Inactive', BE: isBackendActive ? 'Enabled' : 'Disabled', FE: isPluginEnabled ? 'Enabled' : 'Disabled' }];
|
||||
console.table(pluginStatus);
|
||||
process.exit(1);
|
||||
}
|
||||
} catch (e) {
|
||||
this.logConfigurationError(e);
|
||||
pluginStatus = [{ PluginName: this.plugInInfo.name, Status: 'Inactive', BE: 'Disabled', FE: 'Disabled' }];
|
||||
console.table(pluginStatus);
|
||||
process.exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
private logConfigurationError(error?: any) {
|
||||
logger.error(
|
||||
`The plugin ${
|
||||
this.plugInInfo.name
|
||||
} has not been correctly configured`,
|
||||
error
|
||||
);
|
||||
}
|
||||
}
|
70
lib/cli/scripts/plugins/process-automation-health.ts
Normal file
70
lib/cli/scripts/plugins/process-automation-health.ts
Normal file
@@ -0,0 +1,70 @@
|
||||
import { PluginInterface } from './plugin-model';
|
||||
import { logger } from '../logger';
|
||||
import { PluginConfiguration } from './plugin-config';
|
||||
|
||||
export class ProcessAutomationHealth {
|
||||
config: PluginConfiguration;
|
||||
|
||||
constructor(
|
||||
private plugInInfo: PluginInterface,
|
||||
private alfrescoJsApi: any
|
||||
) {
|
||||
this.config = new PluginConfiguration(
|
||||
this.plugInInfo,
|
||||
this.alfrescoJsApi
|
||||
);
|
||||
}
|
||||
|
||||
async isPluginEnabledFromAppConfiguration() {
|
||||
try {
|
||||
const url = `${this.plugInInfo.host}/${this.plugInInfo.appName}/ui/${this.plugInInfo.uiName}/app.config.json`;
|
||||
const appConfig = await this.config.getAppConfig(url);
|
||||
let isEnabled = true;
|
||||
if (appConfig && appConfig.plugins && appConfig.plugins[this.plugInInfo.name]) {
|
||||
logger.info(
|
||||
`The plugin ${
|
||||
this.plugInInfo.name
|
||||
} has been correctly configured in app.config.json`
|
||||
);
|
||||
} else {
|
||||
this.logConfigurationError();
|
||||
isEnabled = false;
|
||||
}
|
||||
|
||||
return isEnabled;
|
||||
} catch (error) {
|
||||
this.logConfigurationError(error);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
async checkBackendHealth() {
|
||||
const url = `${this.plugInInfo.host}/${this.plugInInfo.appName}/rb/actuator/health`;
|
||||
let isBackendActive = true;
|
||||
try {
|
||||
const response = await this.config.callCustomApi(url);
|
||||
if (response.status === 'UP') {
|
||||
logger.info(`${this.plugInInfo.host} is UP!`);
|
||||
} else {
|
||||
logger.error(`${this.plugInInfo.host} is DOWN `);
|
||||
isBackendActive = false;
|
||||
}
|
||||
return isBackendActive;
|
||||
} catch (error) {
|
||||
logger.error(
|
||||
`${this.plugInInfo.host} is not reachable error: `,
|
||||
error
|
||||
);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
private logConfigurationError(error?: any) {
|
||||
logger.error(
|
||||
`The plugin ${
|
||||
this.plugInInfo.name
|
||||
} has not been correctly configured in app.config.json`,
|
||||
error
|
||||
);
|
||||
}
|
||||
}
|
54
lib/cli/scripts/plugins/process-service-check-plugin.ts
Normal file
54
lib/cli/scripts/plugins/process-service-check-plugin.ts
Normal file
@@ -0,0 +1,54 @@
|
||||
import { PluginInterface } from './plugin-model';
|
||||
import { logger } from '../logger';
|
||||
import { ProcessServiceHealth } from './process-services-health';
|
||||
|
||||
export class ProcessServiceCheckPlugin {
|
||||
processServiceHealth: ProcessServiceHealth;
|
||||
|
||||
constructor(
|
||||
private plugInInfo: PluginInterface,
|
||||
private alfrescoJsApi: any
|
||||
) {
|
||||
this.processServiceHealth = new ProcessServiceHealth(
|
||||
this.plugInInfo,
|
||||
this.alfrescoJsApi
|
||||
);
|
||||
}
|
||||
|
||||
async checkProcessServicesPlugin() {
|
||||
let pluginStatus;
|
||||
try {
|
||||
const isPluginEnabled = await this.processServiceHealth.isPluginEnabledFromAppConfiguration();
|
||||
const isBackendActive = await this.processServiceHealth.checkBackendHealth();
|
||||
|
||||
if (isPluginEnabled && isBackendActive) {
|
||||
logger.info(
|
||||
`The plugin ${
|
||||
this.plugInInfo.name
|
||||
} has been correctly configured`
|
||||
);
|
||||
pluginStatus = [{ PluginName: this.plugInInfo.name, Status: `${'Active'}`, BE: 'Enabled', FE: 'Enabled' }];
|
||||
console.table(pluginStatus);
|
||||
} else {
|
||||
this.logConfigurationError();
|
||||
pluginStatus = [{ PluginName: this.plugInInfo.name, Status: 'Inactive', BE: isBackendActive ? 'Enabled' : 'Disabled', FE: isPluginEnabled ? 'Enabled' : 'Disabled' }];
|
||||
console.table(pluginStatus);
|
||||
process.exit(1);
|
||||
}
|
||||
} catch (e) {
|
||||
this.logConfigurationError(e);
|
||||
pluginStatus = [{ PluginName: this.plugInInfo.name, Status: 'Inactive', BE: 'Disabled', FE: 'Disabled' }];
|
||||
console.table(pluginStatus);
|
||||
process.exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
private logConfigurationError(error?: any) {
|
||||
logger.error(
|
||||
`The plugin ${
|
||||
this.plugInInfo.name
|
||||
} has not been correctly configured`,
|
||||
error
|
||||
);
|
||||
}
|
||||
}
|
64
lib/cli/scripts/plugins/process-services-health.ts
Normal file
64
lib/cli/scripts/plugins/process-services-health.ts
Normal file
@@ -0,0 +1,64 @@
|
||||
import { PluginInterface } from './plugin-model';
|
||||
import { logger } from '../logger';
|
||||
import { PluginConfiguration } from './plugin-config';
|
||||
|
||||
export class ProcessServiceHealth {
|
||||
|
||||
config: PluginConfiguration;
|
||||
|
||||
constructor(private plugInInfo: PluginInterface, private alfrescoJsApi: any) {
|
||||
this.config = new PluginConfiguration(this.plugInInfo, this.alfrescoJsApi);
|
||||
}
|
||||
|
||||
async isPluginEnabledFromAppConfiguration() {
|
||||
try {
|
||||
const url = `${this.plugInInfo.host}/app.config.json`;
|
||||
const appConfig = await this.config.getAppConfig(url);
|
||||
let isEnabled = true;
|
||||
if (appConfig && appConfig.plugins && appConfig.plugins[this.plugInInfo.name]) {
|
||||
logger.info(
|
||||
`The plugin ${
|
||||
this.plugInInfo.name
|
||||
} has been correctly configured in app.config.json`
|
||||
);
|
||||
} else {
|
||||
this.logConfigurationError();
|
||||
return (isEnabled = false);
|
||||
}
|
||||
|
||||
return isEnabled;
|
||||
} catch (error) {
|
||||
this.logConfigurationError(error);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
async checkBackendHealth() {
|
||||
try {
|
||||
const systemProperties = await this.alfrescoJsApi.activiti.systemPropertiesApi.getProperties();
|
||||
let isBackendActive = true;
|
||||
if (systemProperties) {
|
||||
logger.info(`${this.plugInInfo.host} is UP!`);
|
||||
} else {
|
||||
logger.error(`${this.plugInInfo.host} is DOWN `);
|
||||
isBackendActive = false;
|
||||
}
|
||||
return isBackendActive;
|
||||
} catch (error) {
|
||||
logger.error(
|
||||
`${this.plugInInfo.host} is not reachable error: `,
|
||||
error
|
||||
);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
private logConfigurationError(error?: any) {
|
||||
logger.error(
|
||||
`The plugin ${
|
||||
this.plugInInfo.name
|
||||
} has not been correctly configured in app.config.json`,
|
||||
error
|
||||
);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user