From c0e717fe27cdba61c24627c04db3e54838163d41 Mon Sep 17 00:00:00 2001 From: Aaron Suen Date: Tue, 20 Aug 2024 07:00:39 -0400 Subject: [PATCH] Publish lagometer JSON file If the szutil_lagometer_publish_json setting is enabled, write a JSON file to the world path with lagometer data every publish cycle, so that external systems can access it. Also fix formatting issues in the lagometer format string. --- szutil_lagometer/init.lua | 31 ++++++++++++++++++++++++------- 1 file changed, 24 insertions(+), 7 deletions(-) diff --git a/szutil_lagometer/init.lua b/szutil_lagometer/init.lua index c859400..c3d98f0 100644 --- a/szutil_lagometer/init.lua +++ b/szutil_lagometer/init.lua @@ -1,10 +1,10 @@ -- LUALOCALS < --------------------------------------------------------- -local ipairs, loadstring, math, minetest, pairs, string, tonumber - = ipairs, loadstring, math, minetest, pairs, string, tonumber -local math_ceil, math_floor, string_format, string_gsub, string_rep, - string_sub - = math.ceil, math.floor, string.format, string.gsub, string.rep, - string.sub +local ipairs, loadstring, math, minetest, os, pairs, string, tonumber + = ipairs, loadstring, math, minetest, os, pairs, string, tonumber +local math_ceil, math_floor, os_time, string_format, string_gsub, + string_rep, string_sub + = math.ceil, math.floor, os.time, string.format, string.gsub, + string.rep, string.sub -- LUALOCALS > --------------------------------------------------------- local modname = minetest.get_current_modname() @@ -121,6 +121,7 @@ local graphbar = string_rep("|", graphbar_width) -- Function to publish current lag values to all receiving parties. local hud_elem_type = minetest.features.hud_def_type_field and "type" or "hud_elem_type" +local meterfmt = "%2.2f %s %2.2f%s" local function publish() -- Expire old periods, and accumulate current ones. local accum = newperiod() @@ -141,7 +142,7 @@ local function publish() for bucket = 1, bucket_max do local qty = accum[bucket] - local line = qty <= 0 and "" or string_format(" % 2.2f % s % 2.2f % s", qty, + local line = qty <= 0 and "" or string_format(meterfmt, qty, -- Maximum width of a graph bar corresponds to 50% of the total -- time in the window, so that there will never be 2 bars of the -- same length that don't have the same amount of time, even if @@ -194,6 +195,22 @@ local function publish() end end end + + -- Publish a JSON dump for external use. + if minetest.settings:get_bool(modname .. "_publish_json") then + minetest.safe_file_write( + minetest.get_worldpath() .. "/lagometer.json", + minetest.write_json({ + timestamp = os_time(), + interval = interval, + period_length = period_length, + period_count = period_count, + bucket_step = bucket_step, + bucket_max = bucket_max, + buckets = accum + })) + end + end -- Run the publish method on a timer, so that player displays