Refactor saved query request to not set page size of 10000 (#124187)

* Update saved query service to fix expensive query

* Fix types
This commit is contained in:
Lukas Olson 2022-02-01 13:55:00 -07:00 committed by GitHub
parent ac7745ed0a
commit a8aa3bfbd7
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 35 additions and 5 deletions

View file

@ -67,9 +67,7 @@ describe('saved query service', () => {
});
const result = await getAllSavedQueries();
expect(http.post).toBeCalled();
expect(http.post).toHaveBeenCalledWith('/api/saved_query/_find', {
body: '{"perPage":10000}',
});
expect(http.post).toHaveBeenCalledWith('/api/saved_query/_all');
expect(result).toEqual([{ attributes: savedQueryAttributes }]);
});
});

View file

@ -28,8 +28,7 @@ export const createSavedQueryService = (http: HttpStart) => {
// we have to tell the saved objects client how many to fetch, otherwise it defaults to fetching 20 per page
const getAllSavedQueries = async (): Promise<SavedQuery[]> => {
const { savedQueries } = await http.post<{ savedQueries: SavedQuery[] }>(
'/api/saved_query/_find',
{ body: JSON.stringify({ perPage: 10000 }) }
'/api/saved_query/_all'
);
return savedQueries;
};

View file

@ -136,6 +136,22 @@ export function registerSavedQueryRouteHandlerContext(context: RequestHandlerCon
return { total, savedQueries };
};
const getAllSavedQueries = async () => {
const finder = context.core.savedObjects.client.createPointInTimeFinder<SavedQueryAttributes>({
type: 'query',
perPage: 100,
});
const savedObjects: Array<SavedObject<SavedQueryAttributes>> = [];
for await (const response of finder.find()) {
savedObjects.push(...(response.saved_objects ?? []));
}
await finder.close();
const savedQueries = savedObjects.map(injectReferences);
return { total: savedQueries.length, savedQueries };
};
const deleteSavedQuery = (id: string) => {
return context.core.savedObjects.client.delete('query', id);
};
@ -146,6 +162,7 @@ export function registerSavedQueryRouteHandlerContext(context: RequestHandlerCon
get: getSavedQuery,
count: getSavedQueriesCount,
find: findSavedQueries,
getAll: getAllSavedQueries,
delete: deleteSavedQuery,
};
}

View file

@ -123,6 +123,22 @@ export function registerSavedQueryRoutes({ http }: CoreSetup): void {
}
);
router.post(
{
path: `${SAVED_QUERY_PATH}/_all`,
validate: {},
},
async (context, request, response) => {
try {
const body = await context.savedQuery.getAll();
return response.ok({ body });
} catch (e) {
// TODO: Handle properly
return response.customError(e);
}
}
);
router.delete(
{
path: `${SAVED_QUERY_PATH}/{id}`,