diff options
author | Paweł Chmielowski <pawel@process-one.net> | 2022-04-08 17:41:17 +0200 |
---|---|---|
committer | Paweł Chmielowski <pawel@process-one.net> | 2022-04-08 17:48:53 +0200 |
commit | 0870f32c5939cb17a7c955244161515989b18402 (patch) | |
tree | 8e57bffb9dce0a234eabf0aba56cb73d0b88f477 /src/mod_offline_sql.erl | |
parent | Add rate limited delete_old_mam_messages command (diff) |
Add rate limited delete_old_messages
Diffstat (limited to '')
-rw-r--r-- | src/mod_offline_sql.erl | 27 |
1 files changed, 26 insertions, 1 deletions
diff --git a/src/mod_offline_sql.erl b/src/mod_offline_sql.erl index 65465dff..07978bef 100644 --- a/src/mod_offline_sql.erl +++ b/src/mod_offline_sql.erl @@ -30,7 +30,7 @@ -export([init/2, store_message/1, pop_messages/2, remove_expired_messages/1, remove_old_messages/2, remove_user/2, read_message_headers/2, read_message/3, remove_message/3, read_all_messages/2, - remove_all_messages/2, count_messages/2, import/1, export/1]). + remove_all_messages/2, count_messages/2, import/1, export/1, remove_old_messages_batch/3]). -include_lib("xmpp/include/xmpp.hrl"). -include("mod_offline.hrl"). @@ -112,6 +112,31 @@ remove_old_messages(Days, LServer) -> end, {atomic, ok}. +remove_old_messages_batch(LServer, Days, Batch) -> + case ejabberd_sql:sql_query( + LServer, + fun(pgsql, _) -> + ejabberd_sql:sql_query_t( + ?SQL("DELETE FROM spool" + " WHERE created_at <" + " NOW() - %(Days)d * INTERVAL '1 DAY' LIMIT %(Batch)d")); + (sqlite, _) -> + ejabberd_sql:sql_query_t( + ?SQL("DELETE FROM spool" + " WHERE created_at <" + " DATETIME('now', '-%(Days)d days') LIMIT %(Batch)d")); + (_, _) -> + ejabberd_sql:sql_query_t( + ?SQL("DELETE FROM spool" + " WHERE created_at < NOW() - INTERVAL %(Days)d DAY LIMIT %(Batch)d")) + end) + of + {updated, N} -> + {ok, N}; + Error -> + {error, Error} + end. + remove_user(LUser, LServer) -> ejabberd_sql:sql_query( LServer, |