Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions x-pack/legacy/plugins/reporting/export_types/csv/types.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,16 @@
*/

import { Request } from 'hapi';
import { JobParams, JobDocPayload, JobParamPostPayload, ConditionalHeaders } from '../../types';
import { JobDocPayload, JobParamPostPayload, ConditionalHeaders } from '../../types';

export interface JobParamPostPayloadDiscoverCsv extends JobParamPostPayload {
state?: {
query: any;
sort: any[];
};
}
export interface JobParamsDiscoverCsv extends JobParams {

export interface JobParamsDiscoverCsv {
indexPatternId?: string;
post?: JobParamPostPayloadDiscoverCsv; // delete this
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
*/

import { CancellationToken } from '../../common/cancellation_token';
import { JobParams, JobParamPostPayload, JobDocPayload, KbnServer } from '../../types';
import { JobParamPostPayload, JobDocPayload, KbnServer } from '../../types';

export interface FakeRequest {
headers: any;
Expand All @@ -16,7 +16,10 @@ export interface JobParamsPostPayloadPanelCsv extends JobParamPostPayload {
state?: any;
}

export interface JobParamsPanelCsv extends JobParams {
export interface JobParamsPanelCsv {
savedObjectType: string;
savedObjectId: string;
isImmediate: boolean;
panel: SearchPanel;
post?: JobParamsPostPayloadPanelCsv;
visType?: string;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,25 +45,38 @@ export function compatibilityShimFactory(server, logger) {
browserTimezone,
objectType,
title,
relativeUrl, // not deprecating
relativeUrls,
layout
},
headers,
request
) {
if (savedObjectId && (relativeUrl || relativeUrls)) {
throw new Error(`savedObjectId should not be provided if relativeUrls are provided`);
}
if (!savedObjectId && !relativeUrl && !relativeUrls) {
throw new Error(`either relativeUrls or savedObjectId must be provided`);

// input validation and deprecation logging
if (savedObjectId) {
if (typeof savedObjectId !== 'string') {
throw new Error('Invalid savedObjectId (deprecated). String is expected.');
}
if (relativeUrls) {
throw new Error(`savedObjectId should not be provided if relativeUrls are provided`);
}
} else {
if (!relativeUrls) {
throw new Error(`Either relativeUrls or savedObjectId must be provided`);
}
if (!Array.isArray(relativeUrls)) {
throw new Error('Invalid relativeUrls. String[] is expected.');
}
relativeUrls.forEach(url => {
if (typeof url !== 'string') {
throw new Error('Invalid Relative URL in relativeUrls. String is expected.');
}
});
}

let kibanaRelativeUrls;
if (relativeUrls) {
kibanaRelativeUrls = relativeUrls;
} else if (relativeUrl) {
kibanaRelativeUrls = [ relativeUrl ];
} else {
kibanaRelativeUrls = [getSavedObjectRelativeUrl(objectType, savedObjectId, queryString)];
logger.warning(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -100,19 +100,6 @@ test(`passes the objectType and savedObjectId to the savedObjectsClient`, async
expect(getMock.calls[0][1]).toBe(savedObjectId);
});

test(`logs no warnings when title and relativeUrl is passed`, async () => {
const mockLogger = createMockLogger();
const compatibilityShim = compatibilityShimFactory(createMockServer(), mockLogger);

const createJobMock = jest.fn();
const mockRequest = createMockRequest();

await compatibilityShim(createJobMock)({ title: 'Phenomenal Dashboard', relativeUrl: '/abc' }, null, mockRequest);

expect(mockLogger.warning.mock.calls.length).toBe(0);
expect(mockLogger.error.mock.calls.length).toBe(0);

});
test(`logs no warnings when title and relativeUrls is passed`, async () => {
const mockLogger = createMockLogger();
const compatibilityShim = compatibilityShimFactory(createMockServer(), mockLogger);
Expand All @@ -132,7 +119,7 @@ test(`logs warning if title can not be provided`, async () => {

const createJobMock = jest.fn();
const mockRequest = createMockRequest();
await compatibilityShim(createJobMock)({ relativeUrl: '/abc' }, null, mockRequest);
await compatibilityShim(createJobMock)({ relativeUrls: ['/abc'] }, null, mockRequest);

expect(mockLogger.warning.mock.calls.length).toBe(1);
expect(mockLogger.warning.mock.calls[0][0]).toEqual(
Expand Down Expand Up @@ -172,7 +159,7 @@ test(`passes objectType through`, async () => {
const mockRequest = createMockRequest();

const objectType = 'foo';
await compatibilityShim(createJobMock)({ title: 'test', relativeUrl: '/something', objectType }, null, mockRequest);
await compatibilityShim(createJobMock)({ title: 'test', relativeUrls: ['/something'], objectType }, null, mockRequest);

expect(mockLogger.warning.mock.calls.length).toBe(0);
expect(mockLogger.error.mock.calls.length).toBe(0);
Expand Down Expand Up @@ -261,7 +248,7 @@ test(`passes headers and request through`, async () => {
const headers = {};
const request = createMockRequest();

await compatibilityShim(createJobMock)({ title: 'test', relativeUrl: '/something' }, headers, request);
await compatibilityShim(createJobMock)({ title: 'test', relativeUrls: ['/something'] }, headers, request);

expect(mockLogger.warning.mock.calls.length).toBe(0);
expect(mockLogger.error.mock.calls.length).toBe(0);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,11 @@ import { Request } from 'hapi';
import { LayoutInstance } from '../common/layouts/layout';
import { ConditionalHeaders, KbnServer, JobDocPayload } from '../../types';

// Job params: structure of incoming user request data
// Job params: structure of incoming user request data, after being parsed from RISON
export interface JobParamsPDF {
objectType: string;
title: string;
relativeUrl: string;
relativeUrls: string[];
browserTimezone: string;
layout: LayoutInstance;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,25 +4,23 @@
* you may not use this file except in compliance with the Elastic License.
*/

export interface IArgOptions {
userDataDir: string;
viewport: { width: number; height: number };
disableSandbox: boolean;
proxyConfig: {
enabled: boolean;
server: string;
bypass?: string[];
};
verboseLogging?: boolean;
import { BrowserConfig } from '../../../../types';

interface LaunchArgs {
userDataDir: BrowserConfig['userDataDir'];
viewport: BrowserConfig['viewport'];
disableSandbox: BrowserConfig['disableSandbox'];
proxy: BrowserConfig['proxy'];
verboseLogging: BrowserConfig['verboseLogging'];
}

export const args = ({
userDataDir,
viewport,
disableSandbox,
proxyConfig,
proxy: proxyConfig,
verboseLogging,
}: IArgOptions) => {
}: LaunchArgs) => {
const flags = [
// Disable built-in Google Translate service
'--disable-translate',
Expand Down Expand Up @@ -61,6 +59,7 @@ export const args = ({
flags.push('--no-sandbox');
}

// TODO remove conditional
if (verboseLogging) {
flags.push('--enable-logging');
flags.push('--v=1');
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,29 +18,27 @@ import * as Rx from 'rxjs';
import { ignoreElements, mergeMap, tap } from 'rxjs/operators';
import { InnerSubscriber } from 'rxjs/internal/InnerSubscriber';

import { puppeteerLaunch } from '../puppeteer';
import { BrowserConfig } from '../../../../types';
import { LevelLogger as Logger } from '../../../lib/level_logger';
import { HeadlessChromiumDriver } from '../driver';
import { args, IArgOptions } from './args';
import { safeChildProcess } from '../../safe_child_process';
import { puppeteerLaunch } from '../puppeteer';
import { getChromeLogLocation } from '../paths';
import { args } from './args';

type binaryPath = string;
type queueTimeout = number;
interface IBrowserConfig {
[key: string]: any;
}

export class HeadlessChromiumDriverFactory {
private binaryPath: binaryPath;
private logger: Logger;
private browserConfig: IBrowserConfig;
private browserConfig: BrowserConfig;
private queueTimeout: queueTimeout;

constructor(
binaryPath: binaryPath,
logger: Logger,
browserConfig: IBrowserConfig,
browserConfig: BrowserConfig,
queueTimeout: queueTimeout
) {
this.binaryPath = binaryPath;
Expand All @@ -51,27 +49,21 @@ export class HeadlessChromiumDriverFactory {

type = 'chromium';

test(
{ viewport, browserTimezone }: { viewport: IArgOptions['viewport']; browserTimezone: string },
logger: Logger
) {
test({ viewport }: { viewport: BrowserConfig['viewport'] }, logger: Logger) {
const userDataDir = fs.mkdtempSync(path.join(os.tmpdir(), 'chromium-'));
const chromiumArgs = args({
userDataDir,
viewport,
verboseLogging: true,
disableSandbox: this.browserConfig.disableSandbox,
proxyConfig: this.browserConfig.proxy,
proxy: this.browserConfig.proxy,
});

return puppeteerLaunch({
userDataDir,
executablePath: this.binaryPath,
ignoreHTTPSErrors: true,
args: chromiumArgs,
env: {
TZ: browserTimezone,
},
} as LaunchOptions).catch((error: Error) => {
logger.error(
`The Reporting plugin encountered issues launching Chromium in a self-test. You may have trouble generating reports.`
Expand All @@ -86,7 +78,7 @@ export class HeadlessChromiumDriverFactory {
viewport,
browserTimezone,
}: {
viewport: IArgOptions['viewport'];
viewport: BrowserConfig['viewport'];
browserTimezone: string;
}): Rx.Observable<{
driver$: Rx.Observable<HeadlessChromiumDriver>;
Expand All @@ -101,7 +93,7 @@ export class HeadlessChromiumDriverFactory {
viewport,
verboseLogging: this.logger.isVerbose,
disableSandbox: this.browserConfig.disableSandbox,
proxyConfig: this.browserConfig.proxy,
proxy: this.browserConfig.proxy,
});

let browser: Browser;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,17 @@
* you may not use this file except in compliance with the Elastic License.
*/

import { BrowserConfig } from '../../../types';
import { LevelLogger } from '../../lib';
import { HeadlessChromiumDriverFactory } from './driver_factory';

export { paths } from './paths';

export async function createDriverFactory(binaryPath, logger, browserConfig, queueTimeout) {
export async function createDriverFactory(
binaryPath: string,
logger: LevelLogger,
browserConfig: BrowserConfig,
queueTimeout: number
): Promise<HeadlessChromiumDriverFactory> {
return new HeadlessChromiumDriverFactory(binaryPath, logger, browserConfig, queueTimeout);
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,11 @@ import { installBrowser } from './install';
import { LevelLogger } from '../lib/level_logger';
import { KbnServer } from '../../types';
import { PLUGIN_ID } from '../../common/constants';
import { HeadlessChromiumDriverFactory } from './chromium/driver_factory';

export async function createBrowserDriverFactory(server: KbnServer) {
export async function createBrowserDriverFactory(
server: KbnServer
): Promise<HeadlessChromiumDriverFactory> {
const config = server.config();
const logger = LevelLogger.createForServer(server, [PLUGIN_ID, 'browser-driver']);

Expand Down
4 changes: 2 additions & 2 deletions x-pack/legacy/plugins/reporting/server/lib/enqueue_job.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import { get } from 'lodash';
// @ts-ignore
import { events as esqueueEvents } from './esqueue';
import { oncePerServer } from './once_per_server';
import { KbnServer, Logger, JobParams, ConditionalHeaders } from '../../types';
import { KbnServer, Logger, ConditionalHeaders } from '../../types';

interface ConfirmedJob {
id: string;
Expand All @@ -29,7 +29,7 @@ function enqueueJobFn(server: KbnServer) {
return async function enqueueJob(
parentLogger: Logger,
exportTypeId: string,
jobParams: JobParams,
jobParams: object,
user: string,
headers: ConditionalHeaders,
request: Request
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,20 +6,20 @@
import { Browser } from 'puppeteer';
import { KbnServer, Logger } from '../../../types';
import { CHROMIUM } from '../../browsers/browser_types';
import { HeadlessChromiumDriverFactory } from '../../browsers/chromium/driver_factory';

/*
* Validate the Reporting headless browser can launch, and that it can connect
* to the locally running Kibana instance.
*/
export const validateBrowser = async (server: KbnServer, browserFactory: any, logger: Logger) => {
export const validateBrowser = async (
server: KbnServer,
browserFactory: HeadlessChromiumDriverFactory,
logger: Logger
) => {
if (browserFactory.type === CHROMIUM) {
return browserFactory
.test(
{
viewport: { width: 800, height: 600 },
},
logger
)
.test({ viewport: { width: 800, height: 600 } }, logger)
.then((browser: Browser | null) => {
if (browser && browser.close) {
browser.close();
Expand Down
Loading