Current section
Files
Jump to
Current section
Files
lib/wobserver/system/info.ex
defmodule Wobserver.System.Info do
@moduledoc ~S"""
Handles general System info like architecture and cpu.
"""
alias Wobserver.System.Info
@typedoc ~S"""
Architecture information.
"""
@type t :: %__MODULE__{
otp_release: String.t,
elixir_version: String.t,
erts_version: String.t,
system_architecture: String.t,
kernel_poll: boolean,
smp_support: boolean,
threads: boolean,
thread_pool_size: integer,
wordsize_internal: integer,
wordsize_external: integer,
}
defstruct [
otp_release: "",
elixir_version: "",
erts_version: "",
system_architecture: "",
kernel_poll: false,
smp_support: false,
threads: false,
thread_pool_size: 0,
wordsize_internal: 0,
wordsize_external: 0,
]
@doc ~S"""
Returns architecture information.
"""
@spec architecture :: Info.t
def architecture do
%Info{
otp_release: to_string(:erlang.system_info(:otp_release)),
elixir_version: System.version,
erts_version: to_string(:erlang.system_info(:version)),
system_architecture: to_string(:erlang.system_info(:system_architecture)),
kernel_poll: :erlang.system_info(:kernel_poll),
smp_support: :erlang.system_info(:smp_support),
threads: :erlang.system_info(:threads),
thread_pool_size: :erlang.system_info(:thread_pool_size),
wordsize_internal: :erlang.system_info({:wordsize, :internal}),
wordsize_external: :erlang.system_info({:wordsize, :internal}),
}
end
@doc ~S"""
Returns cpu information.
"""
def cpu do
schedulers = :erlang.system_info(:logical_processors)
schedulers_available =
case :erlang.system_info(:multi_scheduling) do
:enabled -> schedulers
_ -> 1
end
%{
logical_processors:
:erlang.system_info(:logical_processors),
logical_processors_online:
:erlang.system_info(:logical_processors_online),
logical_processors_available:
:erlang.system_info(:logical_processors_available),
schedulers:
:erlang.system_info(:schedulers),
schedulers_online:
schedulers,
schedulers_available:
schedulers_available,
}
end
end