Current section

Files

Jump to
toolshed lib_src core top.ex
Raw

lib_src/core/top.ex

# SPDX-FileCopyrightText: 2018 Frank Hunleth
# SPDX-FileCopyrightText: 2021 Okoth Kongo
# SPDX-FileCopyrightText: 2022 Alex McLain
#
# SPDX-License-Identifier: Apache-2.0
#
defmodule Toolshed.Core.Top do
alias Toolshed.Top.Server
@default_rows 23
@default_columns 80
@doc """
Interactively show the top Elixir processes
This is intended to be called from the IEx prompt and will periodically
update the console with the top processes. Press enter to exit.
Options:
* `:order` - the sort order for the results (`:reductions`, `:delta_reductions`,
`:mailbox`, `:delta_mailbox`, `:total_heap_size`, `:delta_total_heap_size`, `:heap_size`,
`:delta_heap_size`, `:stack_size`, `:delta_stack_size`)
"""
@spec top(keyword()) :: :"do not show this result in output"
def top(opts \\ []) do
options = %{
order: Keyword.get(opts, :order, :delta_reductions),
rows: rows(),
columns: columns()
}
IO.puts("Press enter to stop\n")
{:ok, pid} = Server.start_link(options)
_ = IO.gets("")
Server.stop(pid)
IEx.dont_display_result()
end
defp rows() do
case :io.rows() do
{:ok, rows} -> rows
_ -> @default_rows
end
end
defp columns() do
case :io.columns() do
{:ok, columns} -> columns
_ -> @default_columns
end
end
end