Software /
code /
prosody-modules
Comparison
mod_storage_appendmap/mod_storage_appendmap.lua @ 5714: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 |
parent | 5713:ea6c18ec0669 |
comparison
equal
deleted
inserted
replaced
5713:ea6c18ec0669 | 5714: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"); |