mirror of
https://github.com/elastic/kibana.git
synced 2025-04-23 09:19:04 -04:00
* [APM] Closes #37499 by moving the APM index creation from server startup to savedObject request for the index pattern. It first checks if the index pattern is saved, if not it creates it. * [APM] provide more meaninful status codes in the default error handler
This commit is contained in:
parent
d592f54910
commit
35afc0d1bd
4 changed files with 54 additions and 34 deletions
|
@ -5,7 +5,6 @@
|
|||
*/
|
||||
|
||||
import { memoize } from 'lodash';
|
||||
import chrome from 'ui/chrome';
|
||||
import { callApi } from './callApi';
|
||||
|
||||
export interface ISavedObject {
|
||||
|
@ -16,25 +15,13 @@ export interface ISavedObject {
|
|||
type: string;
|
||||
}
|
||||
|
||||
interface ISavedObjectAPIResponse {
|
||||
saved_objects: ISavedObject[];
|
||||
}
|
||||
|
||||
export const getAPMIndexPattern = memoize(async () => {
|
||||
const apmIndexPatternTitle: string = chrome.getInjected(
|
||||
'apmIndexPatternTitle'
|
||||
);
|
||||
const res = await callApi<ISavedObjectAPIResponse>({
|
||||
pathname: `/api/saved_objects/_find`,
|
||||
query: {
|
||||
type: 'index-pattern',
|
||||
search: `"${apmIndexPatternTitle}"`,
|
||||
search_fields: 'title',
|
||||
per_page: 200
|
||||
}
|
||||
});
|
||||
|
||||
return res.saved_objects.find(
|
||||
savedObject => savedObject.attributes.title === apmIndexPatternTitle
|
||||
);
|
||||
try {
|
||||
return await callApi<ISavedObject>({
|
||||
method: 'GET',
|
||||
pathname: `/api/apm/index_pattern`
|
||||
});
|
||||
} catch (error) {
|
||||
return;
|
||||
}
|
||||
});
|
||||
|
|
|
@ -5,21 +5,24 @@
|
|||
*/
|
||||
import { CoreSetup } from 'src/core/server';
|
||||
import { getSavedObjectsClient } from '../helpers/saved_objects_client';
|
||||
import indexPattern from '../../../../../../src/legacy/core_plugins/kibana/server/tutorials/apm/index_pattern.json';
|
||||
import apmIndexPattern from '../../../../../../src/legacy/core_plugins/kibana/server/tutorials/apm/index_pattern.json';
|
||||
|
||||
export async function ensureIndexPatternExists(core: CoreSetup) {
|
||||
export async function getIndexPattern(core: CoreSetup) {
|
||||
const { server } = core.http;
|
||||
const config = server.config();
|
||||
const apmIndexPatternTitle = config.get('apm_oss.indexPattern');
|
||||
const savedObjectsClient = getSavedObjectsClient(server);
|
||||
const savedObjects = [
|
||||
{
|
||||
...indexPattern,
|
||||
attributes: {
|
||||
...indexPattern.attributes,
|
||||
try {
|
||||
return await savedObjectsClient.get('index-pattern', apmIndexPattern.id);
|
||||
} catch (error) {
|
||||
// if GET fails, then create a new index pattern saved object
|
||||
return await savedObjectsClient.create(
|
||||
'index-pattern',
|
||||
{
|
||||
...apmIndexPattern.attributes,
|
||||
title: apmIndexPatternTitle
|
||||
}
|
||||
}
|
||||
];
|
||||
await savedObjectsClient.bulkCreate(savedObjects, { overwrite: false });
|
||||
},
|
||||
{ id: apmIndexPattern.id, overwrite: false }
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -6,7 +6,6 @@
|
|||
|
||||
import { CoreSetup } from 'src/core/server';
|
||||
import { makeApmUsageCollector } from '../lib/apm_telemetry';
|
||||
import { ensureIndexPatternExists } from '../lib/index_pattern';
|
||||
import { CoreSetupWithUsageCollector } from '../lib/apm_telemetry/make_apm_usage_collector';
|
||||
import { initErrorsApi } from '../routes/errors';
|
||||
import { initMetricsApi } from '../routes/metrics';
|
||||
|
@ -14,6 +13,7 @@ import { initServicesApi } from '../routes/services';
|
|||
import { initTracesApi } from '../routes/traces';
|
||||
import { initTransactionGroupsApi } from '../routes/transaction_groups';
|
||||
import { initUIFiltersApi } from '../routes/ui_filters';
|
||||
import { initIndexPatternApi } from '../routes/index_pattern';
|
||||
|
||||
export class Plugin {
|
||||
public setup(core: CoreSetup) {
|
||||
|
@ -23,7 +23,7 @@ export class Plugin {
|
|||
initServicesApi(core);
|
||||
initErrorsApi(core);
|
||||
initMetricsApi(core);
|
||||
initIndexPatternApi(core);
|
||||
makeApmUsageCollector(core as CoreSetupWithUsageCollector);
|
||||
ensureIndexPatternExists(core);
|
||||
}
|
||||
}
|
||||
|
|
30
x-pack/plugins/apm/server/routes/index_pattern.ts
Normal file
30
x-pack/plugins/apm/server/routes/index_pattern.ts
Normal file
|
@ -0,0 +1,30 @@
|
|||
/*
|
||||
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
|
||||
* or more contributor license agreements. Licensed under the Elastic License;
|
||||
* you may not use this file except in compliance with the Elastic License.
|
||||
*/
|
||||
|
||||
import Boom from 'boom';
|
||||
import { CoreSetup } from 'src/core/server';
|
||||
import { getIndexPattern } from '../lib/index_pattern';
|
||||
|
||||
const ROOT = '/api/apm/index_pattern';
|
||||
const defaultErrorHandler = (err: Error & { status?: number }) => {
|
||||
// eslint-disable-next-line
|
||||
console.error(err.stack);
|
||||
throw Boom.boomify(err, { statusCode: err.status || 500 });
|
||||
};
|
||||
|
||||
export function initIndexPatternApi(core: CoreSetup) {
|
||||
const { server } = core.http;
|
||||
server.route({
|
||||
method: 'GET',
|
||||
path: ROOT,
|
||||
options: {
|
||||
tags: ['access:apm']
|
||||
},
|
||||
handler: async req => {
|
||||
return await getIndexPattern(core).catch(defaultErrorHandler);
|
||||
}
|
||||
});
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue