diff options
author | Badlop <badlop@process-one.net> | 2009-07-23 15:23:08 +0000 |
---|---|---|
committer | Badlop <badlop@process-one.net> | 2009-07-23 15:23:08 +0000 |
commit | 164e1520d4b7f9538a1014ceeac48d4c549bcc78 (patch) | |
tree | b4e37cd81acee00665f42bddc2ceaa264af88092 /src/ejabberd_admin.erl | |
parent | Add 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.erl | 51 |
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) -> |