Skip to content
Snippets Groups Projects
Unverified Commit a1367151 authored by syuilo's avatar syuilo
Browse files

Implement #2993

parent daa22d68
No related branches found
No related tags found
No related merge requests found
import autobind from 'autobind-decorator';
import Chart, { Obj } from '.';
/**
* フェデレーションに関するチャート
*/
type FederationLog = {
instance: {
/**
* インスタンス数の合計
*/
total: number;
/**
* 増加インスタンス数
*/
inc: number;
/**
* 減少インスタンス数
*/
dec: number;
};
};
class FederationChart extends Chart<FederationLog> {
constructor() {
super('federation');
}
@autobind
protected async getTemplate(init: boolean, latest?: FederationLog): Promise<FederationLog> {
const [total] = init ? await Promise.all([
Instance.count({})
]) : [
latest ? latest.instance.total : 0
];
return {
instance: {
total: total,
inc: 0,
dec: 0
}
};
}
@autobind
public async update(isAdditional: boolean) {
const update: Obj = {};
update.total = isAdditional ? 1 : -1;
if (isAdditional) {
update.inc = 1;
} else {
update.dec = 1;
}
await this.inc({
instance: update
});
}
}
export default new FederationChart();
import * as mongo from 'mongodb';
import db from '../db/mongodb';
const Instance = db.get<IInstance>('instances');
Instance.createIndex('host', { unique: true });
export default Instance;
export interface IInstance {
_id: mongo.ObjectID;
/**
* ホスト
*/
host: string;
/**
* このインスタンスを捕捉した日時
*/
caughtAt: Date;
/**
* このインスタンスのシステム (MastodonとかMisskeyとかPleromaとか)
*/
system: string;
/**
* このインスタンスのユーザー数
*/
usersCount: number;
/**
* このインスタンスから受け取った投稿数
*/
notesCount: number;
}
......@@ -13,6 +13,8 @@ import htmlToMFM from '../../../mfm/html-to-mfm';
import usersChart from '../../../chart/users';
import { URL } from 'url';
import { resolveNote } from './note';
import registerInstance from '../../../services/register-instance';
import Instance from '../../../models/instance';
const log = debug('misskey:activitypub');
......@@ -173,6 +175,18 @@ export async function createPerson(uri: string, resolver?: Resolver): Promise<IU
throw e;
}
// Register host
registerInstance(host).then(i => {
Instance.update({ _id: i._id }, {
$inc: {
usersCount: 1
}
});
// TODO
//perInstanceChart.newUser();
});
//#region Increment users count
Meta.update({}, {
$inc: {
......@@ -214,6 +228,7 @@ export async function createPerson(uri: string, resolver?: Resolver): Promise<IU
//#endregion
await updateFeatured(user._id).catch(err => console.log(err));
return user;
}
......
......@@ -28,6 +28,8 @@ import perUserNotesChart from '../../chart/per-user-notes';
import { erase, unique } from '../../prelude/array';
import insertNoteUnread from './unread';
import registerInstance from '../register-instance';
import Instance from '../../models/instance';
type NotificationType = 'reply' | 'renote' | 'quote' | 'mention';
......@@ -170,6 +172,20 @@ export default async (user: IUser, data: Option, silent = false) => new Promise<
notesChart.update(note, true);
perUserNotesChart.update(user, note, true);
// Register host
if (isRemoteUser(user)) {
registerInstance(user.host).then(i => {
Instance.update({ _id: i._id }, {
$inc: {
notesCount: 1
}
});
// TODO
//perInstanceChart.newNote();
});
}
// ハッシュタグ登録
tags.map(tag => registerHashtag(user, tag));
......
import Instance, { IInstance } from '../models/instance';
import federationChart from '../chart/federation';
export default async function(host: string): Promise<IInstance> {
if (host == null) return null;
const index = await Instance.findOne({ host });
if (index == null) {
const i = await Instance.insert({
host,
caughtAt: new Date(),
system: null // TODO
});
federationChart.update(true);
return i;
} else {
return index;
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment