1
0
forked from mirror/misskey
This commit is contained in:
syuilo 2018-10-22 03:30:45 +09:00
parent e24d0c40cd
commit 29fc6de330
No known key found for this signature in database
GPG Key ID: BDC4C49D06AB9D69

View File

@ -59,7 +59,7 @@ type Log<T extends Obj> = {
*/ */
abstract class Stats<T> { abstract class Stats<T> {
protected collection: ICollection<Log<T>>; protected collection: ICollection<Log<T>>;
protected abstract async getTemplate(init: boolean, latestLog?: T, group?: any): Promise<T>; protected abstract async getTemplate(init: boolean, latest?: T, group?: any): Promise<T>;
constructor(name: string) { constructor(name: string) {
this.collection = db.get<Log<T>>(`stats.${name}`); this.collection = db.get<Log<T>>(`stats.${name}`);
@ -117,7 +117,7 @@ abstract class Stats<T> {
// * 昨日何もチャートを更新するような出来事がなかった場合は、 // * 昨日何もチャートを更新するような出来事がなかった場合は、
// * 統計がそもそも作られずドキュメントが存在しないということがあり得るため、 // * 統計がそもそも作られずドキュメントが存在しないということがあり得るため、
// * 「昨日の」と決め打ちせずに「もっとも最近の」とします // * 「昨日の」と決め打ちせずに「もっとも最近の」とします
const latestLog = await this.collection.findOne({ const latest = await this.collection.findOne({
group: group, group: group,
span: span span: span
}, { }, {
@ -126,9 +126,9 @@ abstract class Stats<T> {
} }
}); });
if (latestLog) { if (latest) {
// 現在の統計を初期挿入 // 現在の統計を初期挿入
const data = await this.getTemplate(false, latestLog.data); const data = await this.getTemplate(false, latest.data);
const log = await this.collection.insert({ const log = await this.collection.insert({
group: group, group: group,
@ -316,13 +316,13 @@ class UsersStats extends Stats<UsersLog> {
} }
@autobind @autobind
protected async getTemplate(init: boolean, latestLog?: UsersLog): Promise<UsersLog> { protected async getTemplate(init: boolean, latest?: UsersLog): Promise<UsersLog> {
const [localCount, remoteCount] = init ? await Promise.all([ const [localCount, remoteCount] = init ? await Promise.all([
User.count({ host: null }), User.count({ host: null }),
User.count({ host: { $ne: null } }) User.count({ host: { $ne: null } })
]) : [ ]) : [
latestLog ? latestLog.local.total : 0, latest ? latest.local.total : 0,
latestLog ? latestLog.remote.total : 0 latest ? latest.remote.total : 0
]; ];
return { return {
@ -407,13 +407,13 @@ class NotesStats extends Stats<NotesLog> {
} }
@autobind @autobind
protected async getTemplate(init: boolean, latestLog?: NotesLog): Promise<NotesLog> { protected async getTemplate(init: boolean, latest?: NotesLog): Promise<NotesLog> {
const [localCount, remoteCount] = init ? await Promise.all([ const [localCount, remoteCount] = init ? await Promise.all([
Note.count({ '_user.host': null }), Note.count({ '_user.host': null }),
Note.count({ '_user.host': { $ne: null } }) Note.count({ '_user.host': { $ne: null } })
]) : [ ]) : [
latestLog ? latestLog.local.total : 0, latest ? latest.local.total : 0,
latestLog ? latestLog.remote.total : 0 latest ? latest.remote.total : 0
]; ];
return { return {
@ -517,7 +517,7 @@ class DriveStats extends Stats<DriveLog> {
} }
@autobind @autobind
protected async getTemplate(init: boolean, latestLog?: DriveLog): Promise<DriveLog> { protected async getTemplate(init: boolean, latest?: DriveLog): Promise<DriveLog> {
const calcSize = (local: boolean) => DriveFile const calcSize = (local: boolean) => DriveFile
.aggregate([{ .aggregate([{
$match: { $match: {
@ -542,10 +542,10 @@ class DriveStats extends Stats<DriveLog> {
calcSize(true), calcSize(true),
calcSize(false) calcSize(false)
]) : [ ]) : [
latestLog ? latestLog.local.totalCount : 0, latest ? latest.local.totalCount : 0,
latestLog ? latestLog.remote.totalCount : 0, latest ? latest.remote.totalCount : 0,
latestLog ? latestLog.local.totalSize : 0, latest ? latest.local.totalSize : 0,
latestLog ? latestLog.remote.totalSize : 0 latest ? latest.remote.totalSize : 0
]; ];
return { return {
@ -629,7 +629,7 @@ class NetworkStats extends Stats<NetworkLog> {
} }
@autobind @autobind
protected async getTemplate(init: boolean, latestLog?: NetworkLog): Promise<NetworkLog> { protected async getTemplate(init: boolean, latest?: NetworkLog): Promise<NetworkLog> {
return { return {
incomingRequests: 0, incomingRequests: 0,
outgoingRequests: 0, outgoingRequests: 0,
@ -672,7 +672,7 @@ class HashtagStats extends Stats<HashtagLog> {
} }
@autobind @autobind
protected async getTemplate(init: boolean, latestLog?: HashtagLog): Promise<HashtagLog> { protected async getTemplate(init: boolean, latest?: HashtagLog): Promise<HashtagLog> {
return { return {
count: 0 count: 0
}; };
@ -747,7 +747,7 @@ class FollowingStats extends Stats<FollowingLog> {
} }
@autobind @autobind
protected async getTemplate(init: boolean, latestLog?: FollowingLog, group?: any): Promise<FollowingLog> { protected async getTemplate(init: boolean, latest?: FollowingLog, group?: any): Promise<FollowingLog> {
const [ const [
localFollowingsCount, localFollowingsCount,
localFollowersCount, localFollowersCount,
@ -759,10 +759,10 @@ class FollowingStats extends Stats<FollowingLog> {
Following.count({ followerId: group, '_followee.host': { $ne: null } }), Following.count({ followerId: group, '_followee.host': { $ne: null } }),
Following.count({ followeeId: group, '_follower.host': { $ne: null } }) Following.count({ followeeId: group, '_follower.host': { $ne: null } })
]) : [ ]) : [
latestLog ? latestLog.local.followings.total : 0, latest ? latest.local.followings.total : 0,
latestLog ? latestLog.local.followers.total : 0, latest ? latest.local.followers.total : 0,
latestLog ? latestLog.remote.followings.total : 0, latest ? latest.remote.followings.total : 0,
latestLog ? latestLog.remote.followers.total : 0 latest ? latest.remote.followers.total : 0
]; ];
return { return {