Skip to content

Commit

Permalink
2.0.0 - Add loggings
Browse files Browse the repository at this point in the history
  • Loading branch information
nicklayb committed Jan 13, 2022
1 parent b4397ac commit 42af832
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 30 deletions.
9 changes: 9 additions & 0 deletions lib/modules/news/feed.ex
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ defmodule Snowhite.Modules.News.Feed do
"""
defstruct [:name, :url, :adapter, :options]

require Logger

alias __MODULE__

@default_adapter Snowhite.Modules.News.Adapters.Rss
Expand All @@ -23,4 +25,11 @@ defmodule Snowhite.Modules.News.Feed do
def new(%{name: name, url: url, adapter: adapter, options: options}) do
%Feed{name: name, url: url, adapter: adapter, options: options}
end

def call_adapter(%Feed{name: name, url: url, adapter: adapter, options: options}) do
Logger.info("[#{inspect(adapter)}] [#{name}] Polling #{url}")
news = apply(adapter, :fetch, [url, options])
Logger.info("[#{inspect(adapter)}] [#{name}] got #{length(news)} news")
news
end
end
36 changes: 7 additions & 29 deletions lib/modules/news/server.ex
Original file line number Diff line number Diff line change
@@ -1,17 +1,14 @@
defmodule Snowhite.Modules.News.Server do
use GenServer

alias Snowhite.Helpers.List, as: ListHelpers
alias Snowhite.Modules.News
alias Snowhite.Modules.News.Item
alias Snowhite.Modules.News.Feed
alias Snowhite.UrlShortener
import Snowhite.Helpers.Timing
require Logger

@auto_sync_timer ~d(15m)

@default_adapter News.Adapters.Rss

@spec start_link(any) :: GenServer.on_start()
def start_link(args) do
GenServer.start_link(__MODULE__, args, name: __MODULE__)
Expand Down Expand Up @@ -62,17 +59,16 @@ defmodule Snowhite.Modules.News.Server do
end

defp update(%{feeds: feeds} = state) do
news =
feeds
|> Task.async_stream(&poll_feed/1)
|> ListHelpers.filter_map(&succeeded?/1, &map_item(&1, state))
news = Enum.map(feeds, &map_item(&1, state))

%{state | news: news}
end

defp map_item({:ok, {name, news}}, state) do
defp map_item(%Feed{name: name} = feed, state) do
news =
Enum.map(news, fn item ->
feed
|> Feed.call_adapter()
|> Enum.map(fn item ->
item
|> shorten_url(state)
|> put_qr_code(state)
Expand All @@ -81,15 +77,6 @@ defmodule Snowhite.Modules.News.Server do
{name, news}
end

defp succeeded?({:ok, {_, _}}), do: true
defp succeeded?(_), do: false

defp poll_feed(%{name: name, url: url, options: options, adapter: adapter}) do
news = apply(adapter, :fetch, [url, options])

{name, news}
end

defp put_qr_code(%Item{short_url: short_url} = item, %{options: options}) do
if Keyword.get(options, :qr_codes, true) do
%Item{item | qr_code: EQRCode.encode(short_url)}
Expand All @@ -116,15 +103,6 @@ defmodule Snowhite.Modules.News.Server do
end

defp init_feeds(feeds) do
Enum.map(feeds, fn
%{name: name, url: url} = params ->
adapter = Map.get(params, :adapter, @default_adapter)
options = Map.get(params, :options, %{})

%{url: url, name: name, adapter: adapter, options: options}

{name, url} when is_bitstring(url) ->
%{url: url, name: name, adapter: @default_adapter, options: %{}}
end)
Enum.map(feeds, &Feed.new/1)
end
end
2 changes: 1 addition & 1 deletion lib/snowhite/helpers/list.ex
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ defmodule Snowhite.Helpers.List do
end

@doc "Filters and maps a list with two different function"
@spec filter_map([any()], (any() -> boolean()), (any() -> any())) :: [any()]
@spec filter_map(Enum.t(), (any() -> boolean()), (any() -> any())) :: [any()]
def filter_map(items, filter_function, map_function) do
items
|> Enum.reduce([], fn item, acc ->
Expand Down

0 comments on commit 42af832

Please sign in to comment.