diff --git a/.vscode/settings.json b/.vscode/settings.json index 52d9edf..a8b239f 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,6 +1,6 @@ { "Lua.workspace.userThirdParty": [ - "c:\\Users\\jangr\\AppData\\Roaming\\Code\\User\\workspaceStorage\\3b31e6f4ee2e6f815dd0701fecf3b460\\justarandomgeek.factoriomod-debug\\sumneko-3rd" + "c:\\Users\\jangr\\AppData\\Roaming\\Code\\User\\workspaceStorage\\6d87f11bcadf77c8bf3a32c6545bb9a5\\justarandomgeek.factoriomod-debug\\sumneko-3rd" ], "Lua.workspace.checkThirdParty": "ApplyInMemory", "factorio.versions": [ diff --git a/control.lua b/control.lua index 5fa2aaf..a0704b0 100644 --- a/control.lua +++ b/control.lua @@ -26,7 +26,8 @@ options = { enableRobots = false, enableResearch = false, enablePower = false, - enableTrains = false + enableTrains = false, + enableTrainTrips = false } @@ -63,6 +64,7 @@ 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 + options.enableTrainTrips = settings.global["factorio-metrics-exporter-export_train_trips"].value autotrainGroupName = settings.global["factorio-metrics-exporter-autotrain_group_name"].value autotrainDepotName = settings.global["factorio-metrics-exporter-autotrain_depot_name"].value @@ -84,6 +86,7 @@ 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 + options.enableTrainTrips = settings.global["factorio-metrics-exporter-export_train_trips"].value autotrainGroupName = settings.global["factorio-metrics-exporter-autotrain_group_name"].value autotrainDepotName = settings.global["factorio-metrics-exporter-autotrain_depot_name"].value end) @@ -163,6 +166,9 @@ script.on_event(defines.events.on_runtime_mod_setting_changed, function(event) if event.setting == "factorio-metrics-exporter-autotrain_group_name" then autotrainGroupName = settings.global["factorio-metrics-exporter-autotrain_group_name"].value end + if event.setting == "factorio-metrics-exporter-export_train_trips" then + options.enableTrainTrips = settings.global["factorio-metrics-exporter-export_train_trips"].value + end end) diff --git a/info.json b/info.json index 3128ac7..9792cfd 100644 --- a/info.json +++ b/info.json @@ -1,6 +1,6 @@ { "name": "factorio-metrics-exporter", - "version": "0.2.3", + "version": "0.2.6", "title": "Prometheus Metrics Exporter", "author": "Jan Grießhaber", "contact": "jan@griesshaber.systems", diff --git a/locale/en/locale.cfg b/locale/en/locale.cfg index f52c388..48e32ce 100644 --- a/locale/en/locale.cfg +++ b/locale/en/locale.cfg @@ -14,6 +14,7 @@ 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 +factorio-metrics-exporter-export_train_trips=Enable Train trip statistics [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 @@ -29,4 +30,5 @@ factorio-metrics-exporter-export_player_stats=Enable sending of player statistic 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 +factorio-metrics-exporter-autotrain_depot_name=Set the name of the depot you want to use for the autotrain metric +factorio-metrics-exporter-export_train_trips=Enable sending of train trup statistics. \ No newline at end of file diff --git a/research-stats.lua b/research-stats.lua index 9230b5f..bffac93 100644 --- a/research-stats.lua +++ b/research-stats.lua @@ -46,7 +46,7 @@ function GetEstimatedResearchTime() local remainingUnits = remainingPercentage*researchTotalCost local estimatedSeconds = remainingUnits/totalSpeed - log("Remaining Perc: %d\nCost: %d\nSpeed: %d\nRem Units: %d\n") + log(("Remaining Perc: %d\nCost: %d\nSpeed: %d\nRem Units: %d\n"):format(remainingPercentage,researchTotalCost,totalSpeed,remainingUnits)) local returnSpeed = "---research-speed---\n"..totalSpeed.."\n" local returnTime = "---research-time---\n"..estimatedSeconds.."\n" diff --git a/settings.lua b/settings.lua index 4c8976b..023533a 100644 --- a/settings.lua +++ b/settings.lua @@ -105,5 +105,12 @@ data:extend({ setting_type = "runtime-global", default_value = "[virtual-signal=signal-pink][item=locomotive]", order = "zb" + }, + { + type = "bool-setting", + name = "factorio-metrics-exporter-export_train_trips", + setting_type = "runtime-global", + default_value = false, + order = "zz" } }) \ No newline at end of file diff --git a/train-stats.lua b/train-stats.lua index 47180f8..1c1080e 100644 --- a/train-stats.lua +++ b/train-stats.lua @@ -167,6 +167,7 @@ function onTrainStateChange(event) if event.train.state == defines.train_state.wait_station then + if not train.station then return end if train.station.unit_number == stat.lastStationUnitNumber then return end stat.lastStationUnitNumber = stat.currentStationUnitNumber @@ -198,12 +199,28 @@ function onTrainStateChange(event) end --log("inEvent") end +--Checks if trip is still valid by checking of st +function isTripValid(trip,tripID,trainID) + if trip.startStation == nil + or trip.endStation==nil + or trip.startStation.valid == false + or trip.endStation.valid == false then + --One station is nil so we delete this trip + log("Deleting trip"..tripID) + storage.trainStats[trainID].trips[tripID] = nil + return false + end + --Stations are valid, so we true + return true +end function GetTrainTripStats() local tripParts = {} + local tripCount = 0 tripParts[#tripParts+1] = "---train-trips---\n" for trainID,stats in pairs(storage.trainStats) do - for _,trip in pairs(stats.trips or {}) do + for tripIndex,trip in pairs(stats.trips or {}) do + if isTripValid(trip,tripIndex,trainID) then tripParts[#tripParts+1] = ("%d:%s:%s:%s:%d"):format( trainID, @@ -211,9 +228,17 @@ function GetTrainTripStats() trip.startStation.backer_name, trip.endStation.backer_name, trip.timeTaken) + tripCount = tripCount + 1 + end + end + if #tripParts > 400 then + log("Sending at "..tripCount.." trips") + helpers.send_udp(udpAddress,table.concat(tripParts,"\n"),serverIndex) + tripParts = {} end end - return table.concat(tripParts,"\n") + log("Counted "..tripCount.." trips") + --return table.concat(tripParts,"\n") end function GetTrainStatistics() @@ -255,10 +280,10 @@ function SendTrainStats() returnParts[#returnParts+1] = GetTrainTotalKills() returnParts[#returnParts+1] = GetTrainStates() returnParts[#returnParts+1] = GetTrainStatistics() - helpers.send_udp(udpAddress,table.concat(returnParts,"\n"),serverIndex) - returnParts = {} returnParts[#returnParts+1] = GetTrainsInDepot() - returnParts[#returnParts+1] = GetTrainTripStats() + if options.enableTrainTrips then + GetTrainTripStats() + end log("Sending Train statistics") helpers.send_udp(udpAddress,table.concat(returnParts,"\n"),serverIndex) end