|
@@ -1,41 +1,40 @@
|
|
defmodule Hello.PageController do
|
|
defmodule Hello.PageController do
|
|
|
|
+ alias Hello.{Fortune, World}
|
|
|
|
+
|
|
use Hello.Web, :controller
|
|
use Hello.Web, :controller
|
|
- alias Hello.World
|
|
|
|
- alias Hello.Fortune
|
|
|
|
|
|
+
|
|
|
|
+ @json "application/json"
|
|
|
|
+ @plain "text/plain"
|
|
|
|
|
|
def index(conn, _params) do
|
|
def index(conn, _params) do
|
|
conn
|
|
conn
|
|
- |> put_resp_content_type("application/json", nil)
|
|
|
|
|
|
+ |> put_resp_content_type(@json, nil)
|
|
|> send_resp(200, Jason.encode_to_iodata!(%{"TE Benchmarks\n" => "Started"}))
|
|
|> send_resp(200, Jason.encode_to_iodata!(%{"TE Benchmarks\n" => "Started"}))
|
|
end
|
|
end
|
|
|
|
|
|
# avoid namespace collision
|
|
# avoid namespace collision
|
|
def _json(conn, _params) do
|
|
def _json(conn, _params) do
|
|
conn
|
|
conn
|
|
- |> put_resp_content_type("application/json", nil)
|
|
|
|
|
|
+ |> put_resp_content_type(@json, nil)
|
|
|> send_resp(200, Jason.encode_to_iodata!(%{"message" => "Hello, world!"}))
|
|
|> send_resp(200, Jason.encode_to_iodata!(%{"message" => "Hello, world!"}))
|
|
end
|
|
end
|
|
|
|
|
|
def db(conn, _params) do
|
|
def db(conn, _params) do
|
|
conn
|
|
conn
|
|
- |> put_resp_content_type("application/json", nil)
|
|
|
|
|
|
+ |> put_resp_content_type(@json, nil)
|
|
|> send_resp(200, Jason.encode_to_iodata!(Repo.get(World, :rand.uniform(10000))))
|
|
|> send_resp(200, Jason.encode_to_iodata!(Repo.get(World, :rand.uniform(10000))))
|
|
end
|
|
end
|
|
|
|
|
|
def queries(conn, params) do
|
|
def queries(conn, params) do
|
|
- q = try do
|
|
|
|
- case String.to_integer(params["queries"]) do
|
|
|
|
- x when x < 1 -> 1
|
|
|
|
- x when x > 500 -> 500
|
|
|
|
- x -> x
|
|
|
|
- end
|
|
|
|
- rescue
|
|
|
|
- ArgumentError -> 1
|
|
|
|
- end
|
|
|
|
|
|
+ json =
|
|
|
|
+ params["queries"]
|
|
|
|
+ |> query_range()
|
|
|
|
+ |> parallel(fn _ -> Repo.get(World, :rand.uniform(10000)) end)
|
|
|
|
+ |> Jason.encode_to_iodata!()
|
|
|
|
|
|
conn
|
|
conn
|
|
- |> put_resp_content_type("application/json", nil)
|
|
|
|
- |> send_resp(200, Jason.encode_to_iodata!(for _ <- 1..q, do: Repo.get(World, :rand.uniform(10000))))
|
|
|
|
|
|
+ |> put_resp_content_type(@json, nil)
|
|
|
|
+ |> send_resp(200, json)
|
|
end
|
|
end
|
|
|
|
|
|
def fortunes(conn, _params) do
|
|
def fortunes(conn, _params) do
|
|
@@ -50,32 +49,45 @@ defmodule Hello.PageController do
|
|
end
|
|
end
|
|
|
|
|
|
def updates(conn, params) do
|
|
def updates(conn, params) do
|
|
- q = try do
|
|
|
|
- case String.to_integer(params["queries"]) do
|
|
|
|
- x when x < 1 -> 1
|
|
|
|
- x when x > 500 -> 500
|
|
|
|
- x -> x
|
|
|
|
- end
|
|
|
|
- rescue
|
|
|
|
- ArgumentError -> 1
|
|
|
|
- end
|
|
|
|
-
|
|
|
|
- data = for _ <- 1..q do
|
|
|
|
- id = :rand.uniform(10000)
|
|
|
|
- num = :rand.uniform(10000)
|
|
|
|
- w = Repo.get(World, id)
|
|
|
|
- changeset = Ecto.Changeset.change(w, randomnumber: num)
|
|
|
|
- Repo.update!(changeset)
|
|
|
|
- end
|
|
|
|
|
|
+ json =
|
|
|
|
+ params["queries"]
|
|
|
|
+ |> query_range()
|
|
|
|
+ |> parallel(fn _ ->
|
|
|
|
+ Repo.checkout(fn ->
|
|
|
|
+ World
|
|
|
|
+ |> Repo.get(:rand.uniform(10000))
|
|
|
|
+ |> Ecto.Changeset.change(randomnumber: :rand.uniform(10000))
|
|
|
|
+ |> Repo.update!()
|
|
|
|
+ end)
|
|
|
|
+ end)
|
|
|
|
+ |> Jason.encode_to_iodata!()
|
|
|
|
|
|
conn
|
|
conn
|
|
- |> put_resp_content_type("application/json", nil)
|
|
|
|
- |> send_resp(200, Jason.encode_to_iodata!(data))
|
|
|
|
|
|
+ |> put_resp_content_type(@json, nil)
|
|
|
|
+ |> send_resp(200, json)
|
|
end
|
|
end
|
|
|
|
|
|
def plaintext(conn, _params) do
|
|
def plaintext(conn, _params) do
|
|
conn
|
|
conn
|
|
- |> put_resp_content_type("text/plain", nil)
|
|
|
|
|
|
+ |> put_resp_content_type(@plain, nil)
|
|
|> send_resp(200, "Hello, world!")
|
|
|> send_resp(200, "Hello, world!")
|
|
end
|
|
end
|
|
|
|
+
|
|
|
|
+ defp parallel(collection, func) do
|
|
|
|
+ collection
|
|
|
|
+ |> Enum.map(&Task.async(fn -> func.(&1) end))
|
|
|
|
+ |> Enum.map(&Task.await(&1))
|
|
|
|
+ end
|
|
|
|
+
|
|
|
|
+ defp query_range(queries) do
|
|
|
|
+ try do
|
|
|
|
+ case String.to_integer(queries) do
|
|
|
|
+ x when x < 1 -> 1..1
|
|
|
|
+ x when x > 500 -> 1..500
|
|
|
|
+ x -> 1..x
|
|
|
|
+ end
|
|
|
|
+ rescue
|
|
|
|
+ ArgumentError -> 1..1
|
|
|
|
+ end
|
|
|
|
+ end
|
|
end
|
|
end
|