cover/Elixir.Agent.Puppet.html

1 defmodule Agent.Puppet do
2 import Enum, only: [map: 2, filter: 2]
3 import Registry, only: [select: 2]
4 import Log, only: [trace: 1]
5
6
:-(
def cwd do
7
:-(
trace("puppet:cwd called\n")
8
:-(
select() |> track()
9 catch
10
:-(
_, e -> handle(e)
11 end
12
13 defp track(entries) do
14
:-(
trace("puppet:entries=#{inspect(entries)}\n")
15
:-(
entries |> scan()
16 end
17
18
:-(
defp handle(e) do
19
:-(
trace("puppet:catch=#{inspect(e)}\n")
20 nil
21 end
22
23 defp select do
24
:-(
trace("puppet:select start\n")
25
:-(
entries = ElitaRegistry |> select([{{:_, :"$2", :"$1"}, [], [{{:"$2", :"$1"}}]}])
26
:-(
trace("puppet:selected #{entries |> length()} entries\n")
27
:-(
entries |> pick()
28 end
29
30 defp pick(entries) do
31
:-(
trace("puppet:pick entries=#{inspect(entries)}\n")
32
:-(
result = entries |> map(&extract/1)
33
:-(
trace("puppet:after map=#{inspect(result)}\n")
34
:-(
result |> filter(& &1)
35 end
36
37
:-(
defp extract({pid, %{kind: :puppet}}) do
38
:-(
trace("puppet:extract found pid=#{inspect(pid)}\n")
39 {pid, %{kind: :puppet}}
40 end
41
42
:-(
defp extract(_), do: nil
43
44
:-(
defp scan([]), do: nil
45
46 defp scan([entry | rest]) do
47
:-(
entry |> query() |> ok(rest)
48 end
49
50 defp query({pid, %{kind: :puppet}}) do
51
:-(
trace("puppet:found pid=#{inspect(pid)}\n")
52
:-(
node = node(pid)
53
:-(
trace("puppet:node=#{node}\n")
54
:-(
rpc(node)
55 end
56
57
:-(
defp query(entry) do
58
:-(
trace("puppet:query skip entry=#{inspect(entry)}\n")
59 nil
60 end
61
62
:-(
defp rpc(node) do
63
:-(
:erpc.call(node, System, :cwd, [], 5000)
64 catch
65
:-(
_, e -> error(e)
66 end
67
68
:-(
defp error(e) do
69
:-(
trace("puppet:rpc error=#{inspect(e)}\n")
70 nil
71 end
72
73 defp ok(cwd, _rest) when is_binary(cwd) do
74
:-(
trace("puppet:cwd=#{cwd}\n")
75
:-(
cwd
76 end
77
78
:-(
defp ok(nil, rest), do: scan(rest)
79 end
Line Hits Source