Mercurial > prosody-modules
comparison mod_storage_appendmap/mod_storage_appendmap.lua @ 5691:78f766372e2c
mod_storage_appendmap: Include timestamps when appending data
Meant to give some sense of when each piece of data was added, to aid in
debugging changes or manual rollbacks.
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Sun, 05 Nov 2023 21:06:23 +0100 |
| parents | ea6c18ec0669 |
| children | f61564e11d3b |
comparison
equal
deleted
inserted
replaced
| 5690:ea6c18ec0669 | 5691:78f766372e2c |
|---|---|
| 1 local dump = require "util.serialization".serialize; | 1 local dump = require "util.serialization".serialize; |
| 2 local load = require "util.envload".envloadfile; | 2 local load = require "util.envload".envloadfile; |
| 3 local datetime = require "util.datetime".datetime; | |
| 3 local dm = require "core.storagemanager".olddm; | 4 local dm = require "core.storagemanager".olddm; |
| 4 | 5 |
| 5 local REMOVE = {}; -- Special value for removing keys | 6 local REMOVE = {}; -- Special value for removing keys |
| 6 | 7 |
| 7 local driver = {}; | 8 local driver = {}; |
| 8 | 9 |
| 10 local timestamps = module:get_option_boolean("appendmap_timestamps", true); | |
| 9 | 11 |
| 10 local keywords = { | 12 local keywords = { |
| 11 ["do"] = true; ["and"] = true; ["else"] = true; ["break"] = true; | 13 ["do"] = true; ["and"] = true; ["else"] = true; ["break"] = true; |
| 12 ["if"] = true; ["end"] = true; ["goto"] = true; ["false"] = true; | 14 ["if"] = true; ["end"] = true; ["goto"] = true; ["false"] = true; |
| 13 ["in"] = true; ["for"] = true; ["then"] = true; ["local"] = true; | 15 ["in"] = true; ["for"] = true; ["then"] = true; ["local"] = true; |
| 80 return env[key]; | 82 return env[key]; |
| 81 end | 83 end |
| 82 | 84 |
| 83 function map:set_keys(user, keyvalues) | 85 function map:set_keys(user, keyvalues) |
| 84 local data = serialize_map(keyvalues); | 86 local data = serialize_map(keyvalues); |
| 87 if timestamps then | |
| 88 data = "-- " .. datetime() .. "\n" .. data; | |
| 89 end | |
| 85 return dm.append_raw(user, module.host, self.store, "map", data); | 90 return dm.append_raw(user, module.host, self.store, "map", data); |
| 86 end | 91 end |
| 87 | 92 |
| 88 function map:set(user, key, value) | 93 function map:set(user, key, value) |
| 89 if _VERSION == "Lua 5.1" then | 94 if _VERSION == "Lua 5.1" then |
| 92 if key == nil then | 97 if key == nil then |
| 93 local filename = dm.getpath(user, module.host, self.store, "map"); | 98 local filename = dm.getpath(user, module.host, self.store, "map"); |
| 94 return os.remove(filename); | 99 return os.remove(filename); |
| 95 end | 100 end |
| 96 local data = serialize_pair(key, value); | 101 local data = serialize_pair(key, value); |
| 102 if timestamps then | |
| 103 data = "-- " .. datetime() .. "\n" .. data; | |
| 104 end | |
| 97 return dm.append_raw(user, module.host, self.store, "map", data); | 105 return dm.append_raw(user, module.host, self.store, "map", data); |
| 98 end | 106 end |
| 99 | 107 |
| 100 function map:items() | 108 function map:items() |
| 101 return dm.users(module.host, self.store, "map"); | 109 return dm.users(module.host, self.store, "map"); |
| 108 return map.get(self, user, nil); | 116 return map.get(self, user, nil); |
| 109 end | 117 end |
| 110 | 118 |
| 111 function keyval:set(user, keyvalues) | 119 function keyval:set(user, keyvalues) |
| 112 local data = serialize_map(keyvalues); | 120 local data = serialize_map(keyvalues); |
| 121 if timestamps then | |
| 122 data = "-- " .. datetime() .. "\n" .. data; | |
| 123 end | |
| 113 return dm.store_raw(dm.getpath(user, module.host, self.store, "map"), data); | 124 return dm.store_raw(dm.getpath(user, module.host, self.store, "map"), data); |
| 114 end | 125 end |
| 115 | 126 |
| 116 function keyval:users() | 127 function keyval:users() |
| 117 return dm.users(module.host, self.store, "map"); | 128 return dm.users(module.host, self.store, "map"); |
