comparison mod_log_messages_sql/mod_log_messages_sql.lua @ 2407:be08b65f2855

mod_log_messages_sql: In 0.10ish, use 'messages' as default table name, override using 'log_messages_sql_table' if needed
author Matthew Wild <mwild1@gmail.com>
date Fri, 02 Dec 2016 19:06:37 +0000
parents 398c4aaccf6d
children 9d132153d786
comparison
equal deleted inserted replaced
2406:a216be9b1d6e 2407:be08b65f2855
9 9
10 local serialize = require"util.json".encode, require"util.json".decode; 10 local serialize = require"util.json".encode, require"util.json".decode;
11 local tostring = tostring; 11 local tostring = tostring;
12 local time_now = os.time; 12 local time_now = os.time;
13 13
14
15 local table_name = module:get_option("message_log_sql_table", pcall(require, "util.cache") and "messages" or "prosodyarchive");
16
14 local sql, setsql, getsql = {}; 17 local sql, setsql, getsql = {};
15 do -- SQL stuff 18 do -- SQL stuff
16 local connection; 19 local connection;
17 local resolve_relative_path = require "core.configmanager".resolve_relative_path; 20 local resolve_relative_path = require "core.configmanager".resolve_relative_path;
18 local params = module:get_option("message_log_sql", module:get_option("sql")); 21 local params = module:get_option("message_log_sql", module:get_option("sql"));
22
19 23
20 local function test_connection() 24 local function test_connection()
21 if not connection then return nil; end 25 if not connection then return nil; end
22 if connection:ping() then 26 if connection:ping() then
23 return true; 27 return true;
44 connection = dbh; 48 connection = dbh;
45 49
46 end 50 end
47 return connection; 51 return connection;
48 end 52 end
53
49 54
50 do -- process options to get a db connection 55 do -- process options to get a db connection
51 local ok; 56 local ok;
52 prosody.unlock_globals(); 57 prosody.unlock_globals();
53 ok, DBI = pcall(require, "DBI"); 58 ok, DBI = pcall(require, "DBI");
136 141
137 --local id = uuid(); 142 --local id = uuid();
138 local when = time_now(); 143 local when = time_now();
139 -- And stash it 144 -- And stash it
140 local ok, err = setsql([[ 145 local ok, err = setsql([[
141 INSERT INTO `prosodyarchive` 146 INSERT INTO `]]..table_name..[[`
142 (`host`, `user`, `store`, `when`, `with`, `resource`, `stanza`) 147 (`host`, `user`, `store`, `when`, `with`, `resource`, `stanza`)
143 VALUES (?, ?, ?, ?, ?, ?, ?); 148 VALUES (?, ?, ?, ?, ?, ?, ?);
144 ]], store_host, store_user, "message_log", when, target_bare, target_resource, serialize(st.preserialize(stanza))) 149 ]], store_host, store_user, "message_log", when, target_bare, target_resource, serialize(st.preserialize(stanza)))
145 if ok then 150 if ok then
146 sql.commit(); 151 sql.commit();
162 module:hook("message/full", message_handler, 2); 167 module:hook("message/full", message_handler, 2);
163 168
164 -- In the telnet console, run: 169 -- In the telnet console, run:
165 -- >hosts["this host"].modules.mam_sql.environment.create_sql() 170 -- >hosts["this host"].modules.mam_sql.environment.create_sql()
166 function create_sql() 171 function create_sql()
167 local stm = getsql[[ 172 local stm = getsql([[
168 CREATE TABLE `prosodyarchive` ( 173 CREATE TABLE `]]..table_name..[[` (
169 `host` TEXT, 174 `host` TEXT,
170 `user` TEXT, 175 `user` TEXT,
171 `store` TEXT, 176 `store` TEXT,
172 `id` INTEGER PRIMARY KEY AUTOINCREMENT, 177 `id` INTEGER PRIMARY KEY AUTOINCREMENT,
173 `when` INTEGER, 178 `when` INTEGER,
174 `with` TEXT, 179 `with` TEXT,
175 `resource` TEXT, 180 `resource` TEXT,
176 `stanza` TEXT 181 `stanza` TEXT
177 ); 182 );
178 CREATE INDEX `hus` ON `prosodyarchive` (`host`, `user`, `store`); 183 CREATE INDEX `hus` ON `]]..table_name..[[` (`host`, `user`, `store`);
179 CREATE INDEX `with` ON `prosodyarchive` (`with`); 184 CREATE INDEX `with` ON `]]..table_name..[[` (`with`);
180 CREATE INDEX `thetime` ON `prosodyarchive` (`when`); 185 CREATE INDEX `thetime` ON `]]..table_name..[[` (`when`);
181 ]]; 186 ]]);
182 stm:execute(); 187 stm:execute();
183 sql.commit(); 188 sql.commit();
184 end 189 end