Files
jump/lib/cli.ex
T

57 lines
1.3 KiB
Elixir

defmodule Jump.CLI do
def main(args \\ []) do
parsed_args = parse_args(args)
parsed_args
|> fetch()
|> calculate(parsed_args)
|> finish()
end
defp parse_args(args) do
{opts, _, _} = OptionParser.parse(args, switches: [article: :string, days: :integer])
opts
end
defp fetch(args) do
format = &Calendar.strftime(&1, "%Y%m%d")
now = DateTime.utc_now()
the_end = format.(now)
start = now |> DateTime.add(-4, :day) |> format.()
Jump.fetch(args[:article], start, the_end)
end
defp calculate(items, args) do
total_pageviews = Enum.sum_by(items, &Map.get(&1, "views"))
max_views_item = Enum.max_by(items, &Map.get(&1, "views"))
%{
event_name: "campaign_spike_conversion",
article: args[:article],
window_days: args[:days],
total_pageviews: total_pageviews,
avg_daily_pageviews: total_pageviews / length(items),
top_day: %{
date: max_views_item["timestamp"],
pageviews: max_views_item["views"]
}
}
end
defp finish(summary) do
%{status: status, body: %{"data" => data}} = Jump.post(summary)
IO.puts("Summary:")
IO.inspect(summary)
IO.puts("""
\nPost Response (Status #{status}):
#{inspect(data)}
""")
IO.puts("done.")
end
end