Skip to content

Commit 3dda0c9

Browse files
committed
return to highly optimized version, but still require beatFields only when necessary
1 parent 14e9d7c commit 3dda0c9

File tree

2 files changed

+32
-16
lines changed

2 files changed

+32
-16
lines changed

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

+3
Original file line numberDiff line numberDiff line change
@@ -748,7 +748,10 @@ describe('Index Fields', () => {
748748

749749
describe('createFieldItem', () => {
750750
test('Basic functionality', async () => {
751+
const { fieldsBeat } = await import('../../utils/beat_schema/fields');
752+
751753
const item = await createFieldItem(
754+
fieldsBeat,
752755
['auditbeat'],
753756
{
754757
name: '_id',

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

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

1718
export const securitySolutionIndexFieldsProvider = (): ISearchStrategy<
@@ -113,20 +114,19 @@ const missingFields: FieldDescriptor[] = [
113114
* @param index The index its self
114115
* @param indexesAliasIdx The index within the alias
115116
*/
116-
export const createFieldItem = async (
117+
export const createFieldItem = (
118+
beatFields: BeatFields,
117119
indexesAlias: string[],
118120
index: FieldDescriptor,
119121
indexesAliasIdx: number
120-
): Promise<IndexField> => {
121-
const { fieldsBeat } = await import('../../utils/beat_schema/fields');
122-
122+
): IndexField => {
123123
const alias = indexesAlias[indexesAliasIdx];
124124
const splitIndexName = index.name.split('.');
125125
const indexName =
126126
splitIndexName[splitIndexName.length - 1] === 'text'
127127
? splitIndexName.slice(0, splitIndexName.length - 1).join('.')
128128
: index.name;
129-
const beatIndex = fieldsBeat[indexName] ?? {};
129+
const beatIndex = beatFields[indexName] ?? {};
130130
if (isEmpty(beatIndex.category)) {
131131
beatIndex.category = splitIndexName[0];
132132
}
@@ -154,18 +154,31 @@ export const formatFirstFields = async (
154154
responsesIndexFields: FieldDescriptor[][],
155155
indexesAlias: string[]
156156
): Promise<IndexField[]> => {
157-
const result: IndexField[] = [];
158-
159-
for (const [indexesAliasIdx, indexFields] of responsesIndexFields.entries()) {
160-
for (const index of missingFields) {
161-
result.push(await createFieldItem(indexesAlias, index, indexesAliasIdx));
162-
}
163-
for (const index of indexFields) {
164-
result.push(await createFieldItem(indexesAlias, index, indexesAliasIdx));
165-
}
166-
}
157+
return new Promise((resolve) => {
158+
setTimeout(() => {
159+
// require the fields once we actually need them, rather than ahead of time, and pass
160+
// them to createFieldItem to reduce the amount of work done as much as possible
161+
// eslint-disable-next-line @typescript-eslint/no-var-requires
162+
const beatFields: BeatFields = require('../../utils/beat_schema/fields').fieldsBeat;
167163

168-
return result;
164+
resolve(
165+
responsesIndexFields.reduce(
166+
(accumulator: IndexField[], indexFields: FieldDescriptor[], indexesAliasIdx: number) => {
167+
missingFields.forEach((index) => {
168+
const item = createFieldItem(beatFields, indexesAlias, index, indexesAliasIdx);
169+
accumulator.push(item);
170+
});
171+
indexFields.forEach((index) => {
172+
const item = createFieldItem(beatFields, indexesAlias, index, indexesAliasIdx);
173+
accumulator.push(item);
174+
});
175+
return accumulator;
176+
},
177+
[]
178+
)
179+
);
180+
});
181+
});
169182
};
170183

171184
/**

0 commit comments

Comments
 (0)