From a294a881ec479b1a90b2c3ade4a160ddd2a03dac Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Fri, 24 Aug 2018 06:41:53 +0900
Subject: [PATCH] Improve chart

---
 locales/ja-JP.yml                             |  9 +++
 .../views/pages/admin/admin.chart.chart.ts    |  5 --
 .../desktop/views/pages/admin/admin.chart.vue | 76 +++++++++++++++----
 3 files changed, 70 insertions(+), 20 deletions(-)

diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml
index 31b81f1d7e..a74da8cd9a 100644
--- a/locales/ja-JP.yml
+++ b/locales/ja-JP.yml
@@ -941,6 +941,11 @@ desktop/views/pages/admin/admin.unverify-user.vue:
 
 desktop/views/pages/admin/admin.chart.vue:
   title: "チャート"
+  per-day: "1時間ごと"
+  per-hour: "1日ごと"
+  notes: "投稿"
+  users: "ユーザー"
+  drive: "ドライブ"
   local-notes: "ローカルの投稿"
   remote-notes: "リモートの投稿"
   local-notes-total: "ローカルの投稿 (累計)"
@@ -953,6 +958,10 @@ desktop/views/pages/admin/admin.chart.vue:
   remote-drive: "リモートのドライブ使用量"
   local-drive-total: "ローカルのドライブ使用量 (累計)"
   remote-drive-total: "リモートのドライブ使用量 (累計)"
+  local-drive-files: "ローカルのドライブのファイル数"
+  remote-drive-files: "リモートのドライブのファイル数"
+  local-drive-files-total: "ローカルのドライブのファイル数 (累計)"
+  remote-drive-files-total: "リモートのドライブのファイル数 (累計)"
 
 desktop/views/pages/deck/deck.tl-column.vue:
   is-media-only: "メディア投稿のみ"
diff --git a/src/client/app/desktop/views/pages/admin/admin.chart.chart.ts b/src/client/app/desktop/views/pages/admin/admin.chart.chart.ts
index 62043b21dc..d79b0ba192 100644
--- a/src/client/app/desktop/views/pages/admin/admin.chart.chart.ts
+++ b/src/client/app/desktop/views/pages/admin/admin.chart.chart.ts
@@ -26,11 +26,6 @@ export default Vue.extend({
 				scales: {
 					xAxes: [{
 						type: 'time',
-						time: {
-							displayFormats: {
-								quarter: 'YYYY/MM/D h:mm'
-							}
-						},
 						distribution: 'series'
 					}]
 				}
diff --git a/src/client/app/desktop/views/pages/admin/admin.chart.vue b/src/client/app/desktop/views/pages/admin/admin.chart.vue
index c92caeb2f0..4e0050e8b9 100644
--- a/src/client/app/desktop/views/pages/admin/admin.chart.vue
+++ b/src/client/app/desktop/views/pages/admin/admin.chart.vue
@@ -3,21 +3,31 @@
 	<header>
 		<b>%i18n:@title%:</b>
 		<select v-model="chartType">
-			<option value="local-users">%i18n:@local-users%</option>
-			<option value="remote-users">%i18n:@remote-users%</option>
-			<option value="local-users-total">%i18n:@local-users-total%</option>
-			<option value="remote-users-total">%i18n:@remote-users-total%</option>
-			<option value="local-notes">%i18n:@local-notes%</option>
-			<option value="remote-notes">%i18n:@remote-notes%</option>
-			<option value="local-notes-total">%i18n:@local-notes-total%</option>
-			<option value="remote-notes-total">%i18n:@remote-notes-total%</option>
-			<option value="local-drive">%i18n:@local-drive%</option>
-			<option value="remote-drive">%i18n:@remote-drive%</option>
-			<option value="local-drive-total">%i18n:@local-drive-total%</option>
-			<option value="remote-drive-total">%i18n:@remote-drive-total%</option>
+			<optgroup label="%i18n:@users%">
+				<option value="local-users">%i18n:@local-users%</option>
+				<option value="remote-users">%i18n:@remote-users%</option>
+				<option value="local-users-total">%i18n:@local-users-total%</option>
+				<option value="remote-users-total">%i18n:@remote-users-total%</option>
+			</optgroup>
+			<optgroup label="%i18n:@notes%">
+				<option value="local-notes">%i18n:@local-notes%</option>
+				<option value="remote-notes">%i18n:@remote-notes%</option>
+				<option value="local-notes-total">%i18n:@local-notes-total%</option>
+				<option value="remote-notes-total">%i18n:@remote-notes-total%</option>
+			</optgroup>
+			<optgroup label="%i18n:@drive%">
+				<option value="local-drive-files">%i18n:@local-drive-files%</option>
+				<option value="remote-drive-files">%i18n:@remote-drive-files%</option>
+				<option value="local-drive-files-total">%i18n:@local-drive-files-total%</option>
+				<option value="remote-drive-files-total">%i18n:@remote-drive-files-total%</option>
+				<option value="local-drive">%i18n:@local-drive%</option>
+				<option value="remote-drive">%i18n:@remote-drive%</option>
+				<option value="local-drive-total">%i18n:@local-drive-total%</option>
+				<option value="remote-drive-total">%i18n:@remote-drive-total%</option>
+			</optgroup>
 		</select>
 		<div>
-			<a @click="span = 'day'">Per DAY</a> | <a @click="span = 'hour'">Per HOUR</a>
+			<a @click="span = 'day'">%i18n:@per-day%</a> | <a @click="span = 'hour'">%i18n:@per-hour%</a>
 		</div>
 	</header>
 	<x-chart v-if="chart" :data="data[0]" :opts="data[1]" :width="720" :height="300"/>
@@ -59,6 +69,10 @@ export default Vue.extend({
 				case 'remote-drive': return this.driveChart(false, false);
 				case 'local-drive-total': return this.driveChart(true, true);
 				case 'remote-drive-total': return this.driveChart(false, true);
+				case 'local-drive-files': return this.driveFilesChart(true, false);
+				case 'remote-drive-files': return this.driveFilesChart(false, false);
+				case 'local-drive-files-total': return this.driveFilesChart(true, true);
+				case 'remote-drive-files-total': return this.driveFilesChart(false, true);
 			}
 		},
 		stats(): any[] {
@@ -76,11 +90,19 @@ export default Vue.extend({
 				normal: local ? x.notes.local.diffs.normal : x.notes.remote.diffs.normal,
 				reply: local ? x.notes.local.diffs.reply : x.notes.remote.diffs.reply,
 				renote: local ? x.notes.local.diffs.renote : x.notes.remote.diffs.renote,
-				total: local ? x.notes.local.diff : x.notes.remote.diff
+				all: local ? x.notes.local.diff : x.notes.remote.diff
 			}));
 
 			return [{
 				datasets: [{
+					label: 'All',
+					fill: false,
+					borderColor: '#555',
+					borderWidth: 2,
+					pointBackgroundColor: '#fff',
+					lineTension: 0,
+					data: data.map(x => ({ t: x.date, y: x.all }))
+				}, {
 					label: 'Normal',
 					fill: false,
 					borderColor: '#41ddde',
@@ -107,6 +129,7 @@ export default Vue.extend({
 				}]
 			}];
 		},
+
 		notesTotalChart(local: boolean): any {
 			const data = this.stats.slice().reverse().map(x => ({
 				date: new Date(x.date),
@@ -125,6 +148,7 @@ export default Vue.extend({
 				}]
 			}];
 		},
+
 		usersChart(local: boolean, total: boolean): any {
 			const data = this.stats.slice().reverse().map(x => ({
 				date: new Date(x.date),
@@ -145,6 +169,7 @@ export default Vue.extend({
 				}]
 			}];
 		},
+
 		driveChart(local: boolean, total: boolean): any {
 			const data = this.stats.slice().reverse().map(x => ({
 				date: new Date(x.date),
@@ -174,7 +199,28 @@ export default Vue.extend({
 					}]
 				}
 			}];
-		}
+		},
+
+		driveFilesChart(local: boolean, total: boolean): any {
+			const data = this.stats.slice().reverse().map(x => ({
+				date: new Date(x.date),
+				count: local ?
+					total ? x.drive.local.totalCount : x.drive.local.diffCount :
+					total ? x.drive.remote.totalCount : x.drive.remote.diffCount
+			}));
+
+			return [{
+				datasets: [{
+					label: local ? 'Local Drive Files' : 'Remote Drive Files',
+					fill: false,
+					borderColor: '#f6584f',
+					borderWidth: 2,
+					pointBackgroundColor: '#fff',
+					lineTension: 0,
+					data: data.map(x => ({ t: x.date, y: x.count }))
+				}]
+			}];
+		},
 	}
 });
 </script>