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
|
### Note
|
||||||
このリリースはマイグレーションの規模が大きいため、インスタンスによってはマイグレーションに時間がかかる可能性があります。
|
このリリースはマイグレーションの規模が大きいため、インスタンスによってはマイグレーションに時間がかかる可能性があります。
|
||||||
マイグレーションが終わらない場合は、チャートの情報はリセットされてしまいますが`___chart___`で始まるテーブルの**レコード**を全て削除(テーブル自体は消さないでください)してから再度試す方法もあります。
|
マイグレーションが終わらない場合は、チャートの情報はリセットされてしまいますが`__chart__`で始まるテーブルの**レコード**を全て削除(テーブル自体は消さないでください)してから再度試す方法もあります。
|
||||||
|
|
||||||
### Improvements
|
### Improvements
|
||||||
- チャートエンジンの強化 @syuilo
|
- チャートエンジンの強化 @syuilo
|
||||||
- テーブルサイズの削減
|
- テーブルサイズの削減
|
||||||
|
- notes/instance/perUserNotesチャートに添付ファイル付きノートの数を追加
|
||||||
- activeUsersチャートに新しい項目を追加
|
- activeUsersチャートに新しい項目を追加
|
||||||
- federationチャートに新しい項目を追加
|
- federationチャートに新しい項目を追加
|
||||||
- apRequestチャートを追加
|
- 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.normal': {},
|
||||||
'notes.diffs.reply': {},
|
'notes.diffs.reply': {},
|
||||||
'notes.diffs.renote': {},
|
'notes.diffs.renote': {},
|
||||||
|
'notes.diffs.withFile': {},
|
||||||
'users.total': { accumulate: true },
|
'users.total': { accumulate: true },
|
||||||
'users.inc': { range: 'small' },
|
'users.inc': { range: 'small' },
|
||||||
'users.dec': { range: 'small' },
|
'users.dec': { range: 'small' },
|
||||||
|
|
|
@ -9,12 +9,14 @@ export const schema = {
|
||||||
'local.diffs.normal': {},
|
'local.diffs.normal': {},
|
||||||
'local.diffs.reply': {},
|
'local.diffs.reply': {},
|
||||||
'local.diffs.renote': {},
|
'local.diffs.renote': {},
|
||||||
|
'local.diffs.withFile': {},
|
||||||
'remote.total': { accumulate: true },
|
'remote.total': { accumulate: true },
|
||||||
'remote.inc': {},
|
'remote.inc': {},
|
||||||
'remote.dec': {},
|
'remote.dec': {},
|
||||||
'remote.diffs.normal': {},
|
'remote.diffs.normal': {},
|
||||||
'remote.diffs.reply': {},
|
'remote.diffs.reply': {},
|
||||||
'remote.diffs.renote': {},
|
'remote.diffs.renote': {},
|
||||||
|
'remote.diffs.withFile': {},
|
||||||
} as const;
|
} as const;
|
||||||
|
|
||||||
export const entity = Chart.schemaToEntity(name, schema);
|
export const entity = Chart.schemaToEntity(name, schema);
|
||||||
|
|
|
@ -9,6 +9,7 @@ export const schema = {
|
||||||
'diffs.normal': { range: 'small' },
|
'diffs.normal': { range: 'small' },
|
||||||
'diffs.reply': { range: 'small' },
|
'diffs.reply': { range: 'small' },
|
||||||
'diffs.renote': { range: 'small' },
|
'diffs.renote': { range: 'small' },
|
||||||
|
'diffs.withFile': { range: 'small' },
|
||||||
} as const;
|
} as const;
|
||||||
|
|
||||||
export const entity = Chart.schemaToEntity(name, schema, true);
|
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.normal': note.replyId == null && note.renoteId == null ? (isAdditional ? 1 : -1) : 0,
|
||||||
'notes.diffs.renote': 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.reply': note.replyId != null ? (isAdditional ? 1 : -1) : 0,
|
||||||
|
'notes.diffs.withFile': note.fileIds.length > 0 ? (isAdditional ? 1 : -1) : 0,
|
||||||
}, toPuny(host));
|
}, 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.normal`]: note.replyId == null && note.renoteId == null ? (isAdditional ? 1 : -1) : 0,
|
||||||
[`${prefix}.diffs.renote`]: 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.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.normal': note.replyId == null && note.renoteId == null ? (isAdditional ? 1 : -1) : 0,
|
||||||
'diffs.renote': 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.reply': note.replyId != null ? (isAdditional ? 1 : -1) : 0,
|
||||||
|
'diffs.withFile': note.fileIds.length > 0 ? (isAdditional ? 1 : -1) : 0,
|
||||||
}, user.id);
|
}, user.id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -63,9 +63,16 @@ const alpha = (hex, a) => {
|
||||||
return `rgba(${r}, ${g}, ${b}, ${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) => {
|
const getColor = (i) => {
|
||||||
return colors[i % colors.length];
|
return colorSets[i % colorSets.length];
|
||||||
};
|
};
|
||||||
|
|
||||||
export default defineComponent({
|
export default defineComponent({
|
||||||
|
@ -251,6 +258,7 @@ export default defineComponent({
|
||||||
ticks: {
|
ticks: {
|
||||||
display: props.detailed,
|
display: props.detailed,
|
||||||
maxRotation: 0,
|
maxRotation: 0,
|
||||||
|
autoSkipPadding: 16,
|
||||||
},
|
},
|
||||||
adapters: {
|
adapters: {
|
||||||
date: {
|
date: {
|
||||||
|
@ -268,6 +276,7 @@ export default defineComponent({
|
||||||
},
|
},
|
||||||
ticks: {
|
ticks: {
|
||||||
display: props.detailed,
|
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.local.inc, negate(raw.local.dec), raw.remote.inc, negate(raw.remote.dec))
|
||||||
: sum(raw[type].inc, negate(raw[type].dec))
|
: sum(raw[type].inc, negate(raw[type].dec))
|
||||||
),
|
),
|
||||||
|
color: '#888888',
|
||||||
}, {
|
}, {
|
||||||
name: 'Renotes',
|
name: 'Renotes',
|
||||||
type: 'area',
|
type: 'area',
|
||||||
|
@ -419,6 +429,7 @@ export default defineComponent({
|
||||||
? sum(raw.local.diffs.renote, raw.remote.diffs.renote)
|
? sum(raw.local.diffs.renote, raw.remote.diffs.renote)
|
||||||
: raw[type].diffs.renote
|
: raw[type].diffs.renote
|
||||||
),
|
),
|
||||||
|
color: colors.green,
|
||||||
}, {
|
}, {
|
||||||
name: 'Replies',
|
name: 'Replies',
|
||||||
type: 'area',
|
type: 'area',
|
||||||
|
@ -426,6 +437,7 @@ export default defineComponent({
|
||||||
? sum(raw.local.diffs.reply, raw.remote.diffs.reply)
|
? sum(raw.local.diffs.reply, raw.remote.diffs.reply)
|
||||||
: raw[type].diffs.reply
|
: raw[type].diffs.reply
|
||||||
),
|
),
|
||||||
|
color: colors.yellow,
|
||||||
}, {
|
}, {
|
||||||
name: 'Normal',
|
name: 'Normal',
|
||||||
type: 'area',
|
type: 'area',
|
||||||
|
@ -433,6 +445,15 @@ export default defineComponent({
|
||||||
? sum(raw.local.diffs.normal, raw.remote.diffs.normal)
|
? sum(raw.local.diffs.normal, raw.remote.diffs.normal)
|
||||||
: raw[type].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