Commit Graph
1123 Commits
Author SHA1 Message Date
Hornwitser 677512512e Replace socket.io with plain WebSocket
Replace socket.io with plain WebSocket using the ws library as it
doesn't really provide any useful tools over plain WebSocket when it
comes to implementing reliable communication that works across
reconnects.  The widespread browser support for WebSocket also means
it has little value to add for the web interface over WebSocket.
2020-03-22 02:10:54 +01:00
Hornwitser 808bd6b453 Validate messages sent
Validate messages sent over links with the json schema provided from
them.  This aids debugging as an exception will be thrown from the code
sending the bad content.
2020-03-22 02:10:54 +01:00
Hornwitser 941ceab935 Merge pull request #278 from Hornwitser/plugin-rewrite
Plugin rewrite and code improvements
2020-03-21 19:38:46 +01:00
Hornwitser 9dac57b36b Port Research Sync plugin
Rewriwe the researchSync plugin into plugins/research_sync.
2020-03-17 01:31:51 +01:00
Hornwitser 23be732a5c Merge pull request #277 from Hornwitser/config-rewrite
Initial config system rewrite
2020-03-17 00:52:49 +01:00
Hornwitser 737c9924b9 Port and rename clusterioMod plugin
Port the clusterioMod plugin to the new plugin system under the new
subspace_storage name.
2020-03-13 22:46:17 +01:00
Hornwitser d9fe408c42 Fix master web interface
Fix the breaking changes to the plugin struture and remove slave
information that is no longer present.
2020-03-13 22:46:17 +01:00
Hornwitser 090fbd6dff Expose master interfaces to plugin
Expose Express.js app, master config, instance and slave database, slave
connections and metrics to the master plugins.
2020-03-13 22:46:17 +01:00
Hornwitser cb1d744060 Handle errors during master plugin initialization
Catch errors thrown when constructing or initializing master pluigns and
wrap them in PluginError to ensure that they are properly reported as
plugin errors.
2020-03-13 22:46:17 +01:00
Hornwitser ddd2027739 Handle errors during instance startup
Catch errors and shut down the instance in question if the startup
failed.  This happens if for example the Factorio server errors out on a
script during startup.
2020-03-13 22:46:17 +01:00
Hornwitser 6a8346186f Implemented forwarding of requests to the master
Implement the forwardTo function for requests to the master server.
2020-03-13 22:46:17 +01:00
Hornwitser 5681ef9733 Fix plugin enabled config being inverted
Fix plugins being loaded when enable was set to false, and not loaded
when set to true.
2020-03-13 22:46:17 +01:00
Hornwitser 6f22942cc5 Fix incorrect instance lookups in plugins
Fix mistaken lookups missing the instance part, or trying to get the id
from the removed instance.id property.
2020-03-13 22:46:17 +01:00
Hornwitser 1e6b807ae3 Add Clusterio Library mod
Add a library mod for wrapping the Clusterio remote API and providing
related utilities.  This eases development of Clusterio related Lua code
by providing the same interface for both mods and modules and also makes
the serialize library available without having to duplicate it.

It is not possible to implement this through save patching as mods
cannot load Lua code from the level code like they can with code from
other mods.
2020-03-12 15:39:25 +01:00
Hornwitser 5ef6d02054 Add serialize library to clusterio module
Add library for serializing items and inventories to the clusterio
module.  This will provide a common codebase for plugins like
playerManager and trainTeleports to use in order to serialize
inventories to the master server.
2020-03-10 10:57:24 +01:00
Hornwitser eac17b4340 Remove reference to pm2
Remove the instructions for installing and using pm2 with clusterio, as
I don't know how to use this tool properly and can't keep the README up
to date on it.
2020-03-09 20:53:01 +01:00
Hornwitser 54224755e9 Add missing chalk dependency
Add chalk as a dependency as it's used in clusterctl.js.
2020-03-09 20:50:58 +01:00
Hornwitser 557d380112 Fix broken link to modules/clusterio/api.lua
Fix broken link to in docs/developing-for-clusterio.md to
modules/clusterio/api.lua.
2020-03-09 20:48:21 +01:00
Hornwitser 5e5149dc93 Implement new configuration system
Replace current configuration mess with a trimmed down version of the
original vision of #200.  Configs are collection of config groups that
have fields that can be set.  These groups allow organizing the fields
as well as opertunity for plugins to add their own groups.  By default
plugins have an auto generated group with the enabled field.
2020-03-09 20:48:13 +01:00
Hornwitser 370ee9ed04 Unminify formatBytes
There's no reason to minify formatBytes it saves nothing.  Use the
unminified version as published.
2020-01-14 08:09:39 +01:00
Hornwitser f4a0b88ff6 Remove remoteCommands plugin config
Remove the remoteCommand specific config allowRemoteCommandExecution.
The plugin has been removed and with the move to master managing the
instances/slaves it makes no sense to deny remote commands.
2020-01-14 08:09:39 +01:00
Hornwitser e137547664 Remove obsolete msBetweenCommands config
Remove the no longer used msBetweenCommands config.  The RCON connection
was changed to be limited to 5 concurrent commands instead.
2020-01-14 08:09:39 +01:00
Hornwitser d5c43cc3d6 Remove clusterioMod specific configs
Remove configuration options in the master config that's specific to the
clusterioMod plugin.
2020-01-14 08:09:39 +01:00
Hornwitser 459c039f17 Merge pull request #276 from Hornwitser/module-rework
Module rework
2020-01-07 16:16:25 +01:00
Hornwitser 892c803496 Add on_server_startup event
Add startup event to the Clusterio module API which is raised at startup
of a Factorio server.  This is to server as a replacement for the
on_init and on_configuration_changed events which cannot be used in
modules.

Adds clusterio_patch_number global from the patcher in order to
implement this.  This is a number that's incremented every time the save
is patched.
2020-01-05 23:19:34 +01:00
Hornwitser b8fb73f863 Add Factorio to Clusterio communication API
Add send_json to the Clusterio module's API which allows sending
arbitrary tables serialized as JSON to plugins that listen on the
channel specified.
2020-01-04 17:34:16 +01:00
Hornwitser 6cf16cc09e Reference by global in statistics_exporter
Store export function in a global table in the lua module for statistics
exporter in order to avoid a remote.call.
2020-01-04 17:34:16 +01:00
Hornwitser 0e9cd35c30 Add table of contents to Writing Plugins
Add table of contents for the Writing plugins document.
2020-01-04 17:34:16 +01:00
Hornwitser 66aa7e1e43 Add clusterio module with API for lua code
Add a shared API for lua code through a module named clusterio.
2020-01-04 17:34:16 +01:00
Hornwitser 221dc855f4 Add option to throw on non-empty RCON responses
Add option to FactorioServer.sendRcon to throw on non-empty responses
from Factorio.  This is useful for detecting errors returned by commands
that should not have a response.
2020-01-04 17:34:16 +01:00
Hornwitser f88e1f1d3a Remove dead code left over from 21d9fdf
Remove compatConfig definition after RCON is established which was left
over from 21d9fdf.
2020-01-04 17:34:16 +01:00
Hornwitser c091dc341e Implement require option for modules
Implement option allowing files to be required from control.lua be
specified in modules.json.
2020-01-04 17:34:16 +01:00
Hornwitser e89e54ee27 Implement dependencies specification for modules
Implement dependency ordering and version checking for modules.
2020-01-04 17:34:16 +01:00
Hornwitser 80bd75ba16 Rework module loading
Change module loading to use a module.json file describing the module
and patch in all files in a directory path passed to the patcher instead
of having to pass the files names and their content.  This allows the
specification of which files should be passed to the event_handler lib
and an easy implementation of loading stand alone modules.
2020-01-04 17:34:16 +01:00
Hornwitser 11992d1839 Merge pull request #275 from Hornwitser/statistics-fixes
Statistics plugin test and minor fix
2020-01-04 17:33:48 +01:00
Hornwitser 610859eb3b 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.
2019-12-29 04:44:16 +01:00
Hornwitser 37d8eedc0d Add tests for statistics_exporter plugin
These were already made at the time I ported the plugin but somehow I
forgot to add them to the statistics rework commit (26eefb0) :/.
2019-12-29 04:42:13 +01:00
Hornwitser 9d2e89ec63 Merge pull request #274 from Hornwitser/document-version-requirement
Document version requirement
2019-12-29 04:25:32 +01:00
Hornwitser 1b61d09a07 Add docs section on supported versions
Add section in the contributing docs about which version of Node.js and
Factorio is supported.

[skip travis]
2019-12-27 06:26:22 +01:00
Arvids Godjuks ac3aa5ffee Merge pull request #271 from Hornwitser/remove-old-stats
Remove old statistics code
2019-12-25 12:02:18 +02:00
Hornwitser b2a902f784 Update Node.js requirement documentation
Update Node.js version specified in README.md to be explicit about which
versions below 12 is supported, and use version 12 by default.
2019-12-23 23:53:40 +01:00
Hornwitser f700e98e8e Remove old statistics code
Remove left over code from the old statistics gathering and display
which was replaced with Prometheus+Grafana.
2019-12-22 00:54:45 +01:00
Hornwitser 770c961900 Merge pull request #270 from Hornwitser/plugin-rewrite
Plugin system rewrite
2019-12-21 00:49:02 +01:00
Hornwitser 1873f9bda8 Remove UPSdisplay plugin
Remove the redundant UPSdisplay plugin.  UPS statistics is gathered by
the statistics_exporter plugin.
2019-12-20 21:26:29 +01:00
Hornwitser 26eefb0476 Rewrite statistics export
Add automatic export of metrics from slaves to the master server.  And
rewrite the statistics export plugin to use this new system.
2019-12-20 21:26:29 +01:00
Hornwitser 8229d1955c Skip broken Prometheus client tests
Skip Prometheus client tests that assume the environment is isolated
from the rest of the tests.
2019-12-20 19:14:35 +01:00
Hornwitser b4c7824101 Add homebrew Prometheus client
Add an implementation of a Prometheus client.  This is because the
prom-client implementation seems to have missunderstood how Prometheus
is supposed to work and doesn't allow updating collectors via
asynchronous callback.
2019-12-20 19:14:35 +01:00
Hornwitser 1f6574a89c Improve master shutdown
Close active connections and http servers during master shutdown and let
node exit on its own.  If this fails with an error set output streams to
blocking and report it then shutdown with process.exit.

Also add double SIGINT handling to immediately shutdown.
2019-12-20 02:37:27 +01:00
Hornwitser 8b9bb59357 Fix fast-test
Fix incorrect locations for slowTest in clusterio integration tests and
add slowTest to the patch integration tests.  Fixes fast-test being
broken.
2019-12-14 17:53:34 +01:00
Hornwitser b71c392b32 Port globalChat to new plugin system
Port the globalChat plugin to the new plugin system.  Since there's no
config system yet the config options for it is removed.
2019-12-14 17:51:54 +01:00