diff --git a/packages/slave/src/Instance.js b/packages/slave/src/Instance.js index 1b50144b..8f1965b5 100644 --- a/packages/slave/src/Instance.js +++ b/packages/slave/src/Instance.js @@ -580,7 +580,6 @@ rcon.print(game.table_to_json(players))`.replace(/\r?\n/g, " "); * @param {String} factorioDir - Path to factorio installation. */ static async create(instanceDir, factorioDir) { - libLogging.logger.info(`Creating ${instanceDir}`); await fs.ensureDir(path.join(instanceDir, "script-output")); await fs.ensureDir(path.join(instanceDir, "saves")); } diff --git a/packages/slave/src/Slave.js b/packages/slave/src/Slave.js index f3af8dca..4bb2f14c 100644 --- a/packages/slave/src/Slave.js +++ b/packages/slave/src/Slave.js @@ -307,7 +307,7 @@ class Slave extends libLink.Link { let instanceInfo = this.instanceInfos.get(instance_id); if (instanceInfo) { instanceInfo.config.update(serialized_config, true, "master"); - logger.verbose(`Updated config for ${instanceInfo.path}`); + logger.verbose(`Updated config for ${instanceInfo.path}`, this.instanceLogMeta(instance_id, instanceInfo)); } else { instanceInfo = this.discoveredInstanceInfos.get(instance_id); @@ -320,6 +320,7 @@ class Slave extends libLink.Link { let instanceDir = await this._createNewInstanceDir(instanceConfig.get("instance.name")); + logger.info(`Creating ${instanceDir}`); await Instance.create(instanceDir, this.config.get("slave.factorio_directory")); instanceInfo = { path: instanceDir, @@ -367,6 +368,14 @@ class Slave extends libLink.Link { } } + instanceLogMeta(instanceId, instanceInfo) { + instanceInfo = instanceInfo || this.instanceInfos.get(instanceId); + if (!instanceInfo) { + return { instance_id: instanceId, instance_name: String(instanceId) }; + } + return { instance_id: instanceId, instance_name: instanceInfo.config.get("instance.name") }; + } + getRequestInstanceInfo(instanceId) { let instanceInfo = this.instanceInfos.get(instanceId); if (!instanceInfo) { @@ -427,14 +436,30 @@ class Slave extends libLink.Link { async startInstanceRequestHandler(message, request) { let instanceId = message.data.instance_id; - let instanceConnection = await this._connectInstance(instanceId); - return await request.send(instanceConnection, message.data); + try { + let instanceConnection = await this._connectInstance(instanceId); + return await request.send(instanceConnection, message.data); + } catch (err) { + if (!(err instanceof libErrors.RequestError)) { + logger.error(`Error starting instance:\n${err.stack}`, this.instanceLogMeta(instanceId)); + throw new libErrors.RequestError(err.message); + } + throw err; + } } async loadScenarioRequestHandler(message, request) { let instanceId = message.data.instance_id; - let instanceConnection = await this._connectInstance(instanceId); - return await request.send(instanceConnection, message.data); + try { + let instanceConnection = await this._connectInstance(instanceId); + return await request.send(instanceConnection, message.data); + } catch (err) { + if (!(err instanceof libErrors.RequestError)) { + logger.error(`Error starting instance:\n${err.stack}`, this.instanceLogMeta(instanceId)); + throw new libErrors.RequestError(err.message); + } + throw err; + } } async listSavesRequestHandler(message, request) { @@ -452,8 +477,16 @@ class Slave extends libLink.Link { async createSaveRequestHandler(message, request) { let instanceId = message.data.instance_id; - let instanceConnection = await this._connectInstance(instanceId); - await request.send(instanceConnection, message.data); + try { + let instanceConnection = await this._connectInstance(instanceId); + await request.send(instanceConnection, message.data); + } catch (err) { + if (!(err instanceof libErrors.RequestError)) { + logger.error(`Error creating save:\n${err.stack}`, this.instanceLogMeta(instanceId)); + throw new libErrors.RequestError(err.message); + } + throw err; + } } async renameSaveRequestHandler(message) { @@ -629,13 +662,21 @@ class Slave extends libLink.Link { url, method: "PUT", core: { ca: this.tlsCa }, data: content, - }).catch(err => logger.error(`Error pushing save to master:\n${err.stack}`)); + }).catch(err => logger.error(`Error pushing save to master:\n${err.stack}`, this.instanceLogMeta(instance_id))); } async exportDataRequestHandler(message, request) { let instanceId = message.data.instance_id; - let instanceConnection = await this._connectInstance(instanceId); - await request.send(instanceConnection, message.data); + try { + let instanceConnection = await this._connectInstance(instanceId); + await request.send(instanceConnection, message.data); + } catch (err) { + if (!(err instanceof libErrors.RequestError)) { + logger.error(`Error exporting data:\n${err.stack}`, this.instanceLogMeta(instanceId)); + throw new libErrors.RequestError(err.message); + } + throw err; + } } async stopInstance(instanceId) { @@ -691,7 +732,8 @@ class Slave extends libLink.Link { }); } catch (err) { logger.error( - `Error during auto startup for ${instanceInfo.config.get("instance.name")}:\n${err.stack}` + `Error during auto startup for ${instanceInfo.config.get("instance.name")}:\n${err.stack}`, + this.instanceLogMeta(instanceId, instanceInfo) ); } }