@sync-in/server
Version:
The secure, open-source platform for file storage, sharing, collaboration, and sync
72 lines (71 loc) • 3.51 kB
JavaScript
/*
* Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>
* This file is part of Sync-in | The open source file sync and share solution
* See the LICENSE file for licensing details
*/ "use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
Object.defineProperty(exports, "AppService", {
enumerable: true,
get: function() {
return AppService;
}
});
const _common = require("@nestjs/common");
const _clusteradapter = require("@socket.io/cluster-adapter");
const _nodecluster = /*#__PURE__*/ _interop_require_default(require("node:cluster"));
const _nodeprocess = /*#__PURE__*/ _interop_require_default(require("node:process"));
const _configenvironment = require("./configuration/config.environment");
const _schedulerconstants = require("./infrastructure/scheduler/scheduler.constants");
function _interop_require_default(obj) {
return obj && obj.__esModule ? obj : {
default: obj
};
}
function _ts_decorate(decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for(var i = decorators.length - 1; i >= 0; i--)if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
}
let AppService = class AppService {
static clusterize(bootstrap) {
if (_nodecluster.default.isPrimary) {
if (_configenvironment.configuration.websocket.adapter === 'cluster') {
// setup connections between the workers
(0, _clusteradapter.setupPrimary)();
}
AppService.logger.log(`CPU cores : ${_configenvironment.configuration.server.workers}`);
AppService.logger.log(`Master server started on ${_nodeprocess.default.pid}`);
for(let i = 0; i < _configenvironment.configuration.server.workers; i++){
AppService.forkProcess(i === _configenvironment.configuration.server.workers - 1);
}
_nodecluster.default.on('exit', (worker, code, signal)=>{
AppService.logger.log(`Worker ${worker.process.pid} (code: ${code}, signal: ${signal}) died.`);
if (_configenvironment.configuration.server.restartOnFailure) {
const isScheduler = worker.process.pid === AppService.schedulerPID;
AppService.logger.log(`Restarting ${isScheduler ? `(with Scheduler)` : ''}...`);
AppService.forkProcess(isScheduler);
}
});
} else {
AppService.logger.log(`Cluster server started on ${_nodeprocess.default.pid}`);
bootstrap();
}
}
static forkProcess(isScheduler) {
const w = _nodecluster.default.fork({
[_schedulerconstants.SCHEDULER_ENV]: isScheduler ? _schedulerconstants.SCHEDULER_STATE.ENABLED : _schedulerconstants.SCHEDULER_STATE.DISABLED
});
if (isScheduler) {
AppService.schedulerPID = w.process.pid;
AppService.logger.log(`Scheduler enabled on Worker ${w.process.pid}`);
}
}
};
AppService.logger = new _common.Logger(AppService.name);
AppService = _ts_decorate([
(0, _common.Injectable)()
], AppService);
//# sourceMappingURL=app.service.js.map