From 5545a5d2908d2fba209446b3e170acff073ed27f Mon Sep 17 00:00:00 2001 From: Timothy Sullivan Date: Thu, 5 Dec 2019 14:21:32 -0700 Subject: [PATCH 1/2] [Reporting/Screenshots] Do not fail the report if request is aborted --- .../server/browsers/chromium/driver_factory/index.ts | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/x-pack/legacy/plugins/reporting/server/browsers/chromium/driver_factory/index.ts b/x-pack/legacy/plugins/reporting/server/browsers/chromium/driver_factory/index.ts index ca26f7d41c12a..a02843f35f29d 100644 --- a/x-pack/legacy/plugins/reporting/server/browsers/chromium/driver_factory/index.ts +++ b/x-pack/legacy/plugins/reporting/server/browsers/chromium/driver_factory/index.ts @@ -144,7 +144,7 @@ export class HeadlessChromiumDriverFactory { terminate$ .pipe( tap(signal => { - this.logger.debug(`Observer got signal: ${signal}`); + this.logger.debug(`Termination signal received: ${signal}`); }), ignoreElements() ) @@ -212,9 +212,10 @@ export class HeadlessChromiumDriverFactory { mergeMap(req => { const failure = req.failure && req.failure(); if (failure) { - return Rx.throwError( - new Error(`Request to [${req.url()}] failed! [${failure.errorText}]`) + this.logger.warning( + `Request to [${req.url()}] failed! [${failure.errorText}]. This error will be ignored.` ); + return Rx.of(); } return Rx.throwError(new Error(`Unknown failure!`)); }) From d477a826bde852675dd4d5d7ea6ee2fdeb26c432 Mon Sep 17 00:00:00 2001 From: Timothy Sullivan Date: Fri, 6 Dec 2019 12:31:27 -0700 Subject: [PATCH 2/2] take pageRequestFailed out of pageExit observable --- .../browsers/chromium/driver_factory/index.ts | 42 ++++++++----------- 1 file changed, 18 insertions(+), 24 deletions(-) diff --git a/x-pack/legacy/plugins/reporting/server/browsers/chromium/driver_factory/index.ts b/x-pack/legacy/plugins/reporting/server/browsers/chromium/driver_factory/index.ts index a02843f35f29d..daa7df343f8aa 100644 --- a/x-pack/legacy/plugins/reporting/server/browsers/chromium/driver_factory/index.ts +++ b/x-pack/legacy/plugins/reporting/server/browsers/chromium/driver_factory/index.ts @@ -15,7 +15,7 @@ import { } from 'puppeteer'; import del from 'del'; import * as Rx from 'rxjs'; -import { ignoreElements, mergeMap, tap } from 'rxjs/operators'; +import { ignoreElements, map, mergeMap, tap } from 'rxjs/operators'; import { InnerSubscriber } from 'rxjs/internal/InnerSubscriber'; import { BrowserConfig, NetworkPolicy } from '../../../../types'; @@ -156,7 +156,6 @@ export class HeadlessChromiumDriverFactory { this.getProcessLogger(browser).subscribe(); const driver$ = Rx.of(new HeadlessChromiumDriver(page, { inspect: this.browserConfig.inspect, networkPolicy: this.networkPolicy })); // prettier-ignore - const exit$ = this.getPageExit(browser, page); observer.next({ driver$, exit$ }); @@ -173,9 +172,9 @@ export class HeadlessChromiumDriverFactory { }); } - getBrowserLogger(page: Page): Rx.Observable { - return Rx.fromEvent(page, 'console').pipe( - tap(line => { + getBrowserLogger(page: Page): Rx.Observable { + const consoleMessages$ = Rx.fromEvent(page, 'console').pipe( + map(line => { if (line.type() === 'error') { this.logger.error(line.text(), ['headless-browser-console']); } else { @@ -183,6 +182,19 @@ export class HeadlessChromiumDriverFactory { } }) ); + + const pageRequestFailed$ = Rx.fromEvent(page, 'requestfailed').pipe( + map(req => { + const failure = req.failure && req.failure(); + if (failure) { + this.logger.warning( + `Request to [${req.url()}] failed! [${failure.errorText}]. This error will be ignored.` + ); + } + }) + ); + + return Rx.merge(consoleMessages$, pageRequestFailed$); } getProcessLogger(browser: Browser) { @@ -208,19 +220,6 @@ export class HeadlessChromiumDriverFactory { mergeMap(err => Rx.throwError(err)) ); - const pageRequestFailed$ = Rx.fromEvent(page, 'requestfailed').pipe( - mergeMap(req => { - const failure = req.failure && req.failure(); - if (failure) { - this.logger.warning( - `Request to [${req.url()}] failed! [${failure.errorText}]. This error will be ignored.` - ); - return Rx.of(); - } - return Rx.throwError(new Error(`Unknown failure!`)); - }) - ); - const browserDisconnect$ = Rx.fromEvent(browser, 'disconnected').pipe( mergeMap(() => Rx.throwError( @@ -231,11 +230,6 @@ export class HeadlessChromiumDriverFactory { ) ); - return Rx.merge( - pageError$, - uncaughtExceptionPageError$, - pageRequestFailed$, - browserDisconnect$ - ); + return Rx.merge(pageError$, uncaughtExceptionPageError$, browserDisconnect$); } }