From 051423a6b08cdb1bd7b0f610bbd6c251a07029b5 Mon Sep 17 00:00:00 2001 From: Ryan Daigle Date: Thu, 9 Apr 2015 16:22:12 -0400 Subject: [PATCH] Async delta processing --- config/config.exs | 3 +-- config/dev.exs | 2 +- config/prod.exs | 2 +- test/controllers/dropbox_controller_test.exs | 2 +- test/models/delta_test.exs | 8 ++++++++ web/controllers/dropbox_controller.ex | 17 +++++++++++++++++ web/models/delta.ex | 9 +++++++++ web/web.ex | 2 +- 8 files changed, 39 insertions(+), 6 deletions(-) create mode 100644 test/models/delta_test.exs create mode 100644 web/models/delta.ex diff --git a/config/config.exs b/config/config.exs index cc63ae1..6b90786 100644 --- a/config/config.exs +++ b/config/config.exs @@ -16,8 +16,7 @@ config :markbox_delta, MarkboxDelta.Endpoint, # Configures Elixir's Logger config :logger, :console, - format: "$time $metadata[$level] $message\n", - metadata: [:request_id] + format: "$time $message\n" # Import environment specific config. This must remain at the bottom # of this file so it overrides the configuration defined above. diff --git a/config/dev.exs b/config/dev.exs index 5cf3ae5..24179b6 100644 --- a/config/dev.exs +++ b/config/dev.exs @@ -24,7 +24,7 @@ config :markbox_delta, MarkboxDelta.Endpoint, ] # Do not include metadata nor timestamps in development logs -config :logger, :console, format: "[$level] $message\n" +# config :logger, :console, format: "[$level] $message\n" # Configure your database # config :markbox_delta, MarkboxDelta.Repo, diff --git a/config/prod.exs b/config/prod.exs index caa304a..ca9385f 100644 --- a/config/prod.exs +++ b/config/prod.exs @@ -25,7 +25,7 @@ config :markbox_delta, MarkboxDelta.Endpoint, # disk for the key and cert. # Do not print debug messages in production -config :logger, level: :info +# config :logger, level: :info # ## Using releases # diff --git a/test/controllers/dropbox_controller_test.exs b/test/controllers/dropbox_controller_test.exs index 2b444e2..aff72a7 100644 --- a/test/controllers/dropbox_controller_test.exs +++ b/test/controllers/dropbox_controller_test.exs @@ -9,7 +9,7 @@ defmodule MarkboxDelta.DropboxControllerTest do end test "POST /dropbox/webhook" do - conn = post conn(), "/dropbox/webhook", %{"delta" => %{"users" => [12, 67]}} + conn = post conn(), "/dropbox/webhook", %{"delta" => %{"users" => [12, 67, 123]}} assert conn.status == 200 assert conn.resp_body == "OK" end diff --git a/test/models/delta_test.exs b/test/models/delta_test.exs new file mode 100644 index 0000000..5d145ce --- /dev/null +++ b/test/models/delta_test.exs @@ -0,0 +1,8 @@ +defmodule MarkboxDelta.DeltaTest do + use ExUnit.Case, async: true + alias MarkboxDelta.Delta + + test "process user" do + Delta.process(1) + end +end diff --git a/web/controllers/dropbox_controller.ex b/web/controllers/dropbox_controller.ex index 02d4c63..543f048 100644 --- a/web/controllers/dropbox_controller.ex +++ b/web/controllers/dropbox_controller.ex @@ -1,13 +1,22 @@ defmodule MarkboxDelta.DropboxController do use MarkboxDelta.Web, :controller + require Logger + alias MarkboxDelta.Delta plug :action + # def webhook do + # conn, %{"challenge" => challenge}) -> text conn, challenge + # conn, %{"delta" => %{"users" => users}} -> text conn, "OK" + # conn, _params -> conn |> put_status(404) |> text "ERROR" + # end + def webhook(conn, %{"challenge" => challenge}) do text conn, challenge end def webhook(conn, %{"delta" => %{"users" => users}}) do + process_users(users) text conn, "OK" end @@ -16,4 +25,12 @@ defmodule MarkboxDelta.DropboxController do |> put_status(404) |> text "ERROR" end + + defp process_users([user_id | tail]) do + Task.start(Delta, :process, [user_id]) + process_users(tail) + end + + defp process_users([]) do + end end diff --git a/web/models/delta.ex b/web/models/delta.ex new file mode 100644 index 0000000..88c57cc --- /dev/null +++ b/web/models/delta.ex @@ -0,0 +1,9 @@ +defmodule MarkboxDelta.Delta do + use MarkboxDelta.Web, :model + + require Logger + + def process(user_id) do + Logger.info "event=db.delta user=#{user_id}" + end +end diff --git a/web/web.ex b/web/web.ex index 19051c3..009d505 100644 --- a/web/web.ex +++ b/web/web.ex @@ -18,7 +18,7 @@ defmodule MarkboxDelta.Web do def model do quote do - use Ecto.Model + # use Ecto.Model end end