Skip to content

Commit 2dc34ac

Browse files
Spencerspalgerelasticmachine
authored
[7.x] [security solution] only import beat_schema when needed (#78708) (#79013)
Co-authored-by: spalger <[email protected]> Co-authored-by: Elastic Machine <[email protected]> Co-authored-by: spalger <[email protected]> Co-authored-by: Elastic Machine <[email protected]>
1 parent 7e8798e commit 2dc34ac

File tree

2 files changed

+18
-6
lines changed

2 files changed

+18
-6
lines changed

x-pack/plugins/security_solution/server/search_strategy/index_fields/index.test.ts

+4
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import { sortBy } from 'lodash/fp';
88

99
import { formatIndexFields, formatFirstFields, formatSecondFields, createFieldItem } from './index';
1010
import { mockAuditbeatIndexField, mockFilebeatIndexField, mockPacketbeatIndexField } from './mock';
11+
import { fieldsBeat as beatFields } from '../../utils/beat_schema/fields';
1112

1213
describe('Index Fields', () => {
1314
describe('formatIndexFields', () => {
@@ -16,6 +17,7 @@ describe('Index Fields', () => {
1617
sortBy(
1718
'name',
1819
await formatIndexFields(
20+
beatFields,
1921
[mockAuditbeatIndexField, mockFilebeatIndexField, mockPacketbeatIndexField],
2022
['auditbeat', 'filebeat', 'packetbeat']
2123
)
@@ -167,6 +169,7 @@ describe('Index Fields', () => {
167169
describe('formatFirstFields', () => {
168170
test('Basic functionality', async () => {
169171
const fields = await formatFirstFields(
172+
beatFields,
170173
[mockAuditbeatIndexField, mockFilebeatIndexField, mockPacketbeatIndexField],
171174
['auditbeat', 'filebeat', 'packetbeat']
172175
);
@@ -749,6 +752,7 @@ describe('Index Fields', () => {
749752
describe('createFieldItem', () => {
750753
test('Basic functionality', () => {
751754
const item = createFieldItem(
755+
beatFields,
752756
['auditbeat'],
753757
{
754758
name: '_id',

x-pack/plugins/security_solution/server/search_strategy/index_fields/index.ts

+14-6
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,18 @@ import {
1212
IndexFieldsStrategyResponse,
1313
IndexField,
1414
IndexFieldsStrategyRequest,
15+
BeatFields,
1516
} from '../../../common/search_strategy/index_fields';
1617

17-
import { fieldsBeat } from '../../utils/beat_schema/fields';
18-
1918
export const securitySolutionIndexFieldsProvider = (): ISearchStrategy<
2019
IndexFieldsStrategyRequest,
2120
IndexFieldsStrategyResponse
2221
> => {
22+
// require the fields once we actually need them, rather than ahead of time, and pass
23+
// them to createFieldItem to reduce the amount of work done as much as possible
24+
// eslint-disable-next-line @typescript-eslint/no-var-requires
25+
const beatFields: BeatFields = require('../../utils/beat_schema/fields').fieldsBeat;
26+
2327
return {
2428
search: async (context, request) => {
2529
const { elasticsearch } = context.core;
@@ -41,6 +45,7 @@ export const securitySolutionIndexFieldsProvider = (): ISearchStrategy<
4145

4246
if (!request.onlyCheckIfIndicesExist) {
4347
indexFields = await formatIndexFields(
48+
beatFields,
4449
responsesIndexFields.filter((rif) => rif !== false) as FieldDescriptor[][],
4550
dedupeIndices
4651
);
@@ -116,6 +121,7 @@ const missingFields: FieldDescriptor[] = [
116121
* @param indexesAliasIdx The index within the alias
117122
*/
118123
export const createFieldItem = (
124+
beatFields: BeatFields,
119125
indexesAlias: string[],
120126
index: FieldDescriptor,
121127
indexesAliasIdx: number
@@ -126,7 +132,7 @@ export const createFieldItem = (
126132
splitIndexName[splitIndexName.length - 1] === 'text'
127133
? splitIndexName.slice(0, splitIndexName.length - 1).join('.')
128134
: index.name;
129-
const beatIndex = fieldsBeat[indexName] ?? {};
135+
const beatIndex = beatFields[indexName] ?? {};
130136
if (isEmpty(beatIndex.category)) {
131137
beatIndex.category = splitIndexName[0];
132138
}
@@ -151,6 +157,7 @@ export const createFieldItem = (
151157
* @param indexesAlias The index aliases such as filebeat-*
152158
*/
153159
export const formatFirstFields = async (
160+
beatFields: BeatFields,
154161
responsesIndexFields: FieldDescriptor[][],
155162
indexesAlias: string[]
156163
): Promise<IndexField[]> => {
@@ -160,11 +167,11 @@ export const formatFirstFields = async (
160167
responsesIndexFields.reduce(
161168
(accumulator: IndexField[], indexFields: FieldDescriptor[], indexesAliasIdx: number) => {
162169
missingFields.forEach((index) => {
163-
const item = createFieldItem(indexesAlias, index, indexesAliasIdx);
170+
const item = createFieldItem(beatFields, indexesAlias, index, indexesAliasIdx);
164171
accumulator.push(item);
165172
});
166173
indexFields.forEach((index) => {
167-
const item = createFieldItem(indexesAlias, index, indexesAliasIdx);
174+
const item = createFieldItem(beatFields, indexesAlias, index, indexesAliasIdx);
168175
accumulator.push(item);
169176
});
170177
return accumulator;
@@ -224,10 +231,11 @@ export const formatSecondFields = async (fields: IndexField[]): Promise<IndexFie
224231
* @param indexesAlias The index alias
225232
*/
226233
export const formatIndexFields = async (
234+
beatFields: BeatFields,
227235
responsesIndexFields: FieldDescriptor[][],
228236
indexesAlias: string[]
229237
): Promise<IndexField[]> => {
230-
const fields = await formatFirstFields(responsesIndexFields, indexesAlias);
238+
const fields = await formatFirstFields(beatFields, responsesIndexFields, indexesAlias);
231239
const secondFields = await formatSecondFields(fields);
232240
return secondFields;
233241
};

0 commit comments

Comments
 (0)