Files
jump/lib/cli.ex
T
2026-04-15 20:02:05 -04:00

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