From 590f1ca2b1245f39725b0475064834219ded17ea Mon Sep 17 00:00:00 2001 From: Alexander Schwerin Date: Fri, 19 Jul 2024 02:23:58 +0200 Subject: [PATCH 1/3] Add per-player stats Adds the following metrics (can be disabled in settings): - factorio_player_connected[name]: 1 if the player is currently connected - factorio_player_last_online[name]: Last tick the player was connected - factorio_player_time_online[name]: Time (in seconds) the player spent online - factorio_player_position_x[name]: The x coordinate of the players (last) position - factorio_player_position_y[name]: The y coordinate of the players (last) position - factorio_player_position_surface[name, surface]: The surface of the players (last) position --- control.lua | 14 ++++++++++++++ events.lua | 18 ++++++++++++++++++ locale/en/locale.cfg | 2 ++ settings.lua | 7 +++++++ 4 files changed, 41 insertions(+) diff --git a/control.lua b/control.lua index 7b185f3..af83ff8 100644 --- a/control.lua +++ b/control.lua @@ -9,11 +9,25 @@ bucket_settings = train_buckets(settings.startup["graftorio2-train-histogram-buc nth_tick = settings.startup["graftorio2-nth-tick"].value server_save = settings.startup["graftorio2-server-save"].value disable_train_stats = settings.startup["graftorio2-disable-train-stats"].value +disable_per_player_stats = settings.startup["graftorio2-disable-per-player-stats"].value gauge_tick = prometheus.gauge("factorio_tick", "game tick") gauge_connected_player_count = prometheus.gauge("factorio_connected_player_count", "connected players") gauge_total_player_count = prometheus.gauge("factorio_total_player_count", "total registered players") +gauge_player_connected = + prometheus.gauge("factorio_player_connected", "connected players by name", { "name" }) +gauge_player_last_online = + prometheus.gauge("factorio_player_last_online", "last tick the player was online", { "name" }) +gauge_player_time_online = + prometheus.gauge("factorio_player_time_online", "total seconds player spent online", { "name" }) +gauge_player_position_x = + prometheus.gauge("factorio_player_position_x", "x position of the player", { "name" }) +gauge_player_position_y = + prometheus.gauge("factorio_player_position_y", "y position of the player", { "name" }) +gauge_player_position_surface = + prometheus.gauge("factorio_player_position_surface", "player on surface", { "name", "surface" }) + gauge_seed = prometheus.gauge("factorio_seed", "seed", { "surface" }) gauge_mods = prometheus.gauge("factorio_mods", "mods", { "name", "version" }) diff --git a/events.lua b/events.lua index ba1adb3..e51f08f 100644 --- a/events.lua +++ b/events.lua @@ -9,6 +9,10 @@ function register_events(event) gauge_mods:set(1, { name, version }) end + gauge_player_position_x:reset() + gauge_player_position_y:reset() + gauge_player_position_surface:reset() + for _, player in pairs(game.players) do stats = { { player.force.item_production_statistics, gauge_item_production_input, gauge_item_production_output }, @@ -84,6 +88,14 @@ function register_events(event) end end + if not disable_per_player_stats then + gauge_player_last_online:set(player.last_online, { player.name }) + gauge_player_time_online:set(player.online_time / 60, { player.name }) + gauge_player_position_x:set(player.position.x, { player.name }) + gauge_player_position_y:set(player.position.y, { player.name }) + gauge_player_position_surface:set(1, { player.name, player.surface.name }) + end + -- research tick handler on_research_tick(player, event) end @@ -101,4 +113,10 @@ end function register_events_players(event) gauge_connected_player_count:set(#game.connected_players) gauge_total_player_count:set(#game.players) + if not disable_per_player_stats then + gauge_player_connected:reset() + for _, player in pairs(game.connected_players) do + gauge_player_connected:set(player.connected and 1 or 0, { player.name }) + end + end end diff --git a/locale/en/locale.cfg b/locale/en/locale.cfg index 469b96f..445bcad 100644 --- a/locale/en/locale.cfg +++ b/locale/en/locale.cfg @@ -3,7 +3,9 @@ graftorio2-train-histogram-buckets=Train histogram buckets graftorio2-nth-tick=Scheduler timer graftorio2-server-save=Save prom file on server only graftorio2-disable-train-stats=Disable train stats +graftorio2-disable-per-player-stats=Disable per player stats [mod-setting-description] graftorio2-train-histogram-buckets=Train trip times (in seconds) to categorize into groups. graftorio2-nth-tick=How often prom file is written +graftorio2-disable-per-player-stats=Stats for each player: connected, last time online, position, etc. diff --git a/settings.lua b/settings.lua index 2b44e79..c8ba1f9 100644 --- a/settings.lua +++ b/settings.lua @@ -27,4 +27,11 @@ data:extend({ default_value = false, allow_blank = false, }, + { + type = "bool-setting", + name = "graftorio2-disable-per-player-stats", + setting_type = "startup", + default_value = false, + allow_blank = false, + }, }) From d75c22c739f927d2b7b7de3e85c77039a8c288fc Mon Sep 17 00:00:00 2001 From: Zincfox <8933715+Zincfox@users.noreply.github.com> Date: Fri, 19 Jul 2024 03:05:08 +0200 Subject: [PATCH 2/3] Disable per-player-stats by default --- settings.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/settings.lua b/settings.lua index c8ba1f9..7e1763b 100644 --- a/settings.lua +++ b/settings.lua @@ -31,7 +31,7 @@ data:extend({ type = "bool-setting", name = "graftorio2-disable-per-player-stats", setting_type = "startup", - default_value = false, + default_value = true, allow_blank = false, }, }) From f69bfdd27904a64bd7c13673b4a9e67a0aa7430a Mon Sep 17 00:00:00 2001 From: Alexander Schwerin Date: Mon, 5 Aug 2024 15:15:27 +0200 Subject: [PATCH 3/3] Document player metrics in Metrics.md --- Metrics.md | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/Metrics.md b/Metrics.md index 148a94b..0b0b6a4 100644 --- a/Metrics.md +++ b/Metrics.md @@ -16,10 +16,18 @@ Please read the warning regarding the cardinality of train metrics! ### Players -| Name | Labels | Description | -|-----------------------------------|--------|----------------------------------------------| -| `factorio_connected_player_count` | | Count of currently connected players | -| `factorio_total_player_count` | | Count of all players who were ever connected | +Per-player metrics (those with `name` label) are disabled by default and can be enabled in the settings (uncheck "Disable per player stats"). + +| Name | Labels | Description | +|------------------------------------|---------------|---------------------------------------------------| +| `factorio_connected_player_count` | | Count of currently connected players | +| `factorio_total_player_count` | | Count of all players who were ever connected | +| `factorio_player_connected` | name | 1 if the player is currently connected | +| `factorio_player_last_online` | name | Last tick the player was connected | +| `factorio_player_time_online` | name | Time (in seconds) the player spent online | +| `factorio_player_position_x` | name | The x coordinate of the player's (last) position | +| `factorio_player_position_y` | name | The y coordinate of the player's (last) position | +| `factorio_player_position_surface` | name, surface | 1 for the surface of the player's (last) position | ### Production