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