Initial Commit
This commit is contained in:
36
.vscode/launch.json
vendored
Normal file
36
.vscode/launch.json
vendored
Normal file
@@ -0,0 +1,36 @@
|
||||
{
|
||||
// Use IntelliSense to learn about possible attributes.
|
||||
// Hover to view descriptions of existing attributes.
|
||||
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
|
||||
"version": "0.2.0",
|
||||
"configurations": [
|
||||
|
||||
{
|
||||
"type": "factoriomod",
|
||||
"request": "launch",
|
||||
"name": "Factorio Mod Debug",
|
||||
"factorioArgs": [
|
||||
"--enable-lua-udp=55555"
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "factoriomod",
|
||||
"request": "launch",
|
||||
"name": "Factorio Mod Debug (Settings & Data)",
|
||||
"hookSettings": true,
|
||||
"hookData": true,
|
||||
"factorioArgs": [
|
||||
"--enable-lua-udp=55555"
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "factoriomod",
|
||||
"request": "launch",
|
||||
"name": "Factorio Mod Debug (Profile)",
|
||||
"hookMode": "profile",
|
||||
"factorioArgs": [
|
||||
"--enable-lua-udp=55555"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
15
.vscode/settings.json
vendored
Normal file
15
.vscode/settings.json
vendored
Normal file
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"Lua.workspace.userThirdParty": [
|
||||
"c:\\Users\\jangr\\AppData\\Roaming\\Code\\User\\workspaceStorage\\8bef1fd407f1cda3acb8320784a68ee6\\justarandomgeek.factoriomod-debug\\sumneko-3rd"
|
||||
],
|
||||
"Lua.workspace.checkThirdParty": "ApplyInMemory",
|
||||
"factorio.versions": [
|
||||
{
|
||||
"name": "Factorio 2.0.72 local",
|
||||
"factorioPath": "d:\\SteamLibrary\\steamapps\\common\\Factorio\\bin\\x64\\factorio.exe"
|
||||
}
|
||||
],
|
||||
"Lua.diagnostics.globals": [
|
||||
"create_stats_string"
|
||||
]
|
||||
}
|
||||
48
control.lua
Normal file
48
control.lua
Normal file
@@ -0,0 +1,48 @@
|
||||
require("production-stats")
|
||||
|
||||
-- control.lua for factorio-prometheus-exporter
|
||||
-- Adds a handler for player movement (on_player_changed_position)
|
||||
---@param event EventData.on_tick
|
||||
local function SendSurfaceStats(event)
|
||||
if event.tick % 300 ~= 0 then return end
|
||||
|
||||
helpers.send_udp(52555, game.tick,1)
|
||||
for _,surface in pairs(game.surfaces) do
|
||||
local surface_name = surface.name
|
||||
local productionStat = CreateItemStatisticsString(game.forces["player"].get_item_production_statistics(surface_name), surface)
|
||||
local fluidStat = CreateFluidStatisticsString(game.forces["player"].get_fluid_production_statistics(surface_name), surface)
|
||||
local deathStat = CreateDeathStatisticsString(game.forces["player"].get_kill_count_statistics(surface_name), surface)
|
||||
helpers.send_udp(52555, productionStat..fluidStat..deathStat,1)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
-- Register the handler for the player movement event
|
||||
--script.on_event(defines.events.on_player_changed_position, on_player_moved)
|
||||
|
||||
script.on_event(defines.events.on_player_died, function(event)
|
||||
local player = game.get_player(event.player_index)
|
||||
if not player then return end
|
||||
local index = event.player_index
|
||||
helpers.send_udp(52555, ("player-death %s %d"):format(player.name, player.index),index)
|
||||
end)
|
||||
|
||||
script.on_event(defines.events.on_player_joined_game, function(event)
|
||||
local player = game.get_player(event.player_index)
|
||||
if not player then return end
|
||||
local index = event.player_index
|
||||
helpers.send_udp(52555, ("player-join %s %d"):format(player.name, player.index),index)
|
||||
end)
|
||||
|
||||
function GetAllPlayers()
|
||||
for _,player in pairs(game.players) do
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
--script.on_event(defines.events.on_player_joined_game, on_player_joined)
|
||||
--script.on_nth_tick(300, SendSurfaceStats)
|
||||
script.on_event(defines.events.on_tick, SendSurfaceStats)
|
||||
|
||||
22
game-stats.lua
Normal file
22
game-stats.lua
Normal file
@@ -0,0 +1,22 @@
|
||||
---Sends all mod infos for the current game, should only be called on the first load of the map since mods don't change during runtime
|
||||
function GetMods()
|
||||
local mods = script.active_mods
|
||||
local modstring = "---mod-info---\n"
|
||||
for k,v in pairs(mods) do
|
||||
modstring = modstring .. ("mod-info:%s:%s\n"):format(k,v)
|
||||
|
||||
end
|
||||
helpers.send_udp(52555, modstring,1)
|
||||
end
|
||||
|
||||
---Concats all player online times into a single string
|
||||
---Takes all players that ever visited the server into account
|
||||
---@return string
|
||||
function GetPlayerTime()
|
||||
local timeParts = {}
|
||||
timeParts[#timeParts+1] = "---player-times---\n"
|
||||
for _,player in pairs(game.players) do
|
||||
timeParts[#timeParts+1] = ("player-time:%s:%d:%d"):format(player.name, player.index, player.online_time)
|
||||
end
|
||||
return table.concat(timeParts, "\n")
|
||||
end
|
||||
10
implemetation-plans.md
Normal file
10
implemetation-plans.md
Normal file
@@ -0,0 +1,10 @@
|
||||
Production Statistics Input and Output
|
||||
|
||||
Player Kills|Deaths|Time
|
||||
|
||||
Power Grids| Power Stats
|
||||
|
||||
Rockets launched
|
||||
|
||||
Research Speed| Level| current queue, estimated time to completion
|
||||
|
||||
19
info.json
Normal file
19
info.json
Normal file
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"name": "factorio-prometheus-exporter",
|
||||
"version": "0.1.0",
|
||||
"title": "Prometheus Exporter",
|
||||
"author": "Your Name",
|
||||
"contact": "your.email@example.com",
|
||||
"homepage": "",
|
||||
"description": "Exports Factorio metrics for collection by Prometheus.",
|
||||
"factorio_version": "2.0",
|
||||
"dependencies": [
|
||||
"base >= 2.0.0"
|
||||
],
|
||||
"license": "MIT",
|
||||
"tags": [
|
||||
"monitoring",
|
||||
"metrics",
|
||||
"prometheus"
|
||||
]
|
||||
}
|
||||
0
locale/de-DE/locale.cfg
Normal file
0
locale/de-DE/locale.cfg
Normal file
0
locale/en/locale.cfg
Normal file
0
locale/en/locale.cfg
Normal file
18
pollution-stats.lua
Normal file
18
pollution-stats.lua
Normal file
@@ -0,0 +1,18 @@
|
||||
function GetPollutionStats()
|
||||
for _,surface in pairs(game.surfaces) do
|
||||
local surface_name = surface.name
|
||||
local pollutionParts = {}
|
||||
local pollution_stats = game.surfaces[surface_name].pollution_statistics
|
||||
local pollution_input = pollution_stats.input_counts
|
||||
local pollution_output = pollution_stats.output_counts
|
||||
pollutionParts[#pollutionParts+1] = ("---pollution-input---%s\n"):format(surface_name)
|
||||
for name, stat in pairs(pollution_input) do
|
||||
pollutionParts[#pollutionParts+1] = ("%s:%d"):format(name, stat)
|
||||
end
|
||||
pollutionParts[#pollutionParts+1] = ("---pollution-output---%s\n"):format(surface_name)
|
||||
for name, stat in pairs(pollution_output) do
|
||||
pollutionParts[#pollutionParts+1] = ("%s:%d"):format(name, stat)
|
||||
end
|
||||
helpers.send_udp(52555, table.concat(pollutionParts,"\n"),1)
|
||||
end
|
||||
end
|
||||
56
production-stats.lua
Normal file
56
production-stats.lua
Normal file
@@ -0,0 +1,56 @@
|
||||
---@param productionStatsTable LuaFlowStatistics
|
||||
---@param surface LuaSurface
|
||||
---@return string
|
||||
function CreateItemStatisticsString(productionStatsTable --[[LuaFlowStatistics]], surface --[[LuaSurface]])
|
||||
local parts = {}
|
||||
parts[#parts+1] = surface.name
|
||||
parts[#parts+1] = "---input---"
|
||||
for itemName, itemCount in pairs(productionStatsTable.input_counts) do
|
||||
parts[#parts+1] = itemName .. ":" .. itemCount
|
||||
end
|
||||
parts[#parts+1] = "---output---"
|
||||
for itemName, itemCount in pairs(productionStatsTable.output_counts) do
|
||||
parts[#parts+1] = itemName .. ":" .. itemCount
|
||||
end
|
||||
parts[#parts+1] = surface.name
|
||||
return table.concat(parts, "\n")
|
||||
end
|
||||
|
||||
|
||||
---comment
|
||||
---@param fluidStatsTable LuaFlowStatistics
|
||||
---@param surface LuaSurface
|
||||
---@return string
|
||||
function CreateFluidStatisticsString(fluidStatsTable --[[LuaFlowStatistics]], surface --[[LuaSurface]])
|
||||
local parts = {}
|
||||
parts[#parts+1] = surface.name
|
||||
parts[#parts+1] = "---input---"
|
||||
for fluidName, fluidCount in pairs(fluidStatsTable.input_counts) do
|
||||
parts[#parts+1] = fluidName .. ":" .. fluidCount
|
||||
end
|
||||
parts[#parts+1] = "---output---"
|
||||
for fluidName, fluidCount in pairs(fluidStatsTable.output_counts) do
|
||||
parts[#parts+1] = fluidName .. ":" .. fluidCount
|
||||
end
|
||||
parts[#parts+1] = surface.name
|
||||
return table.concat(parts, "\n")
|
||||
end
|
||||
|
||||
---comment
|
||||
---@param deathStatsTable LuaFlowStatistics
|
||||
---@param surface LuaSurface
|
||||
---@return string
|
||||
function CreateDeathStatisticsString(deathStatsTable --[[LuaFlowStatistics]], surface --[[LuaSurface]])
|
||||
local parts = {}
|
||||
parts[#parts+1] = surface.name.."{"
|
||||
parts[#parts+1] = "---input---"
|
||||
for name, count in pairs(deathStatsTable.input_counts) do
|
||||
parts[#parts+1] = name .. ":" .. count
|
||||
end
|
||||
parts[#parts+1] = "---output---"
|
||||
for name, count in pairs(deathStatsTable.output_counts) do
|
||||
parts[#parts+1] = name .. ":" .. count
|
||||
end
|
||||
parts[#parts+1] = surface.name
|
||||
return table.concat(parts, "\n")
|
||||
end
|
||||
20
research-stats.lua
Normal file
20
research-stats.lua
Normal file
@@ -0,0 +1,20 @@
|
||||
local researches = {}
|
||||
|
||||
|
||||
---comment
|
||||
---@param event EventData.on_research_finished
|
||||
function onResearchFinished(event)
|
||||
for id, tech in pairs(game.forces["player"].technologies) do
|
||||
researches[id] = tech
|
||||
end
|
||||
end
|
||||
|
||||
---comment
|
||||
---@param event EventData.on_research_started
|
||||
function onResearchStarted(event)
|
||||
end
|
||||
|
||||
---comment
|
||||
---@param event EventData.on_research_queued
|
||||
function onResearchQueued(event)
|
||||
end
|
||||
52
settings.lua
Normal file
52
settings.lua
Normal file
@@ -0,0 +1,52 @@
|
||||
data:extend({
|
||||
{
|
||||
type = "bool-setting",
|
||||
name = "factorio-prometheus-exporter-enable",
|
||||
setting_type = "startup",
|
||||
default_value = true,
|
||||
order = "a"
|
||||
},
|
||||
{
|
||||
type = "string-setting",
|
||||
name = "factorio-prometheus-exporter-udp-address",
|
||||
setting_type = "startup",
|
||||
allow_blank = true,
|
||||
default_value = "",
|
||||
order = "b"
|
||||
},
|
||||
{
|
||||
type = "bool-setting",
|
||||
name = "factorio-prometheus-exporter-export_production_stats",
|
||||
setting_type = "startup",
|
||||
default_value = true,
|
||||
order = "c"
|
||||
},
|
||||
{
|
||||
type = "bool-setting",
|
||||
name = "factorio-prometheus-exporter-export_player_deaths",
|
||||
setting_type = "startup",
|
||||
default_value = true,
|
||||
order = "d"
|
||||
},
|
||||
{
|
||||
type = "bool-setting",
|
||||
name = "factorio-prometheus-exporter-export_fluid_stats",
|
||||
setting_type = "startup",
|
||||
default_value = true,
|
||||
order = "e"
|
||||
},
|
||||
{
|
||||
type = "bool-setting",
|
||||
name = "factorio-prometheus-exporter-export_power_stats",
|
||||
setting_type = "startup",
|
||||
default_value = false,
|
||||
order = "f"
|
||||
},
|
||||
{
|
||||
type = "bool-setting",
|
||||
name = "factorio-prometheus-exporter-export_pollution_stats",
|
||||
setting_type = "startup",
|
||||
default_value = true,
|
||||
order = "g"
|
||||
}
|
||||
})
|
||||
Reference in New Issue
Block a user