|
@@ -0,0 +1,107 @@
|
|
|
+-- ===================================================================
|
|
|
+-- /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
|
|
|
+
|
|
|
+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
|
|
|
+
|
|
|
+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
|