Skip to content

Commit

Permalink
[Reporting] consolidate server types, move some to NP
Browse files Browse the repository at this point in the history
  • Loading branch information
tsullivan committed May 18, 2020
1 parent 79b8135 commit 31e1407
Show file tree
Hide file tree
Showing 132 changed files with 902 additions and 1,011 deletions.
8 changes: 7 additions & 1 deletion x-pack/legacy/plugins/reporting/common/get_absolute_url.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,13 @@
*/

import url from 'url';
import { AbsoluteURLFactoryOptions } from '../types';

interface AbsoluteURLFactoryOptions {
defaultBasePath: string;
protocol: string;
hostname: string;
port: string | number;
}

export const getAbsoluteUrlFactory = ({
protocol,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,4 @@
* you may not use this file except in compliance with the Elastic License.
*/

export const LayoutTypes = {
PRESERVE_LAYOUT: 'preserve_layout',
PRINT: 'print',
};

export const DEFAULT_PAGELOAD_SELECTOR = '.application';
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,7 @@
* you may not use this file except in compliance with the Elastic License.
*/

import { cryptoFactory } from '../../../server/lib/crypto';
import { Logger } from '../../../types';
import { cryptoFactory, LevelLogger } from '../../../server/lib';
import { decryptJobHeaders } from './decrypt_job_headers';

const encryptHeaders = async (encryptionKey: string, headers: Record<string, string>) => {
Expand All @@ -23,7 +22,7 @@ describe('headers', () => {
},
logger: ({
error: jest.fn(),
} as unknown) as Logger,
} as unknown) as LevelLogger,
});
await expect(getDecryptedHeaders()).rejects.toMatchInlineSnapshot(
`[Error: Failed to decrypt report job data. Please ensure that xpack.reporting.encryptionKey is set and re-generate this report. Error: Invalid IV length]`
Expand All @@ -44,7 +43,7 @@ describe('headers', () => {
type: 'csv',
headers: encryptedHeaders,
},
logger: {} as Logger,
logger: {} as LevelLogger,
});
expect(decryptedHeaders).toEqual(headers);
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,7 @@
*/

import { i18n } from '@kbn/i18n';
import { cryptoFactory } from '../../../server/lib/crypto';
import { Logger } from '../../../types';
import { cryptoFactory, LevelLogger } from '../../../server/lib';

interface HasEncryptedHeaders {
headers?: string;
Expand All @@ -23,7 +22,7 @@ export const decryptJobHeaders = async <
}: {
encryptionKey?: string;
job: JobDocPayloadType;
logger: Logger;
logger: LevelLogger;
}): Promise<Record<string, string>> => {
try {
if (typeof job.headers !== 'string') {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@
*/

import sinon from 'sinon';
import { ReportingConfig, ReportingCore } from '../../../server';
import { JobDocPayload } from '../../../server/types';
import { createMockReportingCore } from '../../../test_helpers';
import { ReportingConfig, ReportingCore } from '../../../server/types';
import { JobDocPayload } from '../../../types';
import { JobDocPayloadPDF } from '../../printable_pdf/types';
import { getConditionalHeaders, getCustomLogo } from './index';

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@
* you may not use this file except in compliance with the Elastic License.
*/

import { ReportingConfig } from '../../../server/types';
import { ConditionalHeaders } from '../../../types';
import { ReportingConfig } from '../../../server';
import { ConditionalHeaders } from '../../../server/types';

export const getConditionalHeaders = <JobDocPayloadType>({
config,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@
*/

import { UI_SETTINGS_CUSTOM_PDF_LOGO } from '../../../common/constants';
import { ReportingConfig, ReportingCore } from '../../../server/types';
import { ConditionalHeaders } from '../../../types';
import { ReportingConfig, ReportingCore } from '../../../server';
import { ConditionalHeaders } from '../../../server/types';
import { JobDocPayloadPDF } from '../../printable_pdf/types'; // Logo is PDF only

export const getCustomLogo = async ({
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import {
} from 'url';
import { getAbsoluteUrlFactory } from '../../../common/get_absolute_url';
import { validateUrls } from '../../../common/validate_urls';
import { ReportingConfig } from '../../../server/types';
import { ReportingConfig } from '../../../server';
import { JobDocPayloadPNG } from '../../png/types';
import { JobDocPayloadPDF } from '../../printable_pdf/types';

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@
*/

import { CaptureConfig } from '../../../server/types';
import { LayoutTypes } from '../constants';
import { Layout, LayoutParams } from './layout';
import { LayoutParams, LayoutTypes } from './';
import { Layout } from './layout';
import { PreserveLayout } from './preserve_layout';
import { PrintLayout } from './print_layout';

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,63 @@
* you may not use this file except in compliance with the Elastic License.
*/

import { HeadlessChromiumDriver } from '../../../server/browsers';
import { LevelLogger } from '../../../server/lib';
import { Layout } from './layout';

export { createLayout } from './create_layout';
export { PrintLayout } from './print_layout';
export { Layout } from './layout';
export { PreserveLayout } from './preserve_layout';
export { PrintLayout } from './print_layout';

export const LayoutTypes = {
PRESERVE_LAYOUT: 'preserve_layout',
PRINT: 'print',
};

export const getDefaultLayoutSelectors = (): LayoutSelectorDictionary => ({
screenshot: '[data-shared-items-container]',
renderComplete: '[data-shared-item]',
itemsCountAttribute: 'data-shared-items-count',
timefilterDurationAttribute: 'data-shared-timefilter-duration',
});

export interface PageSizeParams {
pageMarginTop: number;
pageMarginBottom: number;
pageMarginWidth: number;
tableBorderWidth: number;
headingHeight: number;
subheadingHeight: number;
}

export interface LayoutSelectorDictionary {
screenshot: string;
renderComplete: string;
itemsCountAttribute: string;
timefilterDurationAttribute: string;
}

export interface PdfImageSize {
width: number;
height?: number;
}

export interface Size {
width: number;
height: number;
}

export interface LayoutParams {
id: string;
dimensions: Size;
}

interface LayoutSelectors {
// Fields that are not part of Layout: the instances
// independently implement these fields on their own
selectors: LayoutSelectorDictionary;
positionElements?: (browser: HeadlessChromiumDriver, logger: LevelLogger) => Promise<void>;
}

export type LayoutInstance = Layout & LayoutSelectors & Size;
Original file line number Diff line number Diff line change
Expand Up @@ -4,43 +4,14 @@
* you may not use this file except in compliance with the Elastic License.
*/

import { HeadlessChromiumDriver } from '../../../server/browsers/chromium/driver';
import { LevelLogger } from '../../../server/lib';
import { PageSizeParams, PdfImageSize, Size } from './';

export interface ViewZoomWidthHeight {
zoom: number;
width: number;
height: number;
}

export interface PageSizeParams {
pageMarginTop: number;
pageMarginBottom: number;
pageMarginWidth: number;
tableBorderWidth: number;
headingHeight: number;
subheadingHeight: number;
}

export interface LayoutSelectorDictionary {
screenshot: string;
renderComplete: string;
itemsCountAttribute: string;
timefilterDurationAttribute: string;
}

export interface PdfImageSize {
width: number;
height?: number;
}

export const getDefaultLayoutSelectors = (): LayoutSelectorDictionary => ({
screenshot: '[data-shared-items-container]',
renderComplete: '[data-shared-item]',
itemsCountAttribute: 'data-shared-items-count',
timefilterDurationAttribute: 'data-shared-timefilter-duration',
});

export abstract class Layout {
public id: string = '';

Expand All @@ -62,22 +33,3 @@ export abstract class Layout {

public abstract getCssOverridesPath(): string;
}

export interface Size {
width: number;
height: number;
}

export interface LayoutParams {
id: string;
dimensions: Size;
}

interface LayoutSelectors {
// Fields that are not part of Layout: the instances
// independently implement these fields on their own
selectors: LayoutSelectorDictionary;
positionElements?: (browser: HeadlessChromiumDriver, logger: LevelLogger) => Promise<void>;
}

export type LayoutInstance = Layout & LayoutSelectors & Size;
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,16 @@
* or more contributor license agreements. Licensed under the Elastic License;
* you may not use this file except in compliance with the Elastic License.
*/

import path from 'path';
import { LayoutTypes } from '../constants';
import {
getDefaultLayoutSelectors,
Layout,
LayoutSelectorDictionary,
LayoutTypes,
PageSizeParams,
Size,
} from './layout';
} from './';

// We use a zoom of two to bump up the resolution of the screenshot a bit.
const ZOOM: number = 2;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,11 @@

import path from 'path';
import { EvaluateFn, SerializableOrJSHandle } from 'puppeteer';
import { HeadlessChromiumDriver } from '../../../server/browsers';
import { LevelLogger } from '../../../server/lib';
import { HeadlessChromiumDriver } from '../../../server/browsers';
import { CaptureConfig } from '../../../server/types';
import { LayoutTypes } from '../constants';
import { getDefaultLayoutSelectors, Layout, LayoutSelectorDictionary, Size } from './layout';
import { getDefaultLayoutSelectors, LayoutSelectorDictionary, Size, LayoutTypes } from './';
import { Layout } from './layout';

export class PrintLayout extends Layout {
public readonly selectors: LayoutSelectorDictionary = {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,16 +5,16 @@
*/

import { i18n } from '@kbn/i18n';
import { HeadlessChromiumDriver as HeadlessBrowser } from '../../../../server/browsers';
import { LevelLogger as Logger, startTrace } from '../../../../server/lib';
import { LayoutInstance } from '../../layouts/layout';
import { HeadlessChromiumDriver } from '../../../../server/browsers';
import { LevelLogger, startTrace } from '../../../../server/lib';
import { AttributesMap, ElementsPositionAndAttribute } from '../../../../server/types';
import { LayoutInstance } from '../../layouts';
import { CONTEXT_ELEMENTATTRIBUTES } from './constants';
import { AttributesMap, ElementsPositionAndAttribute } from './types';

export const getElementPositionAndAttributes = async (
browser: HeadlessBrowser,
browser: HeadlessChromiumDriver,
layout: LayoutInstance,
logger: Logger
logger: LevelLogger
): Promise<ElementsPositionAndAttribute[] | null> => {
const endTrace = startTrace('get_element_position_data', 'read');
const { screenshot: screenshotSelector } = layout.selectors; // data-shared-items-container
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,15 @@
*/

import { i18n } from '@kbn/i18n';
import { HeadlessChromiumDriver as HeadlessBrowser } from '../../../../server/browsers';
import { LevelLogger, startTrace } from '../../../../server/lib';
import { HeadlessChromiumDriver } from '../../../../server/browsers';
import { CaptureConfig } from '../../../../server/types';
import { LayoutInstance } from '../../layouts/layout';
import { LayoutInstance } from '../../layouts';
import { CONTEXT_GETNUMBEROFITEMS, CONTEXT_READMETADATA } from './constants';

export const getNumberOfItems = async (
captureConfig: CaptureConfig,
browser: HeadlessBrowser,
browser: HeadlessChromiumDriver,
layout: LayoutInstance,
logger: LevelLogger
): Promise<number> => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,12 @@
*/

import { i18n } from '@kbn/i18n';
import { HeadlessChromiumDriver as HeadlessBrowser } from '../../../../server/browsers';
import { HeadlessChromiumDriver } from '../../../../server/browsers';
import { LevelLogger, startTrace } from '../../../../server/lib';
import { Screenshot, ElementsPositionAndAttribute } from './types';
import { ElementsPositionAndAttribute, Screenshot } from '../../../../server/types';

export const getScreenshots = async (
browser: HeadlessBrowser,
browser: HeadlessChromiumDriver,
elementsPositionAndAttributes: ElementsPositionAndAttribute[],
logger: LevelLogger
): Promise<Screenshot[]> => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,21 +4,20 @@
* you may not use this file except in compliance with the Elastic License.
*/

import { HeadlessChromiumDriver as HeadlessBrowser } from '../../../../server/browsers';
import { LevelLogger, startTrace } from '../../../../server/lib';
import { LayoutInstance } from '../../layouts/layout';
import { HeadlessChromiumDriver } from '../../../../server/browsers';
import { LayoutInstance } from '../../layouts';
import { CONTEXT_GETTIMERANGE } from './constants';
import { TimeRange } from './types';

export const getTimeRange = async (
browser: HeadlessBrowser,
browser: HeadlessChromiumDriver,
layout: LayoutInstance,
logger: LevelLogger
): Promise<TimeRange | null> => {
): Promise<string | null> => {
const endTrace = startTrace('get_time_range', 'read');
logger.debug('getting timeRange');

const timeRange: TimeRange | null = await browser.evaluate(
const timeRange = await browser.evaluate(
{
fn: durationAttribute => {
const durationElement = document.querySelector(`[${durationAttribute}]`);
Expand All @@ -32,7 +31,7 @@ export const getTimeRange = async (
return null;
}

return { duration };
return duration; // user-friendly date string
},
args: [layout.selectors.timefilterDurationAttribute],
},
Expand All @@ -41,7 +40,7 @@ export const getTimeRange = async (
);

if (timeRange) {
logger.info(`timeRange: ${timeRange.duration}`);
logger.info(`timeRange: ${timeRange}`);
} else {
logger.debug('no timeRange');
}
Expand Down
Loading

0 comments on commit 31e1407

Please sign in to comment.