[Reporting] Performance instrumenting 1 (#47081)

This commit is contained in:
Tim Sullivan 2019-10-09 09:14:08 -07:00 committed by GitHub
parent 0210ce47b6
commit 8936e21a3c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 21 additions and 33 deletions

View file

@ -11,10 +11,9 @@ import { HeadlessChromiumDriverFactory } from '../../../../server/browsers/chrom
import { HeadlessChromiumDriver as HeadlessBrowser } from '../../../../server/browsers/chromium/driver';
import {
ElementsPositionAndAttribute,
ScreenShotOpts,
TimeRangeOpts,
Screenshot,
ScreenshotObservableOpts,
BrowserOpts,
TimeRange,
} from './types';
import { checkForToastMessage } from './check_for_toast';
@ -27,6 +26,12 @@ import { getTimeRange } from './get_time_range';
import { getElementPositionAndAttributes } from './get_element_position_data';
import { getScreenshots } from './get_screenshots';
// NOTE: Typescript does not throw an error if this interface has errors!
interface ScreenshotResults {
timeRange: TimeRange;
screenshots: Screenshot[];
}
export function screenshotsObservableFactory(server: KbnServer) {
const browserDriverFactory: HeadlessChromiumDriverFactory = server.plugins.reporting.browserDriverFactory; // prettier-ignore
const config = server.config();
@ -38,7 +43,7 @@ export function screenshotsObservableFactory(server: KbnServer) {
conditionalHeaders,
layout,
browserTimezone,
}: ScreenshotObservableOpts): Rx.Observable<void> {
}: ScreenshotObservableOpts): Rx.Observable<ScreenshotResults> {
const create$ = browserDriverFactory.create({
viewport: layout.getBrowserViewport(),
browserTimezone,
@ -72,7 +77,7 @@ export function screenshotsObservableFactory(server: KbnServer) {
),
mergeMap(
(browser: HeadlessBrowser) => getNumberOfItems(browser, layout, logger),
(browser, itemsCount) => ({ browser, itemsCount })
(browser, itemsCount: number) => ({ browser, itemsCount })
),
mergeMap(
async ({ browser, itemsCount }) => {
@ -85,24 +90,24 @@ export function screenshotsObservableFactory(server: KbnServer) {
mergeMap(
({ browser, itemsCount }) =>
waitForElementsToBeInDOM(browser, itemsCount, layout, logger),
({ browser, itemsCount }) => ({ browser, itemsCount })
({ browser }) => browser
),
mergeMap(
({ browser }) => {
browser => {
// Waiting till _after_ elements have rendered before injecting our CSS
// allows for them to be displayed properly in many cases
return injectCustomCss(browser, layout, logger);
},
({ browser }) => ({ browser })
browser => browser
),
mergeMap(
async ({ browser }) => {
async browser => {
if (layout.positionElements) {
// position panel elements for print layout
return await layout.positionElements(browser, logger);
}
},
({ browser }) => browser
browser => browser
),
mergeMap(
(browser: HeadlessBrowser) => {
@ -111,21 +116,17 @@ export function screenshotsObservableFactory(server: KbnServer) {
browser => browser
),
mergeMap(
(browser: HeadlessBrowser) => getTimeRange(browser, layout, logger),
(browser, timeRange) => ({ browser, timeRange })
browser => getTimeRange(browser, layout, logger),
(browser, timeRange: TimeRange | null) => ({ browser, timeRange })
),
mergeMap(
({ browser }) => getElementPositionAndAttributes(browser, layout),
(
{ browser, timeRange }: BrowserOpts & TimeRangeOpts,
elementsPositionAndAttributes: ElementsPositionAndAttribute[]
) => ({ browser, timeRange, elementsPositionAndAttributes })
({ browser, timeRange }, elementsPositionAndAttributes: ElementsPositionAndAttribute[]) => {
return { browser, timeRange, elementsPositionAndAttributes };
} // prettier-ignore
),
mergeMap(
({
browser,
elementsPositionAndAttributes,
}: BrowserOpts & ScreenShotOpts & TimeRangeOpts) => {
({ browser, elementsPositionAndAttributes }) => {
return getScreenshots({ browser, elementsPositionAndAttributes, logger });
},
({ timeRange }, screenshots) => ({ timeRange, screenshots })

View file

@ -5,7 +5,6 @@
*/
import { ElementPosition, ConditionalHeaders } from '../../../../types';
import { HeadlessChromiumDriver as HeadlessBrowser } from '../../../../server/browsers/chromium/driver';
import { LevelLogger } from '../../../../server/lib';
import { LayoutInstance } from '../../layouts/layout';
@ -36,15 +35,3 @@ export interface Screenshot {
title: any;
description: any;
}
export interface ScreenShotOpts {
elementsPositionAndAttributes: ElementsPositionAndAttribute[];
}
export interface BrowserOpts {
browser: HeadlessBrowser;
}
export interface TimeRangeOpts {
timeRange: TimeRange;
}