Skip to content

Commit

Permalink
add metrics for research_queue, pollution, evolution
Browse files Browse the repository at this point in the history
  • Loading branch information
Kariton committed Dec 11, 2022
1 parent bf2067e commit b192a82
Show file tree
Hide file tree
Showing 3 changed files with 71 additions and 3 deletions.
23 changes: 20 additions & 3 deletions control.lua
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ require("train")
require("yarm")
require("events")
require("power")

require("research")

bucket_settings = train_buckets(settings.startup["graftorio2-train-histogram-buckets"].value)
nth_tick = settings.startup["graftorio2-nth-tick"].value
Expand All @@ -13,6 +13,9 @@ 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_seed = prometheus.gauge("factorio_seed", "seed", {"surface"})
gauge_mods = prometheus.gauge("factorio_mods", "mods", {"name", "version"})

gauge_item_production_input = prometheus.gauge("factorio_item_production_input", "items produced", {"force", "name"})
gauge_item_production_output = prometheus.gauge("factorio_item_production_output", "items consumed", {"force", "name"})

Expand All @@ -25,6 +28,13 @@ gauge_kill_count_output = prometheus.gauge("factorio_kill_count_output", "losses
gauge_entity_build_count_input = prometheus.gauge("factorio_entity_build_count_input", "entities placed", {"force", "name"})
gauge_entity_build_count_output = prometheus.gauge("factorio_entity_build_count_output", "entities removed", {"force", "name"})

gauge_pollution_production_input = prometheus.gauge("factorio_pollution_production_input", "pollutions produced", {"force", "name"})
gauge_pollution_production_output = prometheus.gauge("factorio_pollution_production_output", "pollutions consumed", {"force", "name"})

gauge_evolution = prometheus.gauge("factorio_evolution", "evolution", {"force", "type"})

gauge_research_queue = prometheus.gauge("factorio_research_queue", "research", {"force", "name", "level", "index"})

gauge_items_launched = prometheus.gauge("factorio_items_launched_total", "items launched in rockets", {"force", "name"})

gauge_yarm_site_amount = prometheus.gauge("factorio_yarm_site_amount", "YARM - site amount remaining", {"force", "name", "type"})
Expand Down Expand Up @@ -56,6 +66,7 @@ gauge_logistic_network_items = prometheus.gauge("factorio_logistic_network_items
gauge_power_production_input = prometheus.gauge("factorio_power_production_input", "power produced", {"force", "name", "network", "surface"})
gauge_power_production_output = prometheus.gauge("factorio_power_production_output", "power consumed", {"force", "name", "network", "surface"})


script.on_init(function()
if game.active_mods["YARM"] then
global.yarm_on_site_update_event_id = remote.call("YARM", "get_on_site_updated_event_id")
Expand All @@ -82,10 +93,12 @@ script.on_init(function()
script.on_event(defines.events.on_player_mined_entity, on_power_destroy)
script.on_event(defines.events.on_robot_mined_entity, on_power_destroy)
script.on_event(defines.events.on_entity_died, on_power_destroy)
script.on_event(defines.events.script_raised_destroy, on_power_destroy)
script.on_event(defines.events.script_raised_destroy, on_power_destroy)

end)
-- research events
script.on_event(defines.events.on_research_finished, on_research_finished)

end)


script.on_load(function()
Expand Down Expand Up @@ -118,8 +131,12 @@ script.on_load(function()
script.on_event(defines.events.on_entity_died, on_power_destroy)
script.on_event(defines.events.script_raised_destroy, on_power_destroy)

-- research events
script.on_event(defines.events.on_research_finished, on_research_finished)

end)


script.on_configuration_changed(function(event)
if game.active_mods["YARM"] then
global.yarm_on_site_update_event_id = remote.call("YARM", "get_on_site_updated_event_id")
Expand Down
33 changes: 33 additions & 0 deletions events.lua
Original file line number Diff line number Diff line change
@@ -1,12 +1,21 @@
function register_events(event)
gauge_tick:set(game.tick)

for _, surface in pairs(game.surfaces) do
gauge_seed:set(surface.map_gen_settings.seed, {surface.name})
end

for name, version in pairs(game.active_mods) do
gauge_mods:set(1, {name, version})
end

for _, player in pairs(game.players) do
stats = {
{player.force.item_production_statistics, gauge_item_production_input, gauge_item_production_output},
{player.force.fluid_production_statistics, gauge_fluid_production_input, gauge_fluid_production_output},
{player.force.kill_count_statistics, gauge_kill_count_input, gauge_kill_count_output},
{player.force.entity_build_count_statistics, gauge_entity_build_count_input, gauge_entity_build_count_output},
{game.pollution_statistics, gauge_pollution_production_input, gauge_pollution_production_output}
}

for _, stat in pairs(stats) do
Expand All @@ -19,6 +28,17 @@ function register_events(event)
end
end

evolution = {
{player.force.evolution_factor, "total"},
{player.force.evolution_factor_by_pollution, "by_pollution"},
{player.force.evolution_factor_by_time, "by_time"},
{player.force.evolution_factor_by_killing_spawners, "by_killing_spawners"}
}

for _, stat in pairs(evolution) do
gauge_evolution:set(stat[1], {player.force.name, stat[2]})
end

for name, n in pairs(player.force.items_launched) do
gauge_items_launched:set(n, {player.force.name, name})
end
Expand All @@ -43,6 +63,19 @@ function register_events(event)
end
end
end

gauge_research_queue:reset()
local researched_queue = global.last_research and global.last_research["player.force.name"] or false
if researched_queue then
gauge_research_queue:set(researched_queue.researched and 1 or 0, {player.force.name, researched_queue.name, researched_queue.level, -1})
end

-- Levels dont get matched properly so store and save
local levels = {}
for idx, tech in pairs(player.force.research_queue or {player.force.current_research}) do
levels[tech.name] = levels[tech.name] and levels[tech.name] + 1 or tech.level
gauge_research_queue:set(idx == 1 and player.force.research_progress or 0, {player.force.name, tech.name, levels[tech.name], idx})
end
end

-- power tick handler
Expand Down
18 changes: 18 additions & 0 deletions research.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
function on_research_finished(event)
local research = event.research
if not global.last_research then
global.last_research = {}
end

local level = research.level
-- Previous research is incorrect lvl if it has more than one research
if level > 1 then
level = level - 1
end

global.last_research[research.force.name] = {
researched = 1,
name = research.name,
level = level
}
end

0 comments on commit b192a82

Please sign in to comment.