From 0481de6629536f7f3144321d9e4fe2144c62d7f0 Mon Sep 17 00:00:00 2001 From: syuilo Date: Sun, 19 Aug 2018 00:27:23 +0900 Subject: wip --- src/server/api/endpoints/admin/chart.ts | 97 +++++++++++++++++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 src/server/api/endpoints/admin/chart.ts (limited to 'src/server/api/endpoints/admin/chart.ts') diff --git a/src/server/api/endpoints/admin/chart.ts b/src/server/api/endpoints/admin/chart.ts new file mode 100644 index 0000000000..4ad29a7015 --- /dev/null +++ b/src/server/api/endpoints/admin/chart.ts @@ -0,0 +1,97 @@ +import Stats, { IStats } from '../../../../models/stats'; + +type Omit = Pick>; + +export const meta = { + requireCredential: true, + requireAdmin: true +}; + +export default (params: any) => new Promise(async (res, rej) => { + const now = new Date(); + const y = now.getFullYear(); + const m = now.getMonth(); + const d = now.getDate(); + + const stats = await Stats.find({ + date: { + $gt: new Date(y - 1, m, d) + } + }, { + sort: { + date: -1 + }, + fields: { + _id: 0 + } + }); + + const chart: Array> = []; + + for (let i = 364; i >= 0; i--) { + const day = new Date(y, m, d - i); + + const stat = stats.find(s => s.date.getTime() == day.getTime()); + + if (stat) { + chart.push(stat); + } else { // 隙間埋め + const mostRecent = stats.find(s => s.date.getTime() < day.getTime()); + if (mostRecent) { + chart.push(Object.assign({}, mostRecent, { + date: day + })); + } else { + chart.push({ + date: day, + users: { + local: { + total: 0, + diff: 0 + }, + remote: { + total: 0, + diff: 0 + } + }, + notes: { + local: { + total: 0, + diff: 0, + diffs: { + normal: 0, + reply: 0, + renote: 0 + } + }, + remote: { + total: 0, + diff: 0, + diffs: { + normal: 0, + reply: 0, + renote: 0 + } + } + }, + drive: { + local: { + totalCount: 0, + totalSize: 0, + diffCount: 0, + diffSize: 0 + }, + remote: { + totalCount: 0, + totalSize: 0, + diffCount: 0, + diffSize: 0 + } + } + }); + } + } + } + + res(chart); +}); -- cgit v1.2.3-freya From f59c68022ff75f2e77dd804b21f57748fcf4fdce Mon Sep 17 00:00:00 2001 From: syuilo Date: Sun, 19 Aug 2018 00:42:09 +0900 Subject: Fix bug --- .../app/desktop/views/pages/admin/admin.notes-chart.chart.vue | 8 ++++---- src/server/api/endpoints/admin/chart.ts | 10 +++++++--- 2 files changed, 11 insertions(+), 7 deletions(-) (limited to 'src/server/api/endpoints/admin/chart.ts') diff --git a/src/client/app/desktop/views/pages/admin/admin.notes-chart.chart.vue b/src/client/app/desktop/views/pages/admin/admin.notes-chart.chart.vue index 3e9462f035..83c61c1313 100644 --- a/src/client/app/desktop/views/pages/admin/admin.notes-chart.chart.vue +++ b/src/client/app/desktop/views/pages/admin/admin.notes-chart.chart.vue @@ -53,14 +53,14 @@ export default Vue.extend({ if (peak != 0) { const data = this.chart.slice().reverse().map(x => ({ normal: this.type == 'local' ? x.notes.local.diffs.normal : x.notes.remote.diffs.normal, - replies: this.type == 'local' ? x.notes.local.diffs.replies : x.notes.remote.diffs.replies, - renotes: this.type == 'local' ? x.notes.local.diffs.renotes : x.notes.remote.diffs.renotes, + reply: this.type == 'local' ? x.notes.local.diffs.reply : x.notes.remote.diffs.reply, + renote: this.type == 'local' ? x.notes.local.diffs.renote : x.notes.remote.diffs.renote, total: this.type == 'local' ? x.notes.local.diff : x.notes.remote.diff })); this.pointsNote = data.map((d, i) => `${i},${(1 - (d.normal / peak)) * this.viewBoxY}`).join(' '); - this.pointsReply = data.map((d, i) => `${i},${(1 - (d.replies / peak)) * this.viewBoxY}`).join(' '); - this.pointsRenote = data.map((d, i) => `${i},${(1 - (d.renotes / peak)) * this.viewBoxY}`).join(' '); + this.pointsReply = data.map((d, i) => `${i},${(1 - (d.reply / peak)) * this.viewBoxY}`).join(' '); + this.pointsRenote = data.map((d, i) => `${i},${(1 - (d.renote / peak)) * this.viewBoxY}`).join(' '); this.pointsTotal = data.map((d, i) => `${i},${(1 - (d.total / peak)) * this.viewBoxY}`).join(' '); } } diff --git a/src/server/api/endpoints/admin/chart.ts b/src/server/api/endpoints/admin/chart.ts index 4ad29a7015..a0566b11f5 100644 --- a/src/server/api/endpoints/admin/chart.ts +++ b/src/server/api/endpoints/admin/chart.ts @@ -34,15 +34,15 @@ export default (params: any) => new Promise(async (res, rej) => { const stat = stats.find(s => s.date.getTime() == day.getTime()); if (stat) { - chart.push(stat); + chart.unshift(stat); } else { // 隙間埋め const mostRecent = stats.find(s => s.date.getTime() < day.getTime()); if (mostRecent) { - chart.push(Object.assign({}, mostRecent, { + chart.unshift(Object.assign({}, mostRecent, { date: day })); } else { - chart.push({ + chart.unshift({ date: day, users: { local: { @@ -93,5 +93,9 @@ export default (params: any) => new Promise(async (res, rej) => { } } + chart.forEach(x => { + delete x.date; + }); + res(chart); }); -- cgit v1.2.3-freya