modpol/modpol_core/storage/unix-storage.lua

110 lines
2.9 KiB
Lua

-- ===================================================================
-- /unix-storage.lua
-- Persistent storage in /data using Serpent Serializer
-- Unix systems only
modpol.datadir = modpol.topdir .. "/data"
modpol.file_ledger = modpol.datadir .. "/ledger.dat"
modpol.file_orgs = modpol.datadir .. "/orgs.dat"
os.execute ("mkdir -p " .. modpol.datadir)
modpol.ocutil.setlogdir (modpol.datadir)
modpol.ocutil.setlogname ("modpol.log")
modpol.serpent = {}
dofile (modpol.topdir .. "/util/serpent/serpent.lua")
-- ===================================================================
local write_file = function(path, data)
local file, err
file, err = io.open(path, "w")
if err then print(err) os.exit(1) end
file:write(data)
file:close()
end
local read_file = function(path)
local file, err
file, err = io.open(path, "r")
if err then return nil end
local data = file:read()
file:close()
return data
end
-- ===================================================================
local store_ledger = function(verbose)
local serialized_ledger = modpol.serpent.dump(modpol.ledger)
write_file(modpol.file_ledger, serialized_ledger)
local count = 0
for _ in pairs(modpol.ledger) do count = count + 1 end
if verbose then modpol.ocutil.log(count .. " ledger entries stored to disk")
end
end
local store_orgs = function(verbose)
local serialized_orgs = modpol.serpent.dump(modpol.orgs)
write_file(modpol.file_orgs, serialized_orgs)
local count = 0
for _ in pairs(modpol.orgs.array) do count = count + 1 end
if verbose then modpol.ocutil.log(count .. " orgs stored to disk")
end
end
modpol.store_data = function(verbose)
store_ledger(verbose)
store_orgs(verbose)
end
-- ===================================================================
local load_ledger = function()
local obj = read_file(modpol.file_ledger)
if obj ~= nil then
local func, err = load(obj)
if err then
modpol.ocutil.log("Error loading ledger data")
os.exit(1)
end
modpol.ledger = func()
local count = 0
for _ in pairs(modpol.ledger) do count = count + 1 end
modpol.ocutil.log(count .. " ledger entries loaded from disk")
else
modpol.ocutil.log("No stored ledger data found")
end
end
local load_orgs = function()
local obj = read_file(modpol.file_orgs)
if obj ~= nil then
local func, err = load(obj)
if err then
modpol.ocutil.log("Error loading org data")
os.exit(1)
end
modpol.orgs = func()
local count = 0
for _ in pairs(modpol.orgs.array) do count = count + 1 end
modpol.ocutil.log(count .. " orgs loaded from disk")
else
modpol.ocutil.log("No stored orgs found")
end
end
modpol.load_storage = function()
load_ledger()
load_orgs()
end