From d4793aea4dfbf1862bf6ca8eb5cf4279a41b36a4 Mon Sep 17 00:00:00 2001 From: Magnus Ahltorp Date: Fri, 27 Jan 2017 02:02:39 +0100 Subject: Separate erlang config file for reloadable parameters --- src/plopcontrol.erl | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 src/plopcontrol.erl (limited to 'src/plopcontrol.erl') diff --git a/src/plopcontrol.erl b/src/plopcontrol.erl new file mode 100644 index 0000000..de7faba --- /dev/null +++ b/src/plopcontrol.erl @@ -0,0 +1,44 @@ +%%% Copyright (c) 2017, NORDUnet A/S. +%%% See LICENSE for licensing information. + +-module(plopcontrol). +-export([start_link/0, server_start/2]). + +start_link() -> + case gen_tcp:listen(application:get_env(plop, plopcontrolport, 0), [binary, {packet, line}, + {active, false}, + {ip, {127, 0, 0, 1}}]) of + {ok, ListenSocket} -> + proc_lib:start_link(?MODULE,server_start,[self(), ListenSocket]); + {error,Reason} -> + {error,Reason} + end. + +server_start(Parent, ListenSocket) -> + proc_lib:init_ack(Parent, {ok, self()}), + {ok, Port} = inet:port(ListenSocket), + {ok, PlopcontrolFile} = application:get_env(plop, plopcontrol), + atomic:replacefile(PlopcontrolFile, integer_to_list(Port)), + acceptloop(ListenSocket). + +acceptloop(ListenSocket) -> + {ok, Socket} = gen_tcp:accept(ListenSocket), + commandloop(Socket), + acceptloop(ListenSocket). + +commandloop(Socket) -> + case gen_tcp:recv(Socket, 0) of + {ok, Packet} -> + Answer = command(Packet), + gen_tcp:send(Socket, Answer), + commandloop(Socket); + {error, _Reason} -> + ok + end. + +command(<<"reload\n">>) -> + plopconfig:load_config(), + "reload completed\n"; + +command(_) -> + "unknown command\n". -- cgit v1.1