parent
							
								
									129f652dc2
								
							
						
					
					
						commit
						a38e4b0b14
					
				
					 11 changed files with 40 additions and 47 deletions
				
			
		|  | @ -16,6 +16,8 @@ | ||||||
| - クライアント: MFM関数構文のサジェストを実装 | - クライアント: MFM関数構文のサジェストを実装 | ||||||
| - ActivityPub: HTML -> MFMの変換を強化 | - ActivityPub: HTML -> MFMの変換を強化 | ||||||
| - API: ap系のエンドポイントをログイン必須化+レートリミット追加 | - API: ap系のエンドポイントをログイン必須化+レートリミット追加 | ||||||
|  | - Misskeyのコマンドラインオプションを廃止 | ||||||
|  | 	- 代わりに環境変数で設定することができます | ||||||
| 
 | 
 | ||||||
| ### Bugfixes | ### Bugfixes | ||||||
| - Fix createDeleteAccountJob | - Fix createDeleteAccountJob | ||||||
|  |  | ||||||
|  | @ -121,7 +121,6 @@ | ||||||
| 		"chalk": "4.1.2", | 		"chalk": "4.1.2", | ||||||
| 		"chart.js": "2.9.4", | 		"chart.js": "2.9.4", | ||||||
| 		"cli-highlight": "2.1.11", | 		"cli-highlight": "2.1.11", | ||||||
| 		"commander": "4.1.1", |  | ||||||
| 		"compare-versions": "3.6.0", | 		"compare-versions": "3.6.0", | ||||||
| 		"concurrently": "6.3.0", | 		"concurrently": "6.3.0", | ||||||
| 		"content-disposition": "0.5.3", | 		"content-disposition": "0.5.3", | ||||||
|  |  | ||||||
							
								
								
									
										23
									
								
								src/argv.ts
									
										
									
									
									
								
							
							
						
						
									
										23
									
								
								src/argv.ts
									
										
									
									
									
								
							|  | @ -1,23 +0,0 @@ | ||||||
| import { Command } from 'commander'; |  | ||||||
| import config from '@/config/index'; |  | ||||||
| 
 |  | ||||||
| const program = new Command(); |  | ||||||
| 
 |  | ||||||
| program.version(config.version); |  | ||||||
| program.option('--no-daemons', 'Disable daemon processes (for debbuging)'); |  | ||||||
| program.option('--disable-clustering', 'Disable clustering'); |  | ||||||
| program.option('--only-server', 'Run server only (without job queue processing)'); |  | ||||||
| program.option('--only-queue', 'Pocessing job queue only (without server)'); |  | ||||||
| program.option('--quiet', 'Suppress all logs'); |  | ||||||
| program.option('--verbose', 'Enable all logs'); |  | ||||||
| program.option('--with-log-time', 'Include timestamp for each logs'); |  | ||||||
| program.option('--slow', 'Delay all requests (for debbuging)'); |  | ||||||
| program.option('--color', 'This option is a dummy for some external program\'s (e.g. forever) issue.'); |  | ||||||
| program.parse(process.argv); |  | ||||||
| 
 |  | ||||||
| if (process.env.MK_ONLY_QUEUE) program.onlyQueue = true; |  | ||||||
| if (process.env.NODE_ENV === 'test') program.disableClustering = true; |  | ||||||
| //if (process.env.NODE_ENV === 'test') program.quiet = true;
 |  | ||||||
| if (process.env.NODE_ENV === 'test') program.noDaemons = true; |  | ||||||
| 
 |  | ||||||
| export { program }; |  | ||||||
|  | @ -3,7 +3,7 @@ import * as chalk from 'chalk'; | ||||||
| import Xev from 'xev'; | import Xev from 'xev'; | ||||||
| 
 | 
 | ||||||
| import Logger from '@/services/logger'; | import Logger from '@/services/logger'; | ||||||
| import { program } from '../argv'; | import { envOption } from '../env'; | ||||||
| 
 | 
 | ||||||
| // for typeorm
 | // for typeorm
 | ||||||
| import 'reflect-metadata'; | import 'reflect-metadata'; | ||||||
|  | @ -20,7 +20,7 @@ const ev = new Xev(); | ||||||
| export default async function() { | export default async function() { | ||||||
| 	process.title = `Misskey (${cluster.isMaster ? 'master' : 'worker'})`; | 	process.title = `Misskey (${cluster.isMaster ? 'master' : 'worker'})`; | ||||||
| 
 | 
 | ||||||
| 	if (cluster.isMaster || program.disableClustering) { | 	if (cluster.isMaster || envOption.disableClustering) { | ||||||
| 		await masterMain(); | 		await masterMain(); | ||||||
| 
 | 
 | ||||||
| 		if (cluster.isMaster) { | 		if (cluster.isMaster) { | ||||||
|  | @ -28,7 +28,7 @@ export default async function() { | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	if (cluster.isWorker || program.disableClustering) { | 	if (cluster.isWorker || envOption.disableClustering) { | ||||||
| 		await workerMain(); | 		await workerMain(); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | @ -60,7 +60,7 @@ cluster.on('exit', worker => { | ||||||
| }); | }); | ||||||
| 
 | 
 | ||||||
| // Display detail of unhandled promise rejection
 | // Display detail of unhandled promise rejection
 | ||||||
| if (!program.quiet) { | if (!envOption.quiet) { | ||||||
| 	process.on('unhandledRejection', console.dir); | 	process.on('unhandledRejection', console.dir); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -11,7 +11,7 @@ import Logger from '@/services/logger'; | ||||||
| import loadConfig from '@/config/load'; | import loadConfig from '@/config/load'; | ||||||
| import { Config } from '@/config/types'; | import { Config } from '@/config/types'; | ||||||
| import { lessThan } from '@/prelude/array'; | import { lessThan } from '@/prelude/array'; | ||||||
| import { program } from '../argv'; | import { envOption } from '../env'; | ||||||
| import { showMachineInfo } from '@/misc/show-machine-info'; | import { showMachineInfo } from '@/misc/show-machine-info'; | ||||||
| import { initDb } from '../db/postgre'; | import { initDb } from '../db/postgre'; | ||||||
| 
 | 
 | ||||||
|  | @ -25,7 +25,7 @@ const logger = new Logger('core', 'cyan'); | ||||||
| const bootLogger = logger.createSubLogger('boot', 'magenta', false); | const bootLogger = logger.createSubLogger('boot', 'magenta', false); | ||||||
| 
 | 
 | ||||||
| function greet() { | function greet() { | ||||||
| 	if (!program.quiet) { | 	if (!envOption.quiet) { | ||||||
| 		//#region Misskey logo
 | 		//#region Misskey logo
 | ||||||
| 		const v = `v${meta.version}`; | 		const v = `v${meta.version}`; | ||||||
| 		console.log('  _____ _         _           '); | 		console.log('  _____ _         _           '); | ||||||
|  | @ -73,13 +73,13 @@ export async function masterMain() { | ||||||
| 
 | 
 | ||||||
| 	bootLogger.succ('Misskey initialized'); | 	bootLogger.succ('Misskey initialized'); | ||||||
| 
 | 
 | ||||||
| 	if (!program.disableClustering) { | 	if (!envOption.disableClustering) { | ||||||
| 		await spawnWorkers(config.clusterLimit); | 		await spawnWorkers(config.clusterLimit); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	bootLogger.succ(`Now listening on port ${config.port} on ${config.url}`, null, true); | 	bootLogger.succ(`Now listening on port ${config.port} on ${config.url}`, null, true); | ||||||
| 
 | 
 | ||||||
| 	if (!program.noDaemons) { | 	if (!envOption.noDaemons) { | ||||||
| 		require('../daemons/server-stats').default(); | 		require('../daemons/server-stats').default(); | ||||||
| 		require('../daemons/queue-stats').default(); | 		require('../daemons/queue-stats').default(); | ||||||
| 		require('../daemons/janitor').default(); | 		require('../daemons/janitor').default(); | ||||||
|  |  | ||||||
|  | @ -63,7 +63,7 @@ import { Antenna } from '@/models/entities/antenna'; | ||||||
| import { AntennaNote } from '@/models/entities/antenna-note'; | import { AntennaNote } from '@/models/entities/antenna-note'; | ||||||
| import { PromoNote } from '@/models/entities/promo-note'; | import { PromoNote } from '@/models/entities/promo-note'; | ||||||
| import { PromoRead } from '@/models/entities/promo-read'; | import { PromoRead } from '@/models/entities/promo-read'; | ||||||
| import { program } from '../argv'; | import { envOption } from '../env'; | ||||||
| import { Relay } from '@/models/entities/relay'; | import { Relay } from '@/models/entities/relay'; | ||||||
| import { MutedNote } from '@/models/entities/muted-note'; | import { MutedNote } from '@/models/entities/muted-note'; | ||||||
| import { Channel } from '@/models/entities/channel'; | import { Channel } from '@/models/entities/channel'; | ||||||
|  | @ -84,7 +84,7 @@ class MyCustomLogger implements Logger { | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	public logQuery(query: string, parameters?: any[]) { | 	public logQuery(query: string, parameters?: any[]) { | ||||||
| 		if (program.verbose) { | 		if (envOption.verbose) { | ||||||
| 			sqlLogger.info(this.highlight(query)); | 			sqlLogger.info(this.highlight(query)); | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
							
								
								
									
										20
									
								
								src/env.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								src/env.ts
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,20 @@ | ||||||
|  | const envOption = { | ||||||
|  | 	onlyQueue: false, | ||||||
|  | 	onlyServer: false, | ||||||
|  | 	noDaemons: false, | ||||||
|  | 	disableClustering: false, | ||||||
|  | 	verbose: false, | ||||||
|  | 	withLogTime: false, | ||||||
|  | 	quiet: false, | ||||||
|  | 	slow: false, | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | for (const key of Object.keys(envOption) as (keyof typeof envOption)[]) { | ||||||
|  | 	if (process.env['MK_' + key.replace(/[A-Z]/g, letter => `_${letter}`).toUpperCase()]) envOption[key] = true; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | if (process.env.NODE_ENV === 'test') envOption.disableClustering = true; | ||||||
|  | if (process.env.NODE_ENV === 'test') envOption.quiet = true; | ||||||
|  | if (process.env.NODE_ENV === 'test') envOption.noDaemons = true; | ||||||
|  | 
 | ||||||
|  | export { envOption }; | ||||||
|  | @ -1,7 +1,7 @@ | ||||||
| import * as httpSignature from 'http-signature'; | import * as httpSignature from 'http-signature'; | ||||||
| 
 | 
 | ||||||
| import config from '@/config/index'; | import config from '@/config/index'; | ||||||
| import { program } from '../argv'; | import { envOption } from '../env'; | ||||||
| 
 | 
 | ||||||
| import processDeliver from './processors/deliver'; | import processDeliver from './processors/deliver'; | ||||||
| import processInbox from './processors/inbox'; | import processInbox from './processors/inbox'; | ||||||
|  | @ -200,7 +200,7 @@ export function createCleanRemoteFilesJob() { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| export default function() { | export default function() { | ||||||
| 	if (!program.onlyServer) { | 	if (!envOption.onlyServer) { | ||||||
| 		deliverQueue.process(config.deliverJobConcurrency || 128, processDeliver); | 		deliverQueue.process(config.deliverJobConcurrency || 128, processDeliver); | ||||||
| 		inboxQueue.process(config.inboxJobConcurrency || 16, processInbox); | 		inboxQueue.process(config.inboxJobConcurrency || 16, processInbox); | ||||||
| 		processDb(dbQueue); | 		processDb(dbQueue); | ||||||
|  |  | ||||||
|  | @ -20,7 +20,7 @@ import config from '@/config/index'; | ||||||
| import apiServer from './api/index'; | import apiServer from './api/index'; | ||||||
| import { sum } from '@/prelude/array'; | import { sum } from '@/prelude/array'; | ||||||
| import Logger from '@/services/logger'; | import Logger from '@/services/logger'; | ||||||
| import { program } from '../argv'; | import { envOption } from '../env'; | ||||||
| import { UserProfiles, Users } from '@/models/index'; | import { UserProfiles, Users } from '@/models/index'; | ||||||
| import { networkChart } from '@/services/chart/index'; | import { networkChart } from '@/services/chart/index'; | ||||||
| import { genAvatar } from '@/misc/gen-avatar'; | import { genAvatar } from '@/misc/gen-avatar'; | ||||||
|  | @ -40,7 +40,7 @@ if (!['production', 'test'].includes(process.env.NODE_ENV || '')) { | ||||||
| 	})); | 	})); | ||||||
| 
 | 
 | ||||||
| 	// Delay
 | 	// Delay
 | ||||||
| 	if (program.slow) { | 	if (envOption.slow) { | ||||||
| 		app.use(slow({ | 		app.use(slow({ | ||||||
| 			delay: 3000 | 			delay: 3000 | ||||||
| 		})); | 		})); | ||||||
|  |  | ||||||
|  | @ -2,7 +2,7 @@ import * as cluster from 'cluster'; | ||||||
| import * as os from 'os'; | import * as os from 'os'; | ||||||
| import * as chalk from 'chalk'; | import * as chalk from 'chalk'; | ||||||
| import * as dateformat from 'dateformat'; | import * as dateformat from 'dateformat'; | ||||||
| import { program } from '../argv'; | import { envOption } from '../env'; | ||||||
| import { getRepository } from 'typeorm'; | import { getRepository } from 'typeorm'; | ||||||
| import { Log } from '@/models/entities/log'; | import { Log } from '@/models/entities/log'; | ||||||
| import { genId } from '@/misc/gen-id'; | import { genId } from '@/misc/gen-id'; | ||||||
|  | @ -52,7 +52,7 @@ export default class Logger { | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	private log(level: Level, message: string, data?: Record<string, any> | null, important = false, subDomains: Domain[] = [], store = true): void { | 	private log(level: Level, message: string, data?: Record<string, any> | null, important = false, subDomains: Domain[] = [], store = true): void { | ||||||
| 		if (program.quiet) return; | 		if (envOption.quiet) return; | ||||||
| 		if (!this.store) store = false; | 		if (!this.store) store = false; | ||||||
| 		if (level === 'debug') store = false; | 		if (level === 'debug') store = false; | ||||||
| 
 | 
 | ||||||
|  | @ -80,7 +80,7 @@ export default class Logger { | ||||||
| 			null; | 			null; | ||||||
| 
 | 
 | ||||||
| 		let log = `${l} ${worker}\t[${domains.join(' ')}]\t${m}`; | 		let log = `${l} ${worker}\t[${domains.join(' ')}]\t${m}`; | ||||||
| 		if (program.withLogTime) log = chalk.gray(time) + ' ' + log; | 		if (envOption.withLogTime) log = chalk.gray(time) + ' ' + log; | ||||||
| 
 | 
 | ||||||
| 		console.log(important ? chalk.bold(log) : log); | 		console.log(important ? chalk.bold(log) : log); | ||||||
| 
 | 
 | ||||||
|  | @ -132,7 +132,7 @@ export default class Logger { | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	public debug(message: string, data?: Record<string, any> | null, important = false): void { // デバッグ用に使う(開発者に必要だが利用者に不要な情報)
 | 	public debug(message: string, data?: Record<string, any> | null, important = false): void { // デバッグ用に使う(開発者に必要だが利用者に不要な情報)
 | ||||||
| 		if (process.env.NODE_ENV != 'production' || program.verbose) { | 		if (process.env.NODE_ENV != 'production' || envOption.verbose) { | ||||||
| 			this.log('debug', message, data, important); | 			this.log('debug', message, data, important); | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|  | @ -3093,11 +3093,6 @@ combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: | ||||||
|   dependencies: |   dependencies: | ||||||
|     delayed-stream "~1.0.0" |     delayed-stream "~1.0.0" | ||||||
| 
 | 
 | ||||||
| commander@4.1.1: |  | ||||||
|   version "4.1.1" |  | ||||||
|   resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" |  | ||||||
|   integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== |  | ||||||
| 
 |  | ||||||
| commander@^2.12.1, commander@^2.19.0, commander@^2.20.0: | commander@^2.12.1, commander@^2.19.0, commander@^2.20.0: | ||||||
|   version "2.20.3" |   version "2.20.3" | ||||||
|   resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" |   resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue