Migrate usage database to json
This commit is contained in:
parent
7d88a00c4f
commit
d31bc2e71b
@ -1,8 +1,10 @@
|
||||
-- LUALOCALS < ---------------------------------------------------------
|
||||
local io, ipairs, math, minetest, pairs, table, type
|
||||
= io, ipairs, math, minetest, pairs, table, type
|
||||
local io_open, math_floor, table_concat, table_sort
|
||||
= io.open, math.floor, table.concat, table.sort
|
||||
local io, ipairs, math, minetest, pairs, string, table, type
|
||||
= io, ipairs, math, minetest, pairs, string, table, type
|
||||
local io_open, math_floor, string_gsub, string_match, table_concat,
|
||||
table_sort
|
||||
= io.open, math.floor, string.gsub, string.match, table.concat,
|
||||
table.sort
|
||||
-- LUALOCALS > ---------------------------------------------------------
|
||||
|
||||
local modname = minetest.get_current_modname()
|
||||
@ -136,13 +138,13 @@ local function deepadd(t, u)
|
||||
return t
|
||||
end
|
||||
|
||||
local dbnamepattern = "^blk.*%.json$"
|
||||
local function dbpath(id)
|
||||
local p = minetest.get_worldpath() .. "/" .. modname
|
||||
if id then
|
||||
id = "" .. id
|
||||
|
||||
if id:sub(1, 3) ~= "blk" then
|
||||
id = "blk" .. id .. ".txt"
|
||||
id = "blk" .. id .. ".json"
|
||||
end
|
||||
p = p .. "/" .. id
|
||||
end
|
||||
@ -152,9 +154,9 @@ end
|
||||
local function dbload(id)
|
||||
local f = io_open(dbpath(id))
|
||||
if not f then return {} end
|
||||
local u = minetest.deserialize(f:read("*all"))
|
||||
local s = f:read("*all")
|
||||
f:close()
|
||||
return u
|
||||
return s and minetest.parse_json(s)
|
||||
end
|
||||
|
||||
local lasttime = minetest.get_us_time() / 1000000
|
||||
@ -169,7 +171,7 @@ local function dbflush(forcerpt)
|
||||
minetest.mkdir(dbpath())
|
||||
for id, t in pairs(db) do
|
||||
t = deepadd(dbload(id), t)
|
||||
minetest.safe_file_write(dbpath(id), minetest.serialize(t))
|
||||
minetest.safe_file_write(dbpath(id), minetest.write_json(t))
|
||||
savedqty = savedqty + 1
|
||||
end
|
||||
db = {}
|
||||
@ -268,11 +270,60 @@ minetest.register_chatcommand("worlduse", {
|
||||
t = deepadd(t, v)
|
||||
end
|
||||
for _, v in ipairs(minetest.get_dir_list(dbpath(), false)) do
|
||||
if string_match(v, dbnamepattern) then
|
||||
t = deepadd(t, dbload(v))
|
||||
end
|
||||
end
|
||||
|
||||
minetest.chat_send_player(name, fmtrpt(t))
|
||||
end
|
||||
})
|
||||
|
||||
------------------------------------------------------------------------
|
||||
-- DATABASE MIGRATION
|
||||
|
||||
do
|
||||
local started = minetest.get_us_time()
|
||||
|
||||
local clean = 0
|
||||
local dirty = 0
|
||||
local fail = 0
|
||||
|
||||
local dirlist = minetest.get_dir_list(dbpath(), false)
|
||||
local exists = {}
|
||||
for _, v in ipairs(dirlist) do exists[v] = true end
|
||||
for _, v in ipairs(dirlist) do
|
||||
if string_match(v, "^blk.*%.txt$") then
|
||||
local jv = string_gsub(v, "%.txt$", ".json")
|
||||
if exists[jv] then
|
||||
clean = clean + 1
|
||||
else
|
||||
local f = io_open(dbpath(v))
|
||||
if not f then
|
||||
fail = fail + 1
|
||||
else
|
||||
local s = f:read("*all")
|
||||
f:close()
|
||||
local u = minetest.deserialize(s)
|
||||
if not u then
|
||||
fail = fail + 1
|
||||
else
|
||||
minetest.safe_file_write(dbpath(jv),
|
||||
minetest.write_json(u))
|
||||
dirty = dirty + 1
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
local ms = math_floor((minetest.get_us_time() - started) / 1000)
|
||||
if clean + dirty + fail == 0 then
|
||||
minetest.log("action", modname .. ": db checked in " .. ms .. "ms")
|
||||
else
|
||||
minetest.log("action", modname .. ": db converted " .. dirty
|
||||
.. ", " .. fail .. " failed, " .. clean .. " skipped in "
|
||||
.. ms .. "ms")
|
||||
end
|
||||
end
|
||||
|
||||
------------------------------------------------------------------------
|
||||
|
Loading…
x
Reference in New Issue
Block a user