summaryrefslogtreecommitdiff
path: root/packages
diff options
context:
space:
mode:
authorsyuilo <Syuilotan@yahoo.co.jp>2022-03-19 19:08:55 +0900
committersyuilo <Syuilotan@yahoo.co.jp>2022-03-19 19:08:55 +0900
commitcaadc0978a786f2f64aad1caa37fcd9dafff0546 (patch)
tree63bec1bd4a7fd658a61fe89ab83bce44963f5397 /packages
parentFix: "Adding email to profile ends in error" (#8405) (diff)
downloadsharkey-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.ts9
-rw-r--r--packages/backend/src/server/web/index.ts35
-rw-r--r--packages/client/src/account.ts1
-rw-r--r--packages/client/src/pages/admin/queue.vue9
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')),
}