Improve error message from statistics_exporter

If the JSON parse failed it will usually be because Factorio returned an
error message instead of JSON, pass this along for easier debugging.
This commit is contained in:
Hornwitser committed 2019-12-29 04:44:16 +01:00
1 parent 37d8eedc0d
commit 610859eb3b
2 files changed
+24 -1

No files matched your search

+6 -1
View File
@@ -23,7 +23,12 @@ const instanceGameFlowStatistics = new Gauge(
class InstancePlugin extends plugin.BaseInstancePlugin {
async onMetrics() {
let string = await this.instance.server.sendRcon('/sc remote.call("statistics_exporter", "export")');
let stats = JSON.parse(string);
let stats;
try {
stats = JSON.parse(string);
} catch (err) {
throw new Error(`Error parsing statistics JSON: ${err.message}, content "${string}"`);
}
let instanceId = this.instance.config.id;
instanceGameTicksTotal.labels(String(instanceId)).set(stats.game_tick);
@@ -48,6 +48,24 @@ describe("statistics_exporter plugin", function() {
'7357', 'pollution_statistics', 'input', 'boiler').get(),
2000);
});
it("should pass on JSON parse errors", async function() {
let string = 'An error occured\n';
instancePlugin.instance.server.rconCommandResults.set(
'/sc remote.call("statistics_exporter", "export")', string
);
let errorMessage;
try {
JSON.parse(string);
} catch (err) {
errorMessage = err.message;
}
await assert.rejects(
instancePlugin.onMetrics(),
new Error(`Error parsing statistics JSON: ${errorMessage}, content "${string}"`)
);
});
});
});
});