aboutsummaryrefslogtreecommitdiff
path: root/src/ejabberd_admin.erl
diff options
context:
space:
mode:
authorBadlop <badlop@process-one.net>2009-07-23 15:23:08 +0000
committerBadlop <badlop@process-one.net>2009-07-23 15:23:08 +0000
commit164e1520d4b7f9538a1014ceeac48d4c549bcc78 (patch)
treeb4e37cd81acee00665f42bddc2ceaa264af88092 /src/ejabberd_admin.erl
parentAdd support to delete content and delete table. (diff)
New command to dump a table to text file.
SVN Revision: 2389
Diffstat (limited to 'src/ejabberd_admin.erl')
-rw-r--r--src/ejabberd_admin.erl51
1 files changed, 35 insertions, 16 deletions
diff --git a/src/ejabberd_admin.erl b/src/ejabberd_admin.erl
index d7f00b185..2c03d10b6 100644
--- a/src/ejabberd_admin.erl
+++ b/src/ejabberd_admin.erl
@@ -39,9 +39,9 @@
delete_expired_messages/0, delete_old_messages/1,
%% Mnesia
backup_mnesia/1, restore_mnesia/1,
- dump_mnesia/1, load_mnesia/1,
+ dump_mnesia/1, dump_table/2, load_mnesia/1,
install_fallback_mnesia/1,
- dump_to_textfile/1,
+ dump_to_textfile/1, dump_to_textfile/2,
mnesia_change_nodename/4,
restore/1 % Still used by some modules
]).
@@ -133,6 +133,10 @@ commands() ->
desc = "Dump the database to text file",
module = ?MODULE, function = dump_mnesia,
args = [{file, string}], result = {res, restuple}},
+ #ejabberd_commands{name = dump_table, tags = [mnesia],
+ desc = "Dump a table to text file",
+ module = ?MODULE, function = dump_table,
+ args = [{file, string}, {table, string}], result = {res, restuple}},
#ejabberd_commands{name = load, tags = [mnesia],
desc = "Restore the database from text file",
module = ?MODULE, function = load_mnesia,
@@ -320,8 +324,28 @@ module_tables(mod_shared_roster) -> [sr_group, sr_user];
module_tables(mod_vcard) -> [vcard, vcard_search];
module_tables(_Other) -> [].
+get_local_tables() ->
+ Tabs1 = lists:delete(schema, mnesia:system_info(local_tables)),
+ Tabs = lists:filter(
+ fun(T) ->
+ case mnesia:table_info(T, storage_type) of
+ disc_copies -> true;
+ disc_only_copies -> true;
+ _ -> false
+ end
+ end, Tabs1),
+ Tabs.
+
dump_mnesia(Path) ->
- case dump_to_textfile(Path) of
+ Tabs = get_local_tables(),
+ dump_tables(Path, Tabs).
+
+dump_table(Path, STable) ->
+ Table = list_to_atom(STable),
+ dump_tables(Path, [Table]).
+
+dump_tables(Path, Tables) ->
+ case dump_to_textfile(Path, Tables) of
ok ->
{ok, ""};
{error, Reason} ->
@@ -331,17 +355,12 @@ dump_mnesia(Path) ->
end.
dump_to_textfile(File) ->
- dump_to_textfile(mnesia:system_info(is_running), file:open(File, [write])).
-dump_to_textfile(yes, {ok, F}) ->
- Tabs1 = lists:delete(schema, mnesia:system_info(local_tables)),
- Tabs = lists:filter(
- fun(T) ->
- case mnesia:table_info(T, storage_type) of
- disc_copies -> true;
- disc_only_copies -> true;
- _ -> false
- end
- end, Tabs1),
+ Tabs = get_local_tables(),
+ dump_to_textfile(File, Tabs).
+
+dump_to_textfile(File, Tabs) ->
+ dump_to_textfile(mnesia:system_info(is_running), Tabs, file:open(File, [write])).
+dump_to_textfile(yes, Tabs, {ok, F}) ->
Defs = lists:map(
fun(T) -> {T, [{record_name, mnesia:table_info(T, record_name)},
{attributes, mnesia:table_info(T, attributes)}]}
@@ -350,10 +369,10 @@ dump_to_textfile(yes, {ok, F}) ->
io:format(F, "~p.~n", [{tables, Defs}]),
lists:foreach(fun(T) -> dump_tab(F, T) end, Tabs),
file:close(F);
-dump_to_textfile(_, {ok, F}) ->
+dump_to_textfile(_, _, {ok, F}) ->
file:close(F),
{error, mnesia_not_running};
-dump_to_textfile(_, {error, Reason}) ->
+dump_to_textfile(_, _, {error, Reason}) ->
{error, Reason}.
dump_tab(F, T) ->