Skip to content

Commit 937bfd5

Browse files
kibanamachinekyrachoafharo
authored
[8.x] basic enhancements for import logging (#196056) (#198634)
# Backport This will backport the following commits from `main` to `8.x`: - [basic enhancements for import logging (#196056)](#196056) <!--- Backport version: 9.4.3 --> ### Questions ? Please refer to the [Backport tool documentation](https://github.com/sqren/backport) <!--BACKPORT [{"author":{"name":"Kyra Cho","email":"wsc2119@columbia.edu"},"sourceCommit":{"committedDate":"2024-11-01T00:50:21Z","message":"basic enhancements for import logging (#196056)\n\n## Summary\r\nHello, this is a follow up PR to #192234 . The previous PR added\r\nsimplistic logging to the saved objects importer. The goal now is to\r\nenhance the logs with information on the saved objects being imported,\r\nhow they are imported, and by displaying any errors.\r\n\r\n#### `import_saved_objects.ts`:\r\n- Logs specific types being imported\r\n- Logs size limit and overwrite status\r\n- Logs Success/Fail messages\r\n\r\n#### Changes to `saved_objects_importer.ts`:\r\n- Passes the logger to `importSavedObjectsFromStream` \r\n- Removes \"starting import\"\r\n\r\n#### Changes to `import_saved_objects.test.ts`:\r\n- Updates it for the new logger parameter\r\n\r\n#### Changes to `import.test.ts`:\r\n- Uses the mock logger provided by core, instead of using a custom one\r\n\r\n### Checklist\r\n\r\n- [x] [Unit or functional\r\ntests](https://www.elastic.co/guide/en/kibana/master/development-tests.html)\r\nwere updated or added to match the most common scenarios\r\n- [ ] [Flaky Test\r\nRunner](https://ci-stats.kibana.dev/trigger_flaky_test_runner/1) was\r\nused on any tests changed\r\n\r\n### For maintainers\r\n\r\n- [ ] This was checked for breaking API changes and was [labeled\r\nappropriately](https://www.elastic.co/guide/en/kibana/master/contributing.html#_add_your_labels)\r\n- [ ] This will appear in the **Release Notes** and follow the\r\n[guidelines](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process)\r\n\r\n---------\r\n\r\nCo-authored-by: Elastic Machine <elasticmachine@users.noreply.github.com>\r\nCo-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com>\r\nCo-authored-by: Alejandro Fernández Haro <alejandro.haro@elastic.co>","sha":"45543a12a6ce7c32d0a14b45a24eccceca23d9d0","branchLabelMapping":{"^v9.0.0$":"main","^v8.17.0$":"8.x","^v(\\d+).(\\d+).\\d+$":"$1.$2"}},"sourcePullRequest":{"labels":["Feature:Saved Objects","release_note:skip","💝community","v9.0.0","backport:prev-minor","v8.17.0"],"title":"basic enhancements for import logging","number":196056,"url":"https://github.com/elastic/kibana/pull/196056","mergeCommit":{"message":"basic enhancements for import logging (#196056)\n\n## Summary\r\nHello, this is a follow up PR to #192234 . The previous PR added\r\nsimplistic logging to the saved objects importer. The goal now is to\r\nenhance the logs with information on the saved objects being imported,\r\nhow they are imported, and by displaying any errors.\r\n\r\n#### `import_saved_objects.ts`:\r\n- Logs specific types being imported\r\n- Logs size limit and overwrite status\r\n- Logs Success/Fail messages\r\n\r\n#### Changes to `saved_objects_importer.ts`:\r\n- Passes the logger to `importSavedObjectsFromStream` \r\n- Removes \"starting import\"\r\n\r\n#### Changes to `import_saved_objects.test.ts`:\r\n- Updates it for the new logger parameter\r\n\r\n#### Changes to `import.test.ts`:\r\n- Uses the mock logger provided by core, instead of using a custom one\r\n\r\n### Checklist\r\n\r\n- [x] [Unit or functional\r\ntests](https://www.elastic.co/guide/en/kibana/master/development-tests.html)\r\nwere updated or added to match the most common scenarios\r\n- [ ] [Flaky Test\r\nRunner](https://ci-stats.kibana.dev/trigger_flaky_test_runner/1) was\r\nused on any tests changed\r\n\r\n### For maintainers\r\n\r\n- [ ] This was checked for breaking API changes and was [labeled\r\nappropriately](https://www.elastic.co/guide/en/kibana/master/contributing.html#_add_your_labels)\r\n- [ ] This will appear in the **Release Notes** and follow the\r\n[guidelines](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process)\r\n\r\n---------\r\n\r\nCo-authored-by: Elastic Machine <elasticmachine@users.noreply.github.com>\r\nCo-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com>\r\nCo-authored-by: Alejandro Fernández Haro <alejandro.haro@elastic.co>","sha":"45543a12a6ce7c32d0a14b45a24eccceca23d9d0"}},"sourceBranch":"main","suggestedTargetBranches":["8.x"],"targetPullRequestStates":[{"branch":"main","label":"v9.0.0","branchLabelMappingKey":"^v9.0.0$","isSourceBranch":true,"state":"MERGED","url":"https://github.com/elastic/kibana/pull/196056","number":196056,"mergeCommit":{"message":"basic enhancements for import logging (#196056)\n\n## Summary\r\nHello, this is a follow up PR to #192234 . The previous PR added\r\nsimplistic logging to the saved objects importer. The goal now is to\r\nenhance the logs with information on the saved objects being imported,\r\nhow they are imported, and by displaying any errors.\r\n\r\n#### `import_saved_objects.ts`:\r\n- Logs specific types being imported\r\n- Logs size limit and overwrite status\r\n- Logs Success/Fail messages\r\n\r\n#### Changes to `saved_objects_importer.ts`:\r\n- Passes the logger to `importSavedObjectsFromStream` \r\n- Removes \"starting import\"\r\n\r\n#### Changes to `import_saved_objects.test.ts`:\r\n- Updates it for the new logger parameter\r\n\r\n#### Changes to `import.test.ts`:\r\n- Uses the mock logger provided by core, instead of using a custom one\r\n\r\n### Checklist\r\n\r\n- [x] [Unit or functional\r\ntests](https://www.elastic.co/guide/en/kibana/master/development-tests.html)\r\nwere updated or added to match the most common scenarios\r\n- [ ] [Flaky Test\r\nRunner](https://ci-stats.kibana.dev/trigger_flaky_test_runner/1) was\r\nused on any tests changed\r\n\r\n### For maintainers\r\n\r\n- [ ] This was checked for breaking API changes and was [labeled\r\nappropriately](https://www.elastic.co/guide/en/kibana/master/contributing.html#_add_your_labels)\r\n- [ ] This will appear in the **Release Notes** and follow the\r\n[guidelines](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process)\r\n\r\n---------\r\n\r\nCo-authored-by: Elastic Machine <elasticmachine@users.noreply.github.com>\r\nCo-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com>\r\nCo-authored-by: Alejandro Fernández Haro <alejandro.haro@elastic.co>","sha":"45543a12a6ce7c32d0a14b45a24eccceca23d9d0"}},{"branch":"8.x","label":"v8.17.0","branchLabelMappingKey":"^v8.17.0$","isSourceBranch":false,"state":"NOT_CREATED"}]}] BACKPORT--> Co-authored-by: Kyra Cho <wsc2119@columbia.edu> Co-authored-by: Alejandro Fernández Haro <alejandro.haro@elastic.co>
1 parent 8f4e766 commit 937bfd5

4 files changed

Lines changed: 30 additions & 15 deletions

File tree

packages/core/saved-objects/core-saved-objects-import-export-server-internal/src/import/import_saved_objects.test.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import {
1919
} from './import_saved_objects.test.mock';
2020

2121
import { Readable } from 'stream';
22+
import { loggerMock, type MockedLogger } from '@kbn/logging-mocks';
2223
import { v4 as uuidv4 } from 'uuid';
2324
import type {
2425
SavedObjectsImportFailure,
@@ -40,8 +41,10 @@ import {
4041
import type { ImportStateMap } from './lib';
4142

4243
describe('#importSavedObjectsFromStream', () => {
44+
let logger: MockedLogger;
4345
beforeEach(() => {
4446
jest.clearAllMocks();
47+
logger = loggerMock.create();
4548
// mock empty output of each of these mocked modules so the import doesn't throw an error
4649
mockCollectSavedObjects.mockResolvedValue({
4750
errors: [],
@@ -72,7 +75,6 @@ describe('#importSavedObjectsFromStream', () => {
7275
let savedObjectsClient: jest.Mocked<SavedObjectsClientContract>;
7376
let typeRegistry: jest.Mocked<ISavedObjectTypeRegistry>;
7477
const namespace = 'some-namespace';
75-
7678
const setupOptions = ({
7779
createNewCopies = false,
7880
getTypeImpl = (type: string) =>
@@ -102,6 +104,7 @@ describe('#importSavedObjectsFromStream', () => {
102104
createNewCopies,
103105
importHooks,
104106
managed,
107+
log: logger,
105108
};
106109
};
107110
const createObject = ({

packages/core/saved-objects/core-saved-objects-import-export-server-internal/src/import/import_saved_objects.ts

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import type {
1717
ISavedObjectTypeRegistry,
1818
SavedObjectsImportHook,
1919
} from '@kbn/core-saved-objects-server';
20+
import type { Logger } from '@kbn/logging';
2021
import {
2122
checkReferenceOrigins,
2223
validateReferences,
@@ -59,6 +60,7 @@ export interface ImportSavedObjectsOptions {
5960
* If provided, Kibana will apply the given option to the `managed` property.
6061
*/
6162
managed?: boolean;
63+
log: Logger;
6264
}
6365

6466
/**
@@ -79,7 +81,11 @@ export async function importSavedObjectsFromStream({
7981
refresh,
8082
compatibilityMode,
8183
managed,
84+
log,
8285
}: ImportSavedObjectsOptions): Promise<SavedObjectsImportResponse> {
86+
log.debug(
87+
`Importing with overwrite ${overwrite ? 'enabled' : 'disabled'} and size limit ${objectLimit}`
88+
);
8389
let errorAccumulator: SavedObjectsImportFailure[] = [];
8490
const supportedTypes = typeRegistry.getImportableAndExportableTypes().map((type) => type.name);
8591

@@ -90,6 +96,11 @@ export async function importSavedObjectsFromStream({
9096
supportedTypes,
9197
managed,
9298
});
99+
log.debug(
100+
`Importing types: ${[
101+
...new Set(collectSavedObjectsResult.collectedObjects.map((obj) => obj.type)),
102+
].join(', ')}`
103+
);
93104
errorAccumulator = [...errorAccumulator, ...collectSavedObjectsResult.errors];
94105
// Map of all IDs for objects that we are attempting to import, and any references that are not included in the read stream;
95106
// each value is empty by default
@@ -197,7 +208,17 @@ export async function importSavedObjectsFromStream({
197208
objects: createSavedObjectsResult.createdObjects,
198209
importHooks,
199210
});
200-
211+
if (errorAccumulator.length > 0) {
212+
log.error(
213+
`Failed to import saved objects. ${errorAccumulator.length} errors: ${JSON.stringify(
214+
errorAccumulator
215+
)}`
216+
);
217+
} else {
218+
log.info(
219+
`Successfully imported ${createSavedObjectsResult.createdObjects.length} saved objects.`
220+
);
221+
}
201222
return {
202223
successCount: createSavedObjectsResult.createdObjects.length,
203224
success: errorAccumulator.length === 0,

packages/core/saved-objects/core-saved-objects-import-export-server-internal/src/import/saved_objects_importer.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,6 @@ export class SavedObjectsImporter implements ISavedObjectsImporter {
6262
compatibilityMode,
6363
managed,
6464
}: SavedObjectsImportOptions): Promise<SavedObjectsImportResponse> {
65-
this.#log.debug('Starting the import process');
6665
return importSavedObjectsFromStream({
6766
readStream,
6867
createNewCopies,
@@ -75,6 +74,7 @@ export class SavedObjectsImporter implements ISavedObjectsImporter {
7574
typeRegistry: this.#typeRegistry,
7675
importHooks: this.#importHooks,
7776
managed,
77+
log: this.#log,
7878
});
7979
}
8080

src/core/server/integration_tests/saved_objects/routes/import.test.ts

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ import supertest from 'supertest';
1313
import { SavedObjectsErrorHelpers } from '@kbn/core-saved-objects-server';
1414
import { savedObjectsClientMock } from '@kbn/core-saved-objects-api-server-mocks';
1515
import type { ICoreUsageStatsClient } from '@kbn/core-usage-data-base-server-internal';
16-
import type { Logger, LogLevelId } from '@kbn/logging';
1716
import {
1817
coreUsageStatsClientMock,
1918
coreUsageDataServiceMock,
@@ -28,6 +27,7 @@ import {
2827
type InternalSavedObjectsRequestHandlerContext,
2928
} from '@kbn/core-saved-objects-server-internal';
3029
import { setupServer, createExportableType } from '@kbn/core-test-helpers-test-utils';
30+
import { loggerMock, type MockedLogger } from '@kbn/logging-mocks';
3131

3232
type SetupServerReturn = Awaited<ReturnType<typeof setupServer>>;
3333

@@ -41,6 +41,7 @@ describe(`POST ${URL}`, () => {
4141
let httpSetup: SetupServerReturn['httpSetup'];
4242
let handlerContext: SetupServerReturn['handlerContext'];
4343
let savedObjectsClient: ReturnType<typeof savedObjectsClientMock.create>;
44+
let mockLogger: MockedLogger;
4445

4546
const emptyResponse = { saved_objects: [], total: 0, per_page: 0, page: 0 };
4647
const mockIndexPattern = {
@@ -57,20 +58,10 @@ describe(`POST ${URL}`, () => {
5758
references: [],
5859
managed: false,
5960
};
60-
const mockLogger: jest.Mocked<Logger> = {
61-
debug: jest.fn(),
62-
info: jest.fn(),
63-
error: jest.fn(),
64-
warn: jest.fn(),
65-
trace: jest.fn(),
66-
fatal: jest.fn(),
67-
log: jest.fn(),
68-
isLevelEnabled: jest.fn((level: LogLevelId) => true),
69-
get: jest.fn(() => mockLogger),
70-
};
7161

7262
beforeEach(async () => {
7363
({ server, httpSetup, handlerContext } = await setupServer());
64+
mockLogger = loggerMock.create();
7465
handlerContext.savedObjects.typeRegistry.getImportableAndExportableTypes.mockReturnValue(
7566
allowedTypes.map(createExportableType)
7667
);

0 commit comments

Comments
 (0)