mirror of
https://github.com/immich-app/immich.git
synced 2025-01-04 02:46:47 +01:00
54 lines
1.5 KiB
TypeScript
54 lines
1.5 KiB
TypeScript
import { CommandFactory } from 'nest-commander';
|
|
import { fork } from 'node:child_process';
|
|
import { Worker } from 'node:worker_threads';
|
|
import { ImmichAdminModule } from 'src/app.module';
|
|
import { LogLevel } from 'src/config';
|
|
import { getWorkers } from 'src/utils/workers';
|
|
const immichApp = process.argv[2] || process.env.IMMICH_APP;
|
|
|
|
if (process.argv[2] === immichApp) {
|
|
process.argv.splice(2, 1);
|
|
}
|
|
|
|
async function bootstrapImmichAdmin() {
|
|
process.env.IMMICH_LOG_LEVEL = LogLevel.WARN;
|
|
await CommandFactory.run(ImmichAdminModule);
|
|
}
|
|
|
|
function bootstrapWorker(name: string) {
|
|
console.log(`Starting ${name} worker`);
|
|
const worker = name === 'api' ? fork(`./dist/workers/${name}.js`) : new Worker(`./dist/workers/${name}.js`);
|
|
worker.on('exit', (exitCode) => {
|
|
if (exitCode !== 0) {
|
|
console.error(`${name} worker exited with code ${exitCode}`);
|
|
process.exit(exitCode);
|
|
}
|
|
});
|
|
}
|
|
|
|
function bootstrap() {
|
|
switch (immichApp) {
|
|
case 'immich-admin': {
|
|
process.title = 'immich_admin_cli';
|
|
return bootstrapImmichAdmin();
|
|
}
|
|
case 'immich': {
|
|
if (!process.env.IMMICH_WORKERS_INCLUDE) {
|
|
process.env.IMMICH_WORKERS_INCLUDE = 'api';
|
|
}
|
|
break;
|
|
}
|
|
case 'microservices': {
|
|
if (!process.env.IMMICH_WORKERS_INCLUDE) {
|
|
process.env.IMMICH_WORKERS_INCLUDE = 'microservices';
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
process.title = 'immich';
|
|
for (const worker of getWorkers()) {
|
|
bootstrapWorker(worker);
|
|
}
|
|
}
|
|
|
|
void bootstrap();
|