orber_web.erl
来自「OTP是开放电信平台的简称」· ERL 代码 · 共 863 行 · 第 1/3 页
ERL
863 行
create_info_data([], _Node, Result) -> lists:reverse(Result);create_info_data([{Func,Desc}|Rest], Node, Result) -> Data = convert_type(check(rpc:call(Node, orber, Func, []))), create_info_data(Rest, Node, [{Desc, Data}|Result]).convert_type(Data) when integer(Data) -> integer_to_list(Data);convert_type(Data) when atom(Data) -> atom_to_list(Data);convert_type(Data) when float(Data) -> float_to_list(Data);convert_type(Data) when pid(Data) -> pid_to_list(Data);convert_type(Data) when port(Data) -> erlang:port_to_list(Data);convert_type(Data) when tuple(Data) -> io_lib:write(Data);convert_type([]) -> [];convert_type(Data) when list(Data) -> case io_lib:printable_list(Data) of true-> Data; _-> io_lib:write(Data) end;convert_type(_Data) -> [].%%----------------------------------------------------------------------%% Function : menu%% Returns : %% Description: %%----------------------------------------------------------------------menu(_Env, Args)-> ["<BODY BGCOLOR=\"#FFFFFF\">", node_selections_javascripts(), node_body(Args, [node()|nodes()])].menu_title()-> " <TABLE WIDTH=\"100%\" BORDER=\"0\"> <TR><TD ALIGN=\"center\"><FONT SIZE=5>Menu</FONT></TD></TR> </TABLE>\n".node_body([], Nodes)-> Node = node(), [node_selections_javascripts(), node_selection(Node, Nodes), menu_title(), menu_options(atom_to_list(Node))];node_body([{"node",Node}|_], Nodes)-> [node_selections_javascripts(), node_selection(list_to_atom(Node), Nodes), menu_title(), menu_options(Node)];node_body([_|Rest], Nodes) -> node_body(Rest, Nodes).%%----------------------------------------------------------------------%% Function : node_selections_javascripts%% Returns : %% Description: %%----------------------------------------------------------------------node_selections_javascripts()-> "<SCRIPT> function node_selected() { parent.frames.main.location=\"/orber/start_info.html\" window.location =\"./menu?node=\" + " ++ "document.node_selection.nodes[document.node_selection.nodes.selectedIndex].value; } </SCRIPT>".%%----------------------------------------------------------------------%% Function : node_selection%% Returns : %% Description: %%----------------------------------------------------------------------node_selection(Node, Nodes)-> ["<FORM ACTION=\"./node_info\" NAME=node_selection>\n <TABLE WIDTH=\"100%\" BORDER=\"0\">\n <TR><TD ALIGN=\"center\">\n <SELECT NAME=nodes onChange=\"node_selected()\">\n", print_nodes(Node, Nodes), "</SELECT>\n </TD></TR>\n </TABLE>\n </FORM>"].%%----------------------------------------------------------------------%% Function : print_nodes%% Returns : %% Description: %%----------------------------------------------------------------------print_nodes(Node,Nodes)-> print_nodes_helper([Node|lists:delete(Node,Nodes)]).print_nodes_helper([])-> [];print_nodes_helper([Node|Rest])-> NodeStr = atom_to_list(Node), ["<OPTION value=\"", NodeStr, "\">", NodeStr, "\n" | print_nodes_helper(Rest)].%%----------------------------------------------------------------------%% Function : print_nodes%% Returns : %% Description: %%----------------------------------------------------------------------menu_options(Node)-> ["<UL><LI><A HREF=\"./info?node=", Node, "\" TARGET=main><B>Configuration</B></A></UL>", "<UL><LI><A HREF=\"./nameservice?node=", Node, "&context=root\" TARGET=main><B>Name Service</B></A></UL>", "<UL><LI><A HREF=\"./ifr_select?node=", Node, "\" TARGET=main><B>IFR Types</B></A></UL>", "<UL><LI><A HREF=\"./create?node=", Node, "\" TARGET=main><B>Create Object</B></A></UL>", "<FORM Name=reload><INPUT TYPE=\"button\" onClick=\"node_selected()\" VALUE=\"Reload\">\n</FORM>", "<!--<A HREF=\"../../orber/application_help.html\" TARGET=main>Help</A>-->"].%%----------------------------------------------------------------------%%----------------- MISC Functions -------------------------------------%%----------------------------------------------------------------------%% Function : simple_table%% Returns : %% Description: %%----------------------------------------------------------------------simple_table(Cols, Title, Data) -> ["<TABLE BORDER=0><TR BGCOLOR=\"#FFFFFF\"><TD ALIGN=\"center\" COLSPAN=", Cols, "><FONT SIZE=6>", Title, "</FONT>\n</TD></TR>", add_data(Data), "</TABLE>"].simple_table(Cols, Title, Data, Extra) -> ["<TABLE BORDER=0><TR BGCOLOR=\"#FFFFFF\"><TD ALIGN=\"center\" COLSPAN=", Cols, "><FONT SIZE=6>", Title, "</FONT>\n</TD></TR>", add_data(Data), Extra, "</TABLE>"].% Temporarily removed to avoid a silly dialyzer warning%add_data([]) ->% "";add_data([{C1, C2, C3, C4}|T]) -> add_data(T, ["<TR BGCOLOR=\"#FFFF00\"><TD><B>" ++ C1 ++ "</B></TD><TD><B>" ++ C2 ++ "</B></TD><TD><B>" ++ C3 ++ "</B></TD><TD><B>" ++ C4 ++ "</B></TD></TR>"]);add_data([{C1, C2, C3}|T]) -> add_data(T, ["<TR BGCOLOR=\"#FFFF00\"><TD><B>" ++ C1 ++ "</B></TD><TD><B>" ++ C2 ++ "</B></TD><TD><B>" ++ C3 ++ "</B></TD></TR>"]);add_data([{C1, C2}|T]) -> add_data(T, ["<TR BGCOLOR=\"#FFFF00\"><TD><B>" ++ C1 ++ "</B></TD><TD><B>" ++ C2 ++ "</B></TD></TR>"]);add_data([C1|T]) -> add_data(T, ["<TR BGCOLOR=\"#FFFF00\"><TD><B>" ++ C1 ++ "</B></TD></TR>"]).add_data([], Acc) -> lists:reverse(Acc);add_data([{C1, C2, C3, C4}|T], Acc) -> add_data(T, ["<TR><TD><B>"++C1++"</B></TD><TD>"++C2++"</TD><TD>" ++C3++"</TD><TD>"++C4++"</TD></TR>"|Acc]);add_data([{C1, C2, C3}|T], Acc) -> add_data(T, ["<TR><TD><B>"++C1++"</B></TD><TD>"++C2++"</TD><TD>" ++C3++"</TD></TR>"|Acc]);add_data([{C1, C2}|T], Acc) -> add_data(T, ["<TR><TD><B>"++C1++"</B></TD><TD>"++C2++"</TD></TR>"|Acc]);add_data([C1|T], Acc) -> add_data(T, ["<TR><TD>"++C1++"</TD></TR>"|Acc]).%%----------------------------------------------------------------------%% Function : check%% Returns : %% Description: %%----------------------------------------------------------------------check(Data) -> check(Data, "").check({badrpc, {'EXCEPTION', E}}, Comment) -> EList = atom_to_list(element(1, E)), throw({error, ["<BODY BGCOLOR=\"#FFFFFF\">Got the exception: ", EList, "<BR><BR>", Comment]});check({badrpc,{'EXIT',{undef,_}}}, Comment) -> throw({error, ["<BODY BGCOLOR=\"#FFFFFF\">Tried to invoke undefined module or operation.<BR><BR>", Comment]}); check({badrpc,nodedown}, Comment) -> throw({error, ["<BODY BGCOLOR=\"#FFFFFF\">Node down - unable to complete the requested operation.<BR><BR>", Comment]}); check({badrpc, {'EXIT', _R}}, Comment) -> throw({error, ["<BODY BGCOLOR=\"#FFFFFF\">Invoking the requested operation resulted in an EXIT.<BR><BR>", Comment]});check({badrpc, {'EXIT', _R1, _R2}}, Comment) -> throw({error, ["<BODY BGCOLOR=\"#FFFFFF\">Invoking the requested operation resulted in an EXIT.<BR><BR>", Comment]});check({'EXCEPTION', E}, Comment) -> EList = atom_to_list(element(1, E)), throw({error, ["<BODY BGCOLOR=\"#FFFFFF\">Got the exception: ", EList, "<BR><BR>", Comment]});check({'EXIT',{undef,_}}, Comment) -> throw({error, ["<BODY BGCOLOR=\"#FFFFFF\">Tried to invoke operation using undefined module or operation.<BR><BR>", Comment]}); check({'EXIT', _R}, Comment) -> throw({error, ["<BODY BGCOLOR=\"#FFFFFF\">Invoking the requested operation resulted in an EXIT.<BR><BR>", Comment]});check({'EXIT', _R1, _R2}, Comment) -> throw({error, ["<BODY BGCOLOR=\"#FFFFFF\">Invoking the requested operation resulted in an EXIT.<BR><BR>", Comment]});check(Reply, _) -> Reply.%%----------------------------------------------------------------------%% Function : is_running%% Returns : %% Description: %%----------------------------------------------------------------------is_running(Node, NodeStr) -> case rpc:call(Node, application, which_applications, []) of {badrpc, _} -> throw(["<BODY BGCOLOR=\"#FFFFFF\"> <TABLE BORDER=0><TR BGCOLOR=\"#FFFFFF\"><TD ALIGN=\"center\" COLSPAN=1> <FONT SIZE=6>Orber not started on node: ", NodeStr, "</FONT> </TD></TR></TABLE>"]); Apps -> is_running2(Apps, NodeStr) end.is_running2([], NodeStr) -> throw(["<BODY BGCOLOR=\"#FFFFFF\"> <TABLE BORDER=0><TR BGCOLOR=\"#FFFFFF\"><TD ALIGN=\"center\" COLSPAN=1> <FONT SIZE=6>Orber not started on node: ", NodeStr, "</FONT> </TD></TR></TABLE>"]);is_running2([{orber, _, _} |_], _) -> true;is_running2([_ |As], NodeStr) -> is_running2(As, NodeStr).%%----------------------------------------------------------------------%% Function : parse_data%% Returns : %% Description: %%----------------------------------------------------------------------parse_data([])-> [];parse_data(Options)-> case erl_scan:string(Options ++ ".") of {ok,Tokens,_Line} -> case erl_parse:parse_term(Tokens) of {ok,X}-> X; Why -> orber:dbg("[~p] orber_web:parse_data(~p);erl_parse:parse_term failed.Malformed data: ~p", [?LINE, Options, Why], ?DEBUG_LEVEL), throw({error, ["<BODY BGCOLOR=\"#FFFFFF\">Unable to parse supplied data: ", Options]}) end; Why -> orber:dbg("[~p] orber_web:parse_data(~p); erl_scan:string failed.Malformed data: ~p", [?LINE, Options, Why], ?DEBUG_LEVEL), throw({error, ["<BODY BGCOLOR=\"#FFFFFF\">Unable to parse supplied data: ", Options]}) end.%%----------------------------------------------------------------------%% Function : remote_resolve%% Returns : %% Description: %%----------------------------------------------------------------------remote_resolve(Node, Ref) -> NS = check(rpc:call(Node, corba, resolve_initial_references, ["NameService"]), "Failed to resolve initial refrence (NameService)"), case rpc:call(Node, 'CosNaming_NamingContextExt', resolve_str, [NS, Ref]) of {'EXCEPTION', E} when record(E, 'CosNaming_NamingContext_NotFound') -> throw({ok, ["<BODY BGCOLOR=\"#FFFFFF\">Unable to look up the Object: ", Ref, "<BR><BR>Reason: CosNaming_NamingContext_NotFound", "<BR><BR>If You just deleted it, use the 'Go Back' button next time."]}); {'EXCEPTION', E} when record(E, 'CosNaming_NamingContext_CannotProceed') -> throw({ok, ["<BODY BGCOLOR=\"#FFFFFF\">Unable to look up the Object: ", Ref, "<BR><BR>Reason: CosNaming_NamingContext_CannotProceed", "<BR><BR>If You just deleted it, use the 'Go Back' button next time."]}); {badrpc, {'EXCEPTION', E}} when record(E, 'CosNaming_NamingContext_NotFound') -> throw({ok, ["<BODY BGCOLOR=\"#FFFFFF\">Unable to look up the Object: ", Ref, "<BR><BR>Reason: CosNaming_NamingContext_NotFound", "<BR><BR>If You just deleted it, use the 'Go Back' button next time."]}); {badrpc, {'EXCEPTION', E}} when record(E, 'CosNaming_NamingContext_CannotProceed') -> throw({ok, ["<BODY BGCOLOR=\"#FFFFFF\">Unable to look up the Object: ", Ref, "<BR><BR>Reason: CosNaming_NamingContext_CannotProceed", "<BR><BR>If You just deleted it, use the 'Go Back' button next time."]}); FoundObj -> {FoundObj, NS} end. %%----------------------------------------------------------------------%% END OF MODULE%%----------------------------------------------------------------------
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?