diff --git a/.changeset/search-konstiga-fika-reglar.md b/.changeset/search-konstiga-fika-reglar.md new file mode 100644 index 0000000000..fb79a8ad6f --- /dev/null +++ b/.changeset/search-konstiga-fika-reglar.md @@ -0,0 +1,9 @@ +--- +'@backstage/plugin-adr-backend': patch +'@backstage/plugin-search-backend-module-elasticsearch': patch +'@backstage/plugin-search-backend-node': patch +'@backstage/plugin-stack-overflow-backend': patch +'@backstage/plugin-techdocs-backend': patch +--- + +In order to improve the debuggability of the search indexing process, messages logged during indexing are now tagged with a `documentType` whose value corresponds to the `type` being indexed. diff --git a/.github/vale/Vocab/Backstage/accept.txt b/.github/vale/Vocab/Backstage/accept.txt index ae94912f38..6175eb96b5 100644 --- a/.github/vale/Vocab/Backstage/accept.txt +++ b/.github/vale/Vocab/Backstage/accept.txt @@ -68,6 +68,7 @@ dataflow dayjs debounce Debounce +debuggability declaratively deduplicated deps diff --git a/plugins/adr-backend/src/search/DefaultAdrCollatorFactory.ts b/plugins/adr-backend/src/search/DefaultAdrCollatorFactory.ts index 21f0f1945f..78f6e0226e 100644 --- a/plugins/adr-backend/src/search/DefaultAdrCollatorFactory.ts +++ b/plugins/adr-backend/src/search/DefaultAdrCollatorFactory.ts @@ -113,7 +113,7 @@ export class DefaultAdrCollatorFactory implements DocumentCollatorFactory { this.catalogClient = options.catalogClient ?? new CatalogClient({ discoveryApi: options.discovery }); - this.logger = options.logger; + this.logger = options.logger.child({ documentType: this.type }); this.parser = options.parser ?? createMadrParser(); this.reader = options.reader; this.scmIntegrations = ScmIntegrations.fromConfig(options.config); diff --git a/plugins/search-backend-module-elasticsearch/src/engines/ElasticSearchSearchEngineIndexer.ts b/plugins/search-backend-module-elasticsearch/src/engines/ElasticSearchSearchEngineIndexer.ts index c81950ea41..e32c49559d 100644 --- a/plugins/search-backend-module-elasticsearch/src/engines/ElasticSearchSearchEngineIndexer.ts +++ b/plugins/search-backend-module-elasticsearch/src/engines/ElasticSearchSearchEngineIndexer.ts @@ -63,7 +63,7 @@ export class ElasticSearchSearchEngineIndexer extends BatchSearchEngineIndexer { constructor(options: ElasticSearchSearchEngineIndexerOptions) { super({ batchSize: options.batchSize }); - this.logger = options.logger; + this.logger = options.logger.child({ documentType: options.type }); this.startTimestamp = process.hrtime(); this.type = options.type; this.indexPrefix = options.indexPrefix; diff --git a/plugins/search-backend-node/src/IndexBuilder.ts b/plugins/search-backend-node/src/IndexBuilder.ts index 0ba9ba0059..907519f289 100644 --- a/plugins/search-backend-node/src/IndexBuilder.ts +++ b/plugins/search-backend-node/src/IndexBuilder.ts @@ -112,13 +112,14 @@ export class IndexBuilder { }); Object.keys(this.collators).forEach(type => { + const taskLogger = this.logger.child({ documentType: type }); scheduler.addToSchedule({ id: `search_index_${type.replace('-', '_').toLocaleLowerCase('en-US')}`, scheduledRunner: this.collators[type].schedule, task: async () => { // Instantiate the collator. const collator = await this.collators[type].factory.getCollator(); - this.logger.info( + taskLogger.info( `Collating documents for ${type} via ${this.collators[type].factory.constructor.name}`, ); @@ -128,7 +129,7 @@ export class IndexBuilder { .concat(this.decorators[type] || []) .map(async factory => { const decorator = await factory.getDecorator(); - this.logger.info( + taskLogger.info( `Attached decorator via ${factory.constructor.name} to ${type} index pipeline.`, ); return decorator; @@ -144,13 +145,13 @@ export class IndexBuilder { [collator, ...decorators, indexer], (error: NodeJS.ErrnoException | null) => { if (error) { - this.logger.error( + taskLogger.error( `Collating documents for ${type} failed: ${error}`, ); reject(error); } else { // Signal index pipeline completion! - this.logger.info(`Collating documents for ${type} succeeded`); + taskLogger.info(`Collating documents for ${type} succeeded`); resolve(); } }, diff --git a/plugins/search-backend-node/src/collators/NewlineDelimitedJsonCollatorFactory.ts b/plugins/search-backend-node/src/collators/NewlineDelimitedJsonCollatorFactory.ts index fde6b9412a..9d922aace6 100644 --- a/plugins/search-backend-node/src/collators/NewlineDelimitedJsonCollatorFactory.ts +++ b/plugins/search-backend-node/src/collators/NewlineDelimitedJsonCollatorFactory.ts @@ -93,7 +93,7 @@ export class NewlineDelimitedJsonCollatorFactory options.type, options.searchPattern, options.reader, - options.logger, + options.logger.child({ documentType: options.type }), options.visibilityPermission, ); } diff --git a/plugins/stack-overflow-backend/src/search/StackOverflowQuestionsCollatorFactory.ts b/plugins/stack-overflow-backend/src/search/StackOverflowQuestionsCollatorFactory.ts index 688f54f005..1aa0e5d300 100644 --- a/plugins/stack-overflow-backend/src/search/StackOverflowQuestionsCollatorFactory.ts +++ b/plugins/stack-overflow-backend/src/search/StackOverflowQuestionsCollatorFactory.ts @@ -76,7 +76,7 @@ export class StackOverflowQuestionsCollatorFactory this.apiKey = options.apiKey; this.maxPage = options.maxPage; this.requestParams = options.requestParams; - this.logger = options.logger; + this.logger = options.logger.child({ documentType: this.type }); } static fromConfig( diff --git a/plugins/techdocs-backend/src/search/DefaultTechDocsCollatorFactory.ts b/plugins/techdocs-backend/src/search/DefaultTechDocsCollatorFactory.ts index d458eeaba0..aaddb4fa51 100644 --- a/plugins/techdocs-backend/src/search/DefaultTechDocsCollatorFactory.ts +++ b/plugins/techdocs-backend/src/search/DefaultTechDocsCollatorFactory.ts @@ -90,7 +90,7 @@ export class DefaultTechDocsCollatorFactory implements DocumentCollatorFactory { this.discovery = options.discovery; this.locationTemplate = options.locationTemplate || '/docs/:namespace/:kind/:name/:path'; - this.logger = options.logger; + this.logger = options.logger.child({ documentType: this.type }); this.catalogClient = options.catalogClient || new CatalogClient({ discoveryApi: options.discovery });