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