Get Elixir GenServer current state
Today I learned that we can use :sys.get_state/1 to get the current state of a GenServer.
Check this out:
iex(1)> pid = Process.whereis(MyApp.Repo)
iex(2)> :sys.get_state(pid)
{:state, {:local, MyApp.Repo}, :one_for_one,
{[DBConnection.ConnectionPool],
%{
DBConnection.ConnectionPool => {:child, #PID<0.421.0>,
DBConnection.ConnectionPool,
{Ecto.Repo.Supervisor, :start_child,
[
{DBConnection.ConnectionPool, :start_link,
[
{Postgrex.Protocol,
[
types: Postgrex.DefaultTypes,
repo: MyApp.Repo,
telemetry_prefix: [:my_app, :repo],
otp_app: :my_app,
timeout: 15000,
database: "my_app_dev",
hostname: "localhost",
port: 5432,
show_sensitive_data_on_connection_error: true,
pool_size: 10,
pool: DBConnection.ConnectionPool
]}
]},
MyApp.Repo,
Ecto.Adapters.Postgres,
%{
cache: #Reference<0.1645792067.2416050178.91334>,
opts: [
timeout: 15000,
pool_size: 10,
pool: DBConnection.ConnectionPool
],
repo: MyApp.Repo,
sql: Ecto.Adapters.Postgres.Connection,
telemetry: {MyApp.Repo, :debug, [:my_app, :repo, :query]}
}
]}, :permanent, false, 5000, :worker, [Ecto.Repo.Supervisor]}
}}, :undefined, 0, 5, [], 0, :never, Ecto.Repo.Supervisor,
{MyApp.Repo, MyApp.Repo, :my_app, Ecto.Adapters.Postgres, []}}
Tweet