From 6f097023fc9c5a1258f0697ea26435d468cb3a59 Mon Sep 17 00:00:00 2001 From: Brian Fletcher Date: Wed, 1 Feb 2023 15:05:48 +0000 Subject: [PATCH 1/2] keep event stream alive even if its taking a while Signed-off-by: Brian Fletcher --- .changeset/hungry-stingrays-type.md | 5 +++++ plugins/techdocs-backend/src/service/DocsSynchronizer.ts | 6 ++++++ 2 files changed, 11 insertions(+) create mode 100644 .changeset/hungry-stingrays-type.md diff --git a/.changeset/hungry-stingrays-type.md b/.changeset/hungry-stingrays-type.md new file mode 100644 index 0000000000..8cb11f67a5 --- /dev/null +++ b/.changeset/hungry-stingrays-type.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-techdocs-backend': patch +--- + +Keep the tech docs sync event stream alive even if it is taking a while to build. diff --git a/plugins/techdocs-backend/src/service/DocsSynchronizer.ts b/plugins/techdocs-backend/src/service/DocsSynchronizer.ts index 647447a612..3d89d1647f 100644 --- a/plugins/techdocs-backend/src/service/DocsSynchronizer.ts +++ b/plugins/techdocs-backend/src/service/DocsSynchronizer.ts @@ -128,7 +128,13 @@ export class DocsSynchronizer { cache: this.cache, }); + const interval = setInterval(() => { + taskLogger.info( + 'The docs building process is taking a little bit longer to process this entity. Please bear with us.', + ); + }, 10000); const updated = await this.buildLimiter(() => docsBuilder.build()); + clearInterval(interval); if (!updated) { finish({ updated: false }); From 965b0155ddbd2034b87e92260b9949f68e7ae756 Mon Sep 17 00:00:00 2001 From: Brian Fletcher Date: Thu, 9 Feb 2023 08:02:22 +0000 Subject: [PATCH 2/2] add test for sync heartbeat Signed-off-by: Brian Fletcher --- .../src/service/DocsSynchronizer.test.ts | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/plugins/techdocs-backend/src/service/DocsSynchronizer.test.ts b/plugins/techdocs-backend/src/service/DocsSynchronizer.test.ts index 1445079d12..52a3b82651 100644 --- a/plugins/techdocs-backend/src/service/DocsSynchronizer.test.ts +++ b/plugins/techdocs-backend/src/service/DocsSynchronizer.test.ts @@ -32,6 +32,7 @@ import { DocsBuilder, shouldCheckForUpdate } from '../DocsBuilder'; import { DocsSynchronizer, DocsSynchronizerSyncOpts } from './DocsSynchronizer'; jest.mock('../DocsBuilder'); +jest.useFakeTimers(); jest.mock('node-fetch', () => ({ __esModule: true, @@ -130,6 +131,8 @@ describe('DocsSynchronizer', () => { const logger = MockedDocsBuilder.mock.calls[0][0].logger; + jest.advanceTimersByTime(10001); + logger.info('Some more log'); return true; @@ -144,13 +147,19 @@ describe('DocsSynchronizer', () => { generators, }); - expect(mockResponseHandler.log).toHaveBeenCalledTimes(3); + expect(mockResponseHandler.log).toHaveBeenCalledTimes(4); expect(mockResponseHandler.log).toHaveBeenCalledWith('Some log'); expect(mockResponseHandler.log).toHaveBeenCalledWith('Another log'); expect(mockResponseHandler.log).toHaveBeenCalledWith( expect.stringMatching(/info.*Some more log/), ); + expect(mockResponseHandler.log).toHaveBeenCalledWith( + expect.stringMatching( + /info.*The docs building process is taking a little bit longer to process this entity. Please bear with us/, + ), + ); + expect(mockResponseHandler.finish).toHaveBeenCalledWith({ updated: true, });