mirror of
https://github.com/elastic/kibana.git
synced 2025-04-24 17:59:23 -04:00
[Reporting] Use the logger from Core instead of a wrapper (#126740)
* [Reporting] Use the logger from Core instead of a wrapper * fix redudant log context in execute fns Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com>
This commit is contained in:
parent
d5a1cdc178
commit
90f0d8de01
63 changed files with 223 additions and 367 deletions
|
@ -7,8 +7,7 @@
|
|||
|
||||
import { get } from 'lodash';
|
||||
import { first } from 'rxjs/operators';
|
||||
import { CoreSetup, PluginInitializerContext } from 'src/core/server';
|
||||
import { LevelLogger } from '../lib';
|
||||
import type { CoreSetup, Logger, PluginInitializerContext } from 'kibana/server';
|
||||
import { createConfig$ } from './create_config';
|
||||
import { ReportingConfigType } from './schema';
|
||||
|
||||
|
@ -63,13 +62,13 @@ export interface ReportingConfig extends Config<ReportingConfigType> {
|
|||
* @internal
|
||||
* @param {PluginInitializerContext<ReportingConfigType>} initContext
|
||||
* @param {CoreSetup} core
|
||||
* @param {LevelLogger} logger
|
||||
* @param {Logger} logger
|
||||
* @returns {Promise<ReportingConfig>}
|
||||
*/
|
||||
export const buildConfig = async (
|
||||
initContext: PluginInitializerContext<ReportingConfigType>,
|
||||
core: CoreSetup,
|
||||
logger: LevelLogger
|
||||
logger: Logger
|
||||
): Promise<ReportingConfig> => {
|
||||
const config$ = initContext.config.create<ReportingConfigType>();
|
||||
const { http } = core;
|
||||
|
|
|
@ -6,11 +6,10 @@
|
|||
*/
|
||||
|
||||
import * as Rx from 'rxjs';
|
||||
import { CoreSetup, HttpServerInfo, PluginInitializerContext } from 'src/core/server';
|
||||
import { coreMock } from 'src/core/server/mocks';
|
||||
import { LevelLogger } from '../lib/level_logger';
|
||||
import { createMockConfigSchema, createMockLevelLogger } from '../test_helpers';
|
||||
import { ReportingConfigType } from './';
|
||||
import type { CoreSetup, HttpServerInfo, Logger, PluginInitializerContext } from 'kibana/server';
|
||||
import { coreMock, loggingSystemMock } from 'src/core/server/mocks';
|
||||
import { createMockConfigSchema } from '../test_helpers';
|
||||
import type { ReportingConfigType } from './';
|
||||
import { createConfig$ } from './create_config';
|
||||
|
||||
const createMockConfig = (
|
||||
|
@ -20,14 +19,14 @@ const createMockConfig = (
|
|||
describe('Reporting server createConfig$', () => {
|
||||
let mockCoreSetup: CoreSetup;
|
||||
let mockInitContext: PluginInitializerContext;
|
||||
let mockLogger: jest.Mocked<LevelLogger>;
|
||||
let mockLogger: jest.Mocked<Logger>;
|
||||
|
||||
beforeEach(() => {
|
||||
mockCoreSetup = coreMock.createSetup();
|
||||
mockInitContext = coreMock.createPluginInitializerContext(
|
||||
createMockConfigSchema({ kibanaServer: {} })
|
||||
);
|
||||
mockLogger = createMockLevelLogger();
|
||||
mockLogger = loggingSystemMock.createLogger();
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
|
|
|
@ -7,11 +7,10 @@
|
|||
|
||||
import crypto from 'crypto';
|
||||
import ipaddr from 'ipaddr.js';
|
||||
import type { CoreSetup, Logger } from 'kibana/server';
|
||||
import { sum } from 'lodash';
|
||||
import { Observable } from 'rxjs';
|
||||
import { map } from 'rxjs/operators';
|
||||
import { CoreSetup } from 'src/core/server';
|
||||
import { LevelLogger } from '../lib';
|
||||
import { ReportingConfigType } from './schema';
|
||||
|
||||
/*
|
||||
|
@ -22,9 +21,9 @@ import { ReportingConfigType } from './schema';
|
|||
export function createConfig$(
|
||||
core: CoreSetup,
|
||||
config$: Observable<ReportingConfigType>,
|
||||
parentLogger: LevelLogger
|
||||
parentLogger: Logger
|
||||
) {
|
||||
const logger = parentLogger.clone(['config']);
|
||||
const logger = parentLogger.get('config');
|
||||
return config$.pipe(
|
||||
map((config) => {
|
||||
// encryption key
|
||||
|
|
|
@ -11,6 +11,7 @@ import { filter, first, map, switchMap, take } from 'rxjs/operators';
|
|||
import type {
|
||||
BasePath,
|
||||
IClusterClient,
|
||||
Logger,
|
||||
PackageInfo,
|
||||
PluginInitializerContext,
|
||||
SavedObjectsClientContract,
|
||||
|
@ -32,7 +33,7 @@ import { REPORTING_REDIRECT_LOCATOR_STORE_KEY } from '../common/constants';
|
|||
import { durationToNumber } from '../common/schema_utils';
|
||||
import type { ReportingConfig, ReportingSetup } from './';
|
||||
import { ReportingConfigType } from './config';
|
||||
import { checkLicense, getExportTypesRegistry, LevelLogger } from './lib';
|
||||
import { checkLicense, getExportTypesRegistry } from './lib';
|
||||
import { reportingEventLoggerFactory } from './lib/event_logger/logger';
|
||||
import type { IReport, ReportingStore } from './lib/store';
|
||||
import { ExecuteReportTask, MonitorReportsTask, ReportTaskParams } from './lib/tasks';
|
||||
|
@ -45,7 +46,7 @@ export interface ReportingInternalSetup {
|
|||
security?: SecurityPluginSetup;
|
||||
spaces?: SpacesPluginSetup;
|
||||
taskManager: TaskManagerSetupContract;
|
||||
logger: LevelLogger;
|
||||
logger: Logger;
|
||||
status: StatusServiceSetup;
|
||||
}
|
||||
|
||||
|
@ -57,7 +58,7 @@ export interface ReportingInternalStart {
|
|||
data: DataPluginStart;
|
||||
fieldFormats: FieldFormatsStart;
|
||||
licensing: LicensingPluginStart;
|
||||
logger: LevelLogger;
|
||||
logger: Logger;
|
||||
screenshotting: ScreenshottingStart;
|
||||
security?: SecurityPluginStart;
|
||||
taskManager: TaskManagerStartContract;
|
||||
|
@ -81,7 +82,7 @@ export class ReportingCore {
|
|||
|
||||
public getContract: () => ReportingSetup;
|
||||
|
||||
constructor(private logger: LevelLogger, context: PluginInitializerContext<ReportingConfigType>) {
|
||||
constructor(private logger: Logger, context: PluginInitializerContext<ReportingConfigType>) {
|
||||
this.packageInfo = context.env.packageInfo;
|
||||
const syncConfig = context.config.get<ReportingConfigType>();
|
||||
this.deprecatedAllowedRoles = syncConfig.roles.enabled ? syncConfig.roles.allow : false;
|
||||
|
|
|
@ -5,11 +5,11 @@
|
|||
* 2.0.
|
||||
*/
|
||||
|
||||
import { loggingSystemMock } from 'src/core/server/mocks';
|
||||
import { cryptoFactory } from '../../lib';
|
||||
import { createMockLevelLogger } from '../../test_helpers';
|
||||
import { decryptJobHeaders } from './';
|
||||
|
||||
const logger = createMockLevelLogger();
|
||||
const logger = loggingSystemMock.createLogger();
|
||||
|
||||
const encryptHeaders = async (encryptionKey: string, headers: Record<string, string>) => {
|
||||
const crypto = cryptoFactory(encryptionKey);
|
||||
|
|
|
@ -6,12 +6,13 @@
|
|||
*/
|
||||
|
||||
import { i18n } from '@kbn/i18n';
|
||||
import { cryptoFactory, LevelLogger } from '../../lib';
|
||||
import type { Logger } from 'kibana/server';
|
||||
import { cryptoFactory } from '../../lib';
|
||||
|
||||
export const decryptJobHeaders = async (
|
||||
encryptionKey: string | undefined,
|
||||
headers: string,
|
||||
logger: LevelLogger
|
||||
logger: Logger
|
||||
): Promise<Record<string, string>> => {
|
||||
try {
|
||||
if (typeof headers !== 'string') {
|
||||
|
|
|
@ -6,14 +6,14 @@
|
|||
*/
|
||||
|
||||
import apm from 'elastic-apm-node';
|
||||
import type { Logger } from 'kibana/server';
|
||||
import * as Rx from 'rxjs';
|
||||
import { finalize, map, tap } from 'rxjs/operators';
|
||||
import type { ReportingCore } from '../../';
|
||||
import { LayoutTypes } from '../../../../screenshotting/common';
|
||||
import { REPORTING_TRANSACTION_TYPE } from '../../../common/constants';
|
||||
import type { PngMetrics } from '../../../common/types';
|
||||
import { ReportingCore } from '../../';
|
||||
import { ScreenshotOptions } from '../../types';
|
||||
import { LevelLogger } from '../../lib';
|
||||
import type { ScreenshotOptions } from '../../types';
|
||||
|
||||
interface PngResult {
|
||||
buffer: Buffer;
|
||||
|
@ -23,7 +23,7 @@ interface PngResult {
|
|||
|
||||
export function generatePngObservable(
|
||||
reporting: ReportingCore,
|
||||
logger: LevelLogger,
|
||||
logger: Logger,
|
||||
options: ScreenshotOptions
|
||||
): Rx.Observable<PngResult> {
|
||||
const apmTrans = apm.startTransaction('generate-png', REPORTING_TRANSACTION_TYPE);
|
||||
|
|
|
@ -5,17 +5,14 @@
|
|||
* 2.0.
|
||||
*/
|
||||
|
||||
import { ReportingCore } from '../..';
|
||||
import {
|
||||
createMockConfigSchema,
|
||||
createMockLevelLogger,
|
||||
createMockReportingCore,
|
||||
} from '../../test_helpers';
|
||||
import { loggingSystemMock } from 'src/core/server/mocks';
|
||||
import { ReportingCore } from '../../';
|
||||
import { createMockConfigSchema, createMockReportingCore } from '../../test_helpers';
|
||||
import { getCustomLogo } from './get_custom_logo';
|
||||
|
||||
let mockReportingPlugin: ReportingCore;
|
||||
|
||||
const logger = createMockLevelLogger();
|
||||
const logger = loggingSystemMock.createLogger();
|
||||
|
||||
beforeEach(async () => {
|
||||
mockReportingPlugin = await createMockReportingCore(createMockConfigSchema());
|
||||
|
|
|
@ -5,16 +5,15 @@
|
|||
* 2.0.
|
||||
*/
|
||||
|
||||
import type { Headers } from 'src/core/server';
|
||||
import type { Headers, Logger } from 'kibana/server';
|
||||
import { ReportingCore } from '../../';
|
||||
import { UI_SETTINGS_CUSTOM_PDF_LOGO } from '../../../common/constants';
|
||||
import { LevelLogger } from '../../lib';
|
||||
|
||||
export const getCustomLogo = async (
|
||||
reporting: ReportingCore,
|
||||
headers: Headers,
|
||||
spaceId: string | undefined,
|
||||
logger: LevelLogger
|
||||
logger: Logger
|
||||
) => {
|
||||
const fakeRequest = reporting.getFakeRequest({ headers }, spaceId, logger);
|
||||
const uiSettingsClient = await reporting.getUiSettingsClient(fakeRequest, logger);
|
||||
|
|
|
@ -16,18 +16,15 @@ jest.mock('./generate_csv/generate_csv', () => ({
|
|||
},
|
||||
}));
|
||||
|
||||
import { Writable } from 'stream';
|
||||
import nodeCrypto from '@elastic/node-crypto';
|
||||
import { loggingSystemMock } from 'src/core/server/mocks';
|
||||
import { Writable } from 'stream';
|
||||
import { ReportingCore } from '../../';
|
||||
import { CancellationToken } from '../../../common/cancellation_token';
|
||||
import {
|
||||
createMockConfigSchema,
|
||||
createMockLevelLogger,
|
||||
createMockReportingCore,
|
||||
} from '../../test_helpers';
|
||||
import { createMockConfigSchema, createMockReportingCore } from '../../test_helpers';
|
||||
import { runTaskFnFactory } from './execute_job';
|
||||
|
||||
const logger = createMockLevelLogger();
|
||||
const logger = loggingSystemMock.createLogger();
|
||||
const encryptionKey = 'tetkey';
|
||||
const headers = { sid: 'cooltestheaders' };
|
||||
let encryptedHeaders: string;
|
||||
|
|
|
@ -5,7 +5,6 @@
|
|||
* 2.0.
|
||||
*/
|
||||
|
||||
import { CSV_JOB_TYPE } from '../../../common/constants';
|
||||
import { getFieldFormats } from '../../services';
|
||||
import { RunTaskFn, RunTaskFnFactory } from '../../types';
|
||||
import { decryptJobHeaders } from '../common';
|
||||
|
@ -19,7 +18,7 @@ export const runTaskFnFactory: RunTaskFnFactory<RunTaskFn<TaskPayloadCSV>> = (
|
|||
const config = reporting.getConfig();
|
||||
|
||||
return async function runTask(jobId, job, cancellationToken, stream) {
|
||||
const logger = parentLogger.clone([CSV_JOB_TYPE, 'execute-job', jobId]);
|
||||
const logger = parentLogger.get(`execute-job:${jobId}`);
|
||||
|
||||
const encryptionKey = config.get('encryptionKey');
|
||||
const headers = await decryptJobHeaders(encryptionKey, job.headers, logger);
|
||||
|
|
|
@ -5,21 +5,22 @@
|
|||
* 2.0.
|
||||
*/
|
||||
|
||||
import { Writable } from 'stream';
|
||||
import * as Rx from 'rxjs';
|
||||
import { errors as esErrors } from '@elastic/elasticsearch';
|
||||
import type { IScopedClusterClient, IUiSettingsClient, SearchResponse } from 'kibana/server';
|
||||
import { identity, range } from 'lodash';
|
||||
import { IScopedClusterClient, IUiSettingsClient, SearchResponse } from 'src/core/server';
|
||||
import * as Rx from 'rxjs';
|
||||
import {
|
||||
elasticsearchServiceMock,
|
||||
loggingSystemMock,
|
||||
savedObjectsClientMock,
|
||||
uiSettingsServiceMock,
|
||||
} from 'src/core/server/mocks';
|
||||
import { ISearchStartSearchSource } from 'src/plugins/data/common';
|
||||
import { FieldFormatsRegistry } from 'src/plugins/field_formats/common';
|
||||
import { searchSourceInstanceMock } from 'src/plugins/data/common/search/search_source/mocks';
|
||||
import { IScopedSearchClient } from 'src/plugins/data/server';
|
||||
import { dataPluginMock } from 'src/plugins/data/server/mocks';
|
||||
import { FieldFormatsRegistry } from 'src/plugins/field_formats/common';
|
||||
import { Writable } from 'stream';
|
||||
import { ReportingConfig } from '../../../';
|
||||
import { CancellationToken } from '../../../../common/cancellation_token';
|
||||
import {
|
||||
|
@ -28,11 +29,7 @@ import {
|
|||
UI_SETTINGS_DATEFORMAT_TZ,
|
||||
} from '../../../../common/constants';
|
||||
import { UnknownError } from '../../../../common/errors';
|
||||
import {
|
||||
createMockConfig,
|
||||
createMockConfigSchema,
|
||||
createMockLevelLogger,
|
||||
} from '../../../test_helpers';
|
||||
import { createMockConfig, createMockConfigSchema } from '../../../test_helpers';
|
||||
import { JobParamsCSV } from '../types';
|
||||
import { CsvGenerator } from './generate_csv';
|
||||
|
||||
|
@ -125,7 +122,7 @@ beforeEach(async () => {
|
|||
});
|
||||
});
|
||||
|
||||
const logger = createMockLevelLogger();
|
||||
const logger = loggingSystemMock.createLogger();
|
||||
|
||||
it('formats an empty search result to CSV content', async () => {
|
||||
const generateCsv = new CsvGenerator(
|
||||
|
|
|
@ -5,9 +5,9 @@
|
|||
* 2.0.
|
||||
*/
|
||||
|
||||
import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey';
|
||||
import { errors as esErrors } from '@elastic/elasticsearch';
|
||||
import type { IScopedClusterClient, IUiSettingsClient } from 'src/core/server';
|
||||
import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey';
|
||||
import type { IScopedClusterClient, IUiSettingsClient, Logger } from 'kibana/server';
|
||||
import type { IScopedSearchClient } from 'src/plugins/data/server';
|
||||
import type { Datatable } from 'src/plugins/expressions/server';
|
||||
import type { Writable } from 'stream';
|
||||
|
@ -32,16 +32,15 @@ import type { CancellationToken } from '../../../../common/cancellation_token';
|
|||
import { CONTENT_TYPE_CSV } from '../../../../common/constants';
|
||||
import {
|
||||
AuthenticationExpiredError,
|
||||
UnknownError,
|
||||
ReportingError,
|
||||
UnknownError,
|
||||
} from '../../../../common/errors';
|
||||
import { byteSizeValueToNumber } from '../../../../common/schema_utils';
|
||||
import type { LevelLogger } from '../../../lib';
|
||||
import type { TaskRunResult } from '../../../lib/tasks';
|
||||
import type { JobParamsCSV } from '../types';
|
||||
import { CsvExportSettings, getExportSettings } from './get_export_settings';
|
||||
import { MaxSizeStringBuilder } from './max_size_string_builder';
|
||||
import { i18nTexts } from './i18n_texts';
|
||||
import { MaxSizeStringBuilder } from './max_size_string_builder';
|
||||
|
||||
interface Clients {
|
||||
es: IScopedClusterClient;
|
||||
|
@ -65,7 +64,7 @@ export class CsvGenerator {
|
|||
private clients: Clients,
|
||||
private dependencies: Dependencies,
|
||||
private cancellationToken: CancellationToken,
|
||||
private logger: LevelLogger,
|
||||
private logger: Logger,
|
||||
private stream: Writable
|
||||
) {}
|
||||
|
||||
|
@ -316,7 +315,7 @@ export class CsvGenerator {
|
|||
}
|
||||
|
||||
if (!results) {
|
||||
this.logger.warning(`Search results are undefined!`);
|
||||
this.logger.warn(`Search results are undefined!`);
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -396,7 +395,7 @@ export class CsvGenerator {
|
|||
this.logger.debug(`Finished generating. Row count: ${this.csvRowCount}.`);
|
||||
|
||||
if (!this.maxSizeReached && this.csvRowCount !== totalRecords) {
|
||||
this.logger.warning(
|
||||
this.logger.warn(
|
||||
`ES scroll returned fewer total hits than expected! ` +
|
||||
`Search result total hits: ${totalRecords}. Row count: ${this.csvRowCount}.`
|
||||
);
|
||||
|
|
|
@ -12,18 +12,18 @@ import {
|
|||
UI_SETTINGS_SEARCH_INCLUDE_FROZEN,
|
||||
} from '../../../../common/constants';
|
||||
import { IUiSettingsClient } from 'kibana/server';
|
||||
import { savedObjectsClientMock, uiSettingsServiceMock } from 'src/core/server/mocks';
|
||||
import {
|
||||
createMockConfig,
|
||||
createMockConfigSchema,
|
||||
createMockLevelLogger,
|
||||
} from '../../../test_helpers';
|
||||
loggingSystemMock,
|
||||
savedObjectsClientMock,
|
||||
uiSettingsServiceMock,
|
||||
} from 'src/core/server/mocks';
|
||||
import { createMockConfig, createMockConfigSchema } from '../../../test_helpers';
|
||||
import { getExportSettings } from './get_export_settings';
|
||||
|
||||
describe('getExportSettings', () => {
|
||||
let uiSettingsClient: IUiSettingsClient;
|
||||
const config = createMockConfig(createMockConfigSchema({}));
|
||||
const logger = createMockLevelLogger();
|
||||
const logger = loggingSystemMock.createLogger();
|
||||
|
||||
beforeEach(() => {
|
||||
uiSettingsClient = uiSettingsServiceMock
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
*/
|
||||
|
||||
import { ByteSizeValue } from '@kbn/config-schema';
|
||||
import { IUiSettingsClient } from 'kibana/server';
|
||||
import type { IUiSettingsClient, Logger } from 'kibana/server';
|
||||
import { createEscapeValue } from '../../../../../../../src/plugins/data/common';
|
||||
import { ReportingConfig } from '../../../';
|
||||
import {
|
||||
|
@ -16,7 +16,6 @@ import {
|
|||
UI_SETTINGS_DATEFORMAT_TZ,
|
||||
UI_SETTINGS_SEARCH_INCLUDE_FROZEN,
|
||||
} from '../../../../common/constants';
|
||||
import { LevelLogger } from '../../../lib';
|
||||
|
||||
export interface CsvExportSettings {
|
||||
timezone: string;
|
||||
|
@ -37,7 +36,7 @@ export const getExportSettings = async (
|
|||
client: IUiSettingsClient,
|
||||
config: ReportingConfig,
|
||||
timezone: string | undefined,
|
||||
logger: LevelLogger
|
||||
logger: Logger
|
||||
): Promise<CsvExportSettings> => {
|
||||
let setTimezone: string;
|
||||
if (timezone) {
|
||||
|
|
|
@ -8,7 +8,6 @@
|
|||
import { KibanaRequest } from 'src/core/server';
|
||||
import { Writable } from 'stream';
|
||||
import { CancellationToken } from '../../../common/cancellation_token';
|
||||
import { CSV_SEARCHSOURCE_IMMEDIATE_TYPE } from '../../../common/constants';
|
||||
import { TaskRunResult } from '../../lib/tasks';
|
||||
import { getFieldFormats } from '../../services';
|
||||
import { ReportingRequestHandlerContext, RunTaskFnFactory } from '../../types';
|
||||
|
@ -32,7 +31,7 @@ export const runTaskFnFactory: RunTaskFnFactory<ImmediateExecuteFn> = function e
|
|||
parentLogger
|
||||
) {
|
||||
const config = reporting.getConfig();
|
||||
const logger = parentLogger.clone([CSV_SEARCHSOURCE_IMMEDIATE_TYPE, 'execute-job']);
|
||||
const logger = parentLogger.get('execute-job');
|
||||
|
||||
return async function runTask(_jobId, immediateJobParams, context, stream, req) {
|
||||
const job = {
|
||||
|
@ -82,7 +81,7 @@ export const runTaskFnFactory: RunTaskFnFactory<ImmediateExecuteFn> = function e
|
|||
const { warnings } = result;
|
||||
if (warnings) {
|
||||
warnings.forEach((warning) => {
|
||||
logger.warning(warning);
|
||||
logger.warn(warning);
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
@ -5,11 +5,12 @@
|
|||
* 2.0.
|
||||
*/
|
||||
|
||||
import { Writable } from 'stream';
|
||||
import * as Rx from 'rxjs';
|
||||
import { loggingSystemMock } from 'src/core/server/mocks';
|
||||
import { Writable } from 'stream';
|
||||
import { ReportingCore } from '../../../';
|
||||
import { CancellationToken } from '../../../../common/cancellation_token';
|
||||
import { cryptoFactory, LevelLogger } from '../../../lib';
|
||||
import { cryptoFactory } from '../../../lib';
|
||||
import {
|
||||
createMockConfig,
|
||||
createMockConfigSchema,
|
||||
|
@ -29,14 +30,7 @@ const cancellationToken = {
|
|||
on: jest.fn(),
|
||||
} as unknown as CancellationToken;
|
||||
|
||||
const mockLoggerFactory = {
|
||||
get: jest.fn().mockImplementation(() => ({
|
||||
error: jest.fn(),
|
||||
debug: jest.fn(),
|
||||
warn: jest.fn(),
|
||||
})),
|
||||
};
|
||||
const getMockLogger = () => new LevelLogger(mockLoggerFactory);
|
||||
const getMockLogger = () => loggingSystemMock.createLogger();
|
||||
|
||||
const mockEncryptionKey = 'abcabcsecuresecret';
|
||||
const encryptHeaders = async (headers: Record<string, string>) => {
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
import apm from 'elastic-apm-node';
|
||||
import * as Rx from 'rxjs';
|
||||
import { finalize, map, mergeMap, takeUntil, tap } from 'rxjs/operators';
|
||||
import { PNG_JOB_TYPE, REPORTING_TRANSACTION_TYPE } from '../../../../common/constants';
|
||||
import { REPORTING_TRANSACTION_TYPE } from '../../../../common/constants';
|
||||
import { TaskRunResult } from '../../../lib/tasks';
|
||||
import { RunTaskFn, RunTaskFnFactory } from '../../../types';
|
||||
import { decryptJobHeaders, getFullUrls, generatePngObservable } from '../../common';
|
||||
|
@ -24,7 +24,7 @@ export const runTaskFnFactory: RunTaskFnFactory<RunTaskFn<TaskPayloadPNG>> =
|
|||
const apmGetAssets = apmTrans?.startSpan('get-assets', 'setup');
|
||||
let apmGeneratePng: { end: () => void } | null | undefined;
|
||||
|
||||
const jobLogger = parentLogger.clone([PNG_JOB_TYPE, 'execute', jobId]);
|
||||
const jobLogger = parentLogger.get(`execute:${jobId}`);
|
||||
const process$: Rx.Observable<TaskRunResult> = Rx.of(1).pipe(
|
||||
mergeMap(() => decryptJobHeaders(encryptionKey, job.headers, jobLogger)),
|
||||
mergeMap((headers) => {
|
||||
|
|
|
@ -6,11 +6,12 @@
|
|||
*/
|
||||
|
||||
import * as Rx from 'rxjs';
|
||||
import { loggingSystemMock } from 'src/core/server/mocks';
|
||||
import { Writable } from 'stream';
|
||||
import { ReportingCore } from '../../';
|
||||
import { CancellationToken } from '../../../common/cancellation_token';
|
||||
import { LocatorParams } from '../../../common/types';
|
||||
import { cryptoFactory, LevelLogger } from '../../lib';
|
||||
import { cryptoFactory } from '../../lib';
|
||||
import {
|
||||
createMockConfig,
|
||||
createMockConfigSchema,
|
||||
|
@ -30,14 +31,7 @@ const cancellationToken = {
|
|||
on: jest.fn(),
|
||||
} as unknown as CancellationToken;
|
||||
|
||||
const mockLoggerFactory = {
|
||||
get: jest.fn().mockImplementation(() => ({
|
||||
error: jest.fn(),
|
||||
debug: jest.fn(),
|
||||
warn: jest.fn(),
|
||||
})),
|
||||
};
|
||||
const getMockLogger = () => new LevelLogger(mockLoggerFactory);
|
||||
const getMockLogger = () => loggingSystemMock.createLogger();
|
||||
|
||||
const mockEncryptionKey = 'abcabcsecuresecret';
|
||||
const encryptHeaders = async (headers: Record<string, string>) => {
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
import apm from 'elastic-apm-node';
|
||||
import * as Rx from 'rxjs';
|
||||
import { finalize, map, mergeMap, takeUntil, tap } from 'rxjs/operators';
|
||||
import { PNG_JOB_TYPE_V2, REPORTING_TRANSACTION_TYPE } from '../../../common/constants';
|
||||
import { REPORTING_TRANSACTION_TYPE } from '../../../common/constants';
|
||||
import { TaskRunResult } from '../../lib/tasks';
|
||||
import { RunTaskFn, RunTaskFnFactory } from '../../types';
|
||||
import { decryptJobHeaders, generatePngObservable } from '../common';
|
||||
|
@ -25,7 +25,7 @@ export const runTaskFnFactory: RunTaskFnFactory<RunTaskFn<TaskPayloadPNGV2>> =
|
|||
const apmGetAssets = apmTrans?.startSpan('get-assets', 'setup');
|
||||
let apmGeneratePng: { end: () => void } | null | undefined;
|
||||
|
||||
const jobLogger = parentLogger.clone([PNG_JOB_TYPE_V2, 'execute', jobId]);
|
||||
const jobLogger = parentLogger.get(`execute:${jobId}`);
|
||||
const process$: Rx.Observable<TaskRunResult> = Rx.of(1).pipe(
|
||||
mergeMap(() => decryptJobHeaders(encryptionKey, job.headers, jobLogger)),
|
||||
mergeMap((headers) => {
|
||||
|
|
|
@ -6,10 +6,11 @@
|
|||
*/
|
||||
|
||||
import * as Rx from 'rxjs';
|
||||
import { loggingSystemMock } from 'src/core/server/mocks';
|
||||
import { Writable } from 'stream';
|
||||
import { ReportingCore } from '../../../';
|
||||
import { CancellationToken } from '../../../../common/cancellation_token';
|
||||
import { cryptoFactory, LevelLogger } from '../../../lib';
|
||||
import { cryptoFactory } from '../../../lib';
|
||||
import { createMockConfigSchema, createMockReportingCore } from '../../../test_helpers';
|
||||
import { generatePdfObservable } from '../lib/generate_pdf';
|
||||
import { TaskPayloadPDF } from '../types';
|
||||
|
@ -25,14 +26,7 @@ const cancellationToken = {
|
|||
on: jest.fn(),
|
||||
} as unknown as CancellationToken;
|
||||
|
||||
const mockLoggerFactory = {
|
||||
get: jest.fn().mockImplementation(() => ({
|
||||
error: jest.fn(),
|
||||
debug: jest.fn(),
|
||||
warn: jest.fn(),
|
||||
})),
|
||||
};
|
||||
const getMockLogger = () => new LevelLogger(mockLoggerFactory);
|
||||
const getMockLogger = () => loggingSystemMock.createLogger();
|
||||
|
||||
const mockEncryptionKey = 'testencryptionkey';
|
||||
const encryptHeaders = async (headers: Record<string, string>) => {
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
import apm from 'elastic-apm-node';
|
||||
import * as Rx from 'rxjs';
|
||||
import { catchError, map, mergeMap, takeUntil, tap } from 'rxjs/operators';
|
||||
import { PDF_JOB_TYPE, REPORTING_TRANSACTION_TYPE } from '../../../../common/constants';
|
||||
import { REPORTING_TRANSACTION_TYPE } from '../../../../common/constants';
|
||||
import { TaskRunResult } from '../../../lib/tasks';
|
||||
import { RunTaskFn, RunTaskFnFactory } from '../../../types';
|
||||
import { decryptJobHeaders, getFullUrls, getCustomLogo } from '../../common';
|
||||
|
@ -21,7 +21,7 @@ export const runTaskFnFactory: RunTaskFnFactory<RunTaskFn<TaskPayloadPDF>> =
|
|||
const encryptionKey = config.get('encryptionKey');
|
||||
|
||||
return async function runTask(jobId, job, cancellationToken, stream) {
|
||||
const jobLogger = parentLogger.clone([PDF_JOB_TYPE, 'execute-job', jobId]);
|
||||
const jobLogger = parentLogger.get(`execute-job:${jobId}`);
|
||||
const apmTrans = apm.startTransaction('execute-job-pdf', REPORTING_TRANSACTION_TYPE);
|
||||
const apmGetAssets = apmTrans?.startSpan('get-assets', 'setup');
|
||||
let apmGeneratePdf: { end: () => void } | null | undefined;
|
||||
|
|
|
@ -5,13 +5,13 @@
|
|||
* 2.0.
|
||||
*/
|
||||
|
||||
import type { Logger } from 'kibana/server';
|
||||
import { groupBy } from 'lodash';
|
||||
import * as Rx from 'rxjs';
|
||||
import { mergeMap, tap } from 'rxjs/operators';
|
||||
import { ReportingCore } from '../../../';
|
||||
import { ScreenshotResult } from '../../../../../screenshotting/server';
|
||||
import type { PdfMetrics } from '../../../../common/types';
|
||||
import { ReportingCore } from '../../../';
|
||||
import { LevelLogger } from '../../../lib';
|
||||
import { ScreenshotOptions } from '../../../types';
|
||||
import { PdfMaker } from '../../common/pdf';
|
||||
import { getTracker } from './tracker';
|
||||
|
@ -34,7 +34,7 @@ interface PdfResult {
|
|||
|
||||
export function generatePdfObservable(
|
||||
reporting: ReportingCore,
|
||||
logger: LevelLogger,
|
||||
logger: Logger,
|
||||
title: string,
|
||||
options: ScreenshotOptions,
|
||||
logo?: string
|
||||
|
|
|
@ -8,11 +8,12 @@
|
|||
jest.mock('./lib/generate_pdf');
|
||||
|
||||
import * as Rx from 'rxjs';
|
||||
import { loggingSystemMock } from 'src/core/server/mocks';
|
||||
import { Writable } from 'stream';
|
||||
import { ReportingCore } from '../../';
|
||||
import { CancellationToken } from '../../../common/cancellation_token';
|
||||
import { LocatorParams } from '../../../common/types';
|
||||
import { cryptoFactory, LevelLogger } from '../../lib';
|
||||
import { cryptoFactory } from '../../lib';
|
||||
import { createMockConfigSchema, createMockReportingCore } from '../../test_helpers';
|
||||
import { runTaskFnFactory } from './execute_job';
|
||||
import { generatePdfObservable } from './lib/generate_pdf';
|
||||
|
@ -26,14 +27,7 @@ const cancellationToken = {
|
|||
on: jest.fn(),
|
||||
} as unknown as CancellationToken;
|
||||
|
||||
const mockLoggerFactory = {
|
||||
get: jest.fn().mockImplementation(() => ({
|
||||
error: jest.fn(),
|
||||
debug: jest.fn(),
|
||||
warn: jest.fn(),
|
||||
})),
|
||||
};
|
||||
const getMockLogger = () => new LevelLogger(mockLoggerFactory);
|
||||
const getMockLogger = () => loggingSystemMock.createLogger();
|
||||
|
||||
const mockEncryptionKey = 'testencryptionkey';
|
||||
const encryptHeaders = async (headers: Record<string, string>) => {
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
import apm from 'elastic-apm-node';
|
||||
import * as Rx from 'rxjs';
|
||||
import { catchError, map, mergeMap, takeUntil, tap } from 'rxjs/operators';
|
||||
import { PDF_JOB_TYPE_V2, REPORTING_TRANSACTION_TYPE } from '../../../common/constants';
|
||||
import { REPORTING_TRANSACTION_TYPE } from '../../../common/constants';
|
||||
import { TaskRunResult } from '../../lib/tasks';
|
||||
import { RunTaskFn, RunTaskFnFactory } from '../../types';
|
||||
import { decryptJobHeaders, getCustomLogo } from '../common';
|
||||
|
@ -21,7 +21,7 @@ export const runTaskFnFactory: RunTaskFnFactory<RunTaskFn<TaskPayloadPDFV2>> =
|
|||
const encryptionKey = config.get('encryptionKey');
|
||||
|
||||
return async function runTask(jobId, job, cancellationToken, stream) {
|
||||
const jobLogger = parentLogger.clone([PDF_JOB_TYPE_V2, 'execute-job', jobId]);
|
||||
const jobLogger = parentLogger.get(`execute-job:${jobId}`);
|
||||
const apmTrans = apm.startTransaction('execute-job-pdf-v2', REPORTING_TRANSACTION_TYPE);
|
||||
const apmGetAssets = apmTrans?.startSpan('get-assets', 'setup');
|
||||
let apmGeneratePdf: { end: () => void } | null | undefined;
|
||||
|
|
|
@ -5,14 +5,14 @@
|
|||
* 2.0.
|
||||
*/
|
||||
|
||||
import type { Logger } from 'kibana/server';
|
||||
import { groupBy } from 'lodash';
|
||||
import * as Rx from 'rxjs';
|
||||
import { mergeMap, tap } from 'rxjs/operators';
|
||||
import { ReportingCore } from '../../../';
|
||||
import { ScreenshotResult } from '../../../../../screenshotting/server';
|
||||
import { LocatorParams, PdfMetrics, UrlOrUrlLocatorTuple } from '../../../../common/types';
|
||||
import { LevelLogger } from '../../../lib';
|
||||
import { ScreenshotOptions } from '../../../types';
|
||||
import type { ReportingCore } from '../../../';
|
||||
import type { ScreenshotResult } from '../../../../../screenshotting/server';
|
||||
import type { LocatorParams, PdfMetrics, UrlOrUrlLocatorTuple } from '../../../../common/types';
|
||||
import type { ScreenshotOptions } from '../../../types';
|
||||
import { PdfMaker } from '../../common/pdf';
|
||||
import { getFullRedirectAppUrl } from '../../common/v2/get_full_redirect_app_url';
|
||||
import type { TaskPayloadPDFV2 } from '../types';
|
||||
|
@ -36,7 +36,7 @@ interface PdfResult {
|
|||
|
||||
export function generatePdfObservable(
|
||||
reporting: ReportingCore,
|
||||
logger: LevelLogger,
|
||||
logger: Logger,
|
||||
job: TaskPayloadPDFV2,
|
||||
title: string,
|
||||
locatorParams: LocatorParams[],
|
||||
|
|
|
@ -5,16 +5,16 @@
|
|||
* 2.0.
|
||||
*/
|
||||
|
||||
import type { Logger } from 'kibana/server';
|
||||
import { UNVERSIONED_VERSION } from '../../common/constants';
|
||||
import type { BaseParams } from '../../common/types';
|
||||
import type { LevelLogger } from './';
|
||||
|
||||
export function checkParamsVersion(jobParams: BaseParams, logger: LevelLogger) {
|
||||
export function checkParamsVersion(jobParams: BaseParams, logger: Logger) {
|
||||
if (jobParams.version) {
|
||||
logger.debug(`Using reporting job params v${jobParams.version}`);
|
||||
return jobParams.version;
|
||||
}
|
||||
|
||||
logger.warning(`No version provided in report job params. Assuming ${UNVERSIONED_VERSION}`);
|
||||
logger.warn(`No version provided in report job params. Assuming ${UNVERSIONED_VERSION}`);
|
||||
return UNVERSIONED_VERSION;
|
||||
}
|
||||
|
|
|
@ -5,20 +5,20 @@
|
|||
* 2.0.
|
||||
*/
|
||||
|
||||
import type { Logger } from 'kibana/server';
|
||||
import { set } from 'lodash';
|
||||
import { elasticsearchServiceMock } from 'src/core/server/mocks';
|
||||
import { createMockLevelLogger } from '../test_helpers';
|
||||
import { elasticsearchServiceMock, loggingSystemMock } from 'src/core/server/mocks';
|
||||
import { ContentStream } from './content_stream';
|
||||
|
||||
describe('ContentStream', () => {
|
||||
let client: ReturnType<typeof elasticsearchServiceMock.createElasticsearchClient>;
|
||||
let logger: ReturnType<typeof createMockLevelLogger>;
|
||||
let logger: Logger;
|
||||
let stream: ContentStream;
|
||||
let base64Stream: ContentStream;
|
||||
|
||||
beforeEach(() => {
|
||||
client = elasticsearchServiceMock.createClusterClient().asInternalUser;
|
||||
logger = createMockLevelLogger();
|
||||
logger = loggingSystemMock.createLogger();
|
||||
stream = new ContentStream(
|
||||
client,
|
||||
logger,
|
||||
|
|
|
@ -5,14 +5,13 @@
|
|||
* 2.0.
|
||||
*/
|
||||
import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey';
|
||||
import { Duplex } from 'stream';
|
||||
import { ByteSizeValue } from '@kbn/config-schema';
|
||||
import type { ElasticsearchClient, Logger } from 'kibana/server';
|
||||
import { defaults, get } from 'lodash';
|
||||
import Puid from 'puid';
|
||||
import { ByteSizeValue } from '@kbn/config-schema';
|
||||
import type { ElasticsearchClient } from 'src/core/server';
|
||||
import { ReportingCore } from '..';
|
||||
import { ReportSource } from '../../common/types';
|
||||
import { LevelLogger } from './level_logger';
|
||||
import { Duplex } from 'stream';
|
||||
import type { ReportingCore } from '../';
|
||||
import type { ReportSource } from '../../common/types';
|
||||
|
||||
/**
|
||||
* @note The Elasticsearch `http.max_content_length` is including the whole POST body.
|
||||
|
@ -87,7 +86,7 @@ export class ContentStream extends Duplex {
|
|||
|
||||
constructor(
|
||||
private client: ElasticsearchClient,
|
||||
private logger: LevelLogger,
|
||||
private logger: Logger,
|
||||
private document: ContentStreamDocument,
|
||||
{ encoding = 'base64' }: ContentStreamParameters = {}
|
||||
) {
|
||||
|
@ -348,7 +347,7 @@ export async function getContentStream(
|
|||
|
||||
return new ContentStream(
|
||||
client,
|
||||
logger.clone(['content_stream', document.id]),
|
||||
logger.get('content_stream').get(document.id),
|
||||
document,
|
||||
parameters
|
||||
);
|
||||
|
|
|
@ -6,11 +6,11 @@
|
|||
*/
|
||||
|
||||
import { LogMeta } from 'kibana/server';
|
||||
import { createMockLevelLogger } from '../../test_helpers';
|
||||
import { loggingSystemMock } from 'src/core/server/mocks';
|
||||
import { EcsLogAdapter } from './adapter';
|
||||
|
||||
describe('EcsLogAdapter', () => {
|
||||
const logger = createMockLevelLogger();
|
||||
const logger = loggingSystemMock.createLogger();
|
||||
beforeAll(() => {
|
||||
jest
|
||||
.spyOn(global.Date, 'now')
|
||||
|
@ -28,7 +28,7 @@ describe('EcsLogAdapter', () => {
|
|||
const event = { kibana: { reporting: { wins: 5000 } } } as object & LogMeta; // an object that extends LogMeta
|
||||
eventLogger.logEvent('hello world', event);
|
||||
|
||||
expect(logger.debug).toBeCalledWith('hello world', ['events'], {
|
||||
expect(logger.debug).toBeCalledWith('hello world', {
|
||||
event: {
|
||||
duration: undefined,
|
||||
end: undefined,
|
||||
|
@ -50,7 +50,7 @@ describe('EcsLogAdapter', () => {
|
|||
const event = { kibana: { reporting: { wins: 9000 } } } as object & LogMeta; // an object that extends LogMeta
|
||||
eventLogger.logEvent('hello duration', event);
|
||||
|
||||
expect(logger.debug).toBeCalledWith('hello duration', ['events'], {
|
||||
expect(logger.debug).toBeCalledWith('hello duration', {
|
||||
event: {
|
||||
duration: 120000000000,
|
||||
end: '2021-04-12T16:02:00.000Z',
|
||||
|
|
|
@ -6,23 +6,26 @@
|
|||
*/
|
||||
|
||||
import deepMerge from 'deepmerge';
|
||||
import { LogMeta } from 'src/core/server';
|
||||
import { LevelLogger } from '../level_logger';
|
||||
import { IReportingEventLogger } from './logger';
|
||||
import type { Logger, LogMeta } from 'kibana/server';
|
||||
import type { IReportingEventLogger } from './logger';
|
||||
|
||||
/** @internal */
|
||||
export class EcsLogAdapter implements IReportingEventLogger {
|
||||
start?: Date;
|
||||
end?: Date;
|
||||
|
||||
private logger: Logger;
|
||||
|
||||
/**
|
||||
* This class provides a logging system to Reporting code, using a shape similar to the EventLog service.
|
||||
* The logging action causes ECS data with Reporting metrics sent to DEBUG logs.
|
||||
*
|
||||
* @param {LevelLogger} logger - Reporting's wrapper of the core logger
|
||||
* @param {Logger} logger - Reporting's wrapper of the core logger
|
||||
* @param {Partial<LogMeta>} properties - initial ECS data with template for Reporting metrics
|
||||
*/
|
||||
constructor(private logger: LevelLogger, private properties: Partial<LogMeta>) {}
|
||||
constructor(logger: Logger, private properties: Partial<LogMeta>) {
|
||||
this.logger = logger.get('events');
|
||||
}
|
||||
|
||||
logEvent(message: string, properties: LogMeta) {
|
||||
if (this.start && !this.end) {
|
||||
|
@ -44,7 +47,7 @@ export class EcsLogAdapter implements IReportingEventLogger {
|
|||
});
|
||||
|
||||
// sends an ECS object with Reporting metrics to the DEBUG logs
|
||||
this.logger.debug(message, ['events'], deepMerge(newProperties, properties));
|
||||
this.logger.debug(message, deepMerge(newProperties, properties));
|
||||
}
|
||||
|
||||
startTiming() {
|
||||
|
|
|
@ -5,8 +5,8 @@
|
|||
* 2.0.
|
||||
*/
|
||||
|
||||
import { loggingSystemMock } from 'src/core/server/mocks';
|
||||
import { ConcreteTaskInstance } from '../../../../task_manager/server';
|
||||
import { createMockLevelLogger } from '../../test_helpers';
|
||||
import { BasePayload } from '../../types';
|
||||
import { Report } from '../store';
|
||||
import { ReportingEventLogger, reportingEventLoggerFactory } from './logger';
|
||||
|
@ -21,7 +21,7 @@ describe('Event Logger', () => {
|
|||
let factory: ReportingEventLogger;
|
||||
|
||||
beforeEach(() => {
|
||||
factory = reportingEventLoggerFactory(createMockLevelLogger());
|
||||
factory = reportingEventLoggerFactory(loggingSystemMock.createLogger());
|
||||
});
|
||||
|
||||
it(`should construct with an internal seed object`, () => {
|
||||
|
|
|
@ -6,8 +6,7 @@
|
|||
*/
|
||||
|
||||
import deepMerge from 'deepmerge';
|
||||
import { LogMeta } from 'src/core/server';
|
||||
import { LevelLogger } from '../';
|
||||
import type { Logger, LogMeta } from 'kibana/server';
|
||||
import { PLUGIN_ID } from '../../../common/constants';
|
||||
import type { TaskRunMetrics } from '../../../common/types';
|
||||
import { IReport } from '../store';
|
||||
|
@ -46,7 +45,7 @@ export interface BaseEvent {
|
|||
}
|
||||
|
||||
/** @internal */
|
||||
export function reportingEventLoggerFactory(logger: LevelLogger) {
|
||||
export function reportingEventLoggerFactory(logger: Logger) {
|
||||
const genericLogger = new EcsLogAdapter(logger, { event: { provider: PLUGIN_ID } });
|
||||
|
||||
return class ReportingEventLogger {
|
||||
|
|
|
@ -10,7 +10,6 @@ export { checkParamsVersion } from './check_params_version';
|
|||
export { ContentStream, getContentStream } from './content_stream';
|
||||
export { cryptoFactory } from './crypto';
|
||||
export { ExportTypesRegistry, getExportTypesRegistry } from './export_types_registry';
|
||||
export { LevelLogger } from './level_logger';
|
||||
export { PassThroughStream } from './passthrough_stream';
|
||||
export { statuses } from './statuses';
|
||||
export { ReportingStore, IlmPolicyManager } from './store';
|
||||
|
|
|
@ -1,65 +0,0 @@
|
|||
/*
|
||||
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
|
||||
* or more contributor license agreements. Licensed under the Elastic License
|
||||
* 2.0; you may not use this file except in compliance with the Elastic License
|
||||
* 2.0.
|
||||
*/
|
||||
|
||||
import { LoggerFactory, LogMeta } from 'src/core/server';
|
||||
|
||||
const trimStr = (toTrim: string) => {
|
||||
return typeof toTrim === 'string' ? toTrim.trim() : toTrim;
|
||||
};
|
||||
|
||||
export interface GenericLevelLogger {
|
||||
debug: <T extends LogMeta>(msg: string, tags: string[], meta: T) => void;
|
||||
info: (msg: string) => void;
|
||||
warning: (msg: string) => void;
|
||||
error: (msg: Error) => void;
|
||||
}
|
||||
|
||||
export class LevelLogger implements GenericLevelLogger {
|
||||
private _logger: LoggerFactory;
|
||||
private _tags: string[];
|
||||
public warning: (msg: string, tags?: string[]) => void;
|
||||
|
||||
constructor(logger: LoggerFactory, tags?: string[]) {
|
||||
this._logger = logger;
|
||||
this._tags = tags || [];
|
||||
|
||||
/*
|
||||
* This shortcut provides maintenance convenience: Reporting code has been
|
||||
* using both .warn and .warning
|
||||
*/
|
||||
this.warning = this.warn.bind(this);
|
||||
}
|
||||
|
||||
private getLogger(tags: string[]) {
|
||||
return this._logger.get(...this._tags, ...tags);
|
||||
}
|
||||
|
||||
public error(err: string | Error, tags: string[] = []) {
|
||||
this.getLogger(tags).error(err);
|
||||
}
|
||||
|
||||
public warn(msg: string, tags: string[] = []) {
|
||||
this.getLogger(tags).warn(msg);
|
||||
}
|
||||
|
||||
// only "debug" logging supports the LogMeta for now...
|
||||
public debug<T extends LogMeta>(msg: string, tags: string[] = [], meta?: T) {
|
||||
this.getLogger(tags).debug<T>(msg, meta);
|
||||
}
|
||||
|
||||
public trace(msg: string, tags: string[] = []) {
|
||||
this.getLogger(tags).trace(msg);
|
||||
}
|
||||
|
||||
public info(msg: string, tags: string[] = []) {
|
||||
this.getLogger(tags).info(trimStr(msg));
|
||||
}
|
||||
|
||||
public clone(tags: string[]) {
|
||||
return new LevelLogger(this._logger, [...this._tags, ...tags]);
|
||||
}
|
||||
}
|
|
@ -5,17 +5,13 @@
|
|||
* 2.0.
|
||||
*/
|
||||
import * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey';
|
||||
import { elasticsearchServiceMock } from 'src/core/server/mocks';
|
||||
import { elasticsearchServiceMock, loggingSystemMock } from 'src/core/server/mocks';
|
||||
import { ReportingCore } from '../../';
|
||||
import {
|
||||
createMockConfigSchema,
|
||||
createMockLevelLogger,
|
||||
createMockReportingCore,
|
||||
} from '../../test_helpers';
|
||||
import { createMockConfigSchema, createMockReportingCore } from '../../test_helpers';
|
||||
import { Report, ReportDocument, ReportingStore, SavedReport } from './';
|
||||
|
||||
describe('ReportingStore', () => {
|
||||
const mockLogger = createMockLevelLogger();
|
||||
const mockLogger = loggingSystemMock.createLogger();
|
||||
let mockCore: ReportingCore;
|
||||
let mockEsClient: ReturnType<typeof elasticsearchServiceMock.createElasticsearchClient>;
|
||||
|
||||
|
|
|
@ -6,13 +6,14 @@
|
|||
*/
|
||||
|
||||
import { IndexResponse, UpdateResponse } from '@elastic/elasticsearch/lib/api/typesWithBodyKey';
|
||||
import { ElasticsearchClient } from 'src/core/server';
|
||||
import { LevelLogger, statuses } from '../';
|
||||
import { ReportingCore } from '../../';
|
||||
import type { ElasticsearchClient, Logger } from 'kibana/server';
|
||||
import { statuses } from '../';
|
||||
import type { ReportingCore } from '../../';
|
||||
import { ILM_POLICY_NAME, REPORTING_SYSTEM_INDEX } from '../../../common/constants';
|
||||
import { JobStatus, ReportOutput, ReportSource } from '../../../common/types';
|
||||
import { ReportTaskParams } from '../tasks';
|
||||
import { IReport, Report, ReportDocument, SavedReport } from './';
|
||||
import type { JobStatus, ReportOutput, ReportSource } from '../../../common/types';
|
||||
import type { ReportTaskParams } from '../tasks';
|
||||
import type { IReport, Report, ReportDocument } from './';
|
||||
import { SavedReport } from './';
|
||||
import { IlmPolicyManager } from './ilm_policy_manager';
|
||||
import { indexTimestamp } from './index_timestamp';
|
||||
import { mapping } from './mapping';
|
||||
|
@ -83,12 +84,12 @@ export class ReportingStore {
|
|||
private client?: ElasticsearchClient;
|
||||
private ilmPolicyManager?: IlmPolicyManager;
|
||||
|
||||
constructor(private reportingCore: ReportingCore, private logger: LevelLogger) {
|
||||
constructor(private reportingCore: ReportingCore, private logger: Logger) {
|
||||
const config = reportingCore.getConfig();
|
||||
|
||||
this.indexPrefix = REPORTING_SYSTEM_INDEX;
|
||||
this.indexInterval = config.get('queue', 'indexInterval');
|
||||
this.logger = logger.clone(['store']);
|
||||
this.logger = logger.get('store');
|
||||
}
|
||||
|
||||
private async getClient() {
|
||||
|
|
|
@ -5,10 +5,10 @@
|
|||
* 2.0.
|
||||
*/
|
||||
|
||||
import { createMockLevelLogger } from '../../test_helpers';
|
||||
import { loggingSystemMock } from 'src/core/server/mocks';
|
||||
import { errorLogger } from './error_logger';
|
||||
|
||||
const logger = createMockLevelLogger();
|
||||
const logger = loggingSystemMock.createLogger();
|
||||
|
||||
describe('Execute Report Error Logger', () => {
|
||||
const errorLogSpy = jest.spyOn(logger, 'error');
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
* 2.0.
|
||||
*/
|
||||
|
||||
import { LevelLogger } from '..';
|
||||
import type { Logger } from 'kibana/server';
|
||||
|
||||
const MAX_PARTIAL_ERROR_LENGTH = 1000; // 1000 of beginning, 1000 of end
|
||||
const ERROR_PARTIAL_SEPARATOR = '...';
|
||||
|
@ -15,7 +15,7 @@ const MAX_ERROR_LENGTH = MAX_PARTIAL_ERROR_LENGTH * 2 + ERROR_PARTIAL_SEPARATOR.
|
|||
* An error message string could be very long, as it sometimes includes huge
|
||||
* amount of base64
|
||||
*/
|
||||
export const errorLogger = (logger: LevelLogger, message: string, err?: Error) => {
|
||||
export const errorLogger = (logger: Logger, message: string, err?: Error) => {
|
||||
if (err) {
|
||||
const errString = `${message}: ${err}`;
|
||||
const errLength = errString.length;
|
||||
|
|
|
@ -5,18 +5,15 @@
|
|||
* 2.0.
|
||||
*/
|
||||
|
||||
import { loggingSystemMock } from 'src/core/server/mocks';
|
||||
import { ReportingCore } from '../..';
|
||||
import { RunContext } from '../../../../task_manager/server';
|
||||
import { taskManagerMock } from '../../../../task_manager/server/mocks';
|
||||
import { ReportingConfigType } from '../../config';
|
||||
import {
|
||||
createMockConfigSchema,
|
||||
createMockLevelLogger,
|
||||
createMockReportingCore,
|
||||
} from '../../test_helpers';
|
||||
import { createMockConfigSchema, createMockReportingCore } from '../../test_helpers';
|
||||
import { ExecuteReportTask } from './';
|
||||
|
||||
const logger = createMockLevelLogger();
|
||||
const logger = loggingSystemMock.createLogger();
|
||||
|
||||
describe('Execute Report Task', () => {
|
||||
let mockReporting: ReportingCore;
|
||||
|
|
|
@ -6,20 +6,21 @@
|
|||
*/
|
||||
|
||||
import { UpdateResponse } from '@elastic/elasticsearch/lib/api/typesWithBodyKey';
|
||||
import type { Logger } from 'kibana/server';
|
||||
import moment from 'moment';
|
||||
import * as Rx from 'rxjs';
|
||||
import { timeout } from 'rxjs/operators';
|
||||
import { finished, Writable } from 'stream';
|
||||
import { promisify } from 'util';
|
||||
import { getContentStream, LevelLogger } from '../';
|
||||
import { ReportingCore } from '../../';
|
||||
import {
|
||||
import { getContentStream } from '../';
|
||||
import type { ReportingCore } from '../../';
|
||||
import type {
|
||||
RunContext,
|
||||
TaskManagerStartContract,
|
||||
TaskRunCreatorFunction,
|
||||
} from '../../../../task_manager/server';
|
||||
import { CancellationToken } from '../../../common/cancellation_token';
|
||||
import { ReportingError, UnknownError, QueueTimeoutError } from '../../../common/errors';
|
||||
import { QueueTimeoutError, ReportingError, UnknownError } from '../../../common/errors';
|
||||
import { durationToNumber, numberToDuration } from '../../../common/schema_utils';
|
||||
import type { ReportOutput } from '../../../common/types';
|
||||
import type { ReportingConfigType } from '../../config';
|
||||
|
@ -60,7 +61,7 @@ function reportFromTask(task: ReportTaskParams) {
|
|||
export class ExecuteReportTask implements ReportingTask {
|
||||
public TYPE = REPORTING_EXECUTE_TYPE;
|
||||
|
||||
private logger: LevelLogger;
|
||||
private logger: Logger;
|
||||
private taskManagerStart?: TaskManagerStartContract;
|
||||
private taskExecutors?: Map<string, TaskExecutor>;
|
||||
private kibanaId?: string;
|
||||
|
@ -70,9 +71,9 @@ export class ExecuteReportTask implements ReportingTask {
|
|||
constructor(
|
||||
private reporting: ReportingCore,
|
||||
private config: ReportingConfigType,
|
||||
logger: LevelLogger
|
||||
logger: Logger
|
||||
) {
|
||||
this.logger = logger.clone(['runTask']);
|
||||
this.logger = logger.get('runTask');
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -86,7 +87,7 @@ export class ExecuteReportTask implements ReportingTask {
|
|||
const exportTypesRegistry = reporting.getExportTypesRegistry();
|
||||
const executors = new Map<string, TaskExecutor>();
|
||||
for (const exportType of exportTypesRegistry.getAll()) {
|
||||
const exportTypeLogger = this.logger.clone([exportType.id]);
|
||||
const exportTypeLogger = this.logger.get(exportType.jobType);
|
||||
const jobExecutor = exportType.runTaskFnFactory(reporting, exportTypeLogger);
|
||||
// The task will run the function with the job type as a param.
|
||||
// This allows us to retrieve the specific export type runFn when called to run an export
|
||||
|
@ -476,7 +477,7 @@ export class ExecuteReportTask implements ReportingTask {
|
|||
return await this.getTaskManagerStart().schedule(taskInstance);
|
||||
}
|
||||
|
||||
private async rescheduleTask(task: ReportTaskParams, logger: LevelLogger) {
|
||||
private async rescheduleTask(task: ReportTaskParams, logger: Logger) {
|
||||
logger.info(`Rescheduling task:${task.id} to retry after error.`);
|
||||
|
||||
const oldTaskInstance: ReportingExecuteTaskInstance = {
|
||||
|
|
|
@ -5,18 +5,15 @@
|
|||
* 2.0.
|
||||
*/
|
||||
|
||||
import { loggingSystemMock } from 'src/core/server/mocks';
|
||||
import { ReportingCore } from '../..';
|
||||
import { RunContext } from '../../../../task_manager/server';
|
||||
import { taskManagerMock } from '../../../../task_manager/server/mocks';
|
||||
import { ReportingConfigType } from '../../config';
|
||||
import {
|
||||
createMockConfigSchema,
|
||||
createMockLevelLogger,
|
||||
createMockReportingCore,
|
||||
} from '../../test_helpers';
|
||||
import { createMockConfigSchema, createMockReportingCore } from '../../test_helpers';
|
||||
import { MonitorReportsTask } from './';
|
||||
|
||||
const logger = createMockLevelLogger();
|
||||
const logger = loggingSystemMock.createLogger();
|
||||
|
||||
describe('Execute Report Task', () => {
|
||||
let mockReporting: ReportingCore;
|
||||
|
|
|
@ -5,8 +5,9 @@
|
|||
* 2.0.
|
||||
*/
|
||||
|
||||
import type { Logger } from 'kibana/server';
|
||||
import moment from 'moment';
|
||||
import { LevelLogger, ReportingStore } from '../';
|
||||
import { ReportingStore } from '../';
|
||||
import { ReportingCore } from '../../';
|
||||
import { TaskManagerStartContract, TaskRunCreatorFunction } from '../../../../task_manager/server';
|
||||
import { numberToDuration } from '../../../common/schema_utils';
|
||||
|
@ -38,7 +39,7 @@ import { ReportingTask, ReportingTaskStatus, REPORTING_MONITOR_TYPE, ReportTaskP
|
|||
export class MonitorReportsTask implements ReportingTask {
|
||||
public TYPE = REPORTING_MONITOR_TYPE;
|
||||
|
||||
private logger: LevelLogger;
|
||||
private logger: Logger;
|
||||
private taskManagerStart?: TaskManagerStartContract;
|
||||
private store?: ReportingStore;
|
||||
private timeout: moment.Duration;
|
||||
|
@ -46,9 +47,9 @@ export class MonitorReportsTask implements ReportingTask {
|
|||
constructor(
|
||||
private reporting: ReportingCore,
|
||||
private config: ReportingConfigType,
|
||||
parentLogger: LevelLogger
|
||||
parentLogger: Logger
|
||||
) {
|
||||
this.logger = parentLogger.clone([REPORTING_MONITOR_TYPE]);
|
||||
this.logger = parentLogger.get(REPORTING_MONITOR_TYPE);
|
||||
this.timeout = numberToDuration(config.queue.timeout);
|
||||
}
|
||||
|
||||
|
@ -145,7 +146,7 @@ export class MonitorReportsTask implements ReportingTask {
|
|||
}
|
||||
|
||||
// reschedule the task with TM
|
||||
private async rescheduleTask(task: ReportTaskParams, logger: LevelLogger) {
|
||||
private async rescheduleTask(task: ReportTaskParams, logger: Logger) {
|
||||
if (!this.taskManagerStart) {
|
||||
throw new Error('Reporting task runner has not been initialized!');
|
||||
}
|
||||
|
|
|
@ -5,14 +5,12 @@
|
|||
* 2.0.
|
||||
*/
|
||||
|
||||
import type { CoreSetup, CoreStart } from 'kibana/server';
|
||||
import { coreMock } from 'src/core/server/mocks';
|
||||
import type { CoreSetup, CoreStart, Logger } from 'kibana/server';
|
||||
import { coreMock, loggingSystemMock } from 'src/core/server/mocks';
|
||||
import type { ReportingCore, ReportingInternalStart } from './core';
|
||||
import { LevelLogger } from './lib';
|
||||
import { ReportingPlugin } from './plugin';
|
||||
import {
|
||||
createMockConfigSchema,
|
||||
createMockLevelLogger,
|
||||
createMockPluginSetup,
|
||||
createMockPluginStart,
|
||||
} from './test_helpers';
|
||||
|
@ -27,7 +25,7 @@ describe('Reporting Plugin', () => {
|
|||
let coreStart: CoreStart;
|
||||
let pluginSetup: ReportingSetupDeps;
|
||||
let pluginStart: ReportingInternalStart;
|
||||
let logger: jest.Mocked<LevelLogger>;
|
||||
let logger: jest.Mocked<Logger>;
|
||||
let plugin: ReportingPlugin;
|
||||
|
||||
beforeEach(async () => {
|
||||
|
@ -38,9 +36,9 @@ describe('Reporting Plugin', () => {
|
|||
pluginSetup = createMockPluginSetup({}) as unknown as ReportingSetupDeps;
|
||||
pluginStart = await createMockPluginStart(coreStart, configSchema);
|
||||
|
||||
logger = createMockLevelLogger();
|
||||
logger = loggingSystemMock.createLogger();
|
||||
plugin = new ReportingPlugin(initContext);
|
||||
(plugin as unknown as { logger: LevelLogger }).logger = logger;
|
||||
(plugin as unknown as { logger: Logger }).logger = logger;
|
||||
});
|
||||
|
||||
it('has a sync setup process', () => {
|
||||
|
|
|
@ -5,12 +5,12 @@
|
|||
* 2.0.
|
||||
*/
|
||||
|
||||
import type { CoreSetup, CoreStart, Plugin, PluginInitializerContext } from 'src/core/server';
|
||||
import type { CoreSetup, CoreStart, Logger, Plugin, PluginInitializerContext } from 'kibana/server';
|
||||
import { PLUGIN_ID } from '../common/constants';
|
||||
import { ReportingCore } from './';
|
||||
import { buildConfig, registerUiSettings, ReportingConfigType } from './config';
|
||||
import { registerDeprecations } from './deprecations';
|
||||
import { LevelLogger, ReportingStore } from './lib';
|
||||
import { ReportingStore } from './lib';
|
||||
import { registerRoutes } from './routes';
|
||||
import { setFieldFormats } from './services';
|
||||
import type {
|
||||
|
@ -28,11 +28,11 @@ import { registerReportingUsageCollector } from './usage';
|
|||
export class ReportingPlugin
|
||||
implements Plugin<ReportingSetup, ReportingStart, ReportingSetupDeps, ReportingStartDeps>
|
||||
{
|
||||
private logger: LevelLogger;
|
||||
private logger: Logger;
|
||||
private reportingCore?: ReportingCore;
|
||||
|
||||
constructor(private initContext: PluginInitializerContext<ReportingConfigType>) {
|
||||
this.logger = new LevelLogger(initContext.logger.get());
|
||||
this.logger = initContext.logger.get();
|
||||
}
|
||||
|
||||
public setup(core: CoreSetup, plugins: ReportingSetupDeps) {
|
||||
|
|
|
@ -5,16 +5,16 @@
|
|||
* 2.0.
|
||||
*/
|
||||
import { errors } from '@elastic/elasticsearch';
|
||||
import { SecurityHasPrivilegesIndexPrivilegesCheck } from '@elastic/elasticsearch/lib/api/typesWithBodyKey';
|
||||
import { RequestHandler } from 'src/core/server';
|
||||
import type { SecurityHasPrivilegesIndexPrivilegesCheck } from '@elastic/elasticsearch/lib/api/typesWithBodyKey';
|
||||
import type { Logger, RequestHandler } from 'kibana/server';
|
||||
import {
|
||||
API_GET_ILM_POLICY_STATUS,
|
||||
API_MIGRATE_ILM_POLICY_URL,
|
||||
ILM_POLICY_NAME,
|
||||
} from '../../../common/constants';
|
||||
import { IlmPolicyStatusResponse } from '../../../common/types';
|
||||
import { ReportingCore } from '../../core';
|
||||
import { IlmPolicyManager, LevelLogger as Logger } from '../../lib';
|
||||
import type { IlmPolicyStatusResponse } from '../../../common/types';
|
||||
import type { ReportingCore } from '../../core';
|
||||
import { IlmPolicyManager } from '../../lib';
|
||||
import { deprecations } from '../../lib/deprecations';
|
||||
|
||||
export const registerDeprecationsRoutes = (reporting: ReportingCore, logger: Logger) => {
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
* 2.0.
|
||||
*/
|
||||
|
||||
import { loggingSystemMock } from 'src/core/server/mocks';
|
||||
import { setupServer } from 'src/core/server/test_utils';
|
||||
import supertest from 'supertest';
|
||||
import { licensingMock } from '../../../../../licensing/server/mocks';
|
||||
|
@ -12,7 +13,6 @@ import { securityMock } from '../../../../../security/server/mocks';
|
|||
import { API_GET_ILM_POLICY_STATUS } from '../../../../common/constants';
|
||||
import {
|
||||
createMockConfigSchema,
|
||||
createMockLevelLogger,
|
||||
createMockPluginSetup,
|
||||
createMockPluginStart,
|
||||
createMockReportingCore,
|
||||
|
@ -54,7 +54,7 @@ describe(`GET ${API_GET_ILM_POLICY_STATUS}`, () => {
|
|||
it('correctly handles authz when security is unavailable', async () => {
|
||||
const core = await createReportingCore({});
|
||||
|
||||
registerDeprecationsRoutes(core, createMockLevelLogger());
|
||||
registerDeprecationsRoutes(core, loggingSystemMock.createLogger());
|
||||
await server.start();
|
||||
|
||||
await supertest(httpSetup.server.listener)
|
||||
|
@ -68,7 +68,7 @@ describe(`GET ${API_GET_ILM_POLICY_STATUS}`, () => {
|
|||
security.license.isEnabled.mockReturnValue(false);
|
||||
const core = await createReportingCore({ security });
|
||||
|
||||
registerDeprecationsRoutes(core, createMockLevelLogger());
|
||||
registerDeprecationsRoutes(core, loggingSystemMock.createLogger());
|
||||
await server.start();
|
||||
|
||||
await supertest(httpSetup.server.listener)
|
||||
|
|
|
@ -6,11 +6,11 @@
|
|||
*/
|
||||
|
||||
import { i18n } from '@kbn/i18n';
|
||||
import { ReportingCore } from '../..';
|
||||
import type { Logger } from 'kibana/server';
|
||||
import type { ReportingCore } from '../..';
|
||||
import { API_DIAGNOSE_URL } from '../../../common/constants';
|
||||
import { LevelLogger as Logger } from '../../lib';
|
||||
import { authorizedUserPreRouting } from '../lib/authorized_user_pre_routing';
|
||||
import { DiagnosticResponse } from './';
|
||||
import type { DiagnosticResponse } from './';
|
||||
|
||||
const logsToHelpMap = {
|
||||
'error while loading shared libraries': i18n.translate(
|
||||
|
|
|
@ -5,10 +5,10 @@
|
|||
* 2.0.
|
||||
*/
|
||||
|
||||
import type { Logger } from 'kibana/server';
|
||||
import type { ReportingCore } from '../../core';
|
||||
import { registerDiagnoseBrowser } from './browser';
|
||||
import { registerDiagnoseScreenshot } from './screenshot';
|
||||
import { LevelLogger as Logger } from '../../lib';
|
||||
import { ReportingCore } from '../../core';
|
||||
|
||||
export const registerDiagnosticRoutes = (reporting: ReportingCore, logger: Logger) => {
|
||||
registerDiagnoseBrowser(reporting, logger);
|
||||
|
|
|
@ -6,13 +6,13 @@
|
|||
*/
|
||||
|
||||
import * as Rx from 'rxjs';
|
||||
import { loggingSystemMock } from 'src/core/server/mocks';
|
||||
import { setupServer } from 'src/core/server/test_utils';
|
||||
import supertest from 'supertest';
|
||||
import { ReportingCore } from '../../../';
|
||||
import type { ScreenshottingStart } from '../../../../../screenshotting/server';
|
||||
import {
|
||||
createMockConfigSchema,
|
||||
createMockLevelLogger,
|
||||
createMockPluginSetup,
|
||||
createMockReportingCore,
|
||||
} from '../../../test_helpers';
|
||||
|
@ -27,7 +27,7 @@ const fontNotFoundMessage = 'Could not find the default font';
|
|||
describe('POST /diagnose/browser', () => {
|
||||
jest.setTimeout(6000);
|
||||
const reportingSymbol = Symbol('reporting');
|
||||
const mockLogger = createMockLevelLogger();
|
||||
const mockLogger = loggingSystemMock.createLogger();
|
||||
|
||||
let server: SetupServerReturn['server'];
|
||||
let httpSetup: SetupServerReturn['httpSetup'];
|
||||
|
|
|
@ -5,13 +5,13 @@
|
|||
* 2.0.
|
||||
*/
|
||||
|
||||
import { loggingSystemMock } from 'src/core/server/mocks';
|
||||
import { setupServer } from 'src/core/server/test_utils';
|
||||
import supertest from 'supertest';
|
||||
import { ReportingCore } from '../../../';
|
||||
import { generatePngObservable } from '../../../export_types/common';
|
||||
import {
|
||||
createMockConfigSchema,
|
||||
createMockLevelLogger,
|
||||
createMockPluginSetup,
|
||||
createMockReportingCore,
|
||||
} from '../../../test_helpers';
|
||||
|
@ -38,7 +38,7 @@ describe('POST /diagnose/screenshot', () => {
|
|||
};
|
||||
|
||||
const config = createMockConfigSchema({ queue: { timeout: 120000 } });
|
||||
const mockLogger = createMockLevelLogger();
|
||||
const mockLogger = loggingSystemMock.createLogger();
|
||||
|
||||
beforeEach(async () => {
|
||||
({ server, httpSetup } = await setupServer(reportingSymbol));
|
||||
|
|
|
@ -6,12 +6,12 @@
|
|||
*/
|
||||
|
||||
import { i18n } from '@kbn/i18n';
|
||||
import type { Logger } from 'kibana/server';
|
||||
import { ReportingCore } from '../..';
|
||||
import { APP_WRAPPER_CLASS } from '../../../../../../src/core/server';
|
||||
import { API_DIAGNOSE_URL } from '../../../common/constants';
|
||||
import { generatePngObservable } from '../../export_types/common';
|
||||
import { getAbsoluteUrlFactory } from '../../export_types/common/get_absolute_url';
|
||||
import { LevelLogger as Logger } from '../../lib';
|
||||
import { authorizedUserPreRouting } from '../lib/authorized_user_pre_routing';
|
||||
import { DiagnosticResponse } from './';
|
||||
|
||||
|
|
|
@ -6,13 +6,13 @@
|
|||
*/
|
||||
|
||||
import { schema } from '@kbn/config-schema';
|
||||
import { KibanaRequest } from 'src/core/server';
|
||||
import { ReportingCore } from '../../';
|
||||
import type { KibanaRequest, Logger } from 'kibana/server';
|
||||
import type { ReportingCore } from '../../';
|
||||
import { CSV_SEARCHSOURCE_IMMEDIATE_TYPE } from '../../../common/constants';
|
||||
import { runTaskFnFactory } from '../../export_types/csv_searchsource_immediate/execute_job';
|
||||
import { JobParamsDownloadCSV } from '../../export_types/csv_searchsource_immediate/types';
|
||||
import { LevelLogger as Logger, PassThroughStream } from '../../lib';
|
||||
import { BaseParams } from '../../types';
|
||||
import type { JobParamsDownloadCSV } from '../../export_types/csv_searchsource_immediate/types';
|
||||
import { PassThroughStream } from '../../lib';
|
||||
import type { BaseParams } from '../../types';
|
||||
import { authorizedUserPreRouting } from '../lib/authorized_user_pre_routing';
|
||||
import { RequestHandler } from '../lib/request_handler';
|
||||
|
||||
|
@ -64,7 +64,7 @@ export function registerGenerateCsvFromSavedObjectImmediate(
|
|||
authorizedUserPreRouting(
|
||||
reporting,
|
||||
async (user, context, req: CsvFromSavedObjectRequest, res) => {
|
||||
const logger = parentLogger.clone([CSV_SEARCHSOURCE_IMMEDIATE_TYPE]);
|
||||
const logger = parentLogger.get(CSV_SEARCHSOURCE_IMMEDIATE_TYPE);
|
||||
const runTaskFn = runTaskFnFactory(reporting, logger);
|
||||
const requestHandler = new RequestHandler(reporting, user, context, req, res, logger);
|
||||
const stream = new PassThroughStream();
|
||||
|
|
|
@ -7,16 +7,16 @@
|
|||
|
||||
import { schema } from '@kbn/config-schema';
|
||||
import rison from 'rison-node';
|
||||
import { ReportingCore } from '../..';
|
||||
import type { Logger } from 'kibana/server';
|
||||
import type { ReportingCore } from '../..';
|
||||
import { API_BASE_URL } from '../../../common/constants';
|
||||
import { LevelLogger } from '../../lib';
|
||||
import { BaseParams } from '../../types';
|
||||
import type { BaseParams } from '../../types';
|
||||
import { authorizedUserPreRouting } from '../lib/authorized_user_pre_routing';
|
||||
import { RequestHandler } from '../lib/request_handler';
|
||||
|
||||
const BASE_GENERATE = `${API_BASE_URL}/generate`;
|
||||
|
||||
export function registerJobGenerationRoutes(reporting: ReportingCore, logger: LevelLogger) {
|
||||
export function registerJobGenerationRoutes(reporting: ReportingCore, logger: Logger) {
|
||||
const setupDeps = reporting.getPluginSetupDeps();
|
||||
const { router } = setupDeps;
|
||||
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
|
||||
import rison from 'rison-node';
|
||||
import { BehaviorSubject } from 'rxjs';
|
||||
import { loggingSystemMock } from 'src/core/server/mocks';
|
||||
import { setupServer } from 'src/core/server/test_utils';
|
||||
import supertest from 'supertest';
|
||||
import { ReportingCore } from '../../../';
|
||||
|
@ -16,7 +17,6 @@ import { ExportTypesRegistry } from '../../../lib/export_types_registry';
|
|||
import { Report } from '../../../lib/store';
|
||||
import {
|
||||
createMockConfigSchema,
|
||||
createMockLevelLogger,
|
||||
createMockPluginSetup,
|
||||
createMockPluginStart,
|
||||
createMockReportingCore,
|
||||
|
@ -38,7 +38,7 @@ describe('POST /api/reporting/generate', () => {
|
|||
queue: { indexInterval: 'year', timeout: 10000, pollEnabled: true },
|
||||
});
|
||||
|
||||
const mockLogger = createMockLevelLogger();
|
||||
const mockLogger = loggingSystemMock.createLogger();
|
||||
|
||||
beforeEach(async () => {
|
||||
({ server, httpSetup } = await setupServer(reportingSymbol));
|
||||
|
|
|
@ -5,8 +5,8 @@
|
|||
* 2.0.
|
||||
*/
|
||||
|
||||
import type { Logger } from 'kibana/server';
|
||||
import { ReportingCore } from '..';
|
||||
import { LevelLogger } from '../lib';
|
||||
import { registerDeprecationsRoutes } from './deprecations/deprecations';
|
||||
import { registerDiagnosticRoutes } from './diagnostic';
|
||||
import {
|
||||
|
@ -15,7 +15,7 @@ import {
|
|||
} from './generate';
|
||||
import { registerJobInfoRoutes } from './management';
|
||||
|
||||
export function registerRoutes(reporting: ReportingCore, logger: LevelLogger) {
|
||||
export function registerRoutes(reporting: ReportingCore, logger: Logger) {
|
||||
registerDeprecationsRoutes(reporting, logger);
|
||||
registerDiagnosticRoutes(reporting, logger);
|
||||
registerGenerateCsvFromSavedObjectImmediate(reporting, logger);
|
||||
|
|
|
@ -138,7 +138,7 @@ export function jobsQueryFactory(reportingCore: ReportingCore): JobsQueryFactory
|
|||
async get(user, id) {
|
||||
const { logger } = reportingCore.getPluginSetupDeps();
|
||||
if (!id) {
|
||||
logger.warning(`No ID provided for GET`);
|
||||
logger.warn(`No ID provided for GET`);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -163,7 +163,7 @@ export function jobsQueryFactory(reportingCore: ReportingCore): JobsQueryFactory
|
|||
|
||||
const result = response?.hits?.hits?.[0];
|
||||
if (!result?._source) {
|
||||
logger.warning(`No hits resulted in search`);
|
||||
logger.warn(`No hits resulted in search`);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -6,16 +6,12 @@
|
|||
*/
|
||||
|
||||
import { KibanaRequest, KibanaResponseFactory } from 'kibana/server';
|
||||
import { coreMock, httpServerMock } from 'src/core/server/mocks';
|
||||
import { coreMock, httpServerMock, loggingSystemMock } from 'src/core/server/mocks';
|
||||
import { ReportingCore } from '../..';
|
||||
import { JobParamsPDFDeprecated, TaskPayloadPDF } from '../../export_types/printable_pdf/types';
|
||||
import { Report, ReportingStore } from '../../lib/store';
|
||||
import { ReportApiJSON } from '../../lib/store/report';
|
||||
import {
|
||||
createMockConfigSchema,
|
||||
createMockLevelLogger,
|
||||
createMockReportingCore,
|
||||
} from '../../test_helpers';
|
||||
import { createMockConfigSchema, createMockReportingCore } from '../../test_helpers';
|
||||
import { ReportingRequestHandlerContext, ReportingSetup } from '../../types';
|
||||
import { RequestHandler } from './request_handler';
|
||||
|
||||
|
@ -43,7 +39,7 @@ const getMockResponseFactory = () =>
|
|||
unauthorized: (obj: unknown) => obj,
|
||||
} as unknown as KibanaResponseFactory);
|
||||
|
||||
const mockLogger = createMockLevelLogger();
|
||||
const mockLogger = loggingSystemMock.createLogger();
|
||||
|
||||
describe('Handle request to generate', () => {
|
||||
let reportingCore: ReportingCore;
|
||||
|
|
|
@ -7,12 +7,12 @@
|
|||
|
||||
import Boom from '@hapi/boom';
|
||||
import { i18n } from '@kbn/i18n';
|
||||
import { KibanaRequest, KibanaResponseFactory } from 'kibana/server';
|
||||
import { ReportingCore } from '../..';
|
||||
import type { KibanaRequest, KibanaResponseFactory, Logger } from 'kibana/server';
|
||||
import type { ReportingCore } from '../..';
|
||||
import { API_BASE_URL } from '../../../common/constants';
|
||||
import { checkParamsVersion, cryptoFactory, LevelLogger } from '../../lib';
|
||||
import { checkParamsVersion, cryptoFactory } from '../../lib';
|
||||
import { Report } from '../../lib/store';
|
||||
import { BaseParams, ReportingRequestHandlerContext, ReportingUser } from '../../types';
|
||||
import type { BaseParams, ReportingRequestHandlerContext, ReportingUser } from '../../types';
|
||||
|
||||
export const handleUnavailable = (res: KibanaResponseFactory) => {
|
||||
return res.custom({ statusCode: 503, body: 'Not Available' });
|
||||
|
@ -30,7 +30,7 @@ export class RequestHandler {
|
|||
private context: ReportingRequestHandlerContext,
|
||||
private req: KibanaRequest,
|
||||
private res: KibanaResponseFactory,
|
||||
private logger: LevelLogger
|
||||
private logger: Logger
|
||||
) {}
|
||||
|
||||
private async encryptHeaders() {
|
||||
|
@ -53,7 +53,7 @@ export class RequestHandler {
|
|||
}
|
||||
|
||||
const [createJob, store] = await Promise.all([
|
||||
exportType.createJobFnFactory(reporting, logger.clone([exportType.id])),
|
||||
exportType.createJobFnFactory(reporting, logger.get(exportType.id)),
|
||||
reporting.getStore(),
|
||||
]);
|
||||
|
||||
|
|
|
@ -1,29 +0,0 @@
|
|||
/*
|
||||
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
|
||||
* or more contributor license agreements. Licensed under the Elastic License
|
||||
* 2.0; you may not use this file except in compliance with the Elastic License
|
||||
* 2.0.
|
||||
*/
|
||||
|
||||
jest.mock('../lib/level_logger');
|
||||
|
||||
import { loggingSystemMock } from 'src/core/server/mocks';
|
||||
import { LevelLogger } from '../lib/level_logger';
|
||||
|
||||
export function createMockLevelLogger() {
|
||||
// eslint-disable-next-line no-console
|
||||
const consoleLogger = (tag: string) => (message: unknown) => console.log(tag, message);
|
||||
|
||||
const logger = new LevelLogger(loggingSystemMock.create()) as jest.Mocked<LevelLogger>;
|
||||
|
||||
// logger.debug.mockImplementation(consoleLogger('debug')); // uncomment this to see debug logs in jest tests
|
||||
logger.info.mockImplementation(consoleLogger('info'));
|
||||
logger.warn.mockImplementation(consoleLogger('warn'));
|
||||
logger.warning = jest.fn().mockImplementation(consoleLogger('warn'));
|
||||
logger.error.mockImplementation(consoleLogger('error'));
|
||||
logger.trace.mockImplementation(consoleLogger('trace'));
|
||||
|
||||
logger.clone.mockImplementation(() => logger);
|
||||
|
||||
return logger;
|
||||
}
|
|
@ -10,7 +10,12 @@ jest.mock('../usage');
|
|||
|
||||
import _ from 'lodash';
|
||||
import { BehaviorSubject } from 'rxjs';
|
||||
import { coreMock, elasticsearchServiceMock, statusServiceMock } from 'src/core/server/mocks';
|
||||
import {
|
||||
coreMock,
|
||||
elasticsearchServiceMock,
|
||||
loggingSystemMock,
|
||||
statusServiceMock,
|
||||
} from 'src/core/server/mocks';
|
||||
// eslint-disable-next-line @kbn/eslint/no-restricted-paths
|
||||
import { dataPluginMock } from 'src/plugins/data/server/mocks';
|
||||
import { FieldFormatsRegistry } from 'src/plugins/field_formats/common';
|
||||
|
@ -27,7 +32,6 @@ import { buildConfig, ReportingConfigType } from '../config';
|
|||
import { ReportingInternalSetup, ReportingInternalStart } from '../core';
|
||||
import { ReportingStore } from '../lib';
|
||||
import { setFieldFormats } from '../services';
|
||||
import { createMockLevelLogger } from './create_mock_levellogger';
|
||||
|
||||
export const createMockPluginSetup = (
|
||||
setupMock: Partial<Record<keyof ReportingInternalSetup, any>>
|
||||
|
@ -38,13 +42,13 @@ export const createMockPluginSetup = (
|
|||
router: { get: jest.fn(), post: jest.fn(), put: jest.fn(), delete: jest.fn() },
|
||||
security: securityMock.createSetup(),
|
||||
taskManager: taskManagerMock.createSetup(),
|
||||
logger: createMockLevelLogger(),
|
||||
logger: loggingSystemMock.createLogger(),
|
||||
status: statusServiceMock.createSetupContract(),
|
||||
...setupMock,
|
||||
};
|
||||
};
|
||||
|
||||
const logger = createMockLevelLogger();
|
||||
const logger = loggingSystemMock.createLogger();
|
||||
|
||||
const createMockReportingStore = async (config: ReportingConfigType) => {
|
||||
const mockConfigSchema = createMockConfigSchema(config);
|
||||
|
|
|
@ -5,7 +5,6 @@
|
|||
* 2.0.
|
||||
*/
|
||||
|
||||
export { createMockLevelLogger } from './create_mock_levellogger';
|
||||
export {
|
||||
createMockConfig,
|
||||
createMockConfigSchema,
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
* 2.0.
|
||||
*/
|
||||
|
||||
import type { IRouter, RequestHandlerContext } from 'src/core/server';
|
||||
import type { IRouter, Logger, RequestHandlerContext } from 'kibana/server';
|
||||
// eslint-disable-next-line @kbn/eslint/no-restricted-paths
|
||||
import type { DataPluginStart } from 'src/plugins/data/server/plugin';
|
||||
import { FieldFormatsStart } from 'src/plugins/field_formats/server';
|
||||
|
@ -29,7 +29,6 @@ import type { CancellationToken } from '../common/cancellation_token';
|
|||
import type { BaseParams, BasePayload, TaskRunResult, UrlOrUrlLocatorTuple } from '../common/types';
|
||||
import type { ReportingConfigType } from './config';
|
||||
import type { ReportingCore } from './core';
|
||||
import type { LevelLogger } from './lib';
|
||||
import type { ReportTaskParams } from './lib/tasks';
|
||||
|
||||
/**
|
||||
|
@ -71,12 +70,12 @@ export type RunTaskFn<TaskPayloadType = BasePayload> = (
|
|||
|
||||
export type CreateJobFnFactory<CreateJobFnType> = (
|
||||
reporting: ReportingCore,
|
||||
logger: LevelLogger
|
||||
logger: Logger
|
||||
) => CreateJobFnType;
|
||||
|
||||
export type RunTaskFnFactory<RunTaskFnType> = (
|
||||
reporting: ReportingCore,
|
||||
logger: LevelLogger
|
||||
logger: Logger
|
||||
) => RunTaskFnType;
|
||||
|
||||
export interface ExportTypeDefinition<
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue