import { Inject, Injectable } from '@nestjs/common'; import { Endpoint } from '@/server/api/endpoint-base.js'; import type { DbQueue, DeliverQueue, EndedPollNotificationQueue, InboxQueue, ObjectStorageQueue, SystemQueue, WebhookDeliverQueue } from '@/core/queue/QueueModule.js'; export const meta = { tags: ['admin'], requireCredential: true, requireModerator: true, res: { type: 'object', optional: false, nullable: false, properties: { deliver: { optional: false, nullable: false, ref: 'QueueCount', }, inbox: { optional: false, nullable: false, ref: 'QueueCount', }, db: { optional: false, nullable: false, ref: 'QueueCount', }, objectStorage: { optional: false, nullable: false, ref: 'QueueCount', }, }, }, } as const; export const paramDef = { type: 'object', properties: {}, required: [], } as const; // eslint-disable-next-line import/no-default-export @Injectable() export default class extends Endpoint { constructor( @Inject('queue:system') public systemQueue: SystemQueue, @Inject('queue:endedPollNotification') public endedPollNotificationQueue: EndedPollNotificationQueue, @Inject('queue:deliver') public deliverQueue: DeliverQueue, @Inject('queue:inbox') public inboxQueue: InboxQueue, @Inject('queue:db') public dbQueue: DbQueue, @Inject('queue:objectStorage') public objectStorageQueue: ObjectStorageQueue, @Inject('queue:webhookDeliver') public webhookDeliverQueue: WebhookDeliverQueue, ) { super(meta, paramDef, async (ps, me) => { const deliverJobCounts = await this.deliverQueue.getJobCounts(); const inboxJobCounts = await this.inboxQueue.getJobCounts(); const dbJobCounts = await this.dbQueue.getJobCounts(); const objectStorageJobCounts = await this.objectStorageQueue.getJobCounts(); return { deliver: deliverJobCounts, inbox: inboxJobCounts, db: dbJobCounts, objectStorage: objectStorageJobCounts, }; }); } }