public async run()

in packages/health-client/src/deployment-health-checker.ts [20:66]


    public async run(
        testTimeoutInMinutes: number,
        waitTimeBeforeEvaluationInMinutes: number,
        evaluationIntervalInMinutes: number,
        releaseId: string,
    ): Promise<void> {
        this.logger.logInfo('Start evaluation of functional tests result.');
        this.logger.logInfo(`Waiting for ${waitTimeBeforeEvaluationInMinutes} minutes before evaluating functional tests result.`);
        await this.waitFunc(this.minutesToMilliseconds(waitTimeBeforeEvaluationInMinutes));

        let healthStatus: TestRunResult;
        let response: ResponseWithBodyType<HealthReport>;
        const startTime = this.getCurrentTime();
        while (healthStatus !== 'pass') {
            try {
                this.logger.logInfo('Retrieving functional tests result.');

                response = await this.client.checkHealth(`/release/${releaseId}`);
                if (response.statusCode !== 200) {
                    throw new Error(
                        JSON.stringify({ statusCode: response.statusCode, statusMessage: response.statusMessage, body: response.body }),
                    );
                }

                healthStatus = response.body.healthStatus;
                this.logger.logInfo(`Functional tests result: ${JSON.stringify(response.body)}`);
            } catch (error) {
                this.logger.logInfo(`Failed to retrieve functional tests result. ${System.serializeError(error)}`);
            }

            if (healthStatus !== 'pass') {
                if (this.isTestTimeout(startTime, testTimeoutInMinutes)) {
                    this.logger.logInfo('Functional tests result validation timed out.');
                    throw new Error('Functional tests result validation timed out.');
                }

                this.logger.logInfo(
                    `Functional tests health status: ${healthStatus ? healthStatus : 'unknown'} . Waiting for next evaluation result.`,
                );

                await this.waitFunc(this.minutesToMilliseconds(evaluationIntervalInMinutes));
            } else {
                this.logger.logInfo('Functional tests succeeded.');
                await this.downloadAllReports(response.body);
            }
        }
    }