mirror of
				https://codeberg.org/yeentown/barkey.git
				synced 2025-11-03 23:14:13 +00:00 
			
		
		
		
	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…
	
	Add table
		
		Reference in a new issue