cover/Elixir.Tools.Sys.Who.html

1 defmodule Tools.Sys.Who.Schema do
2 def get(name, _state) do
3 %{name: name, description: description(), parameters: params()}
4 end
5
6 defp description do
7 "List live agent sessions and available agent kinds"
8 end
9
10 defp params do
11 %{type: "object", properties: %{}, required: []}
12 end
13 end
14
15 defmodule Tools.Sys.Who do
16 import Enum, only: [map: 2, join: 2]
17 import Log, only: [log: 5]
18 import Registry, only: [select: 2]
19 import Utils.World, only: [agents: 0]
20
21 @icon "👥"
22 @pattern [{{:"$1", :"$2", :"$3"}, [], [%{name: :"$1", kind: :"$3"}]}]
23
24
:-(
defdelegate spec(name, state), to: Tools.Sys.Who.Schema, as: :get
25
26
:-(
def icon, do: @icon
27
28
:-(
def exec(_, _args, state) do
29
:-(
log(@icon, "who", "", "", :green)
30 {result(sessions(), agents()), state}
31 end
32
33 defp sessions do
34
:-(
select(ElitaRegistry, @pattern) |> map(&session/1)
35 end
36
37 defp session(%{name: name, kind: %{kind: k}}) do
38
:-(
"#{name} (#{k})"
39 end
40
41
:-(
defp session(%{name: name}), do: "#{name}"
42
43 defp result([], kinds) do
44
:-(
"live: none\navailable: #{join(kinds, ", ")}"
45 end
46
47 defp result(live, kinds) do
48
:-(
"live: #{join(live, ", ")}\navailable: #{join(kinds, ", ")}"
49 end
50 end
Line Hits Source