diff options
author | Alexey Shchepin <alexey@process-one.net> | 2006-02-27 07:43:16 +0300 |
---|---|---|
committer | Alexey Shchepin <alexey@process-one.net> | 2006-02-27 07:43:16 +0300 |
commit | 20d049fe28a26775b7adcaa1b9f4ec40488593b8 (patch) | |
tree | 56ca3afec025121ac1004e7945845e547b31b3b6 /src | |
parent | 51c4ab835131f31b6a7f2c7d612dc0cfcba15cd0 (diff) |
* src/web/ejabberd_web_admin.erl: Added a interface for node
updating
* src/ejabberd_update.erl: Added function update_info/0
SVN Revision: 512
Diffstat (limited to 'src')
-rw-r--r-- | src/ejabberd_update.erl | 21 | ||||
-rw-r--r-- | src/web/ejabberd_web_admin.erl | 51 |
2 files changed, 65 insertions, 7 deletions
diff --git a/src/ejabberd_update.erl b/src/ejabberd_update.erl index a094bd2ce..f447733a5 100644 --- a/src/ejabberd_update.erl +++ b/src/ejabberd_update.erl @@ -10,12 +10,25 @@ -author('alexey@sevcom.net'). %% API --export([update/0]). +-export([update/0, update_info/0]). %%==================================================================== %% API %%==================================================================== update() -> + case update_info() of + {ok, Dir, _UpdatedBeams, _Script, _LowLevelScript, Check} -> + Eval = + release_handler_1:eval_script( + LowLevelScript, [], + [{ejabberd, "", filename:join(Dir, "..")}]), + io:format("eval: ~p~n", [Eval]), + Eval; + {error, Reason} -> + {error, Reason} + end. + +update_info() -> Dir = filename:dirname(code:which(ejabberd)), case file:list_dir(Dir) of {ok, Files} -> @@ -46,11 +59,7 @@ update() -> LowLevelScript, [{ejabberd, "", filename:join(Dir, "..")}]), io:format("check: ~p~n", [Check]), - Eval = - release_handler_1:eval_script( - LowLevelScript, [], - [{ejabberd, "", filename:join(Dir, "..")}]), - io:format("eval: ~p~n", [Eval]); + {ok, Dir, UpdatedBeams, Script, LowLevelScript, Check}; {error, Reason} -> {error, Reason} end. diff --git a/src/web/ejabberd_web_admin.erl b/src/web/ejabberd_web_admin.erl index 61f7739c5..f3dab608d 100644 --- a/src/web/ejabberd_web_admin.erl +++ b/src/web/ejabberd_web_admin.erl @@ -1841,7 +1841,8 @@ get_node(global, Node, [], Query, Lang) -> [?LI([?ACT("db/", "Database")]), ?LI([?ACT("backup/", "Backup")]), ?LI([?ACT("ports/", "Listened Ports")]), - ?LI([?ACT("stats/", "Statistics")]) + ?LI([?ACT("stats/", "Statistics")]), + ?LI([?ACT("update/", "Update")]) ]), ?XAE("form", [{"action", ""}, {"method", "post"}], [?INPUTT("submit", "restart", "Restart"), @@ -2056,6 +2057,38 @@ get_node(global, Node, ["stats"], Query, Lang) -> ]) ])]; +get_node(global, Node, ["update"], Query, Lang) -> + rpc:call(Node, code, purge, [ejabberd_update]), + Res = node_update_parse_query(Node, Query), + rpc:call(Node, code, load_file, [ejabberd_update]), + {ok, Dir, UpdatedBeams, Script, LowLevelScript, Check} = + rpc:call(Node, ejabberd_update, update_info, []), + Mods = + case UpdatedBeams of + [] -> + ?CT("None"); + _ -> + ?XE("ul", + [?LI([?C(atom_to_list(Beam))]) || + Beam <- UpdatedBeams]) + end, + FmtScript = ?XC("pre", io_lib:format("~p", [Script])), + FmtLowLevelScript = ?XC("pre", io_lib:format("~p", [LowLevelScript])), + [?XC("h1", ?T("Update ") ++ atom_to_list(Node))] ++ + case Res of + ok -> [?CT("Submitted"), ?P]; + error -> [?CT("Bad format"), ?P]; + nothing -> [] + end ++ + [?XAE("form", [{"action", ""}, {"method", "post"}], + [?INPUTT("submit", "update", "Update"), + ?XCT("h2", "Update plan"), + ?XCT("h3", "Updated modules"), Mods, + ?XCT("h3", "Update script"), FmtScript, + ?XCT("h3", "Low level update script"), FmtLowLevelScript, + ?XCT("h3", "Script check"), ?C(atom_to_list(Check))]) + ]; + get_node(Host, Node, NPath, Query, Lang) -> [?XCT("h1", "Not Found")]. @@ -2331,6 +2364,22 @@ node_modules_parse_query(Host, Node, Modules, Query) -> end. +node_update_parse_query(Node, Query) -> + case lists:keysearch("update", 1, Query) of + {value, _} -> + case rpc:call(Node, ejabberd_update, update, []) of + {ok, _} -> + ok; + {error, Error} -> + ?ERROR_MSG("~p~n", [Error]); + {badrpc, Error} -> + ?ERROR_MSG("~p~n", [Error]) + end; + _ -> + nothing + end. + + pretty_print(El) -> lists:flatten(pretty_print(El, "")). |