From f00b191ac7cbb00e2e4c30227d669c39cdf5a337 Mon Sep 17 00:00:00 2001 From: vkatsuba Date: Mon, 17 May 2021 22:37:37 +0300 Subject: [PATCH] Refactoring * Simplify the application * Fixed 'topstories_interval' * Small refactoring --- README.md | 2 +- src/hacker_news.app.src | 2 +- src/hacker_news_sup.erl | 6 +-- .../hacker_news_topstories.erl | 23 ++++++----- src/topstories/hacker_news_topstories_sup.erl | 39 ------------------- 5 files changed, 16 insertions(+), 56 deletions(-) rename src/{topstories => }/hacker_news_topstories.erl (87%) delete mode 100644 src/topstories/hacker_news_topstories_sup.erl diff --git a/README.md b/README.md index e832be4..09f8afb 100644 --- a/README.md +++ b/README.md @@ -51,7 +51,7 @@ $ ./rebar3 edoc * Edit file **rebar.config**: ```erlang {deps, [ - {hacker_news, "0.0.1"}, + {hacker_news, "0.0.2"}, ]}. ``` diff --git a/src/hacker_news.app.src b/src/hacker_news.app.src index 71665c5..afd94ee 100644 --- a/src/hacker_news.app.src +++ b/src/hacker_news.app.src @@ -12,7 +12,7 @@ {env,[ {topstories_url, "https://hacker-news.firebaseio.com/v0/topstories.json?print=pretty"}, {topstories_total, 50}, - {topstories_interval, 300}, + {topstories_interval, 300000}, {topstories_retry, 10} ]}, {modules, []}, diff --git a/src/hacker_news_sup.erl b/src/hacker_news_sup.erl index 8cc14fe..d69e40d 100644 --- a/src/hacker_news_sup.erl +++ b/src/hacker_news_sup.erl @@ -21,9 +21,9 @@ init([]) -> period => 1 }, ChildSpec = #{ - id => hacker_news_topstories_sup, - start => {hacker_news_topstories_sup, start_link, []}, - type => supervisor, + id => hacker_news_topstories, + start => {hacker_news_topstories, start_link, []}, + type => worker, restart => permanent, shutdown => 5000 }, diff --git a/src/topstories/hacker_news_topstories.erl b/src/hacker_news_topstories.erl similarity index 87% rename from src/topstories/hacker_news_topstories.erl rename to src/hacker_news_topstories.erl index 6bd0773..66874be 100644 --- a/src/topstories/hacker_news_topstories.erl +++ b/src/hacker_news_topstories.erl @@ -39,6 +39,8 @@ -define(DEFAULT_STORIES_TOTAL, 50). -define(REQ_INTERVAL, 5 * 60 * 1000). +-define(CACHE, cache_topstories). +-define(HACKER_NEWS, hacker_news). %%% ============================================================================ %%% API functions @@ -61,24 +63,24 @@ start_link() -> get() -> try - persistent_term:get(cache_topstories) + persistent_term:get(?CACHE) catch _:_ -> get_topstories() end. init([]) -> - gen_server:cast(?MODULE, cache_topstories), + gen_server:cast(?MODULE, ?CACHE), {ok, #{}}. handle_call(_Request, _From, State) -> {reply, ignored, State}. -handle_cast(cache_topstories = Key, State) -> +handle_cast(?CACHE = Key, State) -> Res = get_topstories(), ok = persistent_term:put(Key, Res), - Interval = application:get_env(hacker_news, topstories_interval, ?REQ_INTERVAL), - timer:apply_after(Interval, gen_server, cast, [?MODULE, Key]), + Interval = application:get_env(?HACKER_NEWS, topstories_interval, ?REQ_INTERVAL), + {ok, _} = timer:apply_after(Interval, gen_server, cast, [?MODULE, Key]), {noreply, State#{Key => Res}}; handle_cast(_Msg, State) -> {noreply, State}. @@ -103,9 +105,9 @@ terminate(_Reason, _State) -> get_topstories() -> try - [_|_] = Url = application:get_env(hacker_news, topstories_url, undefined), - Total = application:get_env(hacker_news, topstories_total, ?DEFAULT_STORIES_TOTAL), - Retry = application:get_env(hacker_news, topstories_retry, 10), + [_|_] = Url = application:get_env(?HACKER_NEWS, topstories_url, undefined), + Total = application:get_env(?HACKER_NEWS, topstories_total, ?DEFAULT_STORIES_TOTAL), + Retry = application:get_env(?HACKER_NEWS, topstories_retry, 10), ok = httpc:set_options([{keep_alive_timeout, 0}]), {ok, Data} = maybe_retry(Url, Retry), [_ | Res] = lists:sublist(string:tokens(get_http_resp_body(Data), ", "), Total + 1), @@ -127,8 +129,6 @@ get_topstories() -> get_http_resp_code({{_, Code, _}, _, _}) -> Code; -get_http_resp_code({Code, _}) -> - Code; get_http_resp_code(_) -> error. @@ -142,8 +142,6 @@ get_http_resp_code(_) -> get_http_resp_body({_, _, Body}) -> Body; -get_http_resp_body({_, Body}) -> - Body; get_http_resp_body(_) -> error. @@ -164,5 +162,6 @@ maybe_retry(Url, Retry) -> Res catch _:_ -> + ?LOG(warning, "GET topstories - was attempts left: ~p times", [Retry]), maybe_retry(Url, Retry - 1) end. diff --git a/src/topstories/hacker_news_topstories_sup.erl b/src/topstories/hacker_news_topstories_sup.erl deleted file mode 100644 index d0ebc2e..0000000 --- a/src/topstories/hacker_news_topstories_sup.erl +++ /dev/null @@ -1,39 +0,0 @@ --module(hacker_news_topstories_sup). - --behaviour(supervisor). - -%%% ============================================================================ -%%% API -%%% ============================================================================ - --export([start_link/0]). - -%%% ============================================================================ -%%% Callbacks -%%% ============================================================================ - --export([init/1]). - -%%% ============================================================================ -%%% Public API -%%% ============================================================================ - -start_link() -> - supervisor:start_link({local, ?MODULE}, ?MODULE, []). - -%%% ============================================================================ -%%% Supervisor callbacks -%%% ============================================================================ - -init([]) -> - SupFlags = #{ - strategy => one_for_one, - intensity => 10, - period => 1 - }, - ChildSpec = #{ - id => hacker_news_topstories, - start => {hacker_news_topstories, start_link, []}, - type => worker - }, - {ok, {SupFlags, [ChildSpec]}}.