From 8ada1725bfee9087aca5f633fd0799b44bcb101a Mon Sep 17 00:00:00 2001
From: MeiMei <30769358+mei23@users.noreply.github.com>
Date: Thu, 7 Nov 2019 05:41:44 +0900
Subject: [PATCH] =?UTF-8?q?=E7=AE=A1=E7=90=86=E7=94=BB=E9=9D=A2=E3=81=AE?=
 =?UTF-8?q?=E3=82=B8=E3=83=A7=E3=83=96=E3=82=AD=E3=83=A5=E3=83=BC=E4=B8=80?=
 =?UTF-8?q?=E8=A6=A7=E3=81=AE=E4=BF=AE=E6=AD=A3=20(#5586)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

* Fix: inboxのジョブキューが表示されない

* ジョブキューで試行回数等を表示するように

* DBとオブジェクトストレージのジョブキューが表示されるように
---
 src/client/app/admin/views/queue.vue         | 12 ++++++----
 src/server/api/endpoints/admin/queue/jobs.ts | 25 +++++++++++++-------
 2 files changed, 25 insertions(+), 12 deletions(-)

diff --git a/src/client/app/admin/views/queue.vue b/src/client/app/admin/views/queue.vue
index 43a41ffbe8..9aa740c68c 100644
--- a/src/client/app/admin/views/queue.vue
+++ b/src/client/app/admin/views/queue.vue
@@ -48,14 +48,15 @@
 				</ui-select>
 			</ui-horizon-group>
 			<sequential-entrance animation="entranceFromTop" delay="25">
-				<div class="xvvuvgsv" v-for="job in jobs">
+				<div class="xvvuvgsv" v-for="job in jobs" :key="job.id">
 					<b>{{ job.id }}</b>
 					<template v-if="domain === 'deliver'">
 						<span>{{ job.data.to }}</span>
 					</template>
 					<template v-if="domain === 'inbox'">
-						<span>{{ job.activity.id }}</span>
+						<span>{{ job.data.activity.id }}</span>
 					</template>
+					<span>{{ `(${job.attempts}/${job.maxAttempts}, ${Math.floor((jobsFetched - job.timestamp) / 1000 / 60)}min)` }}</span>
 				</div>
 			</sequential-entrance>
 			<ui-info v-if="jobs.length == jobsLimit">{{ $t('result-is-truncated', { n: jobsLimit }) }}</ui-info>
@@ -84,6 +85,7 @@ export default Vue.extend({
 			chartLimit: 200,
 			jobs: [],
 			jobsLimit: 50,
+			jobsFetched: Date.now(),
 			domain: 'deliver',
 			state: 'delayed',
 			faTasks, faPaperPlane, faInbox, faChartBar, faDatabase, faCloud
@@ -140,6 +142,7 @@ export default Vue.extend({
 				state: this.state,
 				limit: this.jobsLimit
 			}).then(jobs => {
+				this.jobsFetched = Date.now(),
 				this.jobs = jobs;
 			});
 		},
@@ -149,7 +152,8 @@ export default Vue.extend({
 
 <style lang="stylus" scoped>
 .xvvuvgsv
-	> b
-		margin-right 16px
+	margin-left -6px
+	> b, span
+		margin 0 6px
 
 </style>
diff --git a/src/server/api/endpoints/admin/queue/jobs.ts b/src/server/api/endpoints/admin/queue/jobs.ts
index 4e47775692..0d23ca3e57 100644
--- a/src/server/api/endpoints/admin/queue/jobs.ts
+++ b/src/server/api/endpoints/admin/queue/jobs.ts
@@ -1,6 +1,6 @@
 import $ from 'cafy';
 import define from '../../../define';
-import { deliverQueue, inboxQueue } from '../../../../../queue';
+import { deliverQueue, inboxQueue, dbQueue, objectStorageQueue } from '../../../../../queue';
 
 export const meta = {
 	tags: ['admin'],
@@ -10,11 +10,11 @@ export const meta = {
 
 	params: {
 		domain: {
-			validator: $.str,
+			validator: $.str.or(['deliver', 'inbox', 'db', 'objectStorage']),
 		},
 
 		state: {
-			validator: $.str,
+			validator: $.str.or(['active', 'waiting', 'delayed']),
 		},
 
 		limit: {
@@ -28,13 +28,22 @@ export default define(meta, async (ps) => {
 	const queue =
 		ps.domain === 'deliver' ? deliverQueue :
 		ps.domain === 'inbox' ? inboxQueue :
+		ps.domain === 'db' ? dbQueue :
+		ps.domain === 'objectStorage' ? objectStorageQueue :
 		null as never;
 
 	const jobs = await queue.getJobs([ps.state], 0, ps.limit!);
 
-	return jobs.map(job => ({
-		id: job.id,
-		data: job.data,
-		attempts: job.attemptsMade,
-	}));
+	return jobs.map(job => {
+		const data = job.data;
+		delete data.content;
+		delete data.user;
+		return {
+			id: job.id,
+			data,
+			attempts: job.attemptsMade,
+			maxAttempts: job.opts ? job.opts.attempts : 0,
+			timestamp: job.timestamp,
+		};
+	});
 });