Mercurial > prosody-modules
annotate mod_storage_mongodb/mod_storage_mongodb.lua @ 5853:97c9b76867ca
mod_log_ringbuffer: Detach event handlers on logging reload (thanks Menel)
Otherwise the global event handlers accumulate, one added each time
logging is reoladed, and each invocation of the signal or event triggers
one dump of each created ringbuffer.
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Sun, 03 Mar 2024 11:23:40 +0100 |
parents | b21236b6b8d8 |
children |
rev | line source |
---|---|
504
0e9b43db7a2c
mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff
changeset
|
1 local next = next; |
0e9b43db7a2c
mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff
changeset
|
2 local setmetatable = setmetatable; |
0e9b43db7a2c
mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff
changeset
|
3 |
507
46f578da4ff0
mod_storage_mongodb: assert the configuration options
James Callahan <james@chatid.com>
parents:
506
diff
changeset
|
4 local params = assert ( module:get_option("mongodb") , "mongodb configuration not found" ); |
504
0e9b43db7a2c
mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff
changeset
|
5 |
509
bf2ad6d6c778
mod_storage_mongodb: (un)lock globals around require; only auth if we need to
James Callahan <james@chatid.com>
parents:
508
diff
changeset
|
6 prosody.unlock_globals(); |
504
0e9b43db7a2c
mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff
changeset
|
7 local mongo = require "mongo"; |
509
bf2ad6d6c778
mod_storage_mongodb: (un)lock globals around require; only auth if we need to
James Callahan <james@chatid.com>
parents:
508
diff
changeset
|
8 prosody.lock_globals(); |
504
0e9b43db7a2c
mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff
changeset
|
9 |
1010
fd420237a5e4
mod_storage_mongodb: Use util.json to encode our data (handles non-string table keys, etc).
Waqas Hussain <waqas20@gmail.com>
parents:
813
diff
changeset
|
10 local json = require "util.json"; |
fd420237a5e4
mod_storage_mongodb: Use util.json to encode our data (handles non-string table keys, etc).
Waqas Hussain <waqas20@gmail.com>
parents:
813
diff
changeset
|
11 |
508
9831506dcfd6
mod_storage_mongodb: move database connecting to inside driver:open
James Callahan <james@chatid.com>
parents:
507
diff
changeset
|
12 local conn |
504
0e9b43db7a2c
mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff
changeset
|
13 |
0e9b43db7a2c
mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff
changeset
|
14 local keyval_store = {}; |
0e9b43db7a2c
mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff
changeset
|
15 keyval_store.__index = keyval_store; |
0e9b43db7a2c
mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff
changeset
|
16 |
0e9b43db7a2c
mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff
changeset
|
17 function keyval_store:get(username) |
506
0e07810550c8
mod_storage_mongodb: Use _global as host when none provided
James Callahan <james@chatid.com>
parents:
505
diff
changeset
|
18 local host = module.host or "_global"; |
0e07810550c8
mod_storage_mongodb: Use _global as host when none provided
James Callahan <james@chatid.com>
parents:
505
diff
changeset
|
19 local store = self.store; |
504
0e9b43db7a2c
mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff
changeset
|
20 |
507
46f578da4ff0
mod_storage_mongodb: assert the configuration options
James Callahan <james@chatid.com>
parents:
506
diff
changeset
|
21 -- The database name can't have a period in it (hence it can't be a host/ip) |
504
0e9b43db7a2c
mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff
changeset
|
22 local namespace = params.dbname .. "." .. host; |
0e9b43db7a2c
mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff
changeset
|
23 local v = { _id = { store = store ; username = username } }; |
0e9b43db7a2c
mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff
changeset
|
24 |
0e9b43db7a2c
mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff
changeset
|
25 local cursor , err = conn:query ( namespace , v ); |
0e9b43db7a2c
mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff
changeset
|
26 if not cursor then return nil , err end; |
0e9b43db7a2c
mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff
changeset
|
27 |
0e9b43db7a2c
mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff
changeset
|
28 local r , err = cursor:next ( ); |
0e9b43db7a2c
mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff
changeset
|
29 if not r then return nil , err end; |
0e9b43db7a2c
mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff
changeset
|
30 return r.data; |
0e9b43db7a2c
mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff
changeset
|
31 end |
0e9b43db7a2c
mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff
changeset
|
32 |
0e9b43db7a2c
mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff
changeset
|
33 function keyval_store:set(username, data) |
506
0e07810550c8
mod_storage_mongodb: Use _global as host when none provided
James Callahan <james@chatid.com>
parents:
505
diff
changeset
|
34 local host = module.host or "_global"; |
0e07810550c8
mod_storage_mongodb: Use _global as host when none provided
James Callahan <james@chatid.com>
parents:
505
diff
changeset
|
35 local store = self.store; |
504
0e9b43db7a2c
mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff
changeset
|
36 |
507
46f578da4ff0
mod_storage_mongodb: assert the configuration options
James Callahan <james@chatid.com>
parents:
506
diff
changeset
|
37 -- The database name can't have a period in it (hence it can't be a host/ip) |
504
0e9b43db7a2c
mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff
changeset
|
38 local namespace = params.dbname .. "." .. host; |
0e9b43db7a2c
mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff
changeset
|
39 local v = { _id = { store = store ; username = username } }; |
0e9b43db7a2c
mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff
changeset
|
40 |
0e9b43db7a2c
mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff
changeset
|
41 if next(data) ~= nil then -- set data |
0e9b43db7a2c
mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff
changeset
|
42 v.data = data; |
1010
fd420237a5e4
mod_storage_mongodb: Use util.json to encode our data (handles non-string table keys, etc).
Waqas Hussain <waqas20@gmail.com>
parents:
813
diff
changeset
|
43 return conn:insert ( namespace , json.encode(v) ); |
504
0e9b43db7a2c
mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff
changeset
|
44 else -- delete data |
0e9b43db7a2c
mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff
changeset
|
45 return conn:remove ( namespace , v ); |
0e9b43db7a2c
mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff
changeset
|
46 end; |
0e9b43db7a2c
mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff
changeset
|
47 end |
0e9b43db7a2c
mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff
changeset
|
48 |
813
2469f779b3f7
mod_storage_*: Update to use module:provides().
Waqas Hussain <waqas20@gmail.com>
parents:
509
diff
changeset
|
49 local driver = {}; |
504
0e9b43db7a2c
mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff
changeset
|
50 |
0e9b43db7a2c
mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff
changeset
|
51 function driver:open(store, typ) |
508
9831506dcfd6
mod_storage_mongodb: move database connecting to inside driver:open
James Callahan <james@chatid.com>
parents:
507
diff
changeset
|
52 if not conn then |
9831506dcfd6
mod_storage_mongodb: move database connecting to inside driver:open
James Callahan <james@chatid.com>
parents:
507
diff
changeset
|
53 conn = assert ( mongo.Connection.New ( true ) ); |
9831506dcfd6
mod_storage_mongodb: move database connecting to inside driver:open
James Callahan <james@chatid.com>
parents:
507
diff
changeset
|
54 assert ( conn:connect ( params.server ) ); |
509
bf2ad6d6c778
mod_storage_mongodb: (un)lock globals around require; only auth if we need to
James Callahan <james@chatid.com>
parents:
508
diff
changeset
|
55 if params.username then |
bf2ad6d6c778
mod_storage_mongodb: (un)lock globals around require; only auth if we need to
James Callahan <james@chatid.com>
parents:
508
diff
changeset
|
56 assert ( conn:auth ( params ) ); |
bf2ad6d6c778
mod_storage_mongodb: (un)lock globals around require; only auth if we need to
James Callahan <james@chatid.com>
parents:
508
diff
changeset
|
57 end |
508
9831506dcfd6
mod_storage_mongodb: move database connecting to inside driver:open
James Callahan <james@chatid.com>
parents:
507
diff
changeset
|
58 end |
9831506dcfd6
mod_storage_mongodb: move database connecting to inside driver:open
James Callahan <james@chatid.com>
parents:
507
diff
changeset
|
59 |
504
0e9b43db7a2c
mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff
changeset
|
60 if not typ then -- default key-value store |
0e9b43db7a2c
mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff
changeset
|
61 return setmetatable({ store = store }, keyval_store); |
0e9b43db7a2c
mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff
changeset
|
62 end; |
0e9b43db7a2c
mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff
changeset
|
63 return nil, "unsupported-store"; |
0e9b43db7a2c
mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff
changeset
|
64 end |
0e9b43db7a2c
mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff
changeset
|
65 |
813
2469f779b3f7
mod_storage_*: Update to use module:provides().
Waqas Hussain <waqas20@gmail.com>
parents:
509
diff
changeset
|
66 module:provides("storage", driver); |