defmodule Xmeta.Xapi.Docs do
@moduledoc """
文档模块函数
"""
@doc """
获取Xapi系统信息
"""
def get_host_info() do
config = Mix.Project.config()
%{
name: config[:name] || config[:app],
host: Node.self(),
verison: config[:version],
app: config[:app],
type: config[:type] || "unknow",
env: Atom.to_string(Mix.env())
}
end
# 查找mod
def find_child_module(base_module) do
# 查找所有模块
modules =
if Mix.Project.umbrella?() do
sys_mods =
for app_name <- Map.keys(Mix.Project.apps_paths()) do
if app_name != :xmeta do
find_app_module(app_name)
else
[]
end
end
List.flatten(sys_mods)
else
{_, keys} = Mix.Project.config()[:app] |> :application.get_all_key()
keys[:modules]
end
filter_modules(base_module,modules)
end
def filter_modules(base_module, modules) do
# 过滤
module_name = to_string(base_module)
child_wrold_count = base_module |> Module.split() |> length
Enum.reduce(modules, [], fn mod, acc ->
if mod do
world_count = mod |> Module.split() |> length
child_module_name = to_string(mod)
if child_wrold_count + 1 == world_count and
String.contains?(child_module_name, module_name) do
acc ++ [mod]
else
acc
end
else
acc
end
end)
end
def get_xmeta_env_module(atom_type) do
mods = Application.get_env(:xmeta, atom_type)
if mods, do: mods, else: []
end
defp find_app_module(app_name) do
{_, all_mod} = :application.get_all_key(app_name)
all_mod[:modules]
end
@doc """
获取site
"""
def get_site_module() do
find_child_module(Xapi)
end
end