From 8d42e94e57b9426f122cee4ded52d9e640116502 Mon Sep 17 00:00:00 2001 From: syuilo Date: Thu, 17 Jan 2019 17:16:08 +0900 Subject: Implement active users chart Resolve #3904 --- src/chart/active-users.ts | 48 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 src/chart/active-users.ts (limited to 'src/chart') diff --git a/src/chart/active-users.ts b/src/chart/active-users.ts new file mode 100644 index 0000000000..06d9b8aa90 --- /dev/null +++ b/src/chart/active-users.ts @@ -0,0 +1,48 @@ +import autobind from 'autobind-decorator'; +import Chart, { Obj } from '.'; +import { IUser, isLocalUser } from '../models/user'; + +/** + * アクティブユーザーに関するチャート + */ +type ActiveUsersLog = { + local: { + /** + * アクティブユーザー数 + */ + count: number; + }; + + remote: ActiveUsersLog['local']; +}; + +class ActiveUsersChart extends Chart { + constructor() { + super('activeUsers'); + } + + @autobind + protected async getTemplate(init: boolean, latest?: ActiveUsersLog): Promise { + return { + local: { + count: 0 + }, + remote: { + count: 0 + } + }; + } + + @autobind + public async update(user: IUser) { + const update: Obj = { + count: 1 + }; + + await this.incIfUnique({ + [isLocalUser(user) ? 'local' : 'remote']: update + }, 'users', user._id.toHexString()); + } +} + +export default new ActiveUsersChart(); -- cgit v1.2.3-freya