my solution
This commit is contained in:
+50
@@ -0,0 +1,50 @@
|
||||
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
|
||||
the_end = Calendar.strftime(DateTime.utc_now(), "%Y%m%d")
|
||||
{the_end_int, ""} = Integer.parse(the_end)
|
||||
|
||||
start = the_end_int - args[:days]
|
||||
|
||||
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
|
||||
Jump.post(summary)
|
||||
|
||||
IO.inspect(summary)
|
||||
|
||||
IO.puts("done.")
|
||||
end
|
||||
|
||||
end
|
||||
Reference in New Issue
Block a user