From db1f239a0f0f4e88c917eaf3b23880e99051582f Mon Sep 17 00:00:00 2001 From: Hornwitser Date: Mon, 9 Nov 2020 15:52:50 +0100 Subject: [PATCH] Add formatting of Script and Verbose levels Detect and colour the Script and Verbose levels. The format of the source file for the Script level is slightly different and needs an update to the output parsing. --- packages/ctl/ctl.js | 6 ++- packages/lib/factorio/server.js | 6 ++- .../src/components/InstanceViewPage.jsx | 6 ++- packages/web_ui/src/index.css | 10 +++++ test/lib/factorio/lines.js | 45 +++++++++++++++++++ 5 files changed, 69 insertions(+), 4 deletions(-) diff --git a/packages/ctl/ctl.js b/packages/ctl/ctl.js index 3966abb8..9e9e27d5 100755 --- a/packages/ctl/ctl.js +++ b/packages/ctl/ctl.js @@ -43,7 +43,11 @@ function formatOutputColored(output) { let info = ""; if (output.type === "log") { let level = output.level; - if (level === "Info") { + if (level === "Script") { + level = chalk.bold.greenBright(level); + } else if (level === "Verbose") { + level = chalk.bold.gray(level); + } else if (level === "Info") { level = chalk.bold.blueBright(level); } else if (output.level === "Warning") { level = chalk.bold.yellowBright(level); diff --git a/packages/lib/factorio/server.js b/packages/lib/factorio/server.js index 842bb1f7..658e5a15 100644 --- a/packages/lib/factorio/server.js +++ b/packages/lib/factorio/server.js @@ -318,13 +318,15 @@ function parseOutput(line, source) { // A seconds output has two different kinds of formats: The first is a // log level and source location and has a format of // "Level File.cpp:123: message" - const secLogRegex = /^(\w+) (\w+\.cpp:\d+): (.*)$/; + // "Script @/path/to/file.lua:123: message" + // "Script =(command):123: message" + const secLogRegex = /^(\w+) ((\w+\.cpp:\d+)|([@=].*?:\d+)): (.*)$/; let secLogMatch = secLogRegex.exec(secContent); if (secLogMatch) { output.type = "log"; output.level = secLogMatch[1]; output.file = secLogMatch[2]; - output.message = secLogMatch[3]; + output.message = secLogMatch[5]; // The other possibility is that the content is a generic message } else { diff --git a/packages/web_ui/src/components/InstanceViewPage.jsx b/packages/web_ui/src/components/InstanceViewPage.jsx index 91c51d33..5e0057d6 100644 --- a/packages/web_ui/src/components/InstanceViewPage.jsx +++ b/packages/web_ui/src/components/InstanceViewPage.jsx @@ -83,7 +83,11 @@ function formatOutputColored(output, key) { let info = ""; if (output.type === "log") { let level = output.level; - if (level === "Info") { + if (level === "Script") { + level = {level}; + } else if (level === "Verbose") { + level = {level}; + } else if (level === "Info") { level = {level}; } else if (output.level === "Warning") { level = {level}; diff --git a/packages/web_ui/src/index.css b/packages/web_ui/src/index.css index 246613cb..f1ad3417 100644 --- a/packages/web_ui/src/index.css +++ b/packages/web_ui/src/index.css @@ -118,6 +118,16 @@ body { color: #808080; } +.instance-console .factorio-script { + font-weight: bold; + color: #49c33c; +} + +.instance-console .factorio-verbose { + font-weight: bold; + color: #888888; +} + .instance-console .factorio-info { font-weight: bold; color: #4646ea; diff --git a/test/lib/factorio/lines.js b/test/lib/factorio/lines.js index d5ced40e..aeba4b9d 100644 --- a/test/lib/factorio/lines.js +++ b/test/lib/factorio/lines.js @@ -143,6 +143,51 @@ let testLines = new Map([ message: "Saving finished", }, ], + [ + " 1.277 Script @/srv/clusterio/instances/test/temp/currently-playing/modules/example/test.lua:7: " + + "Example log line.", + { + format: "seconds", + time: "1.277", + type: "log", + level: "Script", + file: "@/srv/clusterio/instances/test/temp/currently-playing/modules/example/test.lua:7", + message: "Example log line.", + }, + ], + [ + " 1.277 Script @C:\\My Cluster\\temp\\current-save\\file.lua:7: Contrived :12: example", + { + format: "seconds", + time: "1.277", + type: "log", + level: "Script", + file: "@C:\\My Cluster\\temp\\current-save\\file.lua:7", + message: "Contrived :12: example", + }, + ], + [ + " 344.683 Script =(command):1: test", + { + format: "seconds", + time: "344.683", + type: "log", + level: "Script", + file: "=(command):1", + message: "test", + }, + ], + [ + " 0.751 Verbose ModManager.cpp:554: Time to load mods: 0.746762", + { + format: "seconds", + time: "0.751", + type: "log", + level: "Verbose", + file: "ModManager.cpp:554", + message: "Time to load mods: 0.746762", + }, + ], ]); module.exports = {