From 9b608fc41227e5322802430b4eb10e018435e68e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Grie=C3=9Fhaber?= Date: Sat, 3 Jan 2026 20:52:50 +0100 Subject: [PATCH] Add autotrain metrics settings and implement depot train counting Updated locale Added Options for autotrain metric --- control.lua | 12 ++++++++++++ info.json | 2 +- locale/de-DE/locale.cfg | 35 +++++++++++++++++++++++++++++++---- locale/en/locale.cfg | 10 ++++++++-- settings.lua | 15 ++++++++++++++- train-stats.lua | 35 ++++++++++++++++++++++++----------- 6 files changed, 90 insertions(+), 19 deletions(-) diff --git a/control.lua b/control.lua index 6450cb3..00dc56a 100644 --- a/control.lua +++ b/control.lua @@ -13,6 +13,8 @@ sendIndex = 0 serverIndex = 0 scannedGrids = false scannedLabs = false +autotrainGroupName = "" +autotrainDepotName = "" options = { enableMod = false, @@ -60,6 +62,8 @@ script.on_init(function () options.enableResearch = settings.global["factorio-metrics-exporter-export_research_stats"].value options.enableRobots = settings.global["factorio-metrics-exporter-export_logistic_stats"].value options.enableTrains = settings.global["factorio-metrics-exporter-export_train_stats"].value + autotrainGroupName = settings.global["factorio-metrics-exporter-autotrain_group_name"].value + autotrainDepotName = settings.global["factorio-metrics-exporter-autotrain_depot_name"].value end) @@ -79,6 +83,8 @@ script.on_load(function () options.enableResearch = settings.global["factorio-metrics-exporter-export_research_stats"].value options.enableRobots = settings.global["factorio-metrics-exporter-export_logistic_stats"].value options.enableTrains = settings.global["factorio-metrics-exporter-export_train_stats"].value + autotrainGroupName = settings.global["factorio-metrics-exporter-autotrain_group_name"].value + autotrainDepotName = settings.global["factorio-metrics-exporter-autotrain_depot_name"].value end) script.on_configuration_changed(function() @@ -149,6 +155,12 @@ script.on_event(defines.events.on_runtime_mod_setting_changed, function(event) if event.setting == "factorio-metrics-exporter-export_train_stats" then options.enableTrains = settings.global["factorio-metrics-exporter-export_train_stats"].value end + if event.setting == "factorio-metrics-exporter-autotrain_depot_name" then + autotrainDepotName = settings.global["factorio-metrics-exporter-autotrain_depot_name"].value + end + if event.setting == "factorio-metrics-exporter-autotrain_group_name" then + autotrainGroupName = settings.global["factorio-metrics-exporter-autotrain_group_name"].value + end end) diff --git a/info.json b/info.json index 5a4fdd9..7d64dc3 100644 --- a/info.json +++ b/info.json @@ -1,6 +1,6 @@ { "name": "factorio-metrics-exporter", - "version": "0.1.22", + "version": "0.2.0", "title": "Prometheus Metrics Exporter", "author": "Jan Grießhaber", "contact": "jan@griesshaber.systems", diff --git a/locale/de-DE/locale.cfg b/locale/de-DE/locale.cfg index deda9df..42507c1 100644 --- a/locale/de-DE/locale.cfg +++ b/locale/de-DE/locale.cfg @@ -1,6 +1,33 @@ [mod-setting-name] -factorio-metrics-exporter-export_production_stats = Enable ProductionD -factorio-metrics-exporter-export_logistic_stats=Enable LogisticsD -factorio-metrics-exporter-export_pollution_stats=Enable PollutionD +factorio-metrics-exporter-enable=Mod aktivieren +factorio-metrics-exporter-tick-interval=Tick-Intervall +factorio-metrics-exporter-udp-address=UDP-Port +factorio-metrics-exporter-export_production_stats=Produktion aktivieren +factorio-metrics-exporter-export_fluid_stats=Flüssigkeiten aktivieren +factorio-metrics-exporter-export_logistic_stats=Logistik aktivieren +factorio-metrics-exporter-export_pollution_stats=Verschmutzung aktivieren +factorio-metrics-exporter-export_kill_stats=Kills aktivieren +factorio-metrics-exporter-export_research_stats=Forschung aktivieren +factorio-metrics-exporter-export_power_stats=Energie aktivieren +factorio-metrics-exporter-export_player_stats=Spieler aktivieren +factorio-metrics-exporter-export_train_stats=Züge aktivieren +factorio-metrics-exporter-enable_denkmalschutz=Denkmalschutz aktivieren +factorio-metrics-exporter-autotrain_group_name=AutoTrain-Metrik Gruppenname +factorio-metrics-exporter-autotrain_depot_name=AutoTrain-Metrik Depotname + [mod-setting-description] -factorio-metrics-exporter-export_production_stats = Enables sending of the production statistics per surface. Not very expensive \ No newline at end of file +factorio-metrics-exporter-export_production_stats=Aktiviert das Senden der Produktionsstatistiken pro Oberfläche. Nicht sehr rechenintensiv. +factorio-metrics-exporter-enable=Aktiviert das Senden der UDP-Pakete. +factorio-metrics-exporter-tick-interval=Legt das Tick-Intervall fest, in dem Metriken gesammelt werden. +factorio-metrics-exporter-udp-address=Wähle einen UDP-Port, an den die Daten gesendet werden. Factorio muss mit --enable-lua-udp gestartet werden. Es ist wichtig, einen anderen Port als den Zielport zu verwenden. +factorio-metrics-exporter-export_fluid_stats=Aktiviert das Senden von Flüssigkeits-Produktionsstatistiken. Nicht sehr rechenintensiv. +factorio-metrics-exporter-export_logistic_stats=Aktiviert das Senden von Logistiknetz-Statistiken. Moderat rechenintensiv. +factorio-metrics-exporter-export_pollution_stats=Aktiviert das Senden von verschmutzungsbezogenen Statistiken. Nicht sehr rechenintensiv. +factorio-metrics-exporter-export_kill_stats=Aktiviert das Senden von Kill-Statistiken. Nicht sehr rechenintensiv. +factorio-metrics-exporter-export_research_stats=Aktiviert das Senden von Forschungsstatistiken. Moderat rechenintensiv. +factorio-metrics-exporter-export_power_stats=Aktiviert Energie-Statistiken. Skaliert linear mit der Anzahl der Stromnetze. +factorio-metrics-exporter-export_player_stats=Aktiviert das Senden von Spielerstatistiken. +factorio-metrics-exporter-export_train_stats=Aktiviert das Senden von Zug-Statistiken. Geringer Aufwand, außer es sind sehr viele Züge im Einsatz. +factorio-metrics-exporter-enable_denkmalschutz=Aktiviert die Spaß-Option „Denkmalschutz“. Im Mehrspielermodus wird der Spieler gebannt, der das Starter-Raumschiff-Objekt abbaut. +factorio-metrics-exporter-autotrain_group_name=Legt den Namen der Zuggruppe fest, die für die AutoTrain-Metrik verwendet werden soll. +factorio-metrics-exporter-autotrain_depot_name=Legt den Namen des Depots fest, das für die AutoTrain-Metrik verwendet werden soll. \ No newline at end of file diff --git a/locale/en/locale.cfg b/locale/en/locale.cfg index b3556ff..f52c388 100644 --- a/locale/en/locale.cfg +++ b/locale/en/locale.cfg @@ -11,6 +11,9 @@ factorio-metrics-exporter-export_research_stats=Enable Research factorio-metrics-exporter-export_power_stats=Enable Power factorio-metrics-exporter-export_player_stats=Enable Player factorio-metrics-exporter-export_train_stats=Enable Train +factorio-metrics-exporter-enable_denkmalschutz=Enable Denkmalschutz +factorio-metrics-exporter-autotrain_group_name=AutoTrain metrics group name +factorio-metrics-exporter-autotrain_depot_name=AutoTrain metrics depot name [mod-setting-description] factorio-metrics-exporter-export_production_stats=Enables sending of the production statistics per surface. Not very expensive factorio-metrics-exporter-enable=Enable sending of the UDP packets @@ -21,6 +24,9 @@ factorio-metrics-exporter-export_logistic_stats=Enables sending of logistic netw factorio-metrics-exporter-export_pollution_stats=Enable sending of Pollution related statistics. Not very expensive factorio-metrics-exporter-export_kill_stats=Enable sending of kill statistics. Not very expensive factorio-metrics-exporter-export_research_stats=Enable sending of research statistics. Moderatly expensive -factorio-metrics-exporter-export_power_stats=Enable Power. Not yet implemented! +factorio-metrics-exporter-export_power_stats=Enable Power. Scales linearly with power grid count factorio-metrics-exporter-export_player_stats=Enable sending of player statistics -factorio-metrics-exporter-export_train_stats=Enable sending of train statistics. Not yet implemented! \ No newline at end of file +factorio-metrics-exporter-export_train_stats=Enable sending of train statistics. Inexpensive unless very many trains are in use +factorio-metrics-exporter-enable_denkmalschutz=Enable the fun option of Denkmalschutz. In multiplayer, the player who deconstructs the starter spaceship entity will get banned +factorio-metrics-exporter-autotrain_group_name=Set the name of the traingroup you want to use for the autotrain metric +factorio-metrics-exporter-autotrain_depot_name=Set the name of the depot you want to use for the autotrain metric \ No newline at end of file diff --git a/settings.lua b/settings.lua index f670fd8..4c8976b 100644 --- a/settings.lua +++ b/settings.lua @@ -91,6 +91,19 @@ data:extend({ setting_type = "runtime-global", default_value = false, order = "z" + }, + { + type = "string-setting", + name = "factorio-metrics-exporter-autotrain_group_name", + setting_type = "runtime-global", + default_value = "AutoTrain", + order = "za" + }, + { + type = "string-setting", + name = "factorio-metrics-exporter-autotrain_depot_name", + setting_type = "runtime-global", + default_value = "[virtual-signal=signal-pink][item=locomotive]", + order = "zb" } - }) \ No newline at end of file diff --git a/train-stats.lua b/train-stats.lua index 0622bbd..7553ba8 100644 --- a/train-stats.lua +++ b/train-stats.lua @@ -16,6 +16,18 @@ function GetTrainName(train) return "" end +function GetTrainsInDepot() + local trainsInDepot = 0 + for trainsID, train in pairs(storage.trains) do + if train.state == defines.train_state.wait_station + and train.station and train.station.backer_name == autotrainDepotName then + trainsInDepot = trainsInDepot + 1 + end + end + local trainsInGroup = #game.train_manager.get_trains({group=autotrainGroupName}) + return ("---autotrain-stats---\n%d:%d"):format(trainsInDepot,trainsInGroup) +end + function GetTrainPlayerKills() local trainKills = {} trainKills[#trainKills+1] = "---train-player-kills---" @@ -46,20 +58,20 @@ function GetTrainStates() local trainsManual = 0 for _, train in pairs(storage.trains) do if train.state == defines.train_state.wait_station - or train.state == defines.train_state.destination_full - or train.state == defines.train_state.no_schedule - then trainsWaiting = trainsWaiting + 1 end + or train.state == defines.train_state.destination_full + or train.state == defines.train_state.no_schedule + then trainsWaiting = trainsWaiting + 1 - if train.state == defines.train_state.on_the_path - or train.state == defines.train_state.arrive_signal - or train.state == defines.train_state.wait_signal - then trainsDriving = trainsDriving + 1 end + elseif train.state == defines.train_state.on_the_path + or train.state == defines.train_state.arrive_signal + or train.state == defines.train_state.wait_signal + then trainsDriving = trainsDriving + 1 - if train.state == defines.train_state.manual_control - or train.state == defines.train_state.manual_control_stop - then trainsManual = trainsManual + 1 end + elseif train.state == defines.train_state.manual_control + or train.state == defines.train_state.manual_control_stop + then trainsManual = trainsManual + 1 - if train.state == defines.train_state.no_path + elseif train.state == defines.train_state.no_path then trainsProblems = trainsProblems + 1 end end return ("---trains-states---\n%d:%d:%d:%d"):format(trainsDriving,trainsManual,trainsProblems,trainsWaiting) @@ -180,6 +192,7 @@ function SendTrainStats() returnParts[#returnParts+1] = GetTrainTotalKills() returnParts[#returnParts+1] = GetTrainStates() returnParts[#returnParts+1] = GetTrainStatistics() + returnParts[#returnParts+1] = GetTrainsInDepot() helpers.send_udp(udpAddress,table.concat(returnParts,"\n"),serverIndex) end end \ No newline at end of file