forked from moonpolysoft/dynomite
/
dynomite.erl
91 lines (75 loc) · 2.18 KB
/
dynomite.erl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
-module(dynomite).
-export([start/0, running/1, running_nodes/0, pause_all_sync/0, start_all_sync/0]).
-include("../include/common.hrl").
start() ->
crypto:start(),
load_and_start_apps([os_mon, thrift, mochiweb, dynomite]).
<<<<<<< HEAD:elibs/dynomite.erl
running(Node) when Node == node() ->
true;
=======
% running(Node) when Node == node() ->
% true;
>>>>>>> cliff/master:elibs/dynomite.erl
running(Node) ->
Ref = erlang:monitor(process, {membership, Node}),
R = receive
{'DOWN', Ref, _, _, _} -> false
after 1 ->
true
<<<<<<< HEAD:elibs/dynomite.erl
end.
=======
end,
erlang:demonitor(Ref),
R.
>>>>>>> cliff/master:elibs/dynomite.erl
running_nodes() ->
[Node || Node <- nodes([this,visible]), dynomite:running(Node)].
pause_all_sync() ->
SyncServers = lists:flatten(lists:map(fun(Node) ->
rpc:call(Node, sync_manager, loaded, [])
end, running_nodes())),
lists:foreach(fun(Server) ->
sync_server:pause(Server)
end, SyncServers).
start_all_sync() ->
SyncServers = lists:flatten(lists:map(fun(Node) ->
rpc:call(Node, sync_manager, loaded, [])
end, running_nodes())),
lists:foreach(fun(Server) ->
sync_server:play(Server)
end, SyncServers).
%%==============================================================
load_and_start_apps([]) ->
ok;
load_and_start_apps([App|Apps]) ->
case application:load(App) of
ok ->
case application:start(App) of
ok -> load_and_start_apps(Apps);
Err ->
?infoFmt("error starting ~p: ~p~n", [App, Err]),
timer:sleep(10),
halt(1)
end;
Err ->
?infoFmt("error loading ~p: ~p~n", [App, Err]),
Err,
timer:sleep(10),
halt(1)
end.
collect_loop() ->
process_flag(trap_exit, true),
Filename = io_lib:format("/home/cliff/dumps/~w-dyn.dump", [lib_misc:now_int()]),
sys_info(Filename),
receive
nothing -> ok
after 5000 -> collect_loop()
end.
sys_info(Filename) ->
{ok, IO} = file:open(Filename, [write]),
ok = io:format(IO, "count ~p~n", [erlang:system_info(process_count)]),
ok = io:format(IO, "memory ~p~n", [erlang:memory()]),
ok = file:write(IO, erlang:system_info(procs)),
file:close(IO).