From 80a2172715b6dd225a331d8f2cbccc78dcbd1302 Mon Sep 17 00:00:00 2001 From: syuilo Date: Sun, 10 Mar 2019 19:16:33 +0900 Subject: Resolve #4462 --- src/server/api/stream/channels/index.ts | 2 ++ src/server/api/stream/channels/queue-stats.ts | 41 +++++++++++++++++++++++++++ 2 files changed, 43 insertions(+) create mode 100644 src/server/api/stream/channels/queue-stats.ts (limited to 'src/server') diff --git a/src/server/api/stream/channels/index.ts b/src/server/api/stream/channels/index.ts index 02f71b5851..4527fb1e46 100644 --- a/src/server/api/stream/channels/index.ts +++ b/src/server/api/stream/channels/index.ts @@ -5,6 +5,7 @@ import hybridTimeline from './hybrid-timeline'; import globalTimeline from './global-timeline'; import notesStats from './notes-stats'; import serverStats from './server-stats'; +import queueStats from './queue-stats'; import userList from './user-list'; import messaging from './messaging'; import messagingIndex from './messaging-index'; @@ -23,6 +24,7 @@ export default { globalTimeline, notesStats, serverStats, + queueStats, userList, messaging, messagingIndex, diff --git a/src/server/api/stream/channels/queue-stats.ts b/src/server/api/stream/channels/queue-stats.ts new file mode 100644 index 0000000000..0bda0cfcb9 --- /dev/null +++ b/src/server/api/stream/channels/queue-stats.ts @@ -0,0 +1,41 @@ +import autobind from 'autobind-decorator'; +import Xev from 'xev'; +import Channel from '../channel'; + +const ev = new Xev(); + +export default class extends Channel { + public readonly chName = 'queueStats'; + public static shouldShare = true; + public static requireCredential = false; + + @autobind + public async init(params: any) { + ev.addListener('queueStats', this.onStats); + } + + @autobind + private onStats(stats: any) { + this.send('stats', stats); + } + + @autobind + public onMessage(type: string, body: any) { + switch (type) { + case 'requestLog': + ev.once(`queueStatsLog:${body.id}`, statsLog => { + this.send('statsLog', statsLog); + }); + ev.emit('requestQueueStatsLog', { + id: body.id, + length: body.length + }); + break; + } + } + + @autobind + public dispose() { + ev.removeListener('queueStats', this.onStats); + } +} -- cgit v1.2.3-freya