110 lines
2.9 KiB
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
|