Project for Ecto DB profiling
- Add
ecto_profiler
to your list of dependencies inmix.exs
:
def deps do
[{:ecto_profiler, github: "DmitryKK/ecto_profiler", only: [:dev]}]
end
Fetch and compile the dependency
mix do deps.get, deps.compile
- Ensure
ecto_profiler
is started before your application:
def application(:dev) do
[applications: [:ecto_profiler]]
end
- Add some ecto_profiler configuration to the config file
config/dev.exs
config :ecto_profiler, EctoProfiler,
# name of yours app
app_name: :my_great_app,
# title of profiling page (optional)
page_title: "Profiling for my great APP"
- Add EctoProfiler logger for ecto to the config file
config/dev.exs
, for example:
config :my_greap_app, MyGreatApp.Repo,
adapter: Ecto.Adapters.Postgres,
username: "postgres",
password: "postgres",
database: "my_great_app_dev",
hostname: "localhost",
pool_size: 10,
timeout: 15_000,
pool_timeout: 15_000,
ownership_timeout: 15_000,
loggers: [{EctoProfiler, :log, []}]
- Maximize stacktrace depth for phoenix in your configuration file. Default value for dev is 20, for prod is 8. But it is litle depth and you should increase this, for example:
config, :phoenix, :stacktrace_depth, 50
- Add the profiling route to the router file
web/router.ex
:
defmodule MyGreatApp.Router do
get "/profiling", EctoProfiler.MainController, :show
- EctoProfiler uses Mnesia for storing data, therefore you need to run mnesia in your application. For example, you could run separate proccess where would it:
mnesia.start()
Start the application with iex -S mix phoenix.server
Visit http://localhost:4000/profiling
You should see page with current profiling.
Documentation can be generated with ExDoc and published on HexDocs. Once published, the docs can be found at https://hexdocs.pm/ecto_profiler.
- Fork it
- Create your feature branch (git checkout -b my-new-feature)
- Commit your changes (git commit -am 'Add some feature')
- Push to the branch (git push origin my-new-feature)
- Create new Pull Request