auser-poolparty 0.2.26 → 0.2.35

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (80) hide show
  1. data/Manifest.txt +13 -2
  2. data/PostInstall.txt +2 -1
  3. data/Rakefile +8 -2
  4. data/bin/cloud-contract +1 -6
  5. data/bin/cloud-ensure-provisioning +33 -0
  6. data/bin/cloud-expand +1 -6
  7. data/bin/cloud-provision +22 -14
  8. data/bin/cloud-start +1 -0
  9. data/bin/messenger-get-load +26 -0
  10. data/bin/server-build-messenger +9 -2
  11. data/bin/server-fire-cmd +1 -1
  12. data/bin/server-get-load +4 -4
  13. data/bin/server-list-active +2 -2
  14. data/bin/server-rerun +4 -4
  15. data/bin/server-start-master +4 -4
  16. data/bin/server-start-node +4 -4
  17. data/lib/erlang/messenger/Rakefile +6 -0
  18. data/lib/erlang/messenger/ebin/master.app +1 -1
  19. data/lib/erlang/messenger/ebin/master_app.beam +0 -0
  20. data/lib/erlang/messenger/ebin/node.app +1 -1
  21. data/lib/erlang/messenger/ebin/node_app.beam +0 -0
  22. data/lib/erlang/messenger/ebin/pm_client.beam +0 -0
  23. data/lib/erlang/messenger/ebin/pm_cluster.beam +0 -0
  24. data/lib/erlang/messenger/ebin/pm_event_manager.beam +0 -0
  25. data/lib/erlang/messenger/ebin/pm_master_event_handler.beam +0 -0
  26. data/lib/erlang/messenger/ebin/pm_master_supervisor.beam +0 -0
  27. data/lib/erlang/messenger/ebin/pm_node_supervisor.beam +0 -0
  28. data/lib/erlang/messenger/ebin/pm_packager.beam +0 -0
  29. data/lib/erlang/messenger/include/defines.hrl +16 -0
  30. data/lib/erlang/messenger/pm_master.beam +0 -0
  31. data/lib/erlang/messenger/pm_node.beam +0 -0
  32. data/lib/erlang/messenger/src/pm_client.erl +35 -7
  33. data/lib/erlang/messenger/src/pm_cluster.erl +15 -12
  34. data/lib/erlang/messenger/src/pm_event_manager.erl +27 -0
  35. data/lib/erlang/messenger/src/pm_master.erl +44 -32
  36. data/lib/erlang/messenger/src/pm_master_event_handler.erl +72 -0
  37. data/lib/erlang/messenger/src/pm_master_supervisor.erl +9 -10
  38. data/lib/erlang/messenger/src/pm_node.erl +47 -27
  39. data/lib/erlang/messenger/src/pm_node_supervisor.erl +7 -9
  40. data/lib/erlang/messenger/src/utils.erl +20 -1
  41. data/lib/erlang/messenger/useful_snippets +6 -0
  42. data/lib/erlang/messenger/utils.beam +0 -0
  43. data/lib/poolparty/base_packages/haproxy.rb +6 -6
  44. data/lib/poolparty/base_packages/poolparty.rb +22 -43
  45. data/lib/poolparty/core/object.rb +3 -0
  46. data/lib/poolparty/helpers/console.rb +4 -0
  47. data/lib/poolparty/helpers/messenger.rb +14 -5
  48. data/lib/poolparty/helpers/optioner.rb +1 -1
  49. data/lib/poolparty/helpers/provisioner_base.rb +54 -15
  50. data/lib/poolparty/helpers/provisioners/master.rb +36 -8
  51. data/lib/poolparty/helpers/provisioners/slave.rb +5 -6
  52. data/lib/poolparty/net/remote_bases/ec2.rb +16 -18
  53. data/lib/poolparty/net/remote_instance.rb +4 -1
  54. data/lib/poolparty/net/remoter.rb +29 -10
  55. data/lib/poolparty/net/remoter_base.rb +2 -1
  56. data/lib/poolparty/plugins/git.rb +5 -6
  57. data/lib/poolparty/pool/base.rb +3 -2
  58. data/lib/poolparty/pool/cloud.rb +22 -14
  59. data/lib/poolparty/pool/plugin.rb +9 -0
  60. data/lib/poolparty/pool/pool.rb +2 -2
  61. data/lib/poolparty/pool/resources/class_package.rb +1 -1
  62. data/lib/poolparty/pool/resources/gem_package.rb +6 -4
  63. data/lib/poolparty/templates/puppetcleaner +6 -0
  64. data/lib/poolparty/version.rb +1 -1
  65. data/poolparty.gemspec +20 -6
  66. data/spec/poolparty/helpers/messenger_spec.rb +1 -1
  67. data/spec/poolparty/helpers/provisioner_base_spec.rb +3 -0
  68. data/spec/poolparty/net/remote_spec.rb +1 -0
  69. data/spec/poolparty/net/remoter_spec.rb +4 -1
  70. data/spec/poolparty/pool/cloud_spec.rb +2 -2
  71. data/spec/poolparty/pool/plugin_spec.rb +8 -1
  72. data/spec/poolparty/pool/resources/class_package_spec.rb +4 -4
  73. data/spec/poolparty/pool/resources/remote_file_spec.rb +1 -1
  74. data/website/index.html +1 -1
  75. metadata +20 -6
  76. data/lib/erlang/messenger/ebin/pm_event_handler.beam +0 -0
  77. data/lib/erlang/messenger/ebin/pm_master.beam +0 -0
  78. data/lib/erlang/messenger/ebin/pm_node.beam +0 -0
  79. data/lib/erlang/messenger/ebin/utils.beam +0 -0
  80. data/lib/erlang/messenger/src/pm_event_handler.erl +0 -21
@@ -0,0 +1,16 @@
1
+ % Includes file for the PoolParty Messenger
2
+
3
+ -ifdef(debug).
4
+
5
+ -define (MASTER_LOCATION, erlang:list_to_atom(lists:append("master@", element(2, inet:gethostname()))) ).
6
+ -define (TRACE(X, M), io:format("TRACE ~p:~p ~p ~p~n" ,[?MODULE, ?LINE, X, M])).
7
+
8
+ -else.
9
+
10
+ -define (MASTER_LOCATION, master@master).
11
+ -define (TRACE(X, M), void).
12
+
13
+ -endif.
14
+
15
+ -define (MASTER_NODE_NAME, master).
16
+ -define (MASTER_SERVER, global:whereis_name(pm_master)).
@@ -1,19 +1,47 @@
1
1
  -module (pm_client).
2
- -export ([init/0, send_cmd/1, reconfigure_cloud/0, get_load/1, get_live_nodes/0]).
2
+ -include_lib("../include/defines.hrl").
3
+ -define (SERVER, global:whereis_name(?MODULE)).
4
+
5
+ -export ([init_conn/0, send_cmd/1, reconfigure_cloud/0, get_load/1, get_live_nodes/0]).
6
+ -export ([provision_orphan_running_servers/0]).
3
7
  -export ([shutdown/0]).
4
8
  % Run commands on the running master process
5
9
  % erl -pa ./ebin/ -run pm_client get_load cpu -run init stop -noshell
6
10
 
7
11
  % Connect to the master
8
- init() -> net_adm:ping(master@master).
12
+ init_conn() -> net_adm:ping(?MASTER_LOCATION).
9
13
  % Send the command Cmd to the pm_master process
10
- send_cmd(Cmd) -> pm_master:fire_cmd(Cmd).
14
+ send_cmd(Cmd) ->
15
+ init_conn(),
16
+ pm_master:fire_cmd(Cmd).
11
17
  % Reconfigure the cloud
12
- reconfigure_cloud() -> pm_master:reconfigure_cloud().
18
+ reconfigure_cloud() ->
19
+ init_conn(),
20
+ pm_master:reconfigure_cloud().
13
21
  % Get the load on the cloud of type Type
14
- get_load(Type) -> pm_master:get_load(Type).
22
+ get_load(Type) ->
23
+ init_conn(),
24
+ pm_master:get_load(Type).
25
+ % Check to see if there are servers that are unprovisioned
26
+ % And if there are, log in to them and start their messenger
27
+ % sending the live code on the master to them
28
+ provision_orphan_running_servers() ->
29
+ Instances = pm_cluster:any_new_servers(),
30
+ case lists:flatlength(Instances) of
31
+ 0 ->
32
+ ok;
33
+ _ ->
34
+ utils:distribute_modules_to([pm_node, pm_node_supervisor, pm_event_manager, node_app], Instances),
35
+ pm_cluster:slaves(Instances),
36
+ Instances
37
+ end.
38
+
15
39
  % Get a list of the live nodes
16
- get_live_nodes() -> pm_master:get_live_nodes().
40
+ get_live_nodes() ->
41
+ init_conn(),
42
+ pm_cluster:get_live_nodes().
17
43
  % Terminate the cloud messenger
18
44
  % This sends a shutdown to the whole cloud
19
- shutdown() -> pm_master:shutdown_cloud().
45
+ shutdown() ->
46
+ init_conn(),
47
+ pm_master:shutdown_cloud().
@@ -4,10 +4,15 @@
4
4
  -include_lib("eunit/include/eunit.hrl").
5
5
  -endif.
6
6
 
7
+ -include_lib("../include/defines.hrl").
8
+
7
9
  -export ([slaves/1, slaves/0]).
8
- -export ([get_live_nodes/0,refresh_live_nodes/0]).
10
+ -export ([get_live_nodes/0]).
9
11
  -export ([send_call/2, master/0]).
10
12
 
13
+ -export ([any_new_servers/0]).
14
+
15
+ % gen_server:call(?MASTER_SERVER, {Type, Args}).
11
16
  send_call(Type, Args) ->
12
17
  Nodes = get_live_nodes(),
13
18
  rpc:multicall(Nodes, pm_node, Type, [Args]).
@@ -20,7 +25,7 @@ slaves([]) ->
20
25
 
21
26
  slaves([Host|Hosts]) ->
22
27
  Args = erl_system_args(),
23
- NodeName = "pp_cluster",
28
+ NodeName = "pp",
24
29
  {ok, Node} = slave:start_link(Host, NodeName, Args),
25
30
  io:format("Erlang node started = [~p]~n", [Node]),
26
31
  slaves(Hosts).
@@ -39,17 +44,15 @@ erl_system_args()->
39
44
  Shared, " +Mea r10b "
40
45
  ]).
41
46
 
42
- refresh_live_nodes() ->
47
+ any_new_servers() ->
43
48
  String = ". /etc/profile && server-list-active -c name",
44
- Nodes = string:tokens(os:cmd(String), "\n\t"),
45
- io:format("nodes: ~p~n", [Nodes]),
46
- lists:map(
47
- fun(No) ->
48
- io:format("pinging ~p~n", [list_to_atom(lists:append("pp_cluster@",No))]),
49
- net_adm:ping(list_to_atom(lists:append("@pp_cluster", No)))
50
- end,
51
- Nodes),
52
- ok.
49
+ Nodes = lists:map(fun
50
+ (No) ->
51
+ erlang:list_to_atom(lists:append([No, "@", No]))
52
+ end,string:tokens(os:cmd(String), "\n\t")),
53
+ NewServers = Nodes -- get_live_nodes(),
54
+ NewServers.
55
+
53
56
  % Get the live nodes
54
57
  get_live_nodes() ->
55
58
  nodes().
@@ -0,0 +1,27 @@
1
+ -module (pm_event_manager).
2
+ -include_lib("../include/defines.hrl").
3
+
4
+ %% API
5
+ -export([start_link/0, add_handler/1, notify/1]).
6
+ -define(SERVER, ?MODULE).
7
+
8
+ %%--------------------------------------------------------------------
9
+ %% Function: start_link() -> {ok,Pid} | {error,Error}
10
+ %% Description: Creates an event manager.
11
+ %%--------------------------------------------------------------------
12
+ start_link() ->
13
+ gen_event:start_link({local, ?SERVER}).
14
+
15
+ %%--------------------------------------------------------------------
16
+ %% Function: add_handler(Module) -> ok | {'EXIT',Reason} | term()
17
+ %% Description: Adds an event handler
18
+ %%--------------------------------------------------------------------
19
+ add_handler(Module) ->
20
+ gen_event:add_handler(?SERVER, Module, []).
21
+
22
+ %%--------------------------------------------------------------------
23
+ %% Function: notify(Event) -> ok | {error, Reason}
24
+ %% Description: Sends the Event through the event manager.
25
+ %%--------------------------------------------------------------------
26
+ notify(Event) ->
27
+ gen_event:notify(?SERVER, Event).
@@ -8,28 +8,58 @@
8
8
  -module(pm_master).
9
9
  -behaviour(gen_server).
10
10
 
11
+ -include_lib("../include/defines.hrl").
12
+
13
+ -record(state, {}).
14
+ -define (SERVER, global:whereis_name(?MODULE)).
15
+
11
16
  %% API
12
17
  -export([start_link/0]).
13
18
 
14
19
  %% gen_server callbacks
15
20
  -export([init/1, handle_call/3, handle_cast/2, handle_info/2,
16
21
  terminate/2, code_change/3]).
17
- -record(state, {}).
18
- -define(SERVER, ?MODULE).
19
22
 
20
23
  % Client function definitions
21
- -export ([get_load/1, reconfigure_cloud/0, fire_cmd/1]).
24
+ -export ([get_load/1, reconfigure_cloud/0, get_live_nodes/0]).
25
+ -export ([run_cmd/1, fire_cmd/1]).
22
26
  -export ([shutdown_cloud/0]).
23
27
 
24
28
  %%====================================================================
25
29
  %% API
26
30
  %%====================================================================
27
31
  %%--------------------------------------------------------------------
32
+ %%% Internal functions
33
+ %%--------------------------------------------------------------------
34
+
35
+ % pm_master:get_load("0", "cpu").
36
+ get_load(Type) ->
37
+ % {Loads, _} = pm_cluster:send_call(get_load_for_type, [Type]),
38
+ {Loads, _} = gen_server:call(?SERVER, {get_load_for_type, [Type]}),
39
+ io:format("Loads: ~p~n", [Loads]),
40
+ utils:convert_responses_to_int_list(Loads).
41
+
42
+ % Send reconfigure tasks to every node
43
+ reconfigure_cloud() ->
44
+ gen_server:call(?SERVER, {run_reconfig}).
45
+
46
+ % Fire the given command on all nodes
47
+ run_cmd(Cmd) -> gen_server:call(?SERVER, {run_cmd, Cmd}).
48
+ fire_cmd(Cmd) -> gen_server:call(?SERVER, {fire_cmd, Cmd}).
49
+
50
+ get_live_nodes() ->
51
+ nodes().
52
+
53
+ % Shutdown
54
+ shutdown_cloud() ->
55
+ pm_cluster:send_call(stop, []),
56
+ {ok}.
57
+ %%--------------------------------------------------------------------
28
58
  %% Function: start_link() -> {ok,Pid} | ignore | {error,Error}
29
59
  %% Description: Starts the server
30
60
  %%--------------------------------------------------------------------
31
61
  start_link() ->
32
- gen_server:start_link({global, ?SERVER}, ?MODULE, [], []).
62
+ gen_server:start_link({global, ?MODULE}, ?MODULE, [], []).
33
63
 
34
64
  %%====================================================================
35
65
  %% gen_server callbacks
@@ -43,6 +73,7 @@ start_link() ->
43
73
  %% Description: Initiates the server
44
74
  %%--------------------------------------------------------------------
45
75
  init([]) ->
76
+ % pm_event_manager:add_handler(pm_master_event_handler),
46
77
  {ok, #state{}}.
47
78
 
48
79
  %%--------------------------------------------------------------------
@@ -54,9 +85,14 @@ init([]) ->
54
85
  %% {stop, Reason, State}
55
86
  %% Description: Handling call messages
56
87
  %%--------------------------------------------------------------------
57
- handle_call(_Request, _From, State) ->
58
- Reply = ok,
59
- {reply, Reply, State}.
88
+ % Handle load messages
89
+ handle_call({Type, Args}, _From, _State) ->
90
+ io:format("Calling ~p with ~p on slaves~n", [Type, Args]),
91
+ List = rpc:multicall(get_live_nodes(), pm_node, Type, [Args]),
92
+ {reply, List, nostate};
93
+ handle_call(Request, _From, State) ->
94
+ Reply = Reply = rpc:multicall(get_live_nodes(), pm_node, Request, []),
95
+ {reply, Reply, State}.
60
96
 
61
97
  %%--------------------------------------------------------------------
62
98
  %% Function: handle_cast(Msg, State) -> {noreply, State} |
@@ -91,28 +127,4 @@ terminate(_Reason, _State) ->
91
127
  %% Description: Convert process state when code is changed
92
128
  %%--------------------------------------------------------------------
93
129
  code_change(_OldVsn, State, _Extra) ->
94
- {ok, State}.
95
-
96
- %%--------------------------------------------------------------------
97
- %%% Internal functions
98
- %%--------------------------------------------------------------------
99
-
100
- % pm_master:get_load("0", "cpu").
101
- get_load(Type) ->
102
- {Loads, _} = pm_cluster:send_call(get_load_for_type, [Type]),
103
- {utils:convert_responses_to_int_list(Loads)}.
104
-
105
- % Send reconfigure tasks to every node
106
- reconfigure_cloud() ->
107
- pm_cluster:send_call(run_reconfig, []),
108
- {ok}.
109
-
110
- % Fire the given command on all nodes
111
- fire_cmd(Cmd) ->
112
- pm_cluster:send_call(fire_cmd, [Cmd]),
113
- {ok}.
114
-
115
- % Shutdown
116
- shutdown_cloud() ->
117
- pm_cluster:send_call(stop, []),
118
- {ok}.
130
+ {ok, State}.
@@ -0,0 +1,72 @@
1
+ -module (pm_master_event_handler).
2
+ -behaviour(gen_event).
3
+ -include_lib("../include/defines.hrl").
4
+
5
+ %% gen_event callbacks
6
+ -export([init/1, handle_event/2, handle_call/2,
7
+ handle_info/2, terminate/2, code_change/3]).
8
+
9
+ %%====================================================================
10
+ %% gen_event callbacks
11
+ %%====================================================================
12
+ %%--------------------------------------------------------------------
13
+ %% Function: init(Args) -> {ok, State}
14
+ %% Description: Whenever a new event handler is added to an event manager,
15
+ %% this function is called to initialize the event handler.
16
+ %%--------------------------------------------------------------------
17
+ init([]) ->
18
+ {ok, []}.
19
+
20
+ %%--------------------------------------------------------------------
21
+ %% Function:
22
+ %% handle_event(Event, State) -> {ok, State} |
23
+ %% {swap_handler, Args1, State1, Mod2, Args2} |
24
+ %% remove_handler
25
+ %% Description:Whenever an event manager receives an event sent using
26
+ %% gen_event:notify/2 or gen_event:sync_notify/2, this function is called for
27
+ %% each installed event handler to handle the event.
28
+ %%--------------------------------------------------------------------
29
+ handle_event(_Event, State) ->
30
+ {ok, State}.
31
+
32
+ %%--------------------------------------------------------------------
33
+ %% Function:
34
+ %% handle_call(Request, State) -> {ok, Reply, State} |
35
+ %% {swap_handler, Reply, Args1, State1,
36
+ %% Mod2, Args2} |
37
+ %% {remove_handler, Reply}
38
+ %% Description: Whenever an event manager receives a request sent using
39
+ %% gen_event:call/3,4, this function is called for the specified event
40
+ %% handler to handle the request.
41
+ %%--------------------------------------------------------------------
42
+ handle_call(_Request, State) ->
43
+ Reply = ok,
44
+ {ok, Reply, State}.
45
+
46
+ %%--------------------------------------------------------------------
47
+ %% Function:
48
+ %% handle_info(Info, State) -> {ok, State} |
49
+ %% {swap_handler, Args1, State1, Mod2, Args2} |
50
+ %% remove_handler
51
+ %% Description: This function is called for each installed event handler when
52
+ %% an event manager receives any other message than an event or a synchronous
53
+ %% request (or a system message).
54
+ %%--------------------------------------------------------------------
55
+ handle_info(_Info, State) ->
56
+ {ok, State}.
57
+
58
+ %%--------------------------------------------------------------------
59
+ %% Function: terminate(Reason, State) -> void()
60
+ %% Description:Whenever an event handler is deleted from an event manager,
61
+ %% this function is called. It should be the opposite of Module:init/1 and
62
+ %% do any necessary cleaning up.
63
+ %%--------------------------------------------------------------------
64
+ terminate(_Reason, _State) ->
65
+ ok.
66
+
67
+ %%--------------------------------------------------------------------
68
+ %% Function: code_change(OldVsn, State, Extra) -> {ok, NewState}
69
+ %% Description: Convert process state when code is changed
70
+ %%--------------------------------------------------------------------
71
+ code_change(_OldVsn, State, _Extra) ->
72
+ {ok, State}.
@@ -24,17 +24,16 @@ start_link(Args) ->
24
24
 
25
25
  init([]) ->
26
26
  RestartStrategy = one_for_one,
27
- MaxRestarts = 3, % 1000
28
- MaxTimeBetRestarts = 30, % 3600
27
+ MaxRestarts = 1000,
28
+ MaxTimeBetRestarts = 3600,
29
+ TimeoutTime = 5000,
29
30
 
30
31
  SupFlags = {RestartStrategy, MaxRestarts, MaxTimeBetRestarts},
31
-
32
- LoadServers = [
33
- {pm_master1,
34
- {pm_master, start_link, []},
35
- permanent, 5000, worker,
36
- [pm_master]
37
- }
38
- ],
32
+
33
+ % Servers
34
+ EventManager = {pm_event_manager, {pm_event_manager, start_link, []}, permanent, TimeoutTime, worker, dynamic},
35
+ MasterServer = {pm_master1, {pm_master, start_link, []}, permanent, TimeoutTime, worker, [pm_master]},
36
+
37
+ LoadServers = [EventManager,MasterServer],
39
38
 
40
39
  {ok, {SupFlags, LoadServers}}.
@@ -8,22 +8,48 @@
8
8
  -module(pm_node).
9
9
  -behaviour(gen_server).
10
10
 
11
+ -include_lib("../include/defines.hrl").
12
+
11
13
  %% API
12
14
  -export([start_link/0]).
13
15
 
14
16
  %% gen_server callbacks
15
17
  -export([init/1, handle_call/3, handle_cast/2, handle_info/2,
16
18
  terminate/2, code_change/3]).
19
+
17
20
  -record(state, {}).
18
21
  -define(SERVER, ?MODULE).
19
22
 
20
23
  % Client function definitions
21
24
  -export ([stop/0]).
22
- -export ([get_load_for_type/1, fire_cmd/1, run_reconfig/0]).
25
+ -export ([get_load_for_type/1, run_cmd/1, fire_cmd/1]).
26
+ -export ([run_reconfig/0]).
23
27
 
24
28
  %%====================================================================
25
29
  %% API
26
30
  %%====================================================================
31
+ %%--------------------------------------------------------------------
32
+ %%% Internal functions
33
+ %%--------------------------------------------------------------------
34
+
35
+
36
+ % Get the load for the type sent...
37
+ get_load_for_type(Type) ->
38
+ String = string:concat(". /etc/profile && server-get-load -m ",Type),
39
+ {os:cmd(String)}.
40
+
41
+ % Rerun the configuration
42
+ run_reconfig() ->
43
+ gen_server:cast(?MODULE, reconfig).
44
+
45
+ % Allows us to fire off any command (allowed by poolparty on the check)
46
+ run_cmd(Cmd) -> gen_server:call(?MODULE, {run_command, Cmd}).
47
+ fire_cmd(Cmd) -> gen_server:cast(?MODULE, {fire_command, Cmd}).
48
+
49
+ % Stop the pm_node entirely
50
+ stop() ->
51
+ gen_server:cast(?MODULE, stop).
52
+
27
53
  %%--------------------------------------------------------------------
28
54
  %% Function: start_link() -> {ok,Pid} | ignore | {error,Error}
29
55
  %% Description: Starts the server
@@ -34,8 +60,9 @@
34
60
  %% Fires a ping every 10 seconds
35
61
  %%--------------------------------------------------------------------
36
62
  start_link() ->
37
- utils:start_timer(10000, fun() -> net_adm:ping(master) end),
38
- gen_server:start_link({global, ?SERVER}, ?MODULE, [], []).
63
+ io:format("Pinging master at ~p~n", [?MASTER_LOCATION]),
64
+ utils:start_timer(10000, fun() -> net_adm:ping(?MASTER_LOCATION) end),
65
+ gen_server:start_link({local, ?MODULE}, ?MODULE, [], []).
39
66
 
40
67
  %%====================================================================
41
68
  %% gen_server callbacks
@@ -61,6 +88,9 @@ init([]) ->
61
88
  %% {stop, Reason, State}
62
89
  %% Description: Handling call messages
63
90
  %%--------------------------------------------------------------------
91
+ handle_call({run_command, Cmd}, _From, State) ->
92
+ Reply = os:cmd(". /etc/profile && server-fire-cmd \""++Cmd++"\""),
93
+ {reply, Reply, State};
64
94
  handle_call(_Request, _From, State) ->
65
95
  Reply = ok,
66
96
  {reply, Reply, State}.
@@ -71,8 +101,19 @@ handle_call(_Request, _From, State) ->
71
101
  %% {stop, Reason, State}
72
102
  %% Description: Handling cast messages
73
103
  %%--------------------------------------------------------------------
74
- handle_cast(_Msg, State) ->
75
- {noreply, State}.
104
+ handle_cast({Msg, Cmd}, State) ->
105
+ case Msg of
106
+ reconfig ->
107
+ io:format("Running reconfig~n"),
108
+ os:cmd(". /etc/profile && server-rerun"),
109
+ {ok};
110
+ fire_command ->
111
+ io:format("Running command: ~p~n", [Cmd]),
112
+ os:cmd(". /etc/profile && server-fire-cmd \""++Cmd++"\" 2>&1 > /dev/null"),
113
+ {ok};
114
+ _ ->
115
+ {ok, State}
116
+ end.
76
117
 
77
118
  %%--------------------------------------------------------------------
78
119
  %% Function: handle_info(Info, State) -> {noreply, State} |
@@ -100,25 +141,4 @@ terminate(_Reason, _State) ->
100
141
  %% Description: Convert process state when code is changed
101
142
  %%--------------------------------------------------------------------
102
143
  code_change(_OldVsn, State, _Extra) ->
103
- {ok, State}.
104
-
105
- %%--------------------------------------------------------------------
106
- %%% Internal functions
107
- %%--------------------------------------------------------------------
108
-
109
- % Get the load for the type sent...
110
- get_load_for_type(Type) ->
111
- String = string:concat(". /etc/profile && server-get-load -m ",Type),
112
- {os:cmd(String)}.
113
-
114
- % Rerun the configuration
115
- run_reconfig() -> {os:cmd(". /etc/profile && server-rerun")}.
116
-
117
- % Allows us to fire off any command (allowed by poolparty on the check)
118
- fire_cmd(Cmd) ->
119
- String = ". /etc/profile && server-fire-cmd \""++Cmd++"\"",
120
- {os:cmd(String)}.
121
-
122
- % Stop the pm_node entirely
123
- stop() ->
124
- gen_server:cast(?MODULE, stop).
144
+ {ok, State}.