Software /
code /
prosody
Annotate
plugins/mod_storage_memory.lua @ 10996:d742095046f9
net.cqueues: Switch to server.watchfd for main loop integration
Why? Just look at all that code deleted!
watchfd is the prefered way to poll things that expose FDs for this
purpose, altho it was added after net.cqueues.
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Wed, 08 Jul 2020 20:11:49 +0200 |
parent | 10926:c55bd98a54f8 |
child | 11274:ecbfde402364 |
rev | line source |
---|---|
9293
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1 local serialize = require "util.serialization".serialize; |
9535
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
2 local array = require "util.array"; |
9293
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
3 local envload = require "util.envload".envload; |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
4 local st = require "util.stanza"; |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5 local is_stanza = st.is_stanza or function (s) return getmetatable(s) == st.stanza_mt end |
9838
40ed04014b97
mod_storage_memory: Generate ID using standard util (fixes #1326)
Kim Alvefur <zash@zash.se>
parents:
9832
diff
changeset
|
6 local new_id = require "util.id".medium; |
9293
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
7 |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
8 local auto_purge_enabled = module:get_option_boolean("storage_memory_temporary", false); |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
9 local auto_purge_stores = module:get_option_set("storage_memory_temporary_stores", {}); |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
10 |
9887
69f810014853
mod_storage_memory: Add support for archive item limits
Kim Alvefur <zash@zash.se>
parents:
9882
diff
changeset
|
11 local archive_item_limit = module:get_option_number("storage_archive_item_limit", 1000); |
69f810014853
mod_storage_memory: Add support for archive item limits
Kim Alvefur <zash@zash.se>
parents:
9882
diff
changeset
|
12 |
9293
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
13 local memory = setmetatable({}, { |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
14 __index = function(t, k) |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
15 local store = module:shared(k) |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
16 t[k] = store; |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
17 return store; |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
18 end |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
19 }); |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
20 |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
21 local function NULL() return nil end |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
22 |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
23 local function _purge_store(self, username) |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
24 self.store[username or NULL] = nil; |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
25 return true; |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
26 end |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
27 |
9881
68faa0c1a99c
mod_storage_memory: Implement :user iteration API
Kim Alvefur <zash@zash.se>
parents:
9838
diff
changeset
|
28 local function _users(self) |
68faa0c1a99c
mod_storage_memory: Implement :user iteration API
Kim Alvefur <zash@zash.se>
parents:
9838
diff
changeset
|
29 return next, self.store, nil; |
68faa0c1a99c
mod_storage_memory: Implement :user iteration API
Kim Alvefur <zash@zash.se>
parents:
9838
diff
changeset
|
30 end |
68faa0c1a99c
mod_storage_memory: Implement :user iteration API
Kim Alvefur <zash@zash.se>
parents:
9838
diff
changeset
|
31 |
9293
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
32 local keyval_store = {}; |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
33 keyval_store.__index = keyval_store; |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
34 |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
35 function keyval_store:get(username) |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
36 return (self.store[username or NULL] or NULL)(); |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
37 end |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
38 |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
39 function keyval_store:set(username, data) |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
40 if data ~= nil then |
9468
bd5e4485a245
mod_storage_memory: Switch from '@' prefix to '=' for chunks, '@' is used to indicate a source file name only
Matthew Wild <mwild1@gmail.com>
parents:
9340
diff
changeset
|
41 data = envload("return "..serialize(data), "=(data)", {}); |
9293
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
42 end |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
43 self.store[username or NULL] = data; |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
44 return true; |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
45 end |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
46 |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
47 keyval_store.purge = _purge_store; |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
48 |
9881
68faa0c1a99c
mod_storage_memory: Implement :user iteration API
Kim Alvefur <zash@zash.se>
parents:
9838
diff
changeset
|
49 keyval_store.users = _users; |
68faa0c1a99c
mod_storage_memory: Implement :user iteration API
Kim Alvefur <zash@zash.se>
parents:
9838
diff
changeset
|
50 |
9293
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
51 local archive_store = {}; |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
52 archive_store.__index = archive_store; |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
53 |
9881
68faa0c1a99c
mod_storage_memory: Implement :user iteration API
Kim Alvefur <zash@zash.se>
parents:
9838
diff
changeset
|
54 archive_store.users = _users; |
68faa0c1a99c
mod_storage_memory: Implement :user iteration API
Kim Alvefur <zash@zash.se>
parents:
9838
diff
changeset
|
55 |
9887
69f810014853
mod_storage_memory: Add support for archive item limits
Kim Alvefur <zash@zash.se>
parents:
9882
diff
changeset
|
56 archive_store.caps = { |
69f810014853
mod_storage_memory: Add support for archive item limits
Kim Alvefur <zash@zash.se>
parents:
9882
diff
changeset
|
57 total = true; |
69f810014853
mod_storage_memory: Add support for archive item limits
Kim Alvefur <zash@zash.se>
parents:
9882
diff
changeset
|
58 quota = archive_item_limit; |
69f810014853
mod_storage_memory: Add support for archive item limits
Kim Alvefur <zash@zash.se>
parents:
9882
diff
changeset
|
59 truncate = true; |
69f810014853
mod_storage_memory: Add support for archive item limits
Kim Alvefur <zash@zash.se>
parents:
9882
diff
changeset
|
60 }; |
69f810014853
mod_storage_memory: Add support for archive item limits
Kim Alvefur <zash@zash.se>
parents:
9882
diff
changeset
|
61 |
9293
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
62 function archive_store:append(username, key, value, when, with) |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
63 if is_stanza(value) then |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
64 value = st.preserialize(value); |
9468
bd5e4485a245
mod_storage_memory: Switch from '@' prefix to '=' for chunks, '@' is used to indicate a source file name only
Matthew Wild <mwild1@gmail.com>
parents:
9340
diff
changeset
|
65 value = envload("return xml"..serialize(value), "=(stanza)", { xml = st.deserialize }) |
9293
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
66 else |
9468
bd5e4485a245
mod_storage_memory: Switch from '@' prefix to '=' for chunks, '@' is used to indicate a source file name only
Matthew Wild <mwild1@gmail.com>
parents:
9340
diff
changeset
|
67 value = envload("return "..serialize(value), "=(data)", {}); |
9293
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
68 end |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
69 local a = self.store[username or NULL]; |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
70 if not a then |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
71 a = {}; |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
72 self.store[username or NULL] = a; |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
73 end |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
74 local v = { key = key, when = when, with = with, value = value }; |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
75 if not key then |
9838
40ed04014b97
mod_storage_memory: Generate ID using standard util (fixes #1326)
Kim Alvefur <zash@zash.se>
parents:
9832
diff
changeset
|
76 key = new_id(); |
9293
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
77 v.key = key; |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
78 end |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
79 if a[key] then |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
80 table.remove(a, a[key]); |
9887
69f810014853
mod_storage_memory: Add support for archive item limits
Kim Alvefur <zash@zash.se>
parents:
9882
diff
changeset
|
81 elseif #a >= archive_item_limit then |
69f810014853
mod_storage_memory: Add support for archive item limits
Kim Alvefur <zash@zash.se>
parents:
9882
diff
changeset
|
82 return nil, "quota-limit"; |
9293
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
83 end |
9534
b301f7edf346
mod_storage_memory: Fix overwriting old keys
Kim Alvefur <zash@zash.se>
parents:
9533
diff
changeset
|
84 local i = #a+1; |
9293
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
85 a[i] = v; |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
86 a[key] = i; |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
87 return key; |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
88 end |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
89 |
9832
96d9c121547b
mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents:
9609
diff
changeset
|
90 function archive_store:find(username, query) |
96d9c121547b
mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents:
9609
diff
changeset
|
91 local items = self.store[username or NULL]; |
96d9c121547b
mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents:
9609
diff
changeset
|
92 if not items then |
9997
7c4631d7b6fb
mod_storage_internal,memory: Only return total count if requested
Kim Alvefur <zash@zash.se>
parents:
9906
diff
changeset
|
93 if query then |
10023
f6959fe81a1d
mod_storage_memory: Return correct error even if no archive data available
Kim Alvefur <zash@zash.se>
parents:
10019
diff
changeset
|
94 if query.before or query.after then |
f6959fe81a1d
mod_storage_memory: Return correct error even if no archive data available
Kim Alvefur <zash@zash.se>
parents:
10019
diff
changeset
|
95 return nil, "item-not-found"; |
f6959fe81a1d
mod_storage_memory: Return correct error even if no archive data available
Kim Alvefur <zash@zash.se>
parents:
10019
diff
changeset
|
96 end |
9997
7c4631d7b6fb
mod_storage_internal,memory: Only return total count if requested
Kim Alvefur <zash@zash.se>
parents:
9906
diff
changeset
|
97 if query.total then |
7c4631d7b6fb
mod_storage_internal,memory: Only return total count if requested
Kim Alvefur <zash@zash.se>
parents:
9906
diff
changeset
|
98 return function () end, 0; |
7c4631d7b6fb
mod_storage_internal,memory: Only return total count if requested
Kim Alvefur <zash@zash.se>
parents:
9906
diff
changeset
|
99 end |
7c4631d7b6fb
mod_storage_internal,memory: Only return total count if requested
Kim Alvefur <zash@zash.se>
parents:
9906
diff
changeset
|
100 end |
7c4631d7b6fb
mod_storage_internal,memory: Only return total count if requested
Kim Alvefur <zash@zash.se>
parents:
9906
diff
changeset
|
101 return function () end; |
9832
96d9c121547b
mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents:
9609
diff
changeset
|
102 end |
9997
7c4631d7b6fb
mod_storage_internal,memory: Only return total count if requested
Kim Alvefur <zash@zash.se>
parents:
9906
diff
changeset
|
103 local count = nil; |
10926
c55bd98a54f8
mod_storage_internal, mod_storage_memory: Add support for query.before
Matthew Wild <mwild1@gmail.com>
parents:
10839
diff
changeset
|
104 local i, last_key = 0; |
9832
96d9c121547b
mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents:
9609
diff
changeset
|
105 if query then |
96d9c121547b
mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents:
9609
diff
changeset
|
106 items = array():append(items); |
96d9c121547b
mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents:
9609
diff
changeset
|
107 if query.key then |
96d9c121547b
mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents:
9609
diff
changeset
|
108 items:filter(function (item) |
96d9c121547b
mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents:
9609
diff
changeset
|
109 return item.key == query.key; |
96d9c121547b
mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents:
9609
diff
changeset
|
110 end); |
96d9c121547b
mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents:
9609
diff
changeset
|
111 end |
96d9c121547b
mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents:
9609
diff
changeset
|
112 if query.with then |
96d9c121547b
mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents:
9609
diff
changeset
|
113 items:filter(function (item) |
96d9c121547b
mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents:
9609
diff
changeset
|
114 return item.with == query.with; |
96d9c121547b
mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents:
9609
diff
changeset
|
115 end); |
96d9c121547b
mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents:
9609
diff
changeset
|
116 end |
96d9c121547b
mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents:
9609
diff
changeset
|
117 if query.start then |
96d9c121547b
mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents:
9609
diff
changeset
|
118 items:filter(function (item) |
96d9c121547b
mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents:
9609
diff
changeset
|
119 return item.when >= query.start; |
96d9c121547b
mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents:
9609
diff
changeset
|
120 end); |
96d9c121547b
mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents:
9609
diff
changeset
|
121 end |
96d9c121547b
mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents:
9609
diff
changeset
|
122 if query["end"] then |
96d9c121547b
mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents:
9609
diff
changeset
|
123 items:filter(function (item) |
96d9c121547b
mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents:
9609
diff
changeset
|
124 return item.when <= query["end"]; |
96d9c121547b
mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents:
9609
diff
changeset
|
125 end); |
96d9c121547b
mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents:
9609
diff
changeset
|
126 end |
9997
7c4631d7b6fb
mod_storage_internal,memory: Only return total count if requested
Kim Alvefur <zash@zash.se>
parents:
9906
diff
changeset
|
127 if query.total then |
7c4631d7b6fb
mod_storage_internal,memory: Only return total count if requested
Kim Alvefur <zash@zash.se>
parents:
9906
diff
changeset
|
128 count = #items; |
7c4631d7b6fb
mod_storage_internal,memory: Only return total count if requested
Kim Alvefur <zash@zash.se>
parents:
9906
diff
changeset
|
129 end |
9832
96d9c121547b
mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents:
9609
diff
changeset
|
130 if query.reverse then |
96d9c121547b
mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents:
9609
diff
changeset
|
131 items:reverse(); |
96d9c121547b
mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents:
9609
diff
changeset
|
132 if query.before then |
10019
c30c81176752
mod_storage_memory: Return error if 'before' or 'after' are not found (partial fix for #1325)
Kim Alvefur <zash@zash.se>
parents:
9997
diff
changeset
|
133 local found = false; |
9997
7c4631d7b6fb
mod_storage_internal,memory: Only return total count if requested
Kim Alvefur <zash@zash.se>
parents:
9906
diff
changeset
|
134 for j = 1, #items do |
9832
96d9c121547b
mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents:
9609
diff
changeset
|
135 if (items[j].key or tostring(j)) == query.before then |
10019
c30c81176752
mod_storage_memory: Return error if 'before' or 'after' are not found (partial fix for #1325)
Kim Alvefur <zash@zash.se>
parents:
9997
diff
changeset
|
136 found = true; |
9832
96d9c121547b
mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents:
9609
diff
changeset
|
137 i = j; |
96d9c121547b
mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents:
9609
diff
changeset
|
138 break; |
96d9c121547b
mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents:
9609
diff
changeset
|
139 end |
96d9c121547b
mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents:
9609
diff
changeset
|
140 end |
10019
c30c81176752
mod_storage_memory: Return error if 'before' or 'after' are not found (partial fix for #1325)
Kim Alvefur <zash@zash.se>
parents:
9997
diff
changeset
|
141 if not found then |
c30c81176752
mod_storage_memory: Return error if 'before' or 'after' are not found (partial fix for #1325)
Kim Alvefur <zash@zash.se>
parents:
9997
diff
changeset
|
142 return nil, "item-not-found"; |
c30c81176752
mod_storage_memory: Return error if 'before' or 'after' are not found (partial fix for #1325)
Kim Alvefur <zash@zash.se>
parents:
9997
diff
changeset
|
143 end |
9832
96d9c121547b
mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents:
9609
diff
changeset
|
144 end |
10926
c55bd98a54f8
mod_storage_internal, mod_storage_memory: Add support for query.before
Matthew Wild <mwild1@gmail.com>
parents:
10839
diff
changeset
|
145 elseif query.before then |
c55bd98a54f8
mod_storage_internal, mod_storage_memory: Add support for query.before
Matthew Wild <mwild1@gmail.com>
parents:
10839
diff
changeset
|
146 last_key = query.before; |
9832
96d9c121547b
mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents:
9609
diff
changeset
|
147 elseif query.after then |
10019
c30c81176752
mod_storage_memory: Return error if 'before' or 'after' are not found (partial fix for #1325)
Kim Alvefur <zash@zash.se>
parents:
9997
diff
changeset
|
148 local found = false; |
9997
7c4631d7b6fb
mod_storage_internal,memory: Only return total count if requested
Kim Alvefur <zash@zash.se>
parents:
9906
diff
changeset
|
149 for j = 1, #items do |
9832
96d9c121547b
mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents:
9609
diff
changeset
|
150 if (items[j].key or tostring(j)) == query.after then |
10019
c30c81176752
mod_storage_memory: Return error if 'before' or 'after' are not found (partial fix for #1325)
Kim Alvefur <zash@zash.se>
parents:
9997
diff
changeset
|
151 found = true; |
9832
96d9c121547b
mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents:
9609
diff
changeset
|
152 i = j; |
96d9c121547b
mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents:
9609
diff
changeset
|
153 break; |
96d9c121547b
mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents:
9609
diff
changeset
|
154 end |
96d9c121547b
mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents:
9609
diff
changeset
|
155 end |
10019
c30c81176752
mod_storage_memory: Return error if 'before' or 'after' are not found (partial fix for #1325)
Kim Alvefur <zash@zash.se>
parents:
9997
diff
changeset
|
156 if not found then |
c30c81176752
mod_storage_memory: Return error if 'before' or 'after' are not found (partial fix for #1325)
Kim Alvefur <zash@zash.se>
parents:
9997
diff
changeset
|
157 return nil, "item-not-found"; |
c30c81176752
mod_storage_memory: Return error if 'before' or 'after' are not found (partial fix for #1325)
Kim Alvefur <zash@zash.se>
parents:
9997
diff
changeset
|
158 end |
9832
96d9c121547b
mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents:
9609
diff
changeset
|
159 end |
96d9c121547b
mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents:
9609
diff
changeset
|
160 if query.limit and #items - i > query.limit then |
96d9c121547b
mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents:
9609
diff
changeset
|
161 items[i+query.limit+1] = nil; |
9293
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
162 end |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
163 end |
9832
96d9c121547b
mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents:
9609
diff
changeset
|
164 return function () |
96d9c121547b
mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents:
9609
diff
changeset
|
165 i = i + 1; |
96d9c121547b
mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents:
9609
diff
changeset
|
166 local item = items[i]; |
10926
c55bd98a54f8
mod_storage_internal, mod_storage_memory: Add support for query.before
Matthew Wild <mwild1@gmail.com>
parents:
10839
diff
changeset
|
167 if not item or (last_key and item.key == last_key) then return; end |
9832
96d9c121547b
mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents:
9609
diff
changeset
|
168 return item.key, item.value(), item.when, item.with; |
96d9c121547b
mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents:
9609
diff
changeset
|
169 end, count; |
9293
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
170 end |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
171 |
10839
018acdaf374f
mod_storage_memory: Add map store methods to archive store
Kim Alvefur <zash@zash.se>
parents:
10222
diff
changeset
|
172 function archive_store:get(username, wanted_key) |
018acdaf374f
mod_storage_memory: Add map store methods to archive store
Kim Alvefur <zash@zash.se>
parents:
10222
diff
changeset
|
173 local items = self.store[username or NULL]; |
018acdaf374f
mod_storage_memory: Add map store methods to archive store
Kim Alvefur <zash@zash.se>
parents:
10222
diff
changeset
|
174 if not items then return nil, "item-not-found"; end |
018acdaf374f
mod_storage_memory: Add map store methods to archive store
Kim Alvefur <zash@zash.se>
parents:
10222
diff
changeset
|
175 local i = items[wanted_key]; |
018acdaf374f
mod_storage_memory: Add map store methods to archive store
Kim Alvefur <zash@zash.se>
parents:
10222
diff
changeset
|
176 if not i then return nil, "item-not-found"; end |
018acdaf374f
mod_storage_memory: Add map store methods to archive store
Kim Alvefur <zash@zash.se>
parents:
10222
diff
changeset
|
177 local item = items[i]; |
018acdaf374f
mod_storage_memory: Add map store methods to archive store
Kim Alvefur <zash@zash.se>
parents:
10222
diff
changeset
|
178 return item.value(), item.when, item.with; |
018acdaf374f
mod_storage_memory: Add map store methods to archive store
Kim Alvefur <zash@zash.se>
parents:
10222
diff
changeset
|
179 end |
018acdaf374f
mod_storage_memory: Add map store methods to archive store
Kim Alvefur <zash@zash.se>
parents:
10222
diff
changeset
|
180 |
018acdaf374f
mod_storage_memory: Add map store methods to archive store
Kim Alvefur <zash@zash.se>
parents:
10222
diff
changeset
|
181 function archive_store:set(username, wanted_key, new_value, new_when, new_with) |
018acdaf374f
mod_storage_memory: Add map store methods to archive store
Kim Alvefur <zash@zash.se>
parents:
10222
diff
changeset
|
182 local items = self.store[username or NULL]; |
018acdaf374f
mod_storage_memory: Add map store methods to archive store
Kim Alvefur <zash@zash.se>
parents:
10222
diff
changeset
|
183 if not items then return nil, "item-not-found"; end |
018acdaf374f
mod_storage_memory: Add map store methods to archive store
Kim Alvefur <zash@zash.se>
parents:
10222
diff
changeset
|
184 local i = items[wanted_key]; |
018acdaf374f
mod_storage_memory: Add map store methods to archive store
Kim Alvefur <zash@zash.se>
parents:
10222
diff
changeset
|
185 if not i then return nil, "item-not-found"; end |
018acdaf374f
mod_storage_memory: Add map store methods to archive store
Kim Alvefur <zash@zash.se>
parents:
10222
diff
changeset
|
186 local item = items[i]; |
018acdaf374f
mod_storage_memory: Add map store methods to archive store
Kim Alvefur <zash@zash.se>
parents:
10222
diff
changeset
|
187 |
018acdaf374f
mod_storage_memory: Add map store methods to archive store
Kim Alvefur <zash@zash.se>
parents:
10222
diff
changeset
|
188 if is_stanza(new_value) then |
018acdaf374f
mod_storage_memory: Add map store methods to archive store
Kim Alvefur <zash@zash.se>
parents:
10222
diff
changeset
|
189 new_value = st.preserialize(new_value); |
018acdaf374f
mod_storage_memory: Add map store methods to archive store
Kim Alvefur <zash@zash.se>
parents:
10222
diff
changeset
|
190 item.value = envload("return xml"..serialize(new_value), "=(stanza)", { xml = st.deserialize }) |
018acdaf374f
mod_storage_memory: Add map store methods to archive store
Kim Alvefur <zash@zash.se>
parents:
10222
diff
changeset
|
191 else |
018acdaf374f
mod_storage_memory: Add map store methods to archive store
Kim Alvefur <zash@zash.se>
parents:
10222
diff
changeset
|
192 item.value = envload("return "..serialize(new_value), "=(data)", {}); |
018acdaf374f
mod_storage_memory: Add map store methods to archive store
Kim Alvefur <zash@zash.se>
parents:
10222
diff
changeset
|
193 end |
018acdaf374f
mod_storage_memory: Add map store methods to archive store
Kim Alvefur <zash@zash.se>
parents:
10222
diff
changeset
|
194 if new_when then |
018acdaf374f
mod_storage_memory: Add map store methods to archive store
Kim Alvefur <zash@zash.se>
parents:
10222
diff
changeset
|
195 item.when = new_when; |
018acdaf374f
mod_storage_memory: Add map store methods to archive store
Kim Alvefur <zash@zash.se>
parents:
10222
diff
changeset
|
196 end |
018acdaf374f
mod_storage_memory: Add map store methods to archive store
Kim Alvefur <zash@zash.se>
parents:
10222
diff
changeset
|
197 if new_with then |
018acdaf374f
mod_storage_memory: Add map store methods to archive store
Kim Alvefur <zash@zash.se>
parents:
10222
diff
changeset
|
198 item.with = new_when; |
018acdaf374f
mod_storage_memory: Add map store methods to archive store
Kim Alvefur <zash@zash.se>
parents:
10222
diff
changeset
|
199 end |
018acdaf374f
mod_storage_memory: Add map store methods to archive store
Kim Alvefur <zash@zash.se>
parents:
10222
diff
changeset
|
200 return true; |
018acdaf374f
mod_storage_memory: Add map store methods to archive store
Kim Alvefur <zash@zash.se>
parents:
10222
diff
changeset
|
201 end |
018acdaf374f
mod_storage_memory: Add map store methods to archive store
Kim Alvefur <zash@zash.se>
parents:
10222
diff
changeset
|
202 |
9906
d0b58bdd6c86
mod_storage_memory: Fix copypaste mistake
Kim Alvefur <zash@zash.se>
parents:
9905
diff
changeset
|
203 function archive_store:summary(username, query) |
9905
6d50efaee148
mod_storage_memory: Implement archive summary API
Kim Alvefur <zash@zash.se>
parents:
9887
diff
changeset
|
204 local iter, err = self:find(username, query) |
6d50efaee148
mod_storage_memory: Implement archive summary API
Kim Alvefur <zash@zash.se>
parents:
9887
diff
changeset
|
205 if not iter then return iter, err; end |
10220
1e2b444acb72
mod_storage_*: Tweak :summary API to allow future expansion with more fields
Kim Alvefur <zash@zash.se>
parents:
10023
diff
changeset
|
206 local counts = {}; |
10222
51f145094648
mod_storage_*: Also include timestmap of first message in :summary API
Kim Alvefur <zash@zash.se>
parents:
10221
diff
changeset
|
207 local earliest = {}; |
10221
068692cb9e78
mod_storage_*: Include timestamp of latest message in :summary API
Kim Alvefur <zash@zash.se>
parents:
10220
diff
changeset
|
208 local latest = {}; |
068692cb9e78
mod_storage_*: Include timestamp of latest message in :summary API
Kim Alvefur <zash@zash.se>
parents:
10220
diff
changeset
|
209 for _, _, when, with in iter do |
10220
1e2b444acb72
mod_storage_*: Tweak :summary API to allow future expansion with more fields
Kim Alvefur <zash@zash.se>
parents:
10023
diff
changeset
|
210 counts[with] = (counts[with] or 0) + 1; |
10222
51f145094648
mod_storage_*: Also include timestmap of first message in :summary API
Kim Alvefur <zash@zash.se>
parents:
10221
diff
changeset
|
211 if earliest[with] == nil then |
51f145094648
mod_storage_*: Also include timestmap of first message in :summary API
Kim Alvefur <zash@zash.se>
parents:
10221
diff
changeset
|
212 earliest[with] = when; |
51f145094648
mod_storage_*: Also include timestmap of first message in :summary API
Kim Alvefur <zash@zash.se>
parents:
10221
diff
changeset
|
213 end |
10221
068692cb9e78
mod_storage_*: Include timestamp of latest message in :summary API
Kim Alvefur <zash@zash.se>
parents:
10220
diff
changeset
|
214 latest[with] = when; |
9905
6d50efaee148
mod_storage_memory: Implement archive summary API
Kim Alvefur <zash@zash.se>
parents:
9887
diff
changeset
|
215 end |
10220
1e2b444acb72
mod_storage_*: Tweak :summary API to allow future expansion with more fields
Kim Alvefur <zash@zash.se>
parents:
10023
diff
changeset
|
216 return { |
1e2b444acb72
mod_storage_*: Tweak :summary API to allow future expansion with more fields
Kim Alvefur <zash@zash.se>
parents:
10023
diff
changeset
|
217 counts = counts; |
10222
51f145094648
mod_storage_*: Also include timestmap of first message in :summary API
Kim Alvefur <zash@zash.se>
parents:
10221
diff
changeset
|
218 earliest = earliest; |
10221
068692cb9e78
mod_storage_*: Include timestamp of latest message in :summary API
Kim Alvefur <zash@zash.se>
parents:
10220
diff
changeset
|
219 latest = latest; |
10220
1e2b444acb72
mod_storage_*: Tweak :summary API to allow future expansion with more fields
Kim Alvefur <zash@zash.se>
parents:
10023
diff
changeset
|
220 }; |
9905
6d50efaee148
mod_storage_memory: Implement archive summary API
Kim Alvefur <zash@zash.se>
parents:
9887
diff
changeset
|
221 end |
6d50efaee148
mod_storage_memory: Implement archive summary API
Kim Alvefur <zash@zash.se>
parents:
9887
diff
changeset
|
222 |
9293
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
223 |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
224 function archive_store:delete(username, query) |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
225 if not query or next(query) == nil then |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
226 self.store[username or NULL] = nil; |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
227 return true; |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
228 end |
9535
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
229 local items = self.store[username or NULL]; |
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
230 if not items then |
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
231 -- Store is empty |
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
232 return 0; |
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
233 end |
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
234 items = array(items); |
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
235 local count_before = #items; |
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
236 if query then |
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
237 if query.key then |
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
238 items:filter(function (item) |
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
239 return item.key ~= query.key; |
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
240 end); |
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
241 end |
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
242 if query.with then |
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
243 items:filter(function (item) |
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
244 return item.with ~= query.with; |
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
245 end); |
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
246 end |
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
247 if query.start then |
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
248 items:filter(function (item) |
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
249 return item.when < query.start; |
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
250 end); |
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
251 end |
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
252 if query["end"] then |
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
253 items:filter(function (item) |
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
254 return item.when > query["end"]; |
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
255 end); |
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
256 end |
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
257 if query.truncate and #items > query.truncate then |
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
258 if query.reverse then |
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
259 -- Before: { 1, 2, 3, 4, 5, } |
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
260 -- After: { 1, 2, 3 } |
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
261 for i = #items, query.truncate + 1, -1 do |
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
262 items[i] = nil; |
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
263 end |
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
264 else |
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
265 -- Before: { 1, 2, 3, 4, 5, } |
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
266 -- After: { 3, 4, 5 } |
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
267 local offset = #items - query.truncate; |
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
268 for i = 1, #items do |
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
269 items[i] = items[i+offset]; |
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
270 end |
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
271 end |
9293
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
272 end |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
273 end |
9535
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
274 local count = count_before - #items; |
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
275 if count == 0 then |
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
276 return 0; -- No changes, skip write |
9293
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
277 end |
9535
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
278 setmetatable(items, nil); |
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
279 |
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
280 do -- re-index by key |
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
281 for k in pairs(items) do |
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
282 if type(k) == "string" then |
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
283 items[k] = nil; |
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
284 end |
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
285 end |
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
286 |
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
287 for i = 1, #items do |
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
288 items[ items[i].key ] = i; |
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
289 end |
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
290 end |
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
291 |
c1befd1c886d
mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents:
9534
diff
changeset
|
292 return count; |
9293
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
293 end |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
294 |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
295 archive_store.purge = _purge_store; |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
296 |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
297 local stores = { |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
298 keyval = keyval_store; |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
299 archive = archive_store; |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
300 } |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
301 |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
302 local driver = {}; |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
303 |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
304 function driver:open(store, typ) -- luacheck: ignore 212/self |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
305 local store_mt = stores[typ or "keyval"]; |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
306 if store_mt then |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
307 return setmetatable({ store = memory[store] }, store_mt); |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
308 end |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
309 return nil, "unsupported-store"; |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
310 end |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
311 |
9609
1dfcea523200
mod_storage_memory: Support the purge driver method
Kim Alvefur <zash@zash.se>
parents:
9535
diff
changeset
|
312 function driver:purge(user) -- luacheck: ignore 212/self |
1dfcea523200
mod_storage_memory: Support the purge driver method
Kim Alvefur <zash@zash.se>
parents:
9535
diff
changeset
|
313 for _, store in pairs(memory) do |
1dfcea523200
mod_storage_memory: Support the purge driver method
Kim Alvefur <zash@zash.se>
parents:
9535
diff
changeset
|
314 store[user] = nil; |
1dfcea523200
mod_storage_memory: Support the purge driver method
Kim Alvefur <zash@zash.se>
parents:
9535
diff
changeset
|
315 end |
1dfcea523200
mod_storage_memory: Support the purge driver method
Kim Alvefur <zash@zash.se>
parents:
9535
diff
changeset
|
316 end |
1dfcea523200
mod_storage_memory: Support the purge driver method
Kim Alvefur <zash@zash.se>
parents:
9535
diff
changeset
|
317 |
9293
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
318 if auto_purge_enabled then |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
319 module:hook("resource-unbind", function (event) |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
320 local user_bare_jid = event.session.username.."@"..event.session.host; |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
321 if not prosody.bare_sessions[user_bare_jid] then -- User went offline |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
322 module:log("debug", "Clearing store for offline user %s", user_bare_jid); |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
323 local f, s, v; |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
324 if auto_purge_stores:empty() then |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
325 f, s, v = pairs(memory); |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
326 else |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
327 f, s, v = auto_purge_stores:items(); |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
328 end |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
329 |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
330 for store_name in f, s, v do |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
331 if memory[store_name] then |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
332 memory[store_name][event.session.username] = nil; |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
333 end |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
334 end |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
335 end |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
336 end); |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
337 end |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
338 |
0a751835627d
mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
339 module:provides("storage", driver); |