feat: notes/instance/perUserNotesチャートに添付ファイル付きノートの数を追加
This commit is contained in:
parent
1da7be6334
commit
adf3493af8
9 changed files with 59 additions and 3 deletions
|
@ -14,11 +14,12 @@ You should also include the user name that made the change.
|
|||
|
||||
### Note
|
||||
このリリースはマイグレーションの規模が大きいため、インスタンスによってはマイグレーションに時間がかかる可能性があります。
|
||||
マイグレーションが終わらない場合は、チャートの情報はリセットされてしまいますが`___chart___`で始まるテーブルの**レコード**を全て削除(テーブル自体は消さないでください)してから再度試す方法もあります。
|
||||
マイグレーションが終わらない場合は、チャートの情報はリセットされてしまいますが`__chart__`で始まるテーブルの**レコード**を全て削除(テーブル自体は消さないでください)してから再度試す方法もあります。
|
||||
|
||||
### Improvements
|
||||
- チャートエンジンの強化 @syuilo
|
||||
- テーブルサイズの削減
|
||||
- notes/instance/perUserNotesチャートに添付ファイル付きノートの数を追加
|
||||
- activeUsersチャートに新しい項目を追加
|
||||
- federationチャートに新しい項目を追加
|
||||
- apRequestチャートを追加
|
||||
|
|
27
packages/backend/migration/1644328606241-chart-v12.js
Normal file
27
packages/backend/migration/1644328606241-chart-v12.js
Normal file
|
@ -0,0 +1,27 @@
|
|||
const { MigrationInterface, QueryRunner } = require("typeorm");
|
||||
|
||||
module.exports = class chartV121644328606241 {
|
||||
name = 'chartV121644328606241'
|
||||
|
||||
async up(queryRunner) {
|
||||
await queryRunner.query(`ALTER TABLE "__chart__notes" ADD "___local_diffs_withFile" integer NOT NULL DEFAULT '0'`);
|
||||
await queryRunner.query(`ALTER TABLE "__chart__notes" ADD "___remote_diffs_withFile" integer NOT NULL DEFAULT '0'`);
|
||||
await queryRunner.query(`ALTER TABLE "__chart_day__notes" ADD "___local_diffs_withFile" integer NOT NULL DEFAULT '0'`);
|
||||
await queryRunner.query(`ALTER TABLE "__chart_day__notes" ADD "___remote_diffs_withFile" integer NOT NULL DEFAULT '0'`);
|
||||
await queryRunner.query(`ALTER TABLE "__chart__instance" ADD "___notes_diffs_withFile" integer NOT NULL DEFAULT '0'`);
|
||||
await queryRunner.query(`ALTER TABLE "__chart_day__instance" ADD "___notes_diffs_withFile" integer NOT NULL DEFAULT '0'`);
|
||||
await queryRunner.query(`ALTER TABLE "__chart__per_user_notes" ADD "___diffs_withFile" smallint NOT NULL DEFAULT '0'`);
|
||||
await queryRunner.query(`ALTER TABLE "__chart_day__per_user_notes" ADD "___diffs_withFile" smallint NOT NULL DEFAULT '0'`);
|
||||
}
|
||||
|
||||
async down(queryRunner) {
|
||||
await queryRunner.query(`ALTER TABLE "__chart_day__per_user_notes" DROP COLUMN "___diffs_withFile"`);
|
||||
await queryRunner.query(`ALTER TABLE "__chart__per_user_notes" DROP COLUMN "___diffs_withFile"`);
|
||||
await queryRunner.query(`ALTER TABLE "__chart_day__instance" DROP COLUMN "___notes_diffs_withFile"`);
|
||||
await queryRunner.query(`ALTER TABLE "__chart__instance" DROP COLUMN "___notes_diffs_withFile"`);
|
||||
await queryRunner.query(`ALTER TABLE "__chart_day__notes" DROP COLUMN "___remote_diffs_withFile"`);
|
||||
await queryRunner.query(`ALTER TABLE "__chart_day__notes" DROP COLUMN "___local_diffs_withFile"`);
|
||||
await queryRunner.query(`ALTER TABLE "__chart__notes" DROP COLUMN "___remote_diffs_withFile"`);
|
||||
await queryRunner.query(`ALTER TABLE "__chart__notes" DROP COLUMN "___local_diffs_withFile"`);
|
||||
}
|
||||
}
|
|
@ -12,6 +12,7 @@ export const schema = {
|
|||
'notes.diffs.normal': {},
|
||||
'notes.diffs.reply': {},
|
||||
'notes.diffs.renote': {},
|
||||
'notes.diffs.withFile': {},
|
||||
'users.total': { accumulate: true },
|
||||
'users.inc': { range: 'small' },
|
||||
'users.dec': { range: 'small' },
|
||||
|
|
|
@ -9,12 +9,14 @@ export const schema = {
|
|||
'local.diffs.normal': {},
|
||||
'local.diffs.reply': {},
|
||||
'local.diffs.renote': {},
|
||||
'local.diffs.withFile': {},
|
||||
'remote.total': { accumulate: true },
|
||||
'remote.inc': {},
|
||||
'remote.dec': {},
|
||||
'remote.diffs.normal': {},
|
||||
'remote.diffs.reply': {},
|
||||
'remote.diffs.renote': {},
|
||||
'remote.diffs.withFile': {},
|
||||
} as const;
|
||||
|
||||
export const entity = Chart.schemaToEntity(name, schema);
|
||||
|
|
|
@ -9,6 +9,7 @@ export const schema = {
|
|||
'diffs.normal': { range: 'small' },
|
||||
'diffs.reply': { range: 'small' },
|
||||
'diffs.renote': { range: 'small' },
|
||||
'diffs.withFile': { range: 'small' },
|
||||
} as const;
|
||||
|
||||
export const entity = Chart.schemaToEntity(name, schema, true);
|
||||
|
|
|
@ -74,6 +74,7 @@ export default class InstanceChart extends Chart<typeof schema> {
|
|||
'notes.diffs.normal': note.replyId == null && note.renoteId == null ? (isAdditional ? 1 : -1) : 0,
|
||||
'notes.diffs.renote': note.renoteId != null ? (isAdditional ? 1 : -1) : 0,
|
||||
'notes.diffs.reply': note.replyId != null ? (isAdditional ? 1 : -1) : 0,
|
||||
'notes.diffs.withFile': note.fileIds.length > 0 ? (isAdditional ? 1 : -1) : 0,
|
||||
}, toPuny(host));
|
||||
}
|
||||
|
||||
|
|
|
@ -38,6 +38,7 @@ export default class NotesChart extends Chart<typeof schema> {
|
|||
[`${prefix}.diffs.normal`]: note.replyId == null && note.renoteId == null ? (isAdditional ? 1 : -1) : 0,
|
||||
[`${prefix}.diffs.renote`]: note.renoteId != null ? (isAdditional ? 1 : -1) : 0,
|
||||
[`${prefix}.diffs.reply`]: note.replyId != null ? (isAdditional ? 1 : -1) : 0,
|
||||
[`${prefix}.diffs.withFile`]: note.fileIds.length > 0 ? (isAdditional ? 1 : -1) : 0,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
@ -34,6 +34,7 @@ export default class PerUserNotesChart extends Chart<typeof schema> {
|
|||
'diffs.normal': note.replyId == null && note.renoteId == null ? (isAdditional ? 1 : -1) : 0,
|
||||
'diffs.renote': note.renoteId != null ? (isAdditional ? 1 : -1) : 0,
|
||||
'diffs.reply': note.replyId != null ? (isAdditional ? 1 : -1) : 0,
|
||||
'diffs.withFile': note.fileIds.length > 0 ? (isAdditional ? 1 : -1) : 0,
|
||||
}, user.id);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -63,9 +63,16 @@ const alpha = (hex, a) => {
|
|||
return `rgba(${r}, ${g}, ${b}, ${a})`;
|
||||
};
|
||||
|
||||
const colors = ['#008FFB', '#00E396', '#FEB019', '#FF4560', '#e300db'];
|
||||
const colors = {
|
||||
blue: '#008FFB',
|
||||
green: '#00E396',
|
||||
yellow: '#FEB019',
|
||||
red: '#FF4560',
|
||||
purple: '#e300db',
|
||||
};
|
||||
const colorSets = [colors.blue, colors.green, colors.yellow, colors.red, colors.purple];
|
||||
const getColor = (i) => {
|
||||
return colors[i % colors.length];
|
||||
return colorSets[i % colorSets.length];
|
||||
};
|
||||
|
||||
export default defineComponent({
|
||||
|
@ -251,6 +258,7 @@ export default defineComponent({
|
|||
ticks: {
|
||||
display: props.detailed,
|
||||
maxRotation: 0,
|
||||
autoSkipPadding: 16,
|
||||
},
|
||||
adapters: {
|
||||
date: {
|
||||
|
@ -268,6 +276,7 @@ export default defineComponent({
|
|||
},
|
||||
ticks: {
|
||||
display: props.detailed,
|
||||
//mirror: true,
|
||||
},
|
||||
},
|
||||
},
|
||||
|
@ -412,6 +421,7 @@ export default defineComponent({
|
|||
? sum(raw.local.inc, negate(raw.local.dec), raw.remote.inc, negate(raw.remote.dec))
|
||||
: sum(raw[type].inc, negate(raw[type].dec))
|
||||
),
|
||||
color: '#888888',
|
||||
}, {
|
||||
name: 'Renotes',
|
||||
type: 'area',
|
||||
|
@ -419,6 +429,7 @@ export default defineComponent({
|
|||
? sum(raw.local.diffs.renote, raw.remote.diffs.renote)
|
||||
: raw[type].diffs.renote
|
||||
),
|
||||
color: colors.green,
|
||||
}, {
|
||||
name: 'Replies',
|
||||
type: 'area',
|
||||
|
@ -426,6 +437,7 @@ export default defineComponent({
|
|||
? sum(raw.local.diffs.reply, raw.remote.diffs.reply)
|
||||
: raw[type].diffs.reply
|
||||
),
|
||||
color: colors.yellow,
|
||||
}, {
|
||||
name: 'Normal',
|
||||
type: 'area',
|
||||
|
@ -433,6 +445,15 @@ export default defineComponent({
|
|||
? sum(raw.local.diffs.normal, raw.remote.diffs.normal)
|
||||
: raw[type].diffs.normal
|
||||
),
|
||||
color: colors.blue,
|
||||
}, {
|
||||
name: 'With file',
|
||||
type: 'area',
|
||||
data: format(type == 'combined'
|
||||
? sum(raw.local.diffs.withFile, raw.remote.diffs.withFile)
|
||||
: raw[type].diffs.withFile
|
||||
),
|
||||
color: colors.purple,
|
||||
}],
|
||||
};
|
||||
};
|
||||
|
|
Loading…
Reference in a new issue