summaryrefslogtreecommitdiff
path: root/src/server/api/stream
diff options
context:
space:
mode:
authorsyuilo <syuilotan@yahoo.co.jp>2019-03-10 19:16:33 +0900
committersyuilo <syuilotan@yahoo.co.jp>2019-03-10 19:16:33 +0900
commit80a2172715b6dd225a331d8f2cbccc78dcbd1302 (patch)
tree83915294feef374ae5a9baaa6754a50d549b386f /src/server/api/stream
parentImprove redis config (diff)
downloadsharkey-80a2172715b6dd225a331d8f2cbccc78dcbd1302.tar.gz
sharkey-80a2172715b6dd225a331d8f2cbccc78dcbd1302.tar.bz2
sharkey-80a2172715b6dd225a331d8f2cbccc78dcbd1302.zip
Resolve #4462
Diffstat (limited to 'src/server/api/stream')
-rw-r--r--src/server/api/stream/channels/index.ts2
-rw-r--r--src/server/api/stream/channels/queue-stats.ts41
2 files changed, 43 insertions, 0 deletions
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);
+ }
+}