Current section

Files

Jump to
bpe src bpe_otp.erl
Raw

src/bpe_otp.erl

-module(bpe_otp).
-author('Maxim Sokhatsky').
-include("bpe.hrl").
-include_lib("kvs/include/cursors.hrl").
-behaviour(application).
-behaviour(supervisor).
-export([start/2, stop/1, init/1, respawn/0]).
stop(_) -> ok.
opt() -> [set, named_table, {keypos, 1}, public].
respawn() ->
spawn(fun () -> [worker(I) || I <- kvs:all("/bpe/proc")]
end).
start(_, _) ->
[bpe:reload(I)
|| I
<- application:get_env(bpe,
procmodules,
[bpe_account, bpe])],
logger:add_handlers(bpe),
kvs:join(),
kvs:ensure(kvs:writer("/bpe/proc")),
supervisor:start_link({local, ?MODULE}, ?MODULE, []).
init([]) ->
[ets:new(T, opt()) || T <- [processes]],
{ok, {{one_for_one, 5, 10}, []}}.
worker(#process{id = Id} = P) ->
case bpe:head(Id) of
#hist{time = #ts{time = Time}} ->
worker_do(calendar:time_difference(Time,
calendar:local_time()),
P);
_ -> broken
end;
worker(P) -> logger:notice("BPE: Unknown ~p", [P]).
worker_do({Days, _Time}, _) when Days >= 14 -> skip;
worker_do({_, _}, #process{status = "deleted"}) -> skip;
worker_do({_, _}, #process{docs = Docs} = P) -> bpe:start(P, Docs).