Auto port selection

pull/169/head
Piero Toffanin 2021-09-26 16:26:35 -04:00
rodzic 2fb254e378
commit df28ecf5fd
4 zmienionych plików z 28 dodań i 9 usunięć

Wyświetl plik

@ -9,7 +9,7 @@
"logDirectory": ""
},
"port": 3000,
"port": "auto",
"deamon": false,
"parallelQueueProcessing": 1,
"cleanupTasksAfter": 2880,

Wyświetl plik

@ -29,7 +29,7 @@ Usage: node index.js [options]
Options:
--config <path> Path to the configuration file (default: config-default.json)
-p, --port <number> Port to bind the server to (default: 3000)
-p, --port <number> Port to bind the server to, or "auto" to automatically find an available port (default: 3000)
--odm_path <path> Path to OpenDroneMap's code (default: /code)
--log_level <logLevel> Set log level verbosity (default: info)
-d, --daemon Set process to run as a deamon
@ -114,7 +114,7 @@ config.logger.maxFileSize = fromConfigFile("logger.maxFileSize", 1024 * 1024 * 1
config.logger.maxFiles = fromConfigFile("logger.maxFiles", 10); // Max number of log files kept
config.logger.logDirectory = fromConfigFile("logger.logDirectory", ''); // Set this to a full path to a directory - if not set logs will be written to the application directory.
config.port = parseInt(argv.port || argv.p || fromConfigFile("port", process.env.PORT || 3000));
config.port = (argv.port || argv.p || fromConfigFile("port", process.env.PORT || "auto"));
config.deamon = argv.deamonize || argv.daemon || argv.d || fromConfigFile("daemon", false);
config.parallelQueueProcessing = parseInt(argv.parallel_queue_processing || argv.q || fromConfigFile("parallelQueueProcessing", 1));
config.cleanupTasksAfter = parseInt(argv.cleanup_tasks_after || fromConfigFile("cleanupTasksAfter", 2880));

Wyświetl plik

@ -918,10 +918,29 @@ let commands = [
taskManager = TaskManager.singleton();
},
cb => {
server = app.listen(config.port, err => {
if (!err) logger.info('Server has started on port ' + String(config.port));
cb(err);
});
const startServer = (port, cb) => {
server = app.listen(parseInt(port), (err) => {
if (!err) logger.info('Server has started on port ' + String(port));
cb(err);
});
server.on("error", cb);
};
const tryStartServer = (port, cb) => {
startServer(port, (err) => {
if (err && err.code === 'EADDRINUSE' && port < 5000){
tryStartServer(port + 1, cb);
}else cb(err);
});
};
if (Number.isInteger(parseInt(config.port))){
startServer(config.port, cb);
}else if (config.port === "auto"){
tryStartServer(3000, cb);
}else{
cb(new Error(`Invalid port: ${config.port}`));
}
}
];
@ -934,7 +953,7 @@ if (config.powercycle) {
async.series(commands, err => {
if (err) {
logger.error("Error during startup: " + err.message);
logger.error(err.message);
process.exit(1);
}
});

Wyświetl plik

@ -21,7 +21,7 @@ const dgram = require('dgram');
module.exports = class ProgressReceiver{
constructor(){
const server = dgram.createSocket('udp4');
const server = dgram.createSocket({type: 'udp4', reuseAddr: true});
this.callbacks = [];
server.on('error', (err) => {