diff --git a/src/client/app/admin/views/queue.vue b/src/client/app/admin/views/queue.vue index fa9e3df78034302f9939ea0b8c7ee0cb67d6ac02..ae3aa0db5794637f5cca889563cf981cb22bf28d 100644 --- a/src/client/app/admin/views/queue.vue +++ b/src/client/app/admin/views/queue.vue @@ -2,6 +2,34 @@ <div> <ui-card> <template #title>{{ $t('operation') }}</template> + <section> + <header>Deliver</header> + <ui-horizon-group inputs v-if="stats"> + <ui-input :value="stats.deliver.waiting | number" type="text" readonly> + <span>Waiting</span> + </ui-input> + <ui-input :value="stats.deliver.active | number" type="text" readonly> + <span>Active</span> + </ui-input> + <ui-input :value="stats.deliver.delayed | number" type="text" readonly> + <span>Delayed</span> + </ui-input> + </ui-horizon-group> + </section> + <section> + <header>Inbox</header> + <ui-horizon-group inputs v-if="stats"> + <ui-input :value="stats.inbox.waiting | number" type="text" readonly> + <span>Waiting</span> + </ui-input> + <ui-input :value="stats.inbox.active | number" type="text" readonly> + <span>Active</span> + </ui-input> + <ui-input :value="stats.inbox.delayed | number" type="text" readonly> + <span>Delayed</span> + </ui-input> + </ui-horizon-group> + </section> <section> <ui-button @click="removeAllJobs">{{ $t('remove-all-jobs') }}</ui-button> </section> @@ -18,9 +46,16 @@ export default Vue.extend({ data() { return { + stats: null }; }, + created() { + this.$root.api('admin/queue/stats').then(stats => { + this.stats = stats; + }); + }, + methods: { async removeAllJobs() { const process = async () => { diff --git a/src/queue/index.ts b/src/queue/index.ts index d5294f8367bd67c77d8804cf75f74c5354844f7d..93b103f5dc2747410c29eaf4e25dc649ad79e087 100644 --- a/src/queue/index.ts +++ b/src/queue/index.ts @@ -21,9 +21,9 @@ function initializeQueue(name: string) { } : null); } -const deliverQueue = initializeQueue('deliver'); -const inboxQueue = initializeQueue('inbox'); -const dbQueue = initializeQueue('db'); +export const deliverQueue = initializeQueue('deliver'); +export const inboxQueue = initializeQueue('inbox'); +export const dbQueue = initializeQueue('db'); export function deliver(user: ILocalUser, content: any, to: any) { if (content == null) return null; diff --git a/src/server/api/endpoints/admin/queue/stats.ts b/src/server/api/endpoints/admin/queue/stats.ts new file mode 100644 index 0000000000000000000000000000000000000000..a90daa3989e30351e61f6538accfc11706ba4980 --- /dev/null +++ b/src/server/api/endpoints/admin/queue/stats.ts @@ -0,0 +1,21 @@ +import define from '../../../define'; +import { deliverQueue } from '../../../../../queue'; + +export const meta = { + tags: ['admin'], + + requireCredential: true, + requireModerator: true, + + params: {} +}; + +export default define(meta, async (ps) => { + const deliverJobCounts = await deliverQueue.getJobCounts(); + const inboxJobCounts = await deliverQueue.getJobCounts(); + + return { + deliver: deliverJobCounts, + inbox: inboxJobCounts + }; +});