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 + -
显示快捷键?