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("Unknown: ~p~n",[P]).
worker_do({Days,_Time},_) when Days >= 14 -> skip;
worker_do({_,_},P) -> bpe:start(P,[]).