diff options
| author | syuilo <Syuilotan@yahoo.co.jp> | 2022-03-19 19:08:55 +0900 |
|---|---|---|
| committer | syuilo <Syuilotan@yahoo.co.jp> | 2022-03-19 19:08:55 +0900 |
| commit | caadc0978a786f2f64aad1caa37fcd9dafff0546 (patch) | |
| tree | 63bec1bd4a7fd658a61fe89ab83bce44963f5397 /packages | |
| parent | Fix: "Adding email to profile ends in error" (#8405) (diff) | |
| download | sharkey-caadc0978a786f2f64aad1caa37fcd9dafff0546.tar.gz sharkey-caadc0978a786f2f64aad1caa37fcd9dafff0546.tar.bz2 sharkey-caadc0978a786f2f64aad1caa37fcd9dafff0546.zip | |
feat: introduce bull dashboard
Diffstat (limited to 'packages')
| -rw-r--r-- | packages/backend/src/queue/queues.ts | 9 | ||||
| -rw-r--r-- | packages/backend/src/server/web/index.ts | 35 | ||||
| -rw-r--r-- | packages/client/src/account.ts | 1 | ||||
| -rw-r--r-- | packages/client/src/pages/admin/queue.vue | 9 |
4 files changed, 54 insertions, 0 deletions
diff --git a/packages/backend/src/queue/queues.ts b/packages/backend/src/queue/queues.ts index 02df587365..d612dee450 100644 --- a/packages/backend/src/queue/queues.ts +++ b/packages/backend/src/queue/queues.ts @@ -8,3 +8,12 @@ export const deliverQueue = initializeQueue<DeliverJobData>('deliver', config.de export const inboxQueue = initializeQueue<InboxJobData>('inbox', config.inboxJobPerSec || 16); export const dbQueue = initializeQueue<DbJobData>('db'); export const objectStorageQueue = initializeQueue<ObjectStorageJobData>('objectStorage'); + +export const queues = [ + systemQueue, + endedPollNotificationQueue, + deliverQueue, + inboxQueue, + dbQueue, + objectStorageQueue, +]; diff --git a/packages/backend/src/server/web/index.ts b/packages/backend/src/server/web/index.ts index cc4c2cc9ca..44c199c30c 100644 --- a/packages/backend/src/server/web/index.ts +++ b/packages/backend/src/server/web/index.ts @@ -10,6 +10,9 @@ import Router from '@koa/router'; import send from 'koa-send'; import favicon from 'koa-favicon'; import views from 'koa-views'; +import { createBullBoard } from '@bull-board/api'; +import { BullAdapter } from '@bull-board/api/bullAdapter.js'; +import { KoaAdapter } from '@bull-board/koa'; import packFeed from './feed.js'; import { fetchMeta } from '@/misc/fetch-meta.js'; @@ -20,6 +23,7 @@ import * as Acct from '@/misc/acct.js'; import { getNoteSummary } from '@/misc/get-note-summary.js'; import { urlPreviewHandler } from './url-preview.js'; import { manifestHandler } from './manifest.js'; +import { queues } from '@/queue/queues.js'; const _filename = fileURLToPath(import.meta.url); const _dirname = dirname(_filename); @@ -31,6 +35,37 @@ const assets = `${_dirname}/../../../../../built/_client_dist_/`; // Init app const app = new Koa(); +//#region Bull Dashboard +const bullBoardPath = '/queue'; + +// Authenticate +app.use(async (ctx, next) => { + if (ctx.path === bullBoardPath || ctx.path.startsWith(bullBoardPath + '/')) { + const token = ctx.cookies.get('token'); + if (token == null) { + ctx.status = 401; + return; + } + const user = await Users.findOne({ token }); + if (user == null || !(user.isAdmin || user.isModerator)) { + ctx.status = 403; + return; + } + } + await next(); +}); + +const serverAdapter = new KoaAdapter(); + +createBullBoard({ + queues: queues.map(q => new BullAdapter(q)), + serverAdapter, +}); + +serverAdapter.setBasePath(bullBoardPath); +app.use(serverAdapter.registerPlugin()); +//#endregion + // Init renderer app.use(views(_dirname + '/views', { extension: 'pug', diff --git a/packages/client/src/account.ts b/packages/client/src/account.ts index 4aeceeccab..bcc8a43be0 100644 --- a/packages/client/src/account.ts +++ b/packages/client/src/account.ts @@ -116,6 +116,7 @@ export async function login(token: Account['token'], redirect?: string) { if (_DEV_) console.log('logging as token ', token); const me = await fetchAccount(token); localStorage.setItem('account', JSON.stringify(me)); + document.cookie = `token=${token}; path=/; max-age=31536000`; // bull dashboardの認証とかで使う await addAccount(me.id, token); if (redirect) { diff --git a/packages/client/src/pages/admin/queue.vue b/packages/client/src/pages/admin/queue.vue index 522210d933..35fd618c82 100644 --- a/packages/client/src/pages/admin/queue.vue +++ b/packages/client/src/pages/admin/queue.vue @@ -17,6 +17,7 @@ import XQueue from './queue.chart.vue'; import * as os from '@/os'; import { stream } from '@/stream'; import * as symbols from '@/symbols'; +import * as config from '@/config'; export default defineComponent({ components: { @@ -32,6 +33,14 @@ export default defineComponent({ title: this.$ts.jobQueue, icon: 'fas fa-clipboard-list', bg: 'var(--bg)', + actions: [{ + asFullButton: true, + icon: 'fas fa-up-right-from-square', + text: this.$ts.dashboard, + handler: () => { + window.open(config.url + '/queue', '_blank'); + }, + }], }, connection: markRaw(stream.useChannel('queueStats')), } |