Packages

Digraph viewer provides a visual representation of a digraph model through a web based interface

Current section

Files

Jump to
digraph_viewer src digraph_viewer.erl
Raw

src/digraph_viewer.erl

-module(digraph_viewer).
-export([register/1, register/2, graph_data/0]).
register(G) ->
do_register(G, null).
register(G, Name) ->
do_register(G, Name).
graph_data() ->
Graphs = call_server({list}),
lists:map(fun({Uuid, G, Name}) ->
Id = uuid:uuid_to_string(Uuid, binary_standard),
Info = digraph:info(G),
Vertices = collect_vertices(G),
Edges = collect_edges(G),
{[{id, Id}, {name, Name}] ++ Info ++ [{vertices, Vertices}, {edges, Edges}]}
end, Graphs).
call_server(Request) ->
gen_server:call(graph_tracker, Request).
collect_vertices(G) ->
Vertices = digraph:vertices(G),
lists:map(fun(Id) ->
IdStr = format_term(Id),
{[{id, IdStr}]} end, Vertices).
collect_edges(G) ->
Edges = digraph:edges(G),
lists:map(fun(E) ->
{E, Source, Target, B} = digraph:edge(G, E),
Id = format_term(E),
Src = format_term(Source),
Trgt = format_term(Target),
{[{id, Id}, {source, Src}, {target, Trgt}]}
end, Edges).
do_register(G, Name) ->
gen_server:cast(graph_tracker, {register, G, Name}).
format_term(Term) ->
R = io_lib:format("~p",[Term]),
L = lists:flatten(R),
iolist_to_binary(L).