51 lines
1.1 KiB
Elixir
51 lines
1.1 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
|
|
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
|