Commit Graph
1966 Commits
Author SHA1 Message Date
Hornwitser 496ebd18a5 Put instance runtime state into InstanceInfo class
Use the data class pattern for storing the instance data on the
controller.  Improves documentation for plugins trying to use it.
2023-02-24 02:00:12 +01:00
Hornwitser 6a2aaf3d26 Merge pull request #481 from Hornwitser/rename-master-slave
Rename master/slave terminology to controller/host
2023-02-23 19:53:42 +01:00
Hornwitser 56106d41eb Add migration mode to installer
Add migration code to installer fixing the names used in configs,
logs, database, and packages to reflect the new controller/host names
for people updating from alpha-13.
2023-02-23 00:12:48 +01:00
Hornwitser a32fb81273 Bump LogIndex version
The rename means that the log index is no longer correct. Bump the
version so that its content is ignored and a new index is generated.
2023-02-23 00:12:48 +01:00
Hornwitser 10528fbb90 Allow pre-rename host tokens
Ease migration to the new controller/host naming by allowing tokens
issued to the slave naming to be authenticated by the controller.
2023-02-23 00:12:48 +01:00
Hornwitser b4259f59cf Match process title with script name
The clusteriocontroller and clusteriohost scripts don't use camelCase so
the process title set by these scripts shouldn't use it either.
2023-02-22 15:50:02 +01:00
Hornwitser 116eceaac4 Remove migration of alpha-10 single file logs
This code is no longer functional after the master/slave rename and has
served its purpose to migrate the exsting logs to the new format.
2023-02-22 15:47:19 +01:00
Hornwitser 6fc3abafd5 Rename Slave to Host
The role of a slave as a host for Factorio servers is not well reflected
in its name and has caused confusion among users.  Rename slave to host
to better reflect its role as a host of Factorio servers.
2023-02-22 15:30:51 +01:00
Hornwitser 70ad295a89 Rename Master to Controller
The role of the master server as the party controlling every part of the
cluster is not well reflected in its name and has caused confusion among
users on several occasions.  Rename master to controller to better
reflects its role.
2023-02-22 15:30:51 +01:00
Hornwitser 6ae4c8ef46 Merge pull request #480 from Hornwitser/small-things-10
Small things 10
2023-02-22 15:28:34 +01:00
Hornwitser 8662243ed1 Show which config entries requires a restart
Add a label in the web UI to config entries that require a restart to
take effect as this is not obvious to end users.
2023-02-21 22:39:23 +01:00
Hornwitser 0af1a25c93 Fix bad identifier in copy save code 2023-02-21 22:39:23 +01:00
Hornwitser 57c7e04f04 Use Summary metric for query log duration 2023-02-21 22:39:23 +01:00
Hornwitser 2960db2cca Add revoke user token action
Implement revoking of user tokens to allow lost credentials to be
invalidated.
2023-02-21 22:39:23 +01:00
Hornwitser 5426d9b2bd Log warning on mismatched slave or plugin versions
Log warning to the master log if a slave connects with a missmatched
version, missmatched plugins or missmatched plugin versions.
2023-02-21 19:35:35 +01:00
Hornwitser 17e4b088f1 Fix crash when game starts tick_paused
Check patch number in update_instance step to ensure the clusterio_api
is properly initialized if the game started tick paused and no ticks
to trigger the patch check have happened yet.
2023-02-20 17:45:10 +01:00
Hornwitser 475182efd0 Ignore techonolgy enabled status for sync
Technologies that were disabled were ignored completely by research sync
due to a missunderstanding of what disabled means.  Disabled does not
mean the tech is somehow inaccessible and completely out of play, it
only means it can't be selected in the technology screen.

Ignore the enabled status of technologies in research_sync to fix a
crash that happened when a mod enables a disabled by default technology
and the player attempts to research it.
2023-02-20 04:45:18 +01:00
Hornwitser c60abdc349 Call fsync on patching saves
Similar to 1b2a20c call fsync on the newly written patched save before
renaming it to prevent data loss in the event of a system crash.
2023-02-17 23:52:31 +01:00
Hornwitser 43e6dd60b3 Removed duplicated rejection handling
Remove code accidentally left out by the change in 50703f8.
2023-02-17 23:52:31 +01:00
Hornwitser b7b7aa737a Merge pull request #479 from Hornwitser/small-things-9
Small things 9
2023-02-16 20:15:26 +01:00
Hornwitser 1b2a20c395 Call fsync on safeOutputFile
If a system crash occurs after a simple write file + rename operation
the target file that was renamed over may end up being empty if the data
for the file written had not yet been committed to disk.  This is
possible because no part of the open file, write data to it, close it
and then rename it ensure the data was actually written to disk prior to
the rename happening. See this discussion on the btrfs wiki[1].

Fix this possible data loss scenario by calling fsync on the temporary
file that is written prior to calling close on it.

[1] https://btrfs.wiki.kernel.org/index.php/FAQ#What_are_the_crash_guarantees_of_overwrite-by-rename.3F
2023-02-16 05:19:04 +01:00
Hornwitser 50703f8ae6 Treat unhandled errors as fatal
All possible Promise rejections and exception bubbling should be handled
by either the code creating the exception or the code invoking the
operation that could fail.  Treat therefore uncaught exceptions and
unhandled promise rejetions as fatal errors that log a traceback and
immedately terminate the Node.js process.
2023-02-16 01:52:42 +01:00
Hornwitser 27633d51b6 Fix log filtering in Web UI
Remove broken alternative logFilter implementation in
web_ui/src/websocket in favour of having one proper
function in lib/logging
2023-02-16 01:22:30 +01:00
Hornwitser 4f6452c90c Fix Web UI not removing log subscriptions 2023-02-16 01:07:42 +01:00
Hornwitser 5bb10ef970 Attribute instance logged errors
Fix errors during startup and from plugins not being correctly
attributed to the instance they originate from.
2023-02-16 01:06:03 +01:00
Hornwitser 59eca88e91 Filter out instance logs from slave console
Exclude instance related logs from the slave console as these are not
significant for the running of the slave and just add noise.
2023-02-16 00:57:54 +01:00
Hornwitser bfe523ac45 Fix disabled mods still being loaded
The format of mod-list.json written on syncMods would incorrectly write
a base mod without an enableds key which is required, causing Factorio
to ignore the file entirerly.  Furthermore the enabled status was not
written causing all mods to be loaded even if they were disabled in the
mod pack.
2023-02-15 20:31:02 +01:00
Hornwitser fda2d7f574 Fix error applying factorio.settings log location
Log to the instance instead of the generic logger when an error occurs
applying a factorio.settings config entry.
2023-02-15 20:31:02 +01:00
Hornwitser 1ba091fd0e Fix WebConsoleFormat not using names
The logging format provides both the name and id of slaves and
instances.  Use the name when formatting for the web console just like
the TerminalFormat does.
2023-02-15 20:31:02 +01:00
Hornwitser 5e01f427af Fix slave crashing when Factorio server is not executable
Handle errors events emitted from the child process created by
lib/factorio/server and translate this error if it's EACCES.
2023-02-15 20:31:02 +01:00
Hornwitser 0341d41165 Fix debug dump-ws command broken by 246ce73 2023-02-15 20:31:02 +01:00
Hornwitser 082d07d718 Fix no way to unassign instances in Web UI 2023-02-15 20:31:02 +01:00
Hornwitser 2d8b35291d Fix incorrect JSDoc async return annotations
The return type of an async function should be documented as a Promise
of what the function returns as this is what JSDoc expects.
2023-02-15 20:31:02 +01:00
Hornwitser a7dedcd3b7 Trim whitespace from token login in Web UI
Prevent accidentally copying spaces before and/or after the token when
pasting it into the login form from failing to log in.
2023-02-15 20:31:02 +01:00
Hornwitser d39b525b07 Add clusterio_master_log_bytes metric
Export a metric for total size of logs stored on the master server.
2023-02-15 20:31:02 +01:00
Hornwitser 351fcba4f8 Print version on startup
Help determining what is running by printing the version that is running
on master and slave startup.
2023-02-15 20:31:02 +01:00
Hornwitser 3d186a24ff Fix incorrect handling of 0 ids
Fix tests of slave and instance ids that incorrectly return the wrong
result when the id is 0.
2023-02-15 20:31:02 +01:00
Hornwitser 5ad89f072f Replace endpointHitCounter
Track summary statistic of total HTTP response durations using a
middleware that applies for all requests instead of having every request
needing to update the hit counter manually.  Deprecates
endpointHitCounter.
2023-02-15 20:31:02 +01:00
Hornwitser 98dc0174d6 Implement basic Summary metric
Provide the basic version of Summary that does not report quantiles in
the prometheus library.  Useful for geting averages of observed values.
2023-02-15 20:31:02 +01:00
Hornwitser d29715e9ad Allow players to list users by default
The rationale for not allowing players to list users in the cluster by
default was that this would be an information disclosure of banned users
in the cluster, but given that a player is a user that can connect to a
server, and anyone that can connect to a server get the full banlist
from the server during the connection phase this does not make much
sense.  Grant permission to list users by default for players.
2023-02-15 20:31:02 +01:00
Hornwitser 58e5d96e1d Annotate error when loading module.json fails
If a plugin has an invalid module/module.json file this should also give
a readable error.
2023-02-15 20:31:02 +01:00
Hornwitser 033de0e20a Validate plugin entrypoint
Check that Master/Instance/Control plugins export the correct class and
that this class is a subclass of the correct base class.  This gives a
better user experience when plugins are incorrectly set up and loads a
duplicated clusterio/lib, and when accidentally using the wrong name
when developing plugins.
2023-02-15 20:31:02 +01:00
Hornwitser 6d7a2d46d6 Fix sorting of last seen column 2023-02-15 20:31:02 +01:00
Hornwitser bf92dde28d Merge pull request #478 from Hornwitser/mod-management
Add mod pack oriented mod management
2023-02-15 18:32:37 +01:00
Hornwitser 0eabdf011b Fix mod loading tests 2023-02-02 01:07:33 +01:00
Hornwitser 91af66e2db Fix export when default mod pack is used 2023-02-02 01:07:08 +01:00
Hornwitser 8db1b48691 Fix export for mods with uncommon root directory
The directory which all files are placed under in a mod is commonly
named <mod-name>_<mod-version>, but this is not a requirement as it can
be named anything.  Fix code incorrectly assuming the zipped mod's root
folder follows this pattern during data export.
2023-02-02 00:28:58 +01:00
Hornwitser 3f6a7e4336 Format mod settings with prototypes and locale in web UI
Use exported settings prototypes and locale to format the settings UI to
with mod names, settings names, and select dropdowns.  This is a crude
approximation of how the game presents these settings to the user.
2023-02-02 00:28:58 +01:00
Hornwitser ddc548f590 Set default values for mod settings on export
Add missing mod settings set to their default values to a mod pack when
performing a data export based on the settings prototypes that were
extracted from the game. This mirrors the behaviour of Factorio when new
setting prototypes are added by a mod.
2023-02-02 00:28:58 +01:00
Hornwitser 39ed098a64 Fix error messages changing with Node.js version
Updates to Node.js error reporting have caused tests to fail due to them
being hardcoded to expect a certain format that has since changed.  Fix
by making Node.js create the error message for us.
2023-02-02 00:28:58 +01:00