blob: fe8386bc3f5544d4876e9887e4c7f91a70f86ff0 [file] [log] [blame]
%%%-------------------------------------------------------------------
%%% @author dlive
%%% @copyright (C) 2018, <COMPANY>
%%% @doc
%%%
%%% @end
%%% Created : 22. May 2018 1:58 PM
%%%-------------------------------------------------------------------
-module(dubbo_traffic_control).
-author("dlive").
-include("dubboerl.hrl").
%% API
-export([init/0,check_goon/2,decr_count/1]).
init()->
case ets:info(?TRAFFIC_CONTROL) of
undefined ->
io:format("init decoding TRAFFIC_CONTROL table pid ~p~n",[self()]),
ets:new(?TRAFFIC_CONTROL,[public,named_table, {write_concurrency, true}]); %% public
_ ->
ets:delete(?TRAFFIC_CONTROL),
ets:new(?TRAFFIC_CONTROL,[public,named_table, {write_concurrency, true}])
end,
ok.
check_goon(Key,Max)->
try ets:update_counter(?TRAFFIC_CONTROL,Key,1) of
Value when Value > Max ->
ets:update_counter(?TRAFFIC_CONTROL,Key,-1),
full;
_V ->
%% logger:debug("check traffic incr value ~p",[V]),
ok
catch
_T:_R->
ets:insert(?TRAFFIC_CONTROL,{Key,1}),
ok
end.
decr_count(Key)->
try ets:update_counter(?TRAFFIC_CONTROL,Key,-1) of
_V ->
%% logger:debug("check traffic decr value ~p",[V]),
ok
catch
_T:_R->
ets:insert(?TRAFFIC_CONTROL,{Key,0}),
ok
end.