Skip to content

Commit

Permalink
refactor: add the bullBoardManager class along with documentation (#3798
Browse files Browse the repository at this point in the history
)
  • Loading branch information
czy88840616 committed Apr 19, 2024
1 parent 61d7894 commit fe1b619
Show file tree
Hide file tree
Showing 6 changed files with 128 additions and 6 deletions.
32 changes: 32 additions & 0 deletions packages/bull-board/src/board.manager.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
import { Singleton } from '@midwayjs/core';
import { createBullBoard } from '@bull-board/api';
import { BaseAdapter } from '@bull-board/api/dist/src/queueAdapters/base';

@Singleton()
export class BullBoardManager {
private bullBoard: ReturnType<typeof createBullBoard>;

public setBullBoard(bullBoard: ReturnType<typeof createBullBoard>) {
this.bullBoard = bullBoard;
}

public getBullBoardOrigin(): ReturnType<typeof createBullBoard> {
return this.bullBoard;
}

public addQueue(queue: BaseAdapter) {
this.bullBoard.addQueue(queue);
}

public removeQueue(queueOrName: string | BaseAdapter) {
this.bullBoard.removeQueue(queueOrName);
}

public replaceQueues(newBullQueues: readonly BaseAdapter[]) {
this.bullBoard.replaceQueues(newBullQueues);
}

public setQueues(newBullQueues: readonly BaseAdapter[]) {
this.bullBoard.setQueues(newBullQueues);
}
}
13 changes: 8 additions & 5 deletions packages/bull-board/src/board.middleware.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ import { createBullBoard } from '@bull-board/api';
import { BullAdapter } from '@bull-board/api/bullAdapter';
import { MidwayAdapter } from './adapter';
import { BullBoardOption } from './interface';
import { BullBoardManager } from './board.manager';

const MIME_MAP = {
'.html': 'text/html',
Expand All @@ -43,31 +44,33 @@ export class BoardMiddleware
implements IMiddleware<IMidwayContext, NextFunction, unknown>
{
@Inject()
framework: bull.Framework;
protected framework: bull.Framework;

@Config('bullBoard')
bullBoardConfig: BullBoardOption;
protected bullBoardConfig: BullBoardOption;

bullBoard: ReturnType<typeof createBullBoard>;
@Inject()
protected bullBoardManager: BullBoardManager;

private basePath: string;
private serverAdapter: MidwayAdapter;

@Init()
async init() {
protected async init() {
const queueList = this.framework.getQueueList();
const wrapQueues = queueList.map(queue => new BullAdapter(queue));
this.basePath = this.bullBoardConfig.basePath;

this.serverAdapter = new MidwayAdapter();
this.bullBoard = createBullBoard({
const bullBoard = createBullBoard({
queues: wrapQueues,
serverAdapter: this.serverAdapter,
options: {
uiConfig: this.bullBoardConfig.uiConfig,
},
});
this.serverAdapter.setBasePath(this.basePath);
this.bullBoardManager.setBullBoard(bullBoard);
}

resolve(app: IMidwayApplication) {
Expand Down
2 changes: 2 additions & 0 deletions packages/bull-board/src/index.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
export { BullBoardConfiguration as Configuration } from './configuration';
export * from './board.middleware';
export * from './board.manager';
export * from './interface';
export * as BullBoard from '@bull-board/api';
25 changes: 24 additions & 1 deletion packages/bull-board/test/index.test.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import { createApp, close, createHttpRequest } from '@midwayjs/mock';
import { createApp, close, createHttpRequest, createLightApp } from '@midwayjs/mock';
import { join } from 'path';
import * as bullboard from '../src';

describe(`/test/index.test.ts`, () => {
it('test ui in koa', async () => {
Expand Down Expand Up @@ -51,4 +52,26 @@ describe(`/test/index.test.ts`, () => {

await close(app);
});

it('should test bullboard manager', async () => {
const app = await createLightApp('', {
imports: [bullboard],
});
const manager = await app.getApplicationContext().getAsync(bullboard.BullBoardManager);
expect(manager).toBeDefined();
expect(manager.getBullBoardOrigin()).toBeUndefined();

// set bull board
const bullBoard = {
addQueue: () => {},
removeQueue: () => {},
replaceQueues: () => {},
setQueues: () => {},
};

manager.setBullBoard(bullBoard);
expect(manager.getBullBoardOrigin()).toBe(bullBoard);

await close(app);
});
});
30 changes: 30 additions & 0 deletions site/docs/extensions/bull.md
Original file line number Diff line number Diff line change
Expand Up @@ -798,7 +798,37 @@ export default {
}
```

此外,组件提供了 `BullBoardManager` ,可以添加动态创建的队列。

```typescript
import { Configuration, Inject } from '@midwayjs/core';
import * as bull from '@midwayjs/bull';
import * as bullBoard from '@midwayjs/bull-board';

@Configuration({
imports: [
// ...
bull,
bullBoard
]
})
export class MainConfiguration {

@Inject()
bullFramework: bull.Framework;

@Inject()
bullBoardManager: bullBoard.BullBoardManager;

async onReady() {
const testQueue = this.bullFramework.createQueue('test', {
// ...
});

this.bullBoardManager.addQueue(testQueue);
}
}
```



Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -795,6 +795,38 @@ export default {
}
```

In addition, the component provides the `BullBoardManager` class, which can add queues dynamically created.

```typescript
import { Configuration, Inject } from '@midwayjs/core';
import * as bull from '@midwayjs/bull';
import * as bullBoard from '@midwayjs/bull-board';

@Configuration({
imports: [
// ...
bull,
bullBoard
]
})
export class MainConfiguration {

@Inject()
bullFramework: bull.Framework;

@Inject()
bullBoardManager: bullBoard.BullBoardManager;

async onReady() {
const testQueue = this.bullFramework.createQueue('test', {
// ...
});

this.bullBoardManager.addQueue(testQueue);
}
}
```




Expand Down

0 comments on commit fe1b619

Please sign in to comment.